【问题标题】:Incompatibility of output size of pooling layer in CNN model described in Caffe vs MatlabCaffe vs Matlab中描述的CNN模型中池化层的输出大小不兼容
【发布时间】:2018-01-14 11:14:00
【问题描述】:

我有一个 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中pooling层的输出大小计算不同有关,前者使用ceil,后者使用floor函数。

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

【问题讨论】:

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


    【解决方案1】:

    这是因为在 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

    【讨论】:

    • 感谢您提供有关问题根源的信息。然而,以这种方式调整变量是有限的。有什么办法可以更改某种设置?或者是否可以简单地修改上述代码,使这个问题根本不出现?
    • 或许您可以粘贴与此问题相关的部分代码,以便我知道问题所在。
    • 我的意思是,我是否可以只更改 CAFFE 中的这部分代码并再次“制作”它以与 MATLAB 兼容?
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 2018-11-04
    • 2016-10-09
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2017-08-14
    • 2022-07-19
    相关资源
    最近更新 更多