LoginSignup
11
5

More than 5 years have passed since last update.

Kerasで出力したモデルをCoreMLで変換したらハマった話

Last updated at Posted at 2018-05-29

Kerasでモデル作った

Kerasで良さげなモデルを作ってiOSアプリで動かしたくなったら、coremltoolsを使ってh5ファイルを変換してあげましょう。
※今回はクラス分類するモデルなのでクラスラベル一覧が書かれているtxtファイルも読み込みます。

import coremltools

coremltools.converters.keras.convert('hoge.h5', class_labels='label.txt').save('hoge.mlmodel')

そして、出力したmlmodelをswiftプロジェクトに突っ込むだけでMLModelクラスとして使用できます。あとはクラスのインスタンス作ってデータを入力するだけのはずなんですが、何故か入力データの形式が合わないようで上手くいきません(今回のモデルinputは二次元行列でちゃんとデータもそれに合わせて成形しているのですが……)。

ここでCoreMLモデルのinputに使われるMLMultiArrayのリファレンスをよく見てみると、NSNumberの一次元配列になっているではないですか。

しょうがないので、Keras側でのモデル入力は一次元とし、モデル内部でReshape層をaddしてデータを二次元に戻してあげます。

model.add(Reshape((row, column), input_shape=(row*column,)))

これで出力したh5をmlmodelに変換してデータ入力するとモデルが無事動きました!やらしい!

参考

https://apple.github.io/coremltools/generated/coremltools.converters.keras.convert.html
https://qiita.com/akimach/items/d43cd04b5de5fa99bb6a
→自分がハマったとこにも言及されていました!

おまけ

CoreMLを使うことでこんな使い方ができたり。
http://hahaeatora.hateblo.jp/entry/2018/10/14/183000

11
5
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
11
5