Mxnet学习系列4----Caffe模型转换成Mxnet模型

这已经是Mxnet学习系列的第五篇了,感谢大家的支持!本篇博客主要讲一下在Caffe环境下搭建和训练好的模型怎样转换到Mxnet下使用。我觉得这一点是十分重要的:

首先,这样做节省了我们很多时间和精力。在这个与时间赛跑的年代这一点很重要。

另外就是现在大部分论文还是利用Caffe实现的,Caffe是我现在看到的使用最广泛的深度学习框架,所以如果我们想移植到Mxnet下,学习这一点也是很重的。

好了,废话不多说,上干货!

    1、提前安装必要的软件

Mxnet已经为我们准备了转换工具,就在mxnet/tools/caffe_ converter文件加下,但是需要我们提前安装一些软件。我们来看看README.md里是怎么说的?这里就不粘出来了,制作一个简单的翻译,提示我用的是Windows版。

1、首先,使用命令“pip install protobuf”或“conda install -c conda-forge protobuf”下载和安装protobuf。

2、点击https://github.com/google/protobuf/releases下载protobuf complier,注意下载的版本要和第一步中下载的protobuf的版本相同。

那么我们怎么知道我们在第一步下载的什么版本呢?别着急,比如我下载后在Lib/site-packages路径下多出一个protobuf-3.0.0-py.2.7.egg-info文件夹,通过这个文件夹的名字,我们可以知道两点,(1)、protobuf是3.0.0版本;(2)、protobuf是对应python2.7版本。

打开连接后,我们要找到对应的版本,我的就是3.0.0版本,如下图:

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第1张图片

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第2张图片

protobuf已经我们编译和各种版本,我们需要的是protoc-3.0.0-win32.zip.下载这个文件后,可以解压到你喜欢的位置,然后将路径"你的路径"/bin加入到你的环境变量Path中,记得重启电脑哟!

OK!第一步完成。

2、双击“make_win32.bat”,出现下面的提示,即成功完成。

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第3张图片

3、如何使用呢?

使用还是很简单的,仍以Windows下为例,首先我们cd到convert_model.py的路径下。我们可以使用命令:

python convert_model.py prototxt caffemodel outputprefix
例如:

python convert_model.py VGG_ILSVRC_16_layers_deploy.prototxt VGG_ILSVRC_16_layers.caffemodel vgg16
如果没有错误提示,恭喜你,你已经成功了。

4、需要注意的事项

(1)、命令行中*****.prototxt,是test时使用的****_deploy.prototxt,而不是训练时常使用的train_test.prototxt.如果你使用过Caffe,你应该知道这两者的区别。

(2)、这个转换工具只适用于单个输入和单个输出的网络。

(3)、这个工具仅仅适用于Caffe中L2LayerParameter,简单的说就是,只要你使用的Caffe不是太老就OK!

(4)、如果有问题可以仔细看看README.md。

5、遇到的问题和解决方法

(1)、你使用的网络太老了,很多层的参数名字改变了,这时你可以查看caffe.proto文件。

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第4张图片
如上面的错误就是,我使用的Caffe中再BatchNorm层中有参数名bn_param,但是很不幸的是Mxnet使用的是较新的Caffe,因此会报错。我们可以将你使用的Caffe版本中的caffe.proto复制到mxnet/tools/caffe_converter/caffe_parse下替换掉原文件,重新双击“make_win32.bat”。这个错误就会消失了。

但是很不幸的是,如果这样替换后可能会出现其他问题。如下面这个:

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第5张图片

哎!这个转换工具还得加强呀!总之,如果出现问题,我们可以先看看是不是caffe.proto的问题。

(2)、前面我们强调过要使用“****_deploy.prototxt”,如果不适用会出现下面的错误:

Mxnet学习系列4----Caffe模型转换成Mxnet模型_第6张图片
至于原因,我们可以源码,你就知道错误在哪了。

(3)总结,出现问题我们可以看看是不是我们的Caffe版本的caffe.proto和mxnet/tools/caffe_converter/caffe_parse下的caffe.proto版本不同,我们应该以mxnet/tools/caffe_converter/caffe_parse下的caffe.proto版本为准,因为这个转换工具是以这个版本编写的。

3、Mxnet更好的利用Caffe的办法

其实,Mxnet可以直接使用Caffe中定义的层和损失函数,这一部分刚刚学习,稍后再仔细讲,大家可以参考example/caffe.

你可能感兴趣的:(Mxnet学习系列)