Caffe轉mxnet模型——mxnet工具

永恆_一瞬發表於2018-12-21

轉換步驟

參考連結:
Mxnet學習系列4----Caffe模型轉換成Mxnet模型
  

  Windows環境下轉換工具的使用基本和這個部落格說明相同,過程總結為:

  1、下載mxnet原始碼(使用mxnet/tools/caffe_ converter資料夾下相關工具)

  2、安裝protobuf,是否安裝及安裝版本號可以看使用的python目錄下Lib/site-packages/protobuf-xxx的情況。(如圖可知版本為3.4.0,python版本為3.5)

protobuf版本檢視
  3、下載protobuf complier,在https://github.com/google/protobuf/releases中找到相應版本(如2為protoc-3.4.0-win32.zip),下載解壓後新增bin到環境變數(因為裡面就一個exe檔案,我直接把它放到mxnet的caffe_ converter下,可以正常使用)

  4、雙擊caffe_ converter下的make_win32.bat,出現"done."命令視窗,即成功完成。

  5、使用,在命令列視窗中cd到convert_model.py的路徑下,執行命令:

python convert_model.py prototxt caffemodel outputprefix

  如

python convert_model.py det1.prototxt det1.caffemodel det1

  

相關補充

  Mxnet學習系列4----Caffe模型轉換成Mxnet模型中有介紹遇到一些問題的解決辦法。

  如果出現某些層無法識別,可以嘗試使用Caffe模型移植到MXNet提到的辦法,找到mxnet中實現方法,並在convert_symbol.py進行補充。

  更多的轉換工具可以通過github上ysh329/deep-learning-model-convertor進行查閱。

  

其它問題

  1、我在轉換模型的時候遇到“TypeError: Expected a list of symbols as input”的問題,通過執行convert_symbol.py發現該轉換工具是對caffe模型中層出現的次數進行統計,找到只bottom和top中只出現1次的層作為輸出介面,因此當遇到輸出層接relu層,並且其輸出還是原輸入層,可能導致以上問題。

caffe網路結構
  一種修改方法為對.prototxt的bottom和top進行修改,使top為name值,下一層的bottom為上層name值;同時修改.caffemodel,在層的命名上是可見的;修改後儲存,並使用python讀取caffemodel檔案的方法對比生成的檔案是否符合要求,然後使用工具進行轉換。

https://github.com/apache/incubator-mxnet/issues/3970
  2、模型轉換後會出現類似“prob_label”的層,裡面沒有任何內容,如果使用mx.model.FeedForward.load載入模型能正常載入,如果是mx.model.load_checkpoint可能出現“RuntimeError: prob_label is not presented”之類的錯誤,解決辦法是新增一句arg_params[‘prob_label’] = mx.nd.array([0])。

知乎-mxnet下mtcnn人臉檢測c++版本的實現(3)
  3、當有多個輸出資料時,出現一個輸出正確一個輸出錯誤,後來在網上查到caffe在轉mxnet模型時本來應轉換成SoftmaxActivation的softmax layer,轉換成了SoftmaxOutput,修改方法是json中新增"multi_output": "1"的屬性。

  

  

  

  

相關文章