TensorFlow Object Detection API 模型轉tflite並驗證

最近在用TensorFlow Object Detection API訓練目標檢測模型,訓練好的pb模型大小17.6M,用pb預測效果不錯,於是想着如何在手機端運行,查看官網關於tflite的轉換,網址:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md。

預測使用的pb模型:

在主目錄下的research目錄執行如下:

注意裏面的相關路徑需要換成自己的ckpt的目錄。執行完後,會看到一個名字爲--output_directory指定的目錄。這裏爲exported_graphs目錄,裏面包含了一個SavedModel 和frozen graph,其中的.pb文件就是預測使用的。

如上轉換pb和預測過程參考我之前的文章即可。

關於tflite,需要使用如下操作:

注意第二行pipeline_config_path爲你的pipeline.config目錄路徑,trained_config_path路徑爲訓練好的ckpt模型文件,output_dir爲tflite輸出目錄文件夾名字,執行完後在tflite目錄會看到兩個文件tflite_graph.pb and tflite_graph.pbtxt.

接下來就是轉tflite了,之前嘗試了其他轉tflite的方式,雖然只有幾行代碼,但發現一直有問題,因此按照官網要求一步一步轉,這次使用TOCO轉tflite,首先需要安裝TensorFlow源碼並編譯。。。。。切記,要不然找不到bazel目錄。。。。

注意在編譯後的bazel同一級目錄執行,input_file爲上一步生成的tflite_graph.pb文件。output_file爲本次要生成的tflite文件。其他的爲固定寫法,如果你的模型輸入不是300x300注意改input_shapes.執行完就能看到一個detect.tflite文件,該文件大小17M多,這次量化後的模型。

float類型的模型轉換方式:

如上生成detect.tflite文件。

注意:在對比tflite和pb的一致性時,輸入到tflite的圖片需要進行(image-127.5)/128操作。否則模型輸出結果和pb文件對不上。

這樣pb文件和tflite預測的結果就能一樣,不過float模型大小和pb文件差不多,而且量化的時候模型大小爲0,不明白爲什麼量化的時候模型爲量化成功原因,現在只能使用float類型的tflite

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章