首页 > 解决方案 > CNN 使用具有显着尺寸差异的图像

问题描述

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

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

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

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

其他人有什么想法吗?

标签: pythontensorflowkerasneural-networkcomputer-vision

解决方案


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

尽管图像大小,您在图像中所需的元素是否都合理地具有相同的比例?

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

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

Keras 为您提供了使用不同图像大小的可能性(您并不真的需要它们具有相同的大小)。

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

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

困难的部分是您不能将不同的大小放在单个 numpy 数组中。那么你也能:

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

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


推荐阅读