Mxnet模型檔案轉換為Pb模型檔案

weixin_41813620發表於2019-05-28

最近因為工作上需要將Mxnet模型檔案轉為tensorflow使用的PB檔案,特地研究了下。多數思路是先將Mxnet模型轉為caffe模型,然後再轉為tensorflow模型,但這些方法比較小眾,通用性不強,轉換過程出錯概率很高。
今年年初,微軟開源了MMdnn,這是一套用於轉換、視覺化深度神經網路模型的綜合性解決方案。MMdnn中的「MM」代表模型管理,「dnn」的意思是深度神經網路,它能夠通過中間表徵格式讓訓練模型在Caffe、Keras、MXNet、Tensorflow、CNTK、PyTorch和CoreML等深度學習框架之間轉換,幫助開發者實現模型在不同框架之間的互動。
支援框架如下圖:
在這裡插入圖片描述
本文記錄轉換過程:
mmdnn:0.2.5
tensorflow:1.13
mxnet:1.2.0

step1:convert the model to intermediate representation format.
命令:
python3 -m mmdnn.conversion._script.convertToIR -f mxnet -n model-symbol.json -w model-0000.params -d resnet100 --inputShape 3,112,112
此過程生成檔案列表:
IR network structure is saved as [resnet100.json].
IR network structure is saved as [resnet100.pb].
IR weights are saved as [resnet100.npy].

Step2:convert to tensorflow code
命令:
python3 -m mmdnn.conversion._script.IRToCode -f tensorflow --IRModelPath resnet100.pb --IRWeightPath resnet100.npy --dstModelPath tf_resnet100.py
或者
mmtocode -f tensorflow --IRModelPath resnet100.pb --IRWeightPath resnet100.npy --dstModelPath tf_resnet100.py
生成檔案如下:
tf_resnet100.py

Step3:convert to tensorflow file
命令:
mmtomodel -f tensorflow -in tf_resnet100.py -iw resnet100.npy -o tf_resnet1001 --dump_tag SERVING
或者
mmtomodel -f tensorflow -in tf_resnet100.py -iw resnet100.npy -o tf_resnet100_train1 --dump_tag TRAINING
生成配置的-o路徑,裡面包含了pb檔案。
在這裡插入圖片描述

Step4:frozen pb model file
此步驟根據需要,如果要生成固化模型,可以使用freeze_graph.py固化。

Step5:模型使用
這一步發揮空間較大,可以使用Step1生成的檔案,可以使用Step3生成的pb,也可以使用Step4生成的pb檔案。
但是模型輸出跟原始的mxnet模型不一樣,差別較大,需要進行轉換後使用,精度有少許下降。

相關文章