在Keras,imagenet-pretrained模型如何处理与原始224x224输入大小不同的输入大小?

时间:2017-11-15 22:03:54

标签: keras

由于预训练模型是在具有特定宽度和高度的ImageNet图像上进行训练的,因此Keras模型(例如ResNet50)如何允许不同的input_size?

我也很想知道'197'的神奇数字来自哪里:

  

input_shape:可选的形状元组,仅在include_top为False时指定(否则输入形状必须为(224,224,3)(带有'channels_last'数据格式)或(3,224,224)(带'channels_first'数据格式)。它应该有3个输入通道,宽度和高度不应小于197.例如(200,200,3)将是一个有效值。

Source

3 个答案:

答案 0 :(得分:3)

我相当自信197来自卷积和汇集层的数量。这是维护架构时可以采用的最小尺寸。例如,在200x200图像上,步长为1的3x3卷积将具有198x198的输出形状,并且另外2x2最大池将具有99x99的输出。等...

答案 1 :(得分:1)

当你指定它为false时,你必须专注于include_top部分,你选择不包括完全连接的层,并且如果你有可能重新训练(或者只是重新调整),你可以更自由地使用模型模型的权重)。

当你看到像这样大小的深度学习模型,如resnet50, 你会注意到层越靠近模型的输入就越抽象,在层的每个块上它将捕获像轮廓一样的特征,并且图像大小的增加不会对此产生太大影响。网络的一部分。

最重要的一层将位于模型的最后(或者keras在这里指的是顶部),你应该集中训练,这就是为什么在使用include_top = false时可以改变输入大小,这样你就可以将FC层重新调整到合适的大小。

关于神奇的数字,我不是很确定,但我猜这是因为模型是一个很大的模型,每次它进行汇集时它会缩小图像大小,197将是未到达的限制最后是0号。

如果您在在一组新类上微调InceptionV3查看页面sent,您会看到一个很好的例子,它只重新训练最后2个块从初始模型开始,但保持最高层不受影响。

答案 2 :(得分:0)

当“ include_top”为False时,Keras允许您更改输入大小,因为这意味着您计划在其他任务(使用不同的输入; transfer learning)上训练网络。

如果不是,则必须传递相应网络的原始接受输入。 197是为特定网络所接受的下限,以仍然与后续层兼容。每种型号都不同。