与Caffe和Matlab描述的CNN模型中汇集层输出大小的不兼容性

时间:2017-08-07 07:58:09

标签: matlab caffe conv-neural-network max-pooling

我有一个Caffe CNN模型,我正在尝试使用import { PopoverModule } from "../../../../node_modules/ngx-popover"; 命令将其导入MATLAB,该命令将prototxt和caffemodel文件作为输入参数。
但是,我收到了这个错误:

importCaffeNetwork

似乎错误与MATLAB和CAFFE中汇集层的输出大小计算差异有关,前者使用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] 而后者使用ceil函数。

这是问题的真正根源吗? 我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

因此即使参数和输入大小相同,输出大小也会不同。

如何解决这个问题?

调整填充和步幅以及内核大小等参数,以确保输出相同。

参考

  1. 合并图层输出大小计算源代码https://github.com/BVLC/caffe/blob/master/src/caffe/layers/pooling_layer.cpp#L90
  2. Conv图层输出大小计算源代码https://github.com/BVLC/caffe/blob/master/src/caffe/layers/conv_layer.cpp#L18