为什么keras ResNet50的第一个maxpooling = 55x55在论文中它的56x56?

时间:2018-05-19 17:33:03

标签: python keras


我正在尝试使用keras.application.resnet50中经过预先训练的ResNet50作为我U-Net的编码器。我使用输入形状224x224x3(与第{4页}中所述相同),但我的第一个剩余块的输出是55 x 55 x #_filters。
在纸上,输出大小应为56 x 56 x #_filters。这对我很重要,因为我使用从编码器到解码器的跳过连接,如下图所示。
ResNet paper
编码器的特征映射与解码器中的特征映射连接。解码器具有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()

输出:
U-Net with ResNet50 as encoder
任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)


我查看了source code和第一个maxpooling:

x = MaxPooling2D((3, 3), strides=(2, 2))(x)
当输入为224时,

不可能产生大小为56x56的输出。我认为正确的maxpooing函数很可能是

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

我不是100%肯定,但我认为这应该适用于现在。如果您不这么认为,请告诉我。谢谢。