Gol*_*ame 4 python machine-learning computer-vision deep-learning pytorch
我正在 Pytorch 上测试预训练的 inception v3 模型。我给它提供了 256x256 的图像大小,并将其调整为 299x299。在这两种情况下,图像都被正确分类。
有人能解释一下为什么 PyTorch 预训练模型可以接受不是 299x299 的图像吗?
这是因为 inception v3 的 pytorch 实现在全连接层之前使用了自适应平均池化层。
如果你看一看中的Inception3
类torchvision/models/inception.py
,关于你的问题最感兴趣的操作是x = F.adaptive_avg_pool2d(x, (1, 1))
. 由于平均池化是自适应的,x
池化前的高度和宽度与输出形状无关。换句话说,在这个操作之后,我们总是得到一个大小的张量,[b,c,1,1]
其中b
和c
分别是批量大小和通道数。这样,全连接层的输入始终大小相同,因此不会引发异常。
也就是说,如果您使用的是预训练的 inception v3 权重,那么模型最初是针对大小为 299x299 的输入进行训练的。使用不同大小的输入可能会对损失/准确性产生负面影响,尽管较小的输入图像几乎肯定会减少计算时间和内存占用,因为特征图会更小。
小智 5
size >= 299 x 299
当为 True 时,Inception-v3 将在训练期间使用aux_logits
,否则它可以使用小至 的大小75 x 75
。
原因是在aux_logits
训练期间设置为 True 时,它InceptionAux
在 Mixed_6e 层之后内部调用,该层包含内核为 的 2D 卷积5 x 5
。现在,如果输入图像小于299 x 299
,则 Mixed_6e 的输出大小实际上小于5 x 5
中的内核大小InceptionAux
。因此,如果设置为 True,299 x 299
则在训练期间图像大小必须 >= 。aux_logits
否则,如果aux_logits
为 False,我们可以使用较小的输入大小(256 x 256
在您的情况下),因为模型不会调用IncpetionAux
,因此没有5 x 5
内核大小卷积。
在测试期间 ( model.training = False
),即使为 True InceptionAux
,也不会被调用aux_logits
。因此,人们可以轻松地使用较小的尺寸作为输入。我已经测试过了,它可以工作到75 x 75
。