1. 程式人生 > >Tensorflow 模型轉換 .pb convert to .lite

Tensorflow 模型轉換 .pb convert to .lite

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