Tensorflow 模型轉換 .pb convert to .lite
阿新 • • 發佈:2019-02-14
2017年底,Tensorflow 推出Lite版本,可實現移動端的快速執行,其中,一個很關鍵的問題,如何把現有分類模型(.pb) 轉換為(.lite)模型呢?
其實,步驟如下
1- 進入 Tensorflow 原始碼資料夾(以便bazel可以無需配置找打相應路徑)
2- 轉換可執行檔案
bazel run --config=opt \
//tensorflow/contrib/lite/toco:toco -- \
--input_file=/tmp/mobilenet_v1_1.0_224_frozen.pb \ # 待轉換模型路徑
--output_file=/tmp/tflite _model2.tflite \ # 目標模型路徑
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--input_shape=1,224,224,3 \ # 輸入影象寬高
--input_array=input \ # 輸入節點名稱<參考1>
--output_array=MobilenetV1/Predictions/Reshape_1 \ # 輸出節點名稱<參考1>
--inference_type=FLOAT \ # 影象資料型別
--input_data_type=FLOAT
參考1: 如果輸入輸出節點不知道:進入python,import tf ,並通過如下命令( tf.GraphDef() )查詢:
>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/your/path/to/graphname.pb','rb' ).read())
>>> for n in gf.node:
>>> print ( n.name +' ===> '+n.op )
參轉換後,在android手機上執行,在不考慮精度的前提下,不同實現方式得到的結果如下:
模型 | type | model size | speed |
---|---|---|---|
mobilenet-v1-224 | .pb | 17 mb | 106 ms |
mobilenet-v1-224 | .lite | 16.4 mb | 72 ms |