卷积神经网络 - 图像调整大小与填充(保持宽高比还是不保持?)

59

通常人们在训练卷积神经网络时,会将任何图像简单调整为正方形(例如resnet采用224x224的正方形图像),但我认为那样看起来很丑,尤其是当宽高比不为1时。

实际上,这可能会改变正确答案。例如,专家给出扭曲图像的标签可能与原始图像不同。

因此,现在我将图像调整为保持原始宽高比的224x160,然后用0填充图像(通过将其粘贴到全黑的224x224图像的随机位置)。

我的方法对我来说似乎并不原创,但我无法找到任何关于我的方法与“通常”方法的信息。

那么,哪种方法更好?为什么?(如果答案取决于数据,请分享您对何时使用其中一种方法的想法。)


4
我有完全相同的疑虑。一个月过去了,奇怪的是没有人回答。你是否尝试在人工智能 Stack Exchange 网站上发布这个问题?https://ai.stackexchange.com/ - Mario Stefanutti
2
我也有完全相同的担忧。但在我这种情况下,通过改变纵横比,所有图片都会受到或多或少的扭曲。我使用合成的、连接的NIST数字。在我看来,这对分类数字没有太大影响。我能想到的唯一区别是,通过调整大小,我可以在卷积层中应用更大的步幅,而不像填充图像那样丢失太多信息。因此,在从卷积层到完全连接的层的交叉点处,我需要更少的权重。 - Sebastian
这个答案最终帮助了我。https://dev59.com/M1gQ5IYBdhLWcg3w-5Ad - Sebastian
2个回答

45
根据Jeremy Howard的说法,对图像进行大面积填充(64x160像素)将产生以下影响:卷积神经网络必须学习到图像黑色部分不相关且不能帮助区分类别(在分类设置中),因为黑色部分的像素与属于给定类别的像素之间没有关联。由于你没有硬编码这个,卷积神经网络必须通过梯度下降来学习它,这可能需要一些训练轮数。因此,如果你拥有大量图像和计算能力,可以这样做,但如果你预算有限,则改变图像大小效果更好。

2
听起来不错,所以我投了你的赞,但是:假设你将所有像素归一化为[0,1]。因此,黑色像素全部为0。因此,在卷积期间,任何内核都会输出这些像素的0。那么...学习起来很容易,而且也有点自动化,对吧?我想我可以尝试一下,因为我有大量的数据,但还是要谨慎。 - Yoni Keren
如果所有的图片下面都有黑色的填充,那就很容易处理。但是,如果有些图片有填充而另一些没有,并且那些没有填充的图片中包含非常相关的信息,我就不太确定该怎么处理了。 - David Masip
2
不过,如果您需要构建一个分类器来区分圆和椭圆,则无法这样做。 - HelloGoodbye
5
一种可能的方法是添加一个额外的色彩通道,用于掩盖所有填充像素或所有原始图像中存在的像素。这样,网络就不必“弄清”黑色是否为原始图像的一部分,从而节省了一些工作量。 - HelloGoodbye
2
对我来说,这似乎并不是一个卷积神经网络难以学习的事情。无论如何,目前还不清楚它是否比学习高度压缩的视觉特征更难。如果有任何两种方法的实证比较,我认为那将是最有用的。 - Denziloe
@HelloGoodbye,这是一个非常好的方法。 - Harshit Jindal

16

很抱歉回答晚了,但这个答案适用于任何面临相同问题的人。

首先,如果缩放并改变宽高比会影响某些重要特征,则必须使用零填充。

零填充不会因为大黑区域本身而使网络学习时间更长,而是因为未填充图像在填充后可能出现的不同位置。因为可以用多种方式对图像进行填充。

对于零像素区域,卷积操作的输出为零。最大或平均池化也是一样。此外,您可以证明在某些激活函数(例如relu、sigmoid)下,如果与该权重相关联的输入为零,则在反向传播后权重不会被更新。因此,从这个意义上说,大面积不会对权重进行任何更新。

然而,未填充图像相对填充图像的位置确实会影响训练。这不是由于卷积层或池化层,而是由于最后一个完全连接的层。例如,如果未填充图像相对于填充图像的左侧,且展平最后一个卷积或池化层的输出为[1,0,0],而相同未填充图像相对于填充图像的右侧,展平后的输出为[0,0,1],则完全连接的层必须学习[1,0,0]和[0,0,1]是分类问题中相同的东西。

因此,学习图像不同可能位置的等变性会使训练时间更长。如果你有100万张图片,那么在调整大小后你将拥有相同数量的图片;另一方面,如果你要填充并考虑不同可能的位置(每张图片随机选取10个),那么你将拥有1000万张图片。也就是说,训练将需要10倍的时间。
尽管如此,这取决于您的问题和想要实现的目标。此外,测试两种方法都不会有坏处。

如果我们确保未填充的图像始终位于中心,并在其周围均匀应用填充,那么这种情况下填充是否更好? - user3303020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接