CNN使用大小差异明显的图像

时间:2018-12-11 12:55:33

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

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

可供我使用的数据集相对较小(对于训练集和测试集,大约有35k张图像)。数据集中的每个图像大小均不同。最小的图像是30 x 77,最大的图像是1575 x5959。

我看到了这个post关于如何处理大小不同的图像的信息。该帖子标识了以下用于处理不同大小图像的方法。

  • “压扁”图像,这意味着它们将被调整大小以适合特定尺寸,而无需保持宽高比

  • 将图像中心裁剪为特定尺寸。

  • 将纯色图像粘贴到平方大小,然后调整大小。
  • 以上各项的组合

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

其他人有什么想法吗?

1 个答案:

答案 0 :(得分:4)

第一件事是:调整大小会降低图像质量吗?

尽管图像尺寸大,但图像中所需的元素是否都合理地处于相同的比例?

  • 如果是,则不应调整大小,请使用输入大小可变的模型(尽管有最小值)。
  • 如果否,是否可以通过调整大小将您想要的元素缩放到相似的比例?
    • 如果是,请调整大小!
    • 如果没有,请更好地考虑其他解决方案

当然,您可以使用模型来识别各种大小的元素,但是差异越大,模型的功能就越强大(我相信这句话很合理)

Keras为您提供了使用不同图像尺寸的可能性(您实际上并不需要它们具有相同的尺寸)。

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

但是,随着形状的变化,您将无法使用Flatten层。您将需要GlobalMaxPooling2DGlobalAveragePooling2D。其他一些层也被限制为固定大小,但是卷积层,池化层和上采样层都是可以的。

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

  • 将大小调整为相同大小的组,而无需进行很大的变化以使培训更加容易。
  • 根本不一一调整大小和训练图像
  • 保持宽高比并填充侧面

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