避免过拟合的基本方法之一是从数据源获得更多数据,当训练数据有限时,可以通过数据增强(data augmentation)变换原有的数据生成新的数据来扩大训练集。即使拥有大量数据,进行数据增强也是有必要的,因为可以防止神经网络学习到不相干的模式,从根本上提升整体性能。还要注意在使用增强技术的同时,必须确保不增加无关(无意义)的数据。
数据增强的主要方法有:
第一种:图像处理型(利用一定手段生成样本空间没有的样本)
翻转flip
将图片水平或垂直翻转。
旋转rotate
旋转后图像维度可能不会被保留,如果是正方形图像,旋转90度后图像的尺寸会被保存;
如果图像是长方形,旋转180度后图像的尺寸也会被保存;
但用更小的角度旋转图像将会改变最终图像的尺寸。
缩放re-scale
图像可以被放大或缩小,放大时大多数图像处理框架会按原始尺寸对放大后的图像进行裁剪;缩小时由于图像尺寸比原来的尺寸小,不得不对图像边界之外的内容做出假设。先考虑放大的情况:
裁剪crop
随机从原始图像中采样一部分,然后将这部分图像调整为原始图像大小。注意裁剪和缩放的区别。
平移pad
将图像沿X或Y轴或同时沿2个方向移动,这一数据增强方法非常有用,因为大多数对象有可能分布在图像的任意位置,这迫使CNN网络需要看到所有的地方。
插值interpolation
当旋转、平移或者缩小一个没有纯色背景的图片,且又需要保持原始图片的大小时,需要对边界之外没有任何信息的区域做出假设。最简单的假设是令边界外的部分每一个像素点的值都是常数0(RGB值=0为黑色),这样在对图像进行变换后,在图像没有覆盖的地方会得到一块黑色的区域。
大多数情况下最简单假设的效果不好,可以采用以下方式填充未知的空间:
常数填充、边缘填充、反射填充、对称填充、包裹模式填充
(1)常量填充:适用于在单色背景下拍摄的图像;
(2)边缘扩展:用图像边缘的值填充边界以外,适用于轻微平移的图像;
(3)反射:图像像素值沿图像边界进行反射,适用于包含连续或自然背景的图像;
(4)对称:类似反射,除了在反射边界上进行边缘像素copy。通常反射和对称可以交替使用,但在处理非常小的图像时,差异将是可见的;
(5)包裹:在边界以外重复填充图像,相当于平铺图像,这种方法不像其他方法那样普遍被使用,因为它对很多场景都没有意义。
还可以自定义方法处理未知区域(如近大远小等),但通常以上方法对大多数分类问题都有很好的效果。
高斯噪声Gaussian noise
过拟合经常会发生在神经网络试图学习高频特征(即频繁出现的无意义的模式)时,而学习这些高频特征对模型提升并没有什么帮助。采用具有零均值特性的高斯噪声,在所有频率上都能产生数据点,可以有效的使高频特征失真,减弱其对模型的影响。但这也意味着低频成分(通常是关心的特征)同时会受到影响,由于能够通过学习来忽略影响,添加适量的噪声能够有效提升神经网络的学习能力。
一个弱化的版本是椒盐噪声,以随机的白色和黑色像素点呈现并铺满整个图片。这种方式对图像产生的作用和添加高斯噪声产生的作用是一样的,只是效果相对较差。
对比度变换contrast
在图像的HSV(Hue,Saturation,Value)颜色空间,改变饱和度S和亮度V分量,保持色调H不变,对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间),增加光照变化。
Fancy PCA(PCA Jittering)
改变训练图像中RGB通道的强度,对所有RGB像素值执行PCA,得到3*3的协方差矩阵;对特征值进行波动,乘以一个服从均值为0、标准差为0.1高斯分布的随机变量,得到一个新的协方差矩阵,从而实现一种滤镜的效果。
高级增强技术
条件型生成对抗网络(conditional GANs)能将图片从一个领域转换到另一个领域中,这种方法虽然Robust但是计算密集类型。
第二种:主动学习、半监督学习(使用原样本空间已有的样本)
这里的半监督学习包含纯半监督学习和直推学习(请移步:https://www.cnblogs.com/CJT-blog/p/10276310.html)。
值得注意的是,主动学习是人工赋予标签,而此处半监督学习可以用一定的算法为无标签样本打上高质量标签。
个人体验认为,在一些图像任务中,性能较好的时候,第一种方法带来提升不如第二种大,而且需要小心注意生成样本质量。
上述分类掺杂个人理解,有问题望不吝赐教。