【问题标题】:Torch model forward with a diferent image size具有不同图像尺寸的 Torch 模型
【发布时间】:2021-01-28 08:26:30
【问题描述】:

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

为什么我不再需要这样做了?幕后发生了什么?

【问题讨论】:

    标签: pytorch torchvision


    【解决方案1】:

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

    【讨论】:

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

    在模型的文档中总是有一个特定的输入大小。你应该使用这个尺寸。这些是当前的模型限制。

    对于 UNet,这甚至可能是一个比率。我认为这取决于实施。

    只是关于调整大小的说明:

    • transform.Resize((h,w))
    • transform.Resize(d)

    如果是(h, w),输出大小将与此匹配。

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

    例如,如果height > width,则图像将重新缩放为(d * height / width, d)

    我们的想法是不破坏图像的纵横比。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多