caffe, Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)

来源:互联网 发布:淘宝助理苹果电脑版 编辑:程序博客网 时间:2024/06/06 09:17

使用Caffe 跑 Google 的Inception V2 对输入图片的shape有要求,某些shape输进去可能会报错。
Inception model中有从conv和pooling层concat的操作,而conv和pooling的output输出计算方式不完全一样。解决方案:
1. 按照原来prototxt输出图片
2. 把concat层前面stride为2的conv层替换stride为1,再额外加上一个stride为2的pooling层
e.g. 以 Inception v2 为例子InceptionBN
conv_3c_3x3, conv_3c_double_3x3_1
conv_4e_3x3, conv_4e_double_3x3_1
然后再接上 stride 为2 的max pooling 层,这样几个分支出来的shape都会保持一致。

layer {  name: "conv_3c_3x3"  type: "Convolution"  bottom: "conv_3c_3x3_reduce"  top: "conv_3c_3x3"  convolution_param {      num_output: 240     kernel_size: 3     stride: 1     pad: 1  }}layer {  name: "max_pool_3c_3x3"  type: "Pooling"  bottom: "conv_3c_3x3"  top: "conv_3c_3x3"  pooling_param {     pool: MAX     kernel_size: 3     stride: 2     pad: 0  }}

这是取巧的做法,虽然保持了加载模型参数一致,但是增加了conv操作(stride变小)和多了一层pooling操作,会增加计算量和消耗显存。