生成对抗网络【40】是Goodfelow提出的一个巧妙的生成模型框架。启发自二人零和博弈的生成对抗网络,通过生成器和判别器相互博弈,避开了 传统生成模型训练过程中反复利用马尔科夫链采样以及采用复杂近似概率计算等问题,事实上,任何生成模型都可以按照生成对抗网络的框架搭建和训练,模型的自由度大大提升——在这之前,各种生成模型的训练都是基于某些特定的强假设。但是因为模型的自由度大,直接导致了生成器输出分布和真实数据分布的重叠几乎可以忽略不计,将导致网络难于训练。Mirza等人提出来一个策略,放弃让生成器从完全随机的噪声向量中生成与训练集毫不相关的特定图像,而是在生成器和判别器的输入中加入一些标签帮助指导训练,加入具有指导意义的标签后,生成器的输出分布和输入判别器的真实数据分布将被强制加入的重叠部分,网络的训练变得更具有方向性,变得更加容易。
废话不多说,关于生成对抗网络的历史与发展我就不再多说了,今天只说实现。先放上效果图。
上图是所使用的数据库之一,测试集的一张图片,左边图片是希望生成的笑脸图,右边图片是原始的严肃脸,也就是neutral,换句话说,我希望生成对抗网络学习到从右边严肃脸到左侧笑脸的映射关系,然后下面贴出了生成网络通过右边严肃脸自己生成的笑脸。
这就是通过生成网络中的生成器自己生成的笑脸图片,效果还是可以的,和真实的人脸很相似。我使用的数据库有不同光照下的图片,所以光照强度方面和原图有些许差异,当然还有其它表情的映射也可以做到。比如严肃脸到生气脸等。
放上第二组数据
生成的笑脸如下
再放上两张男神吴彦祖和女神刘亦菲的笑脸生成图,就当成跨库测试了
刘亦菲:
吴彦祖:
关于生成对抗网络的模型参数,我制作的数据库大概有7000张左右,然后每张图片都迭代了30次,batch设置的是1,用一张titanx显卡跑了快两天,最终的模型还是令人满意的,顺便说一句使用生成的笑脸去做检测,效果也还是可以的,达到百分之八十以上,为什么没有更高的原因可以去看看生成对抗网络的原理,里面有提到。关于具体怎么实现,用的什么代码,这篇文章就是给大家展示一下GAN的使用,代码有比较多自己的设计,以后可能会更新.