caffe框架下载入模型的时候,经常会遇到这样的bug。
Check failed: bottom[0] ->shape() == bottom[i] ->shape() bottom[0]: 1 64 56 56 (200704), bottom[1]: 1 64 57 57 (207936)。
![8f87fdaf8a2a46fd17cc37abd1820c2f.png](https://i-blog.csdnimg.cn/blog_migrate/f0d91ca3b9a8a7e09b1dec9da48b6f49.jpeg)
后来通过比对prototxt的layer标号和这里的错误信息,才知道是pooling层的锅。pooling层默认是向上取整的,或者更严谨地说应该是:【先加1再向下取整】。我在这一层本来输入的shape是1 64 112 112,结果经过它的运算变成了1 64 57 57。所以会出现和另一个分支shape不匹配的情况。
修改方法:在caffe的源码中,打开caffe/blob/master/src/caffe/ayers/pooling_layer.cpp
把这个地方的+1删除。直接在文本中搜索"+ 1"就可以找到这个位置。
![eb685a44dc91d035b469ae5faa325284.png](https://i-blog.csdnimg.cn/blog_migrate/8473133af418bf44f31a887439a4ee27.jpeg)
![3aa04aa14ebfba4f46ecfc9c5f94fcef.png](https://i-blog.csdnimg.cn/blog_migrate/1182a6b5f1c66d24c98b7331304e20ed.jpeg)
代码修改过后,如果你的caffe以前是编译过的,那么重新编译代码即可使用。
make clean
make pycaffe
make all
make test
然而,这个问题并没有因此解决。
![68cc6eda73502ddac93ba60ffd2d3880.png](https://i-blog.csdnimg.cn/blog_migrate/756a491c619e554b6d23b8ec82bc910e.jpeg)
pooling的结果从57变成了55.
后来,我就直接用了莽夫操作:
![4de229c33b665980f2de4adb627d0c26.png](https://i-blog.csdnimg.cn/blog_migrate/989aee92ff18437da13eb5686673276f.png)
莽夫一时爽,一直莽夫一直爽。
真的想要改得完美一些的话,不仿把这段代码重写一遍。痛点就在这附近。
pooled_height /= 2它不香吗?
(逃)