CNN - 图像大小调整VS填充(保持宽高比与否?)

Yon*_*ren 23 image machine-learning computer-vision neural-network conv-neural-network

虽然通常人们倾向于在训练CNN时简单地将任何图像调整为正方形(例如,resnet采用224x224方形图像),这对我来说看起来很难看,特别是当纵横比不是1时.

(事实上​​,这可能会改变基本事实,例如专家可能给出扭曲图像的标签可能与原始图像不同).

所以现在我将图像调整为224x160,保持原始比例,然后用0填充图像(将其粘贴到完全黑色的224x224图像中的随机位置).

我的方法对我来说似乎并不原创,但我找不到任何有关我的方法与"通常"方法的信息.时髦!

那么,哪种方法更好?为什么?(如果答案是数据相关的,请分享你的想法,如果一个优先于另一个.)

Dav*_*sip 18

根据Jeremy Howard的说法,填充图像的一大块(64x160像素)将产生以下效果:CNN必须知道图像的黑色部分不相关且无法区分类别(在分类中)设置),因为黑色部分中的像素与属于给定类之间没有相关性.由于你没有对此进行硬编码,CNN将不得不通过梯度下降来学习它,这可能需要一些时代.出于这个原因,如果你有很多图像和计算能力,你可以做到这一点,但如果你对它们中的任何一个有预算,那么调整大小应该更好.

  • 一种可能性是添加一个额外的颜色通道,它屏蔽所有填充的像素或作为原始图像一部分的所有像素。这样,网络就不必“弄清楚”黑色的东西是否是原始图像的一部分,因此可能会为网络节省一些工作。 (3认同)
  • 听起来不错,所以我已经投票给你了,但是:假设你将所有像素归一化为 [0,1]。所以黑色像素都是0。这样在卷积过程中,任何内核都会为这些像素输出 0。那么...它是不是超级容易学习,而且它也是自动的,对吧?我想我可以尝试一下,因为我有很多数据,但仍然如此。 (2认同)
  • 如果您必须构造一个区分圆形和椭圆形的分类器,则不然。 (2认同)
  • 对我来说,对于 CNN 来说,这听起来并不一定是一件很难学的事情。无论如何,尚不清楚这是否比学习高度压缩的视觉特征更难。如果对这两种方法进行任何实证比较,我认为那将是最有用的。 (2认同)

小智 8

抱歉,这已经晚了,但此答案适用于面临相同问题的任何人。

首先,如果改变纵横比缩放会影响一些重要的特性,那么你必须使用零填充。

零填充不会使网络学习时间更长,因为黑色区域本身很大,而是因为未填充图像可能位于填充图像内的不同可能位置,因为您可以通过多种方式填充图像。

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

但是,填充图像内未填充图像的相对位置确实会影响训练。这不是由于卷积或池化层,而是最后一个完全连接的层。例如,如果未填充图像在填充图像的左侧相对于填充图像内部,并且展平最后一个卷积或池化层的输出为 [1, 0, 0] 并且相同未填充图像的输出但在右侧相对于内部填充图像是 [0, 0, 1] 那么全连接层必须知道 [1, 0, 0] 和 [0, 0, 1] 对于分类问题是相同的。

因此,学习图像不同可能位置的等方差是使训练花费更多时间的原因。如果您有 1,000,000 张图片,那么在调整大小后您将拥有相同数量的图片;另一方面,如果您填充并想要考虑不同的可能位置(每个图像随机 10 个),那么您将拥有 10,000,000 个图像。也就是说,训练将花费 10 倍的时间。

也就是说,这取决于您的问题以及您想要实现的目标。此外,测试这两种方法不会有什么坏处。