我有一个不平衡的小数据集,其中包含 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中再次突出显示,我知道没有“一刀切”的解决方案。这就是迫使我问这个问题的原因:
“因为我们想要实现高空间分辨率,所以没有使用翻译增强。”
我知道我将使用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)