caffe框架下载入模型的时候,经常会遇到这样的bug。
Check failed: bottom[0] ->shape() == bottom[i] ->shape() bottom[0]: 1 64 56 56 (200704), bottom[1]: 1 64 57 57 (207936)。
后来通过比对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"就可以找到这个位置。
代码修改过后,如果你的caffe以前是编译过的,那么重新编译代码即可使用。
make clean
make pycaffe
make all
make test
然而,这个问题并没有因此解决。
pooling的结果从57变成了55.
后来,我就直接用了莽夫操作:
莽夫一时爽,一直莽夫一直爽。
真的想要改得完美一些的话,不仿把这段代码重写一遍。痛点就在这附近。
pooled_height /= 2它不香吗?
(逃)