对抗学习之Learning from Simulated and Unsupervised Images through Adversarial Training

来源:互联网 发布:ipad画图软件免费 编辑:程序博客网 时间:2024/05/17 01:01
今天讲一篇cvpr2017的best paper,不是大家熟知的densely connect,是苹果的Learning from Simulated and Unsupervised Images through Adversarial

Training,用GAN来做对抗学习的。

Motivation:

      搞数据一直是深度学习的老大难问题,也是工业界优势于学术界的地方,需要花钱标很多数据,然后不需要那么多trick网络训练效果就能很好,加数据一直是个稳定有效的方式。但是即使有钱标注数据,还是需要比较长的时间周期,而且有些数据还需要人肉采集之后才能标注(比如特定的人脸),所以怎么能生成逼真的训练数据是个很有价值的工作了。这个文章就是来想办法通过有监督和无监督信息来生成很真实的图片数据,并且基于这些数据做训练得到更好的效果,主要的贡献就在于以计算合成的图片为输入通过GAN使其更像一个真实图片,去除artifact。

基本原理:

      Simulated+Unsupervised learning with GAN, 其目标在于经过GAN网络之后图片更像真实的图片(Lreal),而且同时保留simulated中的标注信息(Lreg):

       

      整个网络的结构设计如下,一个D网络用非监督的数据来判别是否为生成的图像,这个比较好理解就是普通的GAN做的事情,为了保留simulater的一些先验信息,所以又要求refine之后的图像得和synthetic出来的图像要相似,最后的loss如公式4,加了个L1的loss,意图在于希望比较稀疏的改变一些pixel,而不要整个图都飞掉变成和真实图片平均值一样的结果。

      

         除此之外,作者还设计了一个机制是除了整张图训练D网络之外,还把图片分成不同的patch,让每个patch在refine之后都要更像真实样本,方式上是改变输出一个概率为输出一个概率map,最后的loss是把w*h个loss加起来。不过这个地方paper里没有讲清楚具体的过程,我理解的是把一个input分成w*h个patch,然后每个patch都输入到D做训练最后在加起来,具体的实现上不知道怎么能一个网络D对不同的patch做处理最后输出probability map,欢迎大家讨论。

        

        最后还有一个机制用来解决对抗训练中D总是接收当前iteration的G的输出,而D应该对各种G的输出都有比较好的泛化能力,所以作者提出了一个buffer的概念,buffer里面存放了之前的G生成的样本,每次训练D的时候mini-batch里面一半的样本来自于buffer,一半来自于最新生成的G。每次迭代G的时候把buffer里面的一半样本换成最新的G生成的(这个是指数型衰减,会不会还是泛化性不太好)。最后整个训练流程如下图,交替训练G和D

       

实验结果

         Gaze:

                  用UnityEyes simulator生成的214K眼睛图片训练,在MPIIGaze dataset上评测,G网络是4个residual block的网络,D网络是个类似alexnet的小fcn,gaze estimation是个5层卷积3层全连接的网络。一些结果如下,肉眼看上去更真实人也比较难分辨,另外就是确实在gaze的预测上会更好。另外就是buffer的方式对结果影响非常大,肉眼看上去比较假而且gaze预测上会变成12.2,GAN到目前看起来都还是trick当道。

       


            手势的结果不贴了,结论差不多,值得注意的是local adversarial的结果只在手势上对比了而且给的结果比较粗糙,始终没讲清楚这个结构和效果到底是怎么样,ablation部分的篇幅也很小,好像没来得及做实验或者不想讲的很清楚。

总结

     是个很好的idea来生成训练样本,对人脸的很多任务都有极大的参考价值,用来生成不同pose、光照的数据都可以尝试类似的方法,在一些细节上讲的不是很清楚,有些人对于这个能得best paper也比较质疑。整体上来看只能说提供了一些训练的trick,希望会比较实用。


阅读全文
0 0