我正在开发用于图像图像分类的卷积神经网络(CNN)。
可供我使用的数据集相对较小(对于训练集和测试集,大约有35k张图像)。数据集中的每个图像大小均不同。最小的图像是30 x 77,最大的图像是1575 x5959。
我看到了这个post关于如何处理大小不同的图像的信息。该帖子标识了以下用于处理不同大小图像的方法。
“压扁”图像,这意味着它们将被调整大小以适合特定尺寸,而无需保持宽高比
将图像中心裁剪为特定尺寸。
这些似乎是合理的建议,但是我不确定哪种方法最适合我的情况,即图像的大小有重要差异。我当时认为调整图像大小但保持相同的宽高比(每个图像具有相同的高度),然后对这些图像进行中心裁剪对我来说很有意义。
其他人有什么想法吗?
答案 0 :(得分:4)
第一件事是:调整大小会降低图像质量吗?
尽管图像尺寸大,但图像中所需的元素是否都合理地处于相同的比例?
当然,您可以使用模型来识别各种大小的元素,但是差异越大,模型的功能就越强大(我相信这句话很合理)
Keras为您提供了使用不同图像尺寸的可能性(您实际上并不需要它们具有相同的尺寸)。
为此,您只需要指定input_shape=(None,None,input_channels)
。
请注意,如果要创建和合并分支,则需要注意兼容性。
但是,随着形状的变化,您将无法使用Flatten
层。您将需要GlobalMaxPooling2D
或GlobalAveragePooling2D
。其他一些层也被限制为固定大小,但是卷积层,池化层和上采样层都是可以的。
困难的部分是您不能在单个numpy数组中放置不同的大小。然后,您可以:
但是最好的答案取决于您的测试。