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

问题描述 投票:0回答:1

我有一个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函数。

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

matlab caffe conv-neural-network max-pooling
1个回答
2
投票

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

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

How to solve this problem?

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

References

  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
© www.soinside.com 2019 - 2024. All rights reserved.