結論
Tensorflow Lite Converter を使用する。
Tensorflow Lite Converterとは、訓練済みのモデルをTensorflow Lite モデルに変換するツールのこと。
変換の流れをざっくり説明
モデルを変換する手順を以下の図に示す。
TensorFlow Lite 形式に変換するときは、ML モデル(変換前のモデル)の内容に応じて大きく3つのフローに分かれることを抑えておくと良い。
1直接変換
2モデルをリファクタリングしてから変換
3高度な変換手法を使用して変換
図 1. TensorFlow Lite 変換ワークフロー。
引用:Tensorflow公式: モデル変換の概要
基本的には1直接変換できるのだが、稀に2,3のように追加の手順が必要なことがある。変換したいモデルに追加手順が必要かどうかは、オペレーター互換性 をみるとわかる。
変換可能なモデルの形式
-
SavedModel (推奨): ディスク上にファイルのセットとして保存された TensorFlow モデル。
特記:SavedModel は TensorFlow のトレーニング済みモデルまたはモデルピース用の標準的なシリアル化形式のこと。学習済みの重みや計算を実行するためのTensorFlow 演算が含んでいる。言語に依存することなく推論を行うことが可能。 -
Keras モデル: 高レベルの Keras API を使用して作成されたモデル。
-
Keras H5 形式: Keras API でサポートされる SavedModel 形式の軽量代替形式。
-
具体的な関数から構築されたモデル: 低レベルの TensorFlow API を使用して作成されたモデル。
モデルを変換してみる !
Tensorflow Lite Converterは、TensorFlow モデルを受け取り、TensorFlow Lite モデルを生成できる。SavedModel をロードすることも、コードで作成したモデルを直接変換することもできる。
1. やり方を確認
→推奨されている SavedModel の変換を行う
import tensorflow as tf
# モデルをコンバートする
# saved_model_dirは変換したいモデルのディレクトリ
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
# 変換したモデルを保存する
with open('model.tflite', 'wb') as f: f.write(tflite_model)
Tensorflow公式: TensorFlowモデルを変換する
2. 実際にやってみる
今回は、色々な学習済みモデルがダウンロードできるTensorFlow Hubから
物体・骨格検知モデルのCenterNetをダウンロードして、そちらをTensorflow lite モデルに変換する。
(1)TensorFlow Hub からローカルにダウンロードする。
ローカルにダウンロードして解凍すると、以下のような構成になっている。
.pd ファイルがモデルファイル。
(2)変換する
- 実装
import tensorflow as tf
input_dir = ".\\centernet"
converter = tf.lite.TFLiteConverter.from_saved_model(input_dir)
tflite_model = converter.convert()
open(".\\output_dir\\converted_model.tflite", "wb").write(tflite_model)