【问题标题】:CNN Using Images With Significant Size DifferencesCNN 使用具有显着尺寸差异的图像
【发布时间】:2019-05-12 11:23:35
【问题描述】:

我正在开发用于图像图像分类的卷积神经网络 (CNN)。

我可用的数据集相对较小(训练集和测试集的图像约为 35k)。数据集中的每个图像的大小都不同。最小图像为 30 x 77,最大图像为 1575 x 5959。

我看到了这个post,关于如何处理大小不同的图像。该帖子确定了以下处理不同尺寸图像的方法。

  • “Squash”图像意味着它们将被调整大小以适应特定尺寸而不保持纵横比

  • 将图像居中裁剪为特定大小。

  • 用纯色填充图像到正方形大小,然后调整大小。
  • 以上内容的组合

这些似乎是合理的建议,但我不确定哪种方法最适合我的情况,即图像在尺寸上有显着差异。我认为调整图像大小但保持相同的纵横比(每个图像具有相同的高度)对我来说是有意义的,然后对这些图像进行中心裁剪。

其他人有什么想法吗?

【问题讨论】:

  • 这是您需要通过实验来回答的问题,而不是我们可以回答的问题。
  • 不知道为什么这个评论是合适的。我没想到有人会为我做这项工作,只是希望了解人们过去考虑过做什么,或者我是否错过了任何尝试。
  • 请在stackoverflow.com/help/on-topic 上查看此站点的主题内容,您会发现您的问题与 Stack Overflow 无关。最后我所说的,你想知道哪种方法是相关的,你只能通过实验来获得。

标签: python tensorflow keras neural-network computer-vision


【解决方案1】:

第一个重要的事情是:调整大小会损坏图像吗?

尽管图像尺寸很大,但您想要的图像中的元素是否都合理地具有相同的比例?

  • 如果是,则不应调整大小,使用具有可变输入大小的模型(尽管有最小值)。
  • 如果不是,调整大小会使您想要的元素达到类似的比例吗?
    • 如果是:调整大小!
    • 如果不是:最好考虑其他解决方案

当然,你可以拥有可以识别多种不同尺寸元素的模型,但差异越大,模型越强大(我相信这种说法很合理)

Keras 为您提供了处理不同图像尺寸的可能性(您并不真的需要它们具有相同的尺寸)。

为此,您只需指定input_shape=(None,None,input_channels)
请注意,如果要创建和合并分支,则需要注意兼容性。

不过,对于不同的形状,您将无法使用Flatten 层。您将需要GlobalMaxPooling2DGlobalAveragePooling2D。其他一些层也仅限于固定大小,但卷积层、池化层和上采样层都可以。

困难的部分是您不能将不同的大小放入单个 numpy 数组中。然后你可以:

  • 将组大小调整为相同大小而没有巨大差异的组,以使训练更容易。
  • 根本不用一张一张地调整和训练图像
  • 保持纵横比并填充两侧

但最佳答案取决于您的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多