我正在尝试使用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
任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
我查看了source code和第一个maxpooling:
x = MaxPooling2D((3, 3), strides=(2, 2))(x)
当输入为224时,不可能产生大小为56x56的输出。我认为正确的maxpooing函数很可能是
x = MaxPooling2D(3, 2, padding = 'same')(x)
我不是100%肯定,但我认为这应该适用于现在。如果您不这么认为,请告诉我。谢谢。