当 top = False 时,ResNet50 keras 给出错误形状的输出

ResNet50 keras giving wrong shaped output when top = False

对于迁移学习,我使用 ResNet50 作为特征提取器。通过设置 top = False,我从最后一层之前的层获取输出。作为 ResNet50 的文档,输出的大小应为 (#examples, 7, 7, 2048)。但是我遇到了一个奇怪的问题。我得到 (#examples, 8, 8, 2048) 的输出形状。以下是代码:

model = ResNet50(weights="imagenet", include_top=False)
# batchImages is a list containing images in that batch
# bs is the batch size
features = model.predict(batchImages, batch_size = bs) 

这里特征的形状应该是 (#examples, 7, 7, 2048) 但它给出了 (#examples, 8, 8, 2048)。为什么会这样?

我发现 ResNet50 中的输出特征大小(top = False)取决于图像的输入形状。虽然在文档中我发现在这种情况下输出特征形状是 (#examples, 7, 7, 2048) 但是当我改变输入图像形状时它会改变。尽管我在任何地方都没有找到任何对此的澄清。但是正如我所看到的,每当我使用大小为 (224 x 224) 的图像时,它都可以正常工作。但是当我将输入图像的大小增加到 (255 x 255) 时,输出特征向量大小变为 (#examples, 8, 8, 2048)。这看起来很奇怪,但实际上这正在发生。

这是绝对正常的,ResNet 中的大小减小是由每个块后大小为 2x2 的 MaxPooling 给出的。由于 Resnet 中有 5 个块,因此您将始终得到 input_size / 2**5。 224 / 32 = 7 256 / 32 = 8