数据增强推荐管道

数据挖掘 深度学习 喀拉斯 数据增强
2021-09-20 01:58:22

我想使用 Keras 和由 50 个类组成的数据集执行图像分类。目前,我每个类只有 7 张图像,我需要执行数据增强以训练模型并获得可接受的准确度值。

我正在使用kerasImageDataGenerator的课程,推荐用于动态图像增强(在训练期间)。由于分类表现不佳,我想知道是否有必要执行离线增强,即在训练之前扩大数据集,因为老实说,我认为 7 远不是每类图像的合理数量。

执行这两种类型的增强(在训练之前和训练期间)是一种常见的做法吗?我计划使用一些 3rd 方软件或工具,如 imgaug,首先扩大数据集并将增强后的图像保存到磁盘,然后才使用类执行实时增强ImageDataGenerator

总之,流程将与此类似:

  • 图像预处理和离线数据增强 => 放大原始数据集
  • 实时增强训练 => 加载数据集并使用 ImageDataGenerator

你怎么认为?

谢谢你。

2个回答

在您提到的两个管道中,我推荐第二个(即实时增强)。这比第一个要好,因为通过执行随机增强,网络在每个时期看到不同的图像。

我推荐imgaug,这是一个用于执行数据增强的 python 库。我发现它非常有用,因为它可以ImageDataGenerator很好地与 keras 一起使用。可以做到这一点的方法是:

from imgaug import augmenters as iaa

seq = iaa.Sequential([...])  # list of desired augmentors

ig = ImageDataGenerator(preprocessing_function=seq.augment_image)  # pass this as the preprocessing function

gen = ig.flow_from_directory(data_dir)  # nothing else changes with the generator

最后我想说的是750=350即使有增强,深度学习的图像也很少确保使用预训练的网络,否则会出现严重的过拟合问题。

Elastic Transformation 在我的缺陷检测器上运行良好: https ://github.com/nyck33/defect_detector_CNN_Keras/blob/master/ElasticTransform.ipynb

它也在 Kaggle 上: https ://www.kaggle.com/bguberfain/elastic-transform-for-data-augmentation

它用于医学图像,因为它保留了像素相对于底层网格的位置,同时扭曲了图像,但它几乎适用于我认为的任何数据集。