数据增强你知道多少?

搭噶好,我系小log。读博路漫漫,为了排遣寂寞,我觉得养成一个轻科普的习惯,这是“log带你读论文”系列第一弹,欢迎大家踊跃提问,积极交流,不吝赐教!

对深度学习有所了解的人可能都知道,当前大部分所谓的“AI算法”其实本质上都是数据驱动的。也就是说你给我足够多的数据,我就能拟合出足够准确的模型。这种模式也决定了深度学习的一个天生短板——数据量不足

拿图像分类来说,完成一个分类网络,需要的不仅仅是大量的图片,而是大量“带标签”的图片。也就是说,每一张图片,都需要人工事先给他打上标签,作为神经网络的“教材”,它才能开始学习。可以说,在大部分情况下,数据的质量直接决定了模型的好坏,很多低端AI公司之间的竞争在一定程度上就是在建立数据集上的竞争。比如我现在实习的上海云济科技有限公司,搞医疗图像处理的,大部分精力花在请医生做标注上……学生笨,教材凑……

但是,人力毕竟有限,每一个带标签的数据都是真金白银……所以说,想办法减小训练模型需要的数据量,是有相当大的意义的。

在图像问题上,大家最开始用的就是非常基础的——加噪音、裁剪、翻转和镜像。

加噪音:在原来图像上加一些随机生成的“误差”,就能构成新的图片。比如左右两张图就不一样……右边在左边的基础上加了噪音

裁剪:在原来的图片上随机截取一部分,作为新的样本

翻转和镜像:把原图沿x轴或者y轴翻转来形成新的样本

那么问题来了,这些新增的图片标签是啥?一般都是假设新增的图片和原图是属于同一类的……emmm,说它是个假设,就是因为它没法证明,凭人的主观意识这么认为的

但是,这些传统方法是有局限性的。比如,对于手写字体,“6”翻转之后就成了“9”,标签不一样了,就不能用这种方法生成新的样本;对于裁剪,我来举个栗子……

上面的标签是鸟,下面是截取的一部分,标签显然就变了

对于加噪音,就比较有趣了。先来个栗子

这张图的标签是海龟,现在我来加一个噪音

右边是加的噪音可视化之后的样子,左边是加了噪音之后的图,是不是看起来没变多少,但是这个图的被网络分到了虎鲸这一类……也就是说加噪音会很真实的影响网络……很多人可以利用这个特征来欺骗一些自动化的设备,比如人脸识别,给自己的照片加一点噪音,人眼无法发现区别,但是就能和另一个匹配上,从而做到冒名顶替,是不是很可怕……

除了这几种显而易见的方法,其实加正则项,还有batch normalization都算是数据增强,广义上说,任何防止网络过拟合的方法都是数据增强——减小网络容量或者增多数据,效果是一样的。比如还有我们常用的迁移学习,用一些公开数据集上训练好的模型来初始化自己的模型,这样也能减少自己需要的数据集,因为网络已经在大量数据上训练过了,我只需要少量数据做些微调……

除了传统的方法,现在很多人提出了生成式的模型,就是构造一个网络,我自己生成新的样本,简单点说就是伪造数据——data make upper……物理实验常用手段?

这里举两个栗子:

一个是从无到有,就是直接从随机序列出发,用已有的样本为训练目标,来构造新的样本。

网络结构和一般的GAN差不多,给定noise和class之后,就能通过G这个网络生成伪造的数据集。A用来区分真假,和G对抗训练,C用来判定类别,也就是我们最终想要的一个分类器。

这里是要联合训练的,就是说A、C、G三个网络一起训练,而不是单独训练好G事先生成样本。

还有一种方法是用原来的图片合成新的图片——在同一类里任选多张,生成新的图片。

A用来合成,B是目标分类器。这个比较有意思,给大家看个栗子:

最左边是张口睁眼,中间是睁眼闭嘴,合成右边一张图是闭眼张口……

这种生成式的方法虽然看起来比较炫酷,但是其实效果一般,不一定能提高B的分类准确率,甚至有的时候会导致B分类效果更差

我就是用的多张图片合成一张的方法来做的数据增强,结果分类效果反而更差了……

我做的是肺病分类,总共八类,数据有三万多张,但是他们少了……我先用类似VGG的网络训练了一个分类器,准确率有92.34%,貌似还不错,然后在前端加了一个生成网络,用两张图片合成一张图片,生成的图片和原图之间的loss用的VGG预训练模型做的perceptual loss……结果正确率只有84%……意料之中,因为原论文里也说了,这个不一定……

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180617G1HJZ300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券