今天带来一次有关于深度学习中的数据增强方法的分享。

00

什么是数据增强

在深度学习项目中,寻找数据花费了相当多的时间。但在很多实际的项目中,我们难以找到充足的数据来完成任务。

为了要保证完美地完成项目,有两件事情需要做好:

1、寻找更多的数据;

2、数据增强。

本篇主要描述数据增强。

什么是数据增强呢?data augmentation,它的意思是让有限的数据产生更多的等价数据。

下面举个实际的例子:

上面的左侧大图为原图,右侧小图是对左图做了一些随机的裁剪、旋转操作得来的。右边的每张图对于网络来说都是不同的输入,这样就将数据扩充到10倍。

假如我们输入网络的图片的分辨率大小是256*256,若采用随机裁剪成224*224的方式,那么一张图最多可以产生32*32张图,数据量扩充将近1000倍。

但因许多图相似度太高,实际的效果并不等价。

如果再辅助其他的数据增强方法,将获得更多的数据集,这就是数据增强的本质。

01

空间几何变换类

1.1 翻转

翻转包括水平翻转和垂直翻转。

1.2 crop

裁剪图片的感兴趣区域(ROI),通常在训练的时候,会采用随机裁剪的方法,下图为随机裁剪4次的效果。

1.3 旋转

对图像做一定角度对旋转操作,看看效果。

1.4.缩放变形

随机选取图像的一部分,然后将其缩放到原图像尺度。

1.5 仿射类

仿射变换

同时对图片做裁剪、旋转、转换、模式调整等多重操作。

视觉变换

对图像应用一个随机的四点透视变换。

分段仿射(PiecewiseAffine)

分段仿射在图像上放置一个规则的点网格,根据正态分布的样本数量移动这些点及周围的图像区域。

02

像素颜色变换类

2.1 噪声类

随机噪声是在原来的图片的基础上,随机叠加一些噪声。

高斯噪声

CoarseDropout

在面积大小可选定、位置随机的矩形区域上丢失信息实现转换,所有通道的信息丢失产生黑色矩形块,部分通道的信息丢失产生彩色噪声。

SimplexNoiseAlpha

产生连续单一噪声的掩模后,将掩模与原图像混合。

FrequencyNoiseAlpha

在频域中用随机指数对噪声映射进行加权,再转换到空间域。在不同图像中,随着指数值逐渐增大,依次出现平滑的大斑点、多云模式、重复出现的小斑块。

2.2 模糊类

减少各像素点值的差异实现图片模糊,实现像素的平滑化。

高斯模糊

ElasticTransformation

根据扭曲场的平滑度与强度逐一地移动局部像素点实现模糊效果。

2.3 HSV对比度变换

通过向HSV空间中的每个像素添加或减少V值,修改色调和饱和度实现对比度转换。

2.4  RGB颜色扰动

将图片从RGB颜色空间转换到另一颜色空间,增加或减少颜色参数后返回RGB颜色空间。

2.5  随机擦除法

对图片上随机选取一块区域,随机地擦除图像信息。

2.6  超像素法(Superpixels)

在最大分辨率处生成图像的若干个超像素,并将其调整到原始大小,再将原始图像中所有超像素区域按一定比例替换为超像素,其他区域不改变。

2.7  转换法(invert)

按给定的概率值将部分或全部通道的像素值从v设置为255-v。

2.8  边界检测(EdgeDetect)

检测图像中的所有边缘,将它们标记为黑白图像,再将结果与原始图像叠加。

2.9  GrayScale

将图像从RGB颜色空间转换为灰度空间,通过某一通道与原图像混合。

2.10  锐化(sharpen)与浮雕(emboss)

对图像执行某一程度的锐化或浮雕操作,通过某一通道将结果与图像融合。

下图分别是锐化与浮雕效果图。

上述两大类方法都是通过调用imgaug库操作实现的。

git地址:https://github.com/aleju/imgaug

官方文档:http://imgaug.readthedocs.io/en/latest/index.html

03

多样本合成类

3.1  SMOTE

SMOTE,Synthetic Minority Over-sampling Technique,通过人工合成新样本来处理样本不平衡问题,提升分类器性能。

类不平衡现象是数据集中各类别数量不近似相等。如果样本类别之间相差很大,会影响分类器的分类效果。假设小样本数据数量极少,仅占总体的1%,所能提取的相应特征也极少,即使小样本被错误地全部识别为大样本,在经验风险最小化策略下的分类器识别准确率仍能达到99%,但在验证环节分类效果不佳。

基于插值的SMOTE方法为小样本类合成新的样本,主要思路为:

