首页 > 解决方案 > 为什么 keras ResNet50 的第一个 maxpooling = 55x55 在论文中是 56x56?

问题描述


我正在尝试使用来自 keras.application.resnet50 的预训练 ResNet50 作为我的 U-Net 的编码器。我使用输入形状 224x224x3(与ResNet 论文第 4 页中所述相同),但我的第一个残差块的输出是 55 x 55 x #_filters。
在纸上,输出大小应为 56 x 56 x #_filters。这对我很重要,因为我使用从编码器到解码器的跳过连接,如下图所示。
使用 ResNet50 作为编码器的 U-Net
来自编码器的特征图与解码器中的特征图连接。解码器具有 56x56 特征图(从 28 x 28 上采样)。如果编码器有 55 x 55 的特征图,我无法进行此跳过连接。

python中的示例代码:

from keras.applications.resnet50 import ResNet50,preprocess_input
R50 = ResNet50(include_top = False, input_shape = (224, 224, 3))
R50.layers.pop() # to remove the last pooling layer
R50.summary()

输出:
R50 摘要输出
任何帮助表示赞赏。谢谢!

标签: pythonkeras

解决方案



我查看了源代码和第一个 maxpooling:

x = MaxPooling2D((3, 3), strides=(2, 2))(x)

当输入为 224 时,不可能产生大小为 56x56 的输出。我认为正确的 maxpooing 函数很可能应该是

x = MaxPooling2D(3, 2, padding = 'same')(x)

我不是 100% 确定,但我认为这现在应该可行。如果您不这么认为,请告诉我。谢谢你。


推荐阅读