我是机器学习的新手。我试图从一组图像(斯坦福狗120集品种)创建一个输入矩阵(X)来训练卷积神经网络。我的目标是通过将每个像素作为单独的列来调整图像大小并将每个图像转换为一行。
如果我直接将图像调整到固定大小,图像会因为压扁或拉伸而失去原创性,所以这不好(首先是解决方案)。
我可以通过固定宽度或高度然后裁剪它来调整大小(所有生成的图像将具有相同的大小,如100x100),但可以裁剪图像的关键部分(第二个解决方案)。
我在想另一种做法,但我确信。假设我想要每个图像10000列。我将调整图像大小,使总像素数大约为10000像素,而不是将图像大小调整为100x100。因此,尺寸为50x200,100x100和250x40的图像都将转换为10000列。对于像52x198这样的其他尺寸,将考虑10296中的前10000个像素(第三个解决方案)。
我上面提到的第三个解决方案似乎保留了图像的原始形状,但是,由于并非所有图像都具有相同的大小,因此在转换为行时可能会丢失所有这些原创性。我想知道你对这个问题的评论。如果你能指导我可以了解这个主题的来源,那也很棒。
答案 0 :(得分:5)
解决方案1(简单地调整输入图像的大小)是一种常见的方法。除非您的预期输入形状具有非常不同的宽高比(或者您的目标类具有严格的几何约束),否则通常仍然可以获得良好的性能。
正如您所提到的,解决方案2(裁剪图像)的缺点是可能会排除图像的关键部分。您可以通过在原始图像的多个子窗口上运行分类来绕过它(即,通过以适当的步幅水平和/或垂直地踩踏输入图像来分类多个100×100子图像)。然后,您需要决定如何组合多个分类结果。
解决方案3不起作用,因为卷积网络需要知道图像尺寸(否则,它不知道哪些像素是水平和垂直相邻的)。因此,您需要传递具有显式尺寸(例如,100 x 100)的图像,除非网络期望从假定尺寸展平的数组。但是如果您只是传递一个10000像素值的数组并且网络不知道(或者不能假设)图像是100 x 100,50 x 200还是250 x 40,那么网络可以& #39;正确应用卷积滤镜。
解决方案1显然最容易实现,但您需要平衡更改图像宽高比的可能效果与运行和组合每个图像的多个分类所需的工作量。