(1)定义好特征空间,将每个样本对应到特征空间中的某一点,根据样本不平衡比例确定采样倍率N;

(2)对每一个小样本类样本(x,y),按欧氏距离找K个最近邻样本,从中随机选取一个样本点,假设选择的近邻点为(xn,yn)。在特征空间中样本点与最近邻样本点的连线段上随机选取一点作为新样本点,满足以下公式:

(3)重复选取取样,直到大、小样本数量平衡。

在python中,SMOTE算法已经封装到了imbalanced-learn库中,如下图为算法实现的数据增强的实例,左图为原始数据特征空间图,右图为SMOTE算法处理后的特征空间图。

3.2  SamplePairing

SamplePairing方法的处理流程如下图所示,从训练集中随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后经像素取平均值的形式叠加合成一个新的样本,标签为原样本标签中的一种。

经SamplePairing处理后可使训练集的规模从N扩增到N*N,在CPU上也能完成处理。

训练过程是交替禁用与使用SamplePairing处理操作的结合:

(1)使用传统的数据增强训练网络,不使用SamplePairing 数据增强训练。

(2)在ILSVRC数据集上完成一个epoch或在其他数据集上完成100个epoch后,加入SamplePairing 数据增强训练。

(3)间歇性禁用 SamplePairing。对于 ILSVRC 数据集,为其中的300000 个图像启用SamplePairing,然后在接下来的100000个图像中禁用它。对于其他数据集,在开始的8个epoch中启用,在接下来的2个epoch中禁止。

(4)在训练损失函数和精度稳定后进行微调,禁用SamplePairing。

实验结果表明,因SamplePairing数据增强操作可能引入不同标签的训练样本,导致在各数据集上使用SamplePairing训练的误差明显增加,而在检测误差方面使用SamplePairing训练的验证误差有较大幅度降低。

尽管SamplePairing思路简单,性能上提升效果可观,符合奥卡姆剃刀原理,遗憾的是的可解释性不强,目前尚缺理论支撑。目前仅有图片数据的实验,还需下一步的实验与解读。

3.3  mixup

mixup是基于邻域风险最小化(VRM)原则的数据增强方法,使用线性插值得到新样本数据。

在邻域风险最小化原则下,根据特征向量线性插值将导致相关目标线性插值的先验知识,可得出简单且与数据无关的mixup公式:

其中(xn,yn)是插值生成的新数据,(xi,yi) 和 (xj,yj)是训练集中随机选取的两个数据,λ的取值满足贝塔分布,取值范围介于0到1,超参数α控制特征目标之间的插值强度。

mixup的实验丰富,实验结果表明可以改进深度学习模型在ImageNet数据集、CIFAR数据集、语音数据集和表格数据集中的泛化误差,降低模型对已损坏标签的记忆,增强模型对对抗样本的鲁棒性和训练对抗生成网络的稳定性。

mixup处理实现了边界模糊化,提供平滑的预测效果,增强模型在训练数据范围之外的预测能力。

随着超参数α增大,实际数据的训练误差就会增加,而泛化误差会减少。说明mixup隐式地控制着模型的复杂性。随着模型容量与超参数的增加,训练误差随之降低。

尽管有着可观的效果改进,但mixup在偏差—方差平衡方面尚未有较好的解释。在其他类型的有监督学习、无监督、半监督和强化学习中,mixup还有很大的发展空间。

小结:mixup、SMOTE、SamplePairing三者思路上有相同之处,都是试图将离散样本点连续化来拟合真实样本分布,但所增加的样本点在特征空间中仍位于已知小样本点所围成的区域内。但在特征空间中,小样本数据的真实分布可能并不限于该区域中,在给定范围之外适当插值,也许能实现更好的数据增强效果。

更多,欢迎到知乎专栏去投稿与交流,配套资料将放出在github,可扫描二维码进入。

打一个小广告,我的计算机视觉公开课《AI 图像识别项目从入门到上线》上线了,将讲述从零基础到完成一个实际的项目到微信小程序上线的整个流程,欢迎交流捧场。

参考文献:

[1] Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16(1):321-357.

[2] Inoue H. Data Augmentation by Pairing Samples for Images Classification[J]. 2018.

[3] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.

如果想加入我们,后台留言吧

微信

Longlongtogo

公众号内容

1 图像基础|2 深度学习|3 行业信息

往期精彩

【深度学习图像项目实战-从入门到上线1】怎样学会科学的调研并启动一个项目

【技术综述】如何Finetune一个小网络到移动端(时

空性能分析篇)

【技术综述】计算机审美,学的怎么样了?

【干货·课程】言有三的深度学习从入门到上线课程

