![見出し画像](https://assets.st-note.com/production/uploads/images/13452871/rectangle_large_type_2_6a9e5d7b4f20bdaef2be25e945ad8805.png?width=1200)
CoreMLTools入門
1. CoreMLToolsとは
「CoreMLTools」は、よく使われる「学習済みモデル」を「CoreML形式のモデル」に変換するPythonパッケージです。CoreML形式のモデルの検証のために、CoreMLフレームワークを使用して予測することもできます。
サポートされている「学習済みのモデル」は次の通りです。
・Keras (1.2.2, 2.0.4+) with TensorFlow (1.0+)
・XGBoost (0.6+)
・scikit-learn (0.15+)
・LIBSVM
2. CoreMLToolsのインストール
AnacondaでPython 3.6の仮想環境を作成し、以下のコマンドを入力します。
$ pip install -U coremltools
さらに、変換元の学習済みモデルの形式に応じた依存関係もインストールします。
「Keras」の学習済みモデル(*.h5)をCoreML形式のモデルに変換するには、TensorFlowとKerasをインストールします。
$ pip install tensorflow
$ pip install keras
3. モデル変換
◎MNISTのモデルの変換例
MNISTの変換例は次の通りです。
【convert.py】
import coremltools
coremltools.converters.keras.convert('image_classification.h5',
class_labels='labels.txt').save('image_classification.mlmodel')
【labels.txt】
0
1
2
3
4
5
6
7
8
9
◎画像分類の変換例
画像分類の変換例は次の通りです。
【convert.py】
import coremltools
coremltools.converters.keras.convert('image_classification.h5',
input_names = 'image',
output_names = ['classLabelProbs', 'classLabel'],
image_input_names = 'image',
class_labels='labels.txt').save('image_classification.mlmodel')
【labels.txt】
cat
dog
4. API
coremltools.converters.keras.convert(model,
input_names=None, output_names=None, image_input_names=None,
input_name_shape_dict={}, is_bgr=False,
red_bias=0.0, green_bias=0.0, blue_bias=0.0, gray_bias=0.0,
image_scale=1.0, class_labels=None, predicted_feature_name=None,
model_precision='float32', predicted_probabilities_output='',
add_custom_layers=False, custom_conversion_functions=None,
input_shapes=None, output_shapes=None, respect_trainable=False)
KerasモデルをCore ML protobuf仕様(.mlmodel)に変換します。
【引数】
◎model: Keras model object | str | (str, str)
A trained Keras neural network model which can be one of the following:
・Kerasモデルオブジェクト
・Kerasモデルファイルへのパス(h5)
・文字列のタプル。1番目はモデルアーキテクチャのパス、2番目は重みのパス。
◎input_names: [str] | str
モデルの入力の名前。
MLモデルインターフェースで使用。
◎output_names: [str] | str
モデルの出力の名前。
MLモデルインターフェースで使用。
◎image_input_names: [str] | str
モデルのイメージの入力の名前
他の入力はMultiArrayとして扱われる。
◎is_bgr: bool | dict()
内部チャネルの順序がBGRの場合はTrue、そうでない場合はRGB。
◎red_bias: float | dict()
入力画像の赤チャネルに追加されるバイアス値。
デフォルトは0.0。
各画像入力に異なる値を指定する時は、キーとしてimage_input_nameを持つ辞書を指定。
◎blue_bias: float | dict()
入力画像の青チャネルに追加されるバイアス値。
デフォルトは0.0。
各画像入力に異なる値を指定する時は、キーとしてimage_input_nameを持つ辞書を指定。
◎green_bias: float | dict()
入力画像の緑チャネルに追加されるバイアス値。
デフォルトは0.0。
各画像入力に異なる値を指定する時は、キーとしてimage_input_nameを持つ辞書を指定。
◎gray_bias: float | dict()
グレースケールの時に、入力画像の追加されるバイアス値。
デフォルトは0.0。
各画像入力に異なる値を指定する時は、キーとしてimage_input_nameを持つ辞書を指定。
◎image_scale: float | dict()
モデルが予測を行う前に入力画像をスケーリングする値。
デフォルトは1.0。
各画像入力に異なる値を指定する時は、キーとしてimage_input_nameを持つ辞書を指定。
◎class_labels: list[int or str] | str
モデルの出力インデックスをラベルにマップする、クラスラベルのリスト。
引数が文字列の場合、改行で区切りのラベルを保持するファイルのパスと判定。
◎predicted_feature_name: str
クラスラベルの出力の名前。
デフォルトは「classLabel」。
◎model_precision: str
モデルの精度。
現在、完全精度(float)と半制度(float16)がサポートされている。
デフォルトは完全制度(_MLMODEL_FULL_PRECISION)。
◎predicted_probabilities_output: str
クラスの予測確率の出力の名前。
softmax関数の出力で、デフォルトは最初の出力blob。
◎add_custom_layers: bool
Trueの場合、不明なKerasレイヤータイプが「custom」レイヤーとしてモデルに追加。
後処理として入力する必要がある。
◎custom_conversion_functions: {str:(Layer -> (dict, [weights])) }
カスタムレイヤーを取得し、パラメータ辞書と重みリストを返す関数として、
カスタムレイヤーの名前と値に対応するキーを持つ辞書。
◎respect_trainable: bool
Trueの場合、「‘trainable’」とマークされたKerasレイヤーは、
Core MLモデルで自動的に更新可能とマークされる。
【戻り値】
◎model: MLModel
CoreMLモデル
この記事が気に入ったらサポートをしてみませんか?