在神经网络预处理过程中,图像调整方法



我是机器学习的新手。我正在尝试从一组图像(Stanford Dog的120个品种)中创建一个输入矩阵(X),以训练卷积神经网络。我的目标是调整图像大小,并通过使每个像素为单独的列将每个图像变成一行。

如果我将图像直接调整到固定尺寸,则图像由于挤压或伸展而失去了原创性,这是不好的(第一个解决方案)。

i可以通过固定宽度或高度来调整大小,然后再裁剪(所有结果图像的大小都与100x100相同),但是可以裁剪图像的关键部分(第二个解决方案)。

我正在考虑另一种方法,但我敢肯定。假设我要每个图像10000列。我将调整图像大小,而是将图像调整大小,以便总像素计数约为10000像素。因此,大小50x200、100x100和250x40的图像将转换为10000列。对于其他尺寸,例如52x198,将考虑10296中的第一个10000像素(第三个解决方案)。

我上面提到的第三个解决方案似乎保留了图像的原始形状。但是,由于并非所有图像都具有相同的大小,因此可能会失去所有这些原创性。我想知道您对这个问题的评论。如果您可以将我引导到来源,我可以了解该主题也很棒。

解决方案1(简单地调整输入图像)是一种常见方法。除非您的纵横比与预期的输入形状截然不同(或者目标类具有严格的几何约束),否则通常仍然可以获得良好的性能。

您提到的是,解决方案2(裁剪图像)的缺点可能排除图像的关键部分。您可以通过在原始图像的多个子灯器上运行分类(即,通过在适当的步幅上水平和/或垂直沿输入图像踏上输入图像来对多个100 x 100子图像进行分类)。然后,您需要决定如何组合多个分类结果。

解决方案3将不起作用,因为卷积网络需要知道图像尺寸(否则,它不知道哪些像素是水平和垂直相邻的)。因此,除非网络期望从假定的尺寸变平的数组,否则您需要传递具有显式维度的图像(例如100 x 100)。但是,如果您简单地传递了10000像素值的数组,而网络不知道(或不能假设)图像是100 x 100、50 x 200或250 x 40,那么网络无法应用卷积过滤器正确。

解决方案1显然是最容易实施的,但是您需要平衡更改图像宽高比的可能效果与每个图像的运行和组合所需的努力水平。

最新更新