LoginSignup
2
2

More than 1 year has passed since last update.

CoreMLの画像出力をプレビューできるようにする

Last updated at Posted at 2022-02-17

ファイルだけでプレビューできるようにする方法です

スクリーンショット 2022-02-17 10.49.40.png

画像プレビューはどうやるの?

CoreMLの出力を画像タイプにすると、ファイルを開いたときにプレビュータブが現れ、プレビューできるようになります。
しかし、画像をドロップしてみると、インディケーターが回り続けてStylized画像が表示されない場合や、
ノイズのような画像が表示されるなど、うまくプレビューできない場合があります。
何が間違っているのでしょうか?

画像の出力形状の並べ替えや非正規化が必要

例えば、モデルの出力形状が[1,256,256,3]の場合、
CoreMLファイルがプレビューできるRGB画像の形状は[3,256,256]なので、形状を並べ替える必要があります。

spec = mlmodel.get_spec()
builder = ct.models.neural_network.NeuralNetworkBuilder(spec=spec)
builder.spec.description

builder.add_permute(name="permute",dim=[0,3,1,2], input_name={output name in printed description}, output_name="permute_out")

そして、最初の1の次元は必要ないので、削ります。

builder.add_squeeze(name="squeeze", input_name="permute_out", output_name="squeeze_out", axes = None, squeeze_all = True)

これで、出力形状がCoreMLでプレビューできる形になります。

また、モデルの出力が−1〜1の範囲の場合、1〜255の色範囲に非正規化する必要があります。

builder.add_activation(name="activation",non_linearity="LINEAR",input_name="squeeze_out",output_name="image",params=[127.5,127.5])

最後に、追加したアクティベーション層の出力を画像に指定します。

from coremltools.proto import FeatureTypes_pb2 as ft
builder.spec.description.output.pop()
builder.spec.description.output.add()
output = builder.spec.description.output[0]
output.name = "image"

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

これで、プレビューできるようになります。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2