【问题标题】:Image resizing method during preprocessing for neural network神经网络预处理过程中的图像缩放方法
【发布时间】:2017-04-27 09:51:39
【问题描述】:

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

如果我直接将图片调整为固定大小,图片会因为挤压或拉伸而失去原创性,这是不好的(第一种解决方案)。

我可以通过固定宽度或高度来调整大小,然后对其进行裁剪(所有生成的图像将与 100x100 大小相同),但可以裁剪图像的关键部分(第二种解决方案)。

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

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

【问题讨论】:

    标签: image machine-learning neural-network classification conv-neural-network


    【解决方案1】:

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

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

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

    解决方案 1 显然是最容易实现的,但您需要平衡更改图像纵横比的可能影响与运行和组合每个图像的多个分类所需的工作量。

    【讨论】:

    • 作为第四种解决方案,如何调整图像大小以使调整后的图像适合 100x100 的结果分辨率并用图像的平均颜色(或为零的黑色)填充间隙?
    • 我想这是一个选项,但 100x100 已经是一个要分类的小图像。调整图像大小使其甚至不填充 100x100 像素似乎会丢弃信息。
    • 我同意,我使用 100x100 只是为了给出一个数字示例。我认为这个选项也不是一个有效的方法,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2016-11-29
    • 2018-10-10
    • 2017-11-22
    • 2020-08-10
    • 2020-03-21
    相关资源
    最近更新 更多