0

我有一个 Caffe CNN 模型,我正在尝试使用importCaffeNetwork命令将其导入 MATLAB,该命令将 prototxt 和 caffemodel 文件作为输入参数。
但是,我收到此错误:

The pooling layer 'pool1' is not compatible with MATLAB. 
Caffe computes the output size as [16 16 32] but MATLAB computes it as [15 15 32]

错误似乎与MATLAB和CAFFE中池化层的输出大小计算的差异有关,前者使用ceil,后者使用floor函数。

它是问题的真正根源吗?我能做些什么来解决这个问题?

4

1 回答 1

4

这是因为在 caffe 中,卷积层和池化层的输出大小计算略有不同。假设输入 dim 为h,padding 为p,内核大小为k,stride 为s,对于卷积层,输出大小为 floor((h+2*p-k)/s)+1,但对于池化层,输出大小为ceil((h+2*p-k)/s)+1

所以即使参数和输入大小相同,输出大小也是不同的。

如何解决这个问题呢?

调整padding和stride和kernel size等参数,保证输出一致。

参考

  1. 池化层输出大小计算源码,https://github.com/BVLC/caffe/blob/master/src/caffe/layers/pooling_layer.cpp#L90
  2. Conv layers输出大小计算源码,https://github.com/BVLC/caffe/blob/master/src/caffe/layers/conv_layer.cpp#L18
于 2017-10-04T15:05:59.117 回答