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将不得不通过梯度下降来学习它,这可能需要一些时代.出于这个原因,如果你有很多图像和计算能力,你可以做到这一点,但如果你对它们中的任何一个有预算,那么调整大小应该更好.
小智 8
抱歉,这已经晚了,但此答案适用于面临相同问题的任何人。
首先,如果改变纵横比缩放会影响一些重要的特性,那么你必须使用零填充。
零填充不会使网络学习时间更长,因为黑色区域本身很大,而是因为未填充图像可能位于填充图像内的不同可能位置,因为您可以通过多种方式填充图像。
对于像素为零的区域,卷积运算的输出为零。与最大或平均池化相同。此外,如果在某些激活函数(例如 relu、sigmoid)下与权重关联的输入为零,您可以证明权重在反向传播后不会更新。因此,从这个意义上说,大区域不会对权重进行任何更新。
但是,填充图像内未填充图像的相对位置确实会影响训练。这不是由于卷积或池化层,而是最后一个完全连接的层。例如,如果未填充图像在填充图像的左侧相对于填充图像内部,并且展平最后一个卷积或池化层的输出为 [1, 0, 0] 并且相同未填充图像的输出但在右侧相对于内部填充图像是 [0, 0, 1] 那么全连接层必须知道 [1, 0, 0] 和 [0, 0, 1] 对于分类问题是相同的。
因此,学习图像不同可能位置的等方差是使训练花费更多时间的原因。如果您有 1,000,000 张图片,那么在调整大小后您将拥有相同数量的图片;另一方面,如果您填充并想要考虑不同的可能位置(每个图像随机 10 个),那么您将拥有 10,000,000 个图像。也就是说,训练将花费 10 倍的时间。
也就是说,这取决于您的问题以及您想要实现的目标。此外,测试这两种方法不会有什么坏处。
归档时间: |
|
查看次数: |
8163 次 |
最近记录: |