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

时间:2017-12-07 14:47:10

标签: image machine-learning neural-network computer-vision conv-neural-network

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

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

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

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

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

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:2)

对不起,这很晚,但是此答案适用于面临相同问题的任何人。

首先,如果更改宽高比进行缩放会影响某些重要功能,则必须使用零填充。

归零填充不会因为较长的黑色区域而使网络学习花费更长的时间,而是由于未填充的图像可能位于填充的图像内部的位置可能不同,因为您可以通过多种方式填充图像

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

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

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

也就是说,这取决于您的问题以及您想要实现的目标。同样,测试这两种方法也不会造成伤害。