4

我有一个不平衡的小数据集,其中包含 4116 个 224x224x3 (RGB) 航拍图像。由于数据集不够大,我很可能会遇到过拟合问题。图像预处理和数据增强有助于解决这个问题,如下所述。

“过度拟合是由于要学习的样本太少,导致您无法训练可以泛化到新数据的模型。给定无限数据,您的模型将暴露于手头数据分布的每个可能方面:您永远不会过拟合。数据增强采用从现有训练样本中生成更多训练数据的方法,通过大量随机变换来增强样本,从而产生看起来可信的图像。”

Deep Learning with Python by François Chollet,第 138-139 页,5.2.5 使用数据增强

我已阅读Medium - Image Data Preprocessing for Neural Networks并查看了斯坦福的CS230 - 数据预处理CS231 - 数据预处理课程。它在SO question中再次突出显示,我知道没有“一刀切”的解决方案。这就是迫使我问这个问题的原因:

“因为我们想要实现高空间分辨率,所以没有使用翻译增强。”

参考:Researchgate - 使用深度卷积神经网络对城市遥感图像中的小物体进行语义分割和不确定性建模



我知道我将使用Keras - ImageDataGenerator 类,但不知道在小对象任务的语义分割中使用哪些技术和哪些参数。有人可以启发我吗?提前致谢。:)

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,      # is a value in degrees (0–180)
    width_shift_range=0.2,  # is a range within which to randomly translate pictures horizontally.
    height_shift_range=0.2, # is a range within which to randomly translate pictures vertically.
    shear_range=0.2,        # is for randomly applying shearing transformations.
    zoom_range=0.2,         # is for randomly zooming inside pictures.
    horizontal_flip=True,   # is for randomly flipping half the images horizontally
    fill_mode='nearest',    # is the strategy used for filling in newly created pixels, which can appear after a rotation or a width/height shift
    featurewise_center=True,
    featurewise_std_normalization=True)

datagen.fit(X_train)
4

1 回答 1

5

扩充和预处理阶段始终取决于您遇到的问题。您必须考虑可以扩大数据集的所有可能的扩充。但最重要的是,你不应该执行极端的增强,这会以实际示例中不可能发生的方式生成新的训练样本。如果您不期望真实示例会水平翻转,请不要执行水平翻转,因为这会给您的模型提供错误信息。想一想输入图像中可能发生的所有变化,并尝试从现有图像中人为地生成新图像。您可以使用 Keras 的许多内置函数。但是你应该知道每一个它不会产生新的例子,这些例子不太可能出现在你的模型的输入中。

正如您所说,没有“一刀切”的解决方案,因为一切都取决于数据。分析数据并构建与之相关的一切。

关于小物体 - 您应该检查的一个方向是损失函数,它强调目标体积与背景相比的影响。查看 Dice Loss 或 Generalized Dice Loss。

于 2019-07-24T10:24:40.533 回答