Caffe转mxnet模型——mxnet工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangjf91/article/details/85089323

转换步骤

参考链接:
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"的属性。

  

  

  

  

猜你喜欢

转载自blog.csdn.net/yangjf91/article/details/85089323