TensorFlow LiteとAndroid Neural Network APIに出てきたけど、
TensorFlowモデルを TensorFlow Lite Converter 経由で TensorFLow Lite Model File (.tflite)で、
TensorFlowモデルを TensorFlow Lite Converter 経由で TensorFLow Lite Model File (.tflite)で、
TensorFlowモデルをTensorFlow Lite Converter にかける前に、次のステップが必要ですよ。
・freeze_graph ・graph_transform.py
freeze_grapg.pyは、モデルと学習済みのパラメータ(CheckPoint)からモデル内の変数をすべて定数にするというもの。
TensorFlow Liteの説明でのFreeze Graphのところ
引用 bazel build tensorflow/python/tools:freeze_graph bazel-bin/tensorflow/python/tools/freeze_graph\ --input_graph=/tmp/mobilenet_v1_224.pb \ --input_checkpoint=/tmp/checkpoints/mobilenet-10202.ckpt \ --input_binary=true --output_graph=/tmp/frozen_mobilenet_v1_224.pb \ --output_node_names=MobileNet/Predictions/Reshape_1
freeze_graphコマンドは、bazelコマンドで生成する必要があります。
--input_graphパラメータにて、モデルファイル(.pb : GragDef) --input_checkpointパラメータにて、モデルを学習した時に、CheckPointファイル (.ckpt) --input_binaryパラメータにて、モデルファイルがバイナリかテキストかを指定、.pbファイルだからバイナリ --output_graphパラメータにて、生成するモデルファイル名 (.pb) --output_node_namesパラメータにて、出力ノード名をしてい
mobilenet_v1_224.pb * modelnet-10202.chpt から frozen_mobilenet_v1_224.pb が生成されます。
モデルの出力ノードが分からないときは、Graph Transforms Toolのsummarize_graphを使うことで、Graphの中を知ることができます。
引用 bazel build tensorflow/tools/graph_transforms:summarize_graph bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=tensorflow_inception_graph.pb
summarize_graphコマンド も freeze_graphコマンドと同様に、bazelにて生成する必要があります。
summarize_graphコマンドは、--in_graphパラメータでモデルのファイル名を指定します。
ここの例を引用します。
引用 $ bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=/tmp/frozen_inception_v1.pb Found 1 possible inputs: (name=input, type=float(1), shape=[1,224,224,3]) No variables spotted. Found 1 possible outputs: (name=InceptionV1/Logits/Predictions/Reshape_1, op=Reshape) Found 6633279 (6.63M) const parameters, 0 (0) variable parameters, and 0 control_edges Op types used: 298 Const, 231 Identity, 114 Add, 114 Mul, 58 Conv2D, 57 Relu, 57 Rsqrt, 57 Sub, 13 MaxPool, 9 ConcatV2, 2 Reshape, 1 AvgPool, 1 BiasAdd, 1 Placeholder, 1 Softmax, 1 Squeeze To use with tensorflow/tools/benchmark:benchmark_model try these arguments: bazel run tensorflow/tools/benchmark:benchmark_model -- --graph=/tmp/Xfrozen_inception_v1.pb --show_flops --input_layer=input --input_layer_type=float --input_layer_shape=1,224,224,3 --output_layer=InceptionV1/Logits/Predictions/Reshape_1
Found 1 possible outputs: (name=InceptionV1/Logits/Predictions/Reshape_1, op=Reshape) === の InceptionV1/Logits/Predictions/Reshape_1 が出力ノードになります。