在利用caffe_to_tensorflow.py来转换模型之前,我们需要设置安装一下py caffe版本,如果不会的可以参考我的博客:

​Ubuntu16.04安装教程​

​pycaffe的配置​

当运行原作者给出命令,然后修改caffe的路径:

CAFFE_MODEL=./models/VGGNet/VOC0712Plus/SSD_512x512/VGG_VOC0712Plus_SSD_512x512_iter_240000.caffemodel
python caffe_to_tensorflow.py \
--model_name=ssd_300_vgg \
--num_classes=21 \
--caffemodel_path=${CAFFE_MODEL}

会报错,信息为:

Traceback (most recent call last):
File "caffe_to_tensorflow.py", line 65, in <module>
tf.app.run()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 48, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "caffe_to_tensorflow.py", line 51, in main
ssd_net.net(img_input, is_training=False)
File "/home/whsyxt/Downloads/SSD-Tensorflow/nets/ssd_vgg_300.py", line 155, in net
scope=scope)
File "/home/whsyxt/Downloads/SSD-Tensorflow/nets/ssd_vgg_300.py", line 516, in ssd_net
normalizations[i])
File "/home/whsyxt/Downloads/SSD-Tensorflow/nets/ssd_vgg_300.py", line 418, in ssd_multibox_layer
scope='conv_loc')
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
return func(*args, **current_args)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1027, in convolution
outputs = layer.apply(inputs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 503, in apply
return self.__call__(inputs, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 450, in __call__
outputs = self.call(inputs, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/convolutional.py", line 158, in call
data_format=utils.convert_data_format(self.data_format, self.rank + 2))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_ops.py", line 652, in convolution
num_spatial_dims]))
ValueError: number of input channels does not match corresponding dimension of filter, 512 != 256


正确的命令为:

CAFFE_MODEL=./models/VGGNet/VOC0712Plus/SSD_512x512/VGG_VOC0712Plus_SSD_512x512_iter_240000.caffemodel
python caffe_to_tensorflow.py \
--model_name=ssd_512_vgg \
--num_classes=21 \
--caffemodel_path=${CAFFE_MODEL}


注意model_name要与你的模型的input大小一致,我这里是512×512的,所以相应的要作出改变。

参考文献


[1].caffemodel conversion error:number of input channels does not match corresponding dimension of filter. 

https://github.com/balancap/SSD-Tensorflow/issues/106