Pytorch 具有不同图像大小的火炬模型前进

Pytorch 具有不同图像大小的火炬模型前进,pytorch,torchvision,Pytorch,Torchvision,我正在测试一些著名的计算机视觉模型:UNet,FC-DenseNet103, 我用224x224随机裁剪的补丁对它们进行训练,并在验证集上进行同样的训练。 现在,当我在一些视频上运行推断时,我直接将帧传递给它(1280x640),它就工作了。它在不同的图像大小上运行相同的操作,并且从不出错。它实际上提供了一个很好的输出,但是输出的质量取决于图像的大小。。。 我已经很久没有使用神经网络了,但当我使用tensorflow时,我记得我必须将输入图像裁剪到训练裁剪尺寸 为什么我不需要再这样做了?引擎盖下

我正在测试一些著名的计算机视觉模型:UNet,FC-DenseNet103, 我用224x224随机裁剪的补丁对它们进行训练,并在验证集上进行同样的训练。 现在,当我在一些视频上运行推断时,我直接将帧传递给它(1280x640),它就工作了。它在不同的图像大小上运行相同的操作,并且从不出错。它实际上提供了一个很好的输出,但是输出的质量取决于图像的大小。。。 我已经很久没有使用神经网络了,但当我使用tensorflow时,我记得我必须将输入图像裁剪到训练裁剪尺寸


为什么我不需要再这样做了?引擎盖下发生了什么?

您使用的模型似乎没有线性层。因此,卷积层的输出直接进入softmax函数。softmax函数的输入不采用特定形状,因此它可以采用任何形状作为输入。因此,您的模型可以处理任何形状的图像,但如果图像形状与您培训的图像形状不同,您的模型的准确性可能会差得多。

模型文档中始终有一个特定的输入大小。你应该用这个尺寸。这些是当前模型的局限性

对于UNET,这甚至可能是一个比率。我认为这取决于执行情况

请注意调整大小:

  • transform.Resize((h,w))
  • transform.Resize(d)
(h,w)
的情况下,输出大小将与此匹配

d
大小的第二种情况下,图像的较小边缘将与
d
匹配

例如,如果
高度>宽度
,则图像将重新缩放为
(d*高度/宽度,d)


这样做的目的是不破坏图像的纵横比。

这很有趣,因为如果我自己强制滑动窗口,结果会比我直接输入整个图像时糟糕得多。当然,我需要一些边界条件,但即使在这种情况下,结果似乎也很糟糕,这可能是因为随机裁剪有时会将图像裁剪成无关紧要的东西。您是否尝试过使用类似于
transforms.Resize()