高速超解像 Fast-SRGANをモバイルで使う


高速超解像機械学習モデルをiOSで使う方法です

256 → 1024

超解像を高速に使いたい

モバイルアプリでのユーザーエクスペリエンスの向上や、動画の超解像には、超解像モデルの実行時間が長すぎる場合があります。

Fast-SRGAN

高速実行できる超解像モデルです。
これをiOS用に変換して実行します。

#変換

チェックポイントからモデルをロードし、CoreML形式に変換します。

from tensorflow import keras

model = keras.models.load_model('models/generator.h5')
inputs = keras.Input((None, None, 3))
output = model(inputs)
model = keras.models.Model(inputs, output)

import coremltools as ct
mlmodel = ct.convert(model,inputs=[ct.ImageType(shape=(1,256,256,3),scale=1/255)])

出力形状を画像用に変形し、非正規化します。

from coremltools.proto import FeatureTypes_pb2 as ft
from coremltools.models.utils import save_spec

spec = mlmodel.get_spec()
builder = ct.models.neural_network.NeuralNetworkBuilder(spec=spec)
builder.add_permute(name="permute", dim=[0,3,1,2], input_name="Identity", output_name="permute_out")
# builder.add_squeeze(name="squeeze", input_name="permute_out", output_name="squeeze_out", axes = None, squeeze_all = True)
builder.add_activation(name="activation",non_linearity="LINEAR",input_name="permute_out",output_name="activation_out",params=[127.5,127.5])

builder.spec.description.output.pop()
builder.spec.description.output.add()
output = builder.spec.description.output[0]
output.name = "activation_out"

output.type.imageType.colorSpace = ft.ImageFeatureType.ColorSpace.Value('RGB')
output.type.imageType.width = 1024 
output.type.imageType.height = 1024

save_spec(builder.spec, 'fast-SRGAN.mlmodel')

0.42秒で実行できました。

変換スクリプト:

変換済みモデル:

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
[email protected]

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub