【发布时间】:2019-11-29 17:06:21
【问题描述】:
我有一个不平衡的小型数据集,其中包含 4116 个 224x224x3 (RGB) 航拍图像。由于数据集不够大,我很可能会遇到过拟合问题。图像预处理和数据增强有助于解决这个问题,如下所述。
“过度拟合是由于要学习的样本太少,导致您无法训练可以泛化到新数据的模型。给定无限数据,您的模型将暴露于数据分布的每个可能方面手头:你永远不会过拟合。数据增强采用从现有训练样本中生成更多训练数据的方法,通过一系列随机变换来增强样本,从而产生看起来可信的图像。”
Deep Learning with Python by François Chollet,第 138-139 页,5.2.5 使用数据增强。
我已阅读 Medium - Image Data Preprocessing for Neural Networks 并查看了斯坦福的 CS230 - Data Preprocessing 和 CS231 - Data Preprocessing 课程。它在SO question 中再次突出显示,我知道没有“一刀切”的解决方案。这就是迫使我问这个问题的原因:
“没有使用翻译增强,因为我们想要实现高空间分辨率。”
我知道我将使用Keras - ImageDataGenerator Class,但不知道在小对象任务的语义分割中使用哪些技术和哪些参数。有人可以启发我吗?提前致谢。 :)
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)
【问题讨论】:
-
这个问题非常广泛,我仍然会尝试对此提出我的看法。正如您必须阅读的那样,对伪造数据进行了扩充,基本上是从可用数据中生成数据以在分布中生成更多数据。这完全取决于您期望模型在训练后将来遇到的方差。例如,如果您认为您可能会遇到可能会翻转的图像,请旋转将其添加为增强的一部分。对于预处理,到目前为止,我使用的是灰度图像,用均值和标准差进行归一化。
标签: python keras semantic-segmentation image-preprocessing