1. 为什么需要数据增强?
(1)数据增强是扩充数据样本规模的一种有效的方法,深度学习是一种基于大数据的方法,数据的规模越大、质量越高就越好,模型也能够拥有更好的泛化能力。然而在实际采集数据的时候,往往很难覆盖全部的场景,比如光照条件,那么在训练模型的时候,就需要加入光照方面的数据增强;
(2)即使拥有大量数据,也应该进行数据增强,这会有助于增加数据集中相关数据的数量。通过增强数据集,可以防止神经网络学习到不想关的模式,避免了过拟合,根本上提升了整体性能。
假设数据集有两个类别,如下图,左边是品牌A(福特),右边是品牌B(雪佛兰),并且已经完成了模型的训练。
输入下面这个图像:
神经网络会认为它是品牌B的车。因为这是大多数机器学习算法就是这么工作的。它会寻找区分一个类和另一个类的最明显特征。在这个例子中 ,这个特征就是所有品牌A的汽车朝向左边,所有品牌B的汽车朝向右边。 由此可以得出:神经网络的好坏也取决于输入的数据。如何避免?最简单的解决办法就是为数据集中的每种类别都添加朝向不同方向的汽车照片。更好的办法是,只需要将现有的数据集中的照片水平翻转,使汽车朝向另一侧。
2. 数据增强的作用
(1)增加训练的数据量,提高模型的泛化能力;
(2)增加数据噪声,提升模型的鲁棒性。
3. 数据增强的分类
(1)离线增强:直接对数据集进行处理,数据的数目会变成增强因子 \(\times\) 原数据集的数目 ,这种方法常常用于数据集很小的时候 ;
(2)在线增强:这种增强的方法用于,获得 batch 数据之后,然后对这个 batch 的数据进行增强,如旋转、平移、翻折等相应的变化,由于有些数据集不能接受线性级别的增长,这种方法常用于较大的数据集,很多机器学习框架已经支持了这种数据增强方式,并且可以使用 GPU 优化计算。
4. 常用数据增强技术(离线增强)
空间几何变换:翻转,旋转,缩放,随机裁剪,平移
像素颜色变换类:噪声(高斯,椒盐),CoarseDropout,SimplexNoiseAlpha,FrequencyNoiseAlpha
模糊类:高斯模糊
HSV对比度变换:
RGB颜色扰动:
随机擦除:
超像素法:
边界检测:
锐化和浮雕:
多样本合成:SMOTE、SamplePairing、Mixup
注意:引入数据增强并不一定会带来模型性能上的提升,尤其是在数据增强的时候,需要考虑如何设置恰当的增强比例因子。实际上,只有当我们增强后的样本,理论上和我们的实际业务场景最接近的时候,才会达到性能最好。也就是所谓的训练集和测试集样本分布一致的时候。 因此,在进行增强的时候不要盲目增强,需要看一下看数据集增强之后的效果如何。
如何查看数据增强后的效果?对于离线数据,保存图片以后就能够看到,但是对于在线的数据,则需要借助工具了。这一点tensorflow做的就很好,可以直接使用tensorboard来进行实时训练图片查看。
原文地址:https://www.cnblogs.com/xxxxxxxxx/p/10989005.html