zoukankan      html  css  js  c++  java
  • 【技术综述】一文道尽深度学习中的数据增强方法(下)

    【技术综述】一文道尽深度学习中的数据增强方法(下)

     

    深度学习中的数据增强方法的下篇。我们将从以下几个方向入手。1,介绍一下什么是无监督的数据增强方法。2,简单介绍一下GAN生成数据的应用。3,介绍一下AutoAugment为代表的网络自动学习数据增强策略的方法。4,总结。

    00 什么是无监督数据增强方法

    我们先看看什么是有监督的数据增强方法。它指的是生成的图片,是在已有的图片上直接做简单的几何变换,像素变化,或者简单的图片融合,如下。

     
     

    上面的增强方法,都是由使用者完全定义的。然而,不是所有的任务都适合所有的数据增强方法。

    比如数字识别,就不适合做太大角度的旋转。不然,9和6就分不开了。

     

    人脸姿态,就不适合做翻转,不然左右分不清。

     

    那什么是无监督的方法呢?

    包括两类:

    (1)通过模型学习数据的分布,随机生成与训练数据集分布一致的图片,代表方法,GAN【1】。     

    (2)通过模型,学习出适合当前任务的数据增强方法,代表方法,AutoAugment【2】。

    下面分别讲述。

    01 GAN

    1.1 什么是Gan 

    generative adversarial networks,译名生成对抗网络 ,它包含两个网络,一个是生成网络,一个是对抗网络,基本原理如下:

    (1)G是一个生成图片的网络,它接收随机的噪声z,通过噪声生成图片,记做G(z) 。     

    (2)D是一个判别网络,判别一张图片是不是“真实的”,即是真实的图片,还是由G生成的图片。

     

    如上图,原理非常简单,至于更多的数学,训练等细节,留待以后专题,毕竟这里主要介绍数据增强方法的使用。

    1.2 Gan应用 

    DCGAN【3】作为第一个比较实用的Gan,生成手写数字的效果还是不错的。

     

    它的生成器的网络结构也比较简单,如下。

     

    关于更多细节,以后再专门讲。我们看看生成的一些嘴唇的数据,这是真实项目中使用的。

     

    现在生成效果最惊艳的来自于nvidia【4】,利用从小分辨率到大分辨率逐步提升的办法,看看结果吧。

     

    Gan学习的是数据分布,下面我们讲讲另一种思路。

    02 AutoAugment

    虽然这是一篇论文,但是也可以看作一个研究方向。

    它的基本思路:使用增强学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法。

    1.1 原理

    我们直截了当,流程如下。

    1:准备16个数据增强操作。

    2 : 从16个中选择5个操作,随机产生使用该操作的概率和幅度,将其称为一个sub-policy,一共产生5个sub-polices。

    3:每一个batch中的图片,随机采用5个sub-polices操作中的一种。

    4:通过childmodel在验证集上的泛化能力来反馈,使用增强学习方法。

    5:经过80~100个epoch后开始有效果,能学习到sub-policies。

    6:串接这5个sub-policies,然后再进行最后的训练。

    文章中用到的16个操作如下:

     

    大致原理就是这样,数据增强都是已有的操作,学习到的就是组合的策略,更多训练细节可以看原文。

    1.2 实际效果 

    我们看两个例子。

    第一个是SVHN门牌图像识别,下面是学习到的图像增强操作。

     

    从上面可以知道,AutoAugment学到了侧重于剪切和平移等几何变换,同时学会了颜色反转。

    再看一个imagenet的分类任务。

     

    从上面可以看出,AutoAugment不使用剪切,也不完全反转颜色,因为这些变换会导致图像失真。相反,AutoAugment 侧重于微调颜色和色相分布。

    效果还不错对吧。还有没有其他的一些方法呢?有的,我们再举一个例子吧。

    Smart Augmentation【5】,它学习到的就是组合多张图片的策略,框架如下:

     

    下面是一个具体的例子,第一张图是后面两张图的组合。

     

    针对具体任务进行自适应数据增强,这是一个很好的研究方向,期待后续的研究。

    03 总结

    下面对数据增强这两次的分享做一个总结,数据增强是为了增强模型的泛化能力,那它与dropout,weight decay有什么区别?

    weight decay,dropout,stochastic depth等方法,是专门设计来限制模型的有效容量的,用于减少过拟合,它们是显式的规整化方法。研究表明这一类方法可以提高泛化能力,但并非必要,且能力有限,而且参数高度依赖于网络结构等因素。

    数据增强则没有降低网络的容量,也不增加计算复杂度和调参工程量,是隐式的规整化方法。实际应用中更有意义,所以我们常说,数据大于天。

  • 相关阅读:
    LRUK算法例子
    php socket编程入门例子
    之前做的一个leetcode的题目记录下(留个纪念)
    php防范时序攻击的办法
    python使用es的例子(记录下)
    mysql随机抽取一定数量的记录
    go module包管理学习笔记
    nginx location匹配规则
    解决go get卡住的问题(转)
    supervisor 学习笔记(转)
  • 原文地址:https://www.cnblogs.com/yumoye/p/10510916.html
Copyright © 2011-2022 走看看