[综述类] 一文道尽深度学习中的数据增强方法(上)相关推荐

  1. 深度学习中的数据增强(上)

    feic非[技术综述] 深度学习中的数据增强(上) - 知乎 https://zhuanlan.zhihu.com/p/38345420 [技术综述]深度学习中的数据增强(下) - 知乎 https: ...

  2. 【技术综述】深度学习中的数据增强方法都有哪些?

    很多实际的项目,我们都难以有充足的数据来完成任务,要保证完美的完成任务,有两件事情需要做好:(1)寻找更多的数据.(2)充分利用已有的数据进行数据增强,今天就来说说数据增强. 作者 | 言有三 编辑 ...

  3. 深度学习中图片数据增强方法

    简 介: 在深度学习中需要对图像进行不同的处理.本文对比了基于Numpy以及Paddle.vision.transforms函数中对于图片处理的效果. 关键词: 图像预处理,cv2,paddle #m ...

  4. 深度学习中的数据增强方法

    对于较深层次的深度神经网络,其性能会随着训练数据的提升而进一步提升. 目前深度学习方法广泛采用的数据增强方法,主要有: multi-scale:多尺度: translate:平移,[-6, -6],左 ...

  5. 【技术综述】深度学习中的数据增强(下)

    文章首发于微信公众号<有三AI> [技术综述]深度学习中的数据增强(下) 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  6. gan 总结 数据增强_深度学习中的数据增强(下)

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  7. 总结 62 种在深度学习中的数据增强方式

    数据增强 数据增强通常是依赖从现有数据生成新的数据样本来人为地增加数据量的过程 这包括对数据进行不同方向的扰动处理 或使用深度学习模型在原始数据的潜在空间(latent space)中生成新数据点从而 ...

  8. 深度学习中常用数据预处理方法

    数据归一化处理,比较简单公式为 (x-min)/(max-min),主要目的是将数据的范围缩小至0-1之间,因而对数据绝对值的大小不敏感 2.数据标准化处理,也比较简单,公式为(x-avg)/sigm ...

  9. 如何系统性掌握深度学习中的数据使用

    数据是深度学习系统的输入,对深度学习的发展起着至关重要的作用,但是又容易被很多人忽视,尤其是缺少实战的理论派. 今天便来谈谈这个问题,同时介绍一个好的学习社区供大家讨论与提升. 文/编辑 | 言有三 ...

最新文章

  1. .net 2.0 点击按钮用js控制是否回发关于vs2005的webproject补丁
  2. SCOI2018 退役记
  3. MySQL数据库:完整性约束
  4. windows下mysql安装失败的一个解决案例
  5. 【DICOMDIR专题】DICOMDIR基础知识及常见问题汇总
  6. Java中父子类引用的理解
  7. dojo省份地市级联之省份Dao实现类(五)
  8. 尚硅谷 模拟w3school首页导航条练习
  9. 2的次方表(1~64次方)
  10. 基于Vue3在线商城(Vue3+VueCLI+VueRouter+vuex+axios+Bootstrap)
  11. [办公自动化]目录修改以及插入分页符后行间距自动变宽
  12. 后台界面也可以很酷!31个高大上的后台管理系统模版
  13. 可视化设计之迷失扁平化风潮
  14. 计算机软件是互联网行业吗,中国十大热门专业 互联网行业位居第一
  15. 黑苹果双系统时间不一致_黑苹果与Windows系统时间不对(不同步)的解决办法...
  16. java实现苹果和虫子2
  17. 在UE4中改变枢轴位置
  18. 配置失败还原请勿关闭计算机,win7系统遇到更新失败提示“配置windwos update 失败还原更改,请勿关闭计算机”的解决方法...
  19. python爬虫之静态网页(以当当网图书畅销榜榜为例)
  20. oracle时间相减

热门文章

  1. 【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh)
  2. 信息系统项目管理知识--项目成本管理
  3. 【深入Java虚拟机JVM 04】JVM内存溢出OutOfMemoryError异常实例
  4. 01 ORA系列:ORA-00904 标识符无效 invalid identifier
  5. .sql文件如何执行_Excel如何运行可执行文件,别急,用过vba Shell函数的都知道
  6. 跟我打卡LeetCode 58最后一个单词长度59螺旋矩阵Ⅱ60排列序列
  7. 数据结构与算法——二叉平衡树(AVL树)详解
  8. C语言中单目运算符的结合方向是,C语言运算符的结合性
  9. xp mysql字符集与乱码_mysql字符集(GBK、GB2312、UTF8)与中文乱码的原因及解决
  10. 项目实战丨某家具公司机房改造方案