GAN快速入门资料推荐:17种变体的Keras开源代码
sasldk
7年前
<p><img src="https://simg.open-open.com/show/c47f328d2296b6f6af1fe2189998c172.jpg"></p> <p>图片来源:Kaggle blog</p> <p>从2014年诞生至今,生成对抗网络(GAN)始终广受关注,已经出现了200多种有名有姓的变体。</p> <p>这项“造假神技”的创作范围,已经从最初的手写数字和几百像素小渣图,拓展到了壁纸级高清照片、明星脸,甚至艺术画作。</p> <p>心痒难耐想赶快入门?</p> <p>通过自己动手、探索模型代码来学习,当然是坠吼的~如果用简单易上手的Keras框架,那就更赞了。</p> <p>一位GitHub群众eriklindernoren就发布了17种GAN的Keras实现,得到Keras亲爸爸François Chollet在推ter上的热情推荐。</p> <p>干货往下看:</p> <p>https://github.com/eriklindernoren/Keras-GAN</p> <h2>AC-GAN</h2> <p>带辅助分类器的GAN,全称Auxiliary Classifier GAN。</p> <p><img src="https://simg.open-open.com/show/c80f3fa783efcc9690775eba6f28b1e2.jpg"></p> <p>在这类GAN变体中,生成器生成的每张图像,都带有一个类别标签,鉴别器也会同时针对来源和类别标签给出两个概率分布。</p> <p>论文中描述的模型,可以生成符合1000个ImageNet类别的128×128图像。</p> <p>code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/acgan/acgan.py</p> <p>paper:</p> <p>Conditional Image Synthesis With Auxiliary Classifier GANs</p> <p>Augustus Odena, Christopher Olah, Jonathon Shlens</p> <p>https://arxiv.org/abs/1610.09585</p> <h2>Adversarial Autoencoder</h2> <p>这种模型简称AAE,是一种概率性自编码器,运用GAN,通过将自编码器的隐藏编码向量和任意先验分布进行匹配来进行变分推断,可以用于半监督分类、分离图像的风格和内容、无监督聚类、降维、数据可视化等方面。</p> <p>在论文中,研究人员给出了用MNIST和多伦多人脸数据集 (TFD)训练的模型所生成的样本。</p> <p><img src="https://simg.open-open.com/show/2670bd9caeba4eaffb00eda48700c940.jpg"></p> <p>code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/aae/adversarial_autoencoder.py</p> <p>paper:</p> <p>Adversarial Autoencoders</p> <p>Alireza Makhzani, Jonathon Shlens, Navdeep Jaitly, Ian Goodfellow, Brendan Frey</p> <p>https://arxiv.org/abs/1511.05644></p> <h2>BiGAN</h2> <p>全称Bidirectional GAN,也就是双向GAN。这种变体能学习反向的映射,也就是将数据投射回隐藏空间。</p> <p><img src="https://simg.open-open.com/show/201c8e8d7b30765fe157ea0a382e351a.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/bigan/bigan.py</p> <p>Paper:</p> <p>Adversarial Feature Learning</p> <p>Jeff Donahue, Philipp Krähenbühl, Trevor Darrell</p> <p>https://arxiv.org/abs/1605.09782</p> <h2>BGAN</h2> <p>虽然简称和上一类变体只差个i,但这两种GAN完全不同。BGAN的全称是boundary-seeking GAN。</p> <p>原版GAN不适用于离散数据,而BGAN用来自鉴别器的估计差异度量来计算生成样本的重要性权重,为训练生成器来提供策略梯度,因此可以用离散数据进行训练。</p> <p>BGAN里生成样本的重要性权重和鉴别器的判定边界紧密相关,因此叫做“寻找边界的GAN”。</p> <p><img src="https://simg.open-open.com/show/0548a2d3f26eff8e5b3debd032a34ea1.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/bgan/bgan.py</p> <p>Paper:</p> <p>Boundary-Seeking Generative Adversarial Networks</p> <p>R Devon Hjelm, Athul Paul Jacob, Tong Che, Adam Trischler, Kyunghyun Cho, Yoshua Bengio</p> <p>https://arxiv.org/abs/1702.08431</p> <h2>CC-GAN</h2> <p>这种模型能用半监督学习的方法,修补图像上缺失的部分。</p> <p><img src="https://simg.open-open.com/show/371c8c6ddf1b0f702066519a73e40836.jpg"> <img src="https://simg.open-open.com/show/ff0cef77b8d1bf2054756a85fbf30e25.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/ccgan/ccgan.py</p> <p>Paper:</p> <p>Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks</p> <p>Emily Denton, Sam Gross, Rob Fergus</p> <p>https://arxiv.org/abs/1611.06430</p> <h2>CGAN</h2> <p>条件式生成对抗网络,也就是conditional GAN,其中的生成器和鉴别器都以某种外部信息为条件,比如类别标签或者其他形式的数据。</p> <p><img src="https://simg.open-open.com/show/7815aebb8b4bbbf75357332de0eed8bd.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/cgan/cgan.py</p> <p>Paper:</p> <p>Conditional Generative Adversarial Nets</p> <p>Mehdi Mirza, Simon Osindero</p> <p>https://arxiv.org/abs/1411.1784</p> <h2>Context Encoder</h2> <p>这是一个修补图像的卷积神经网络(CNN),能根据周围像素来生成图像上任意区域的内容。</p> <p><img src="https://simg.open-open.com/show/eedba239339a2877318c454518d81b0e.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/context_encoder/context_encoder.py</p> <p>Paper:</p> <p>Context Encoders: Feature Learning by Inpainting</p> <p>Deepak Pathak, Philipp Krahenbuhl, Jeff Donahue, Trevor Darrell, Alexei A. Efros</p> <p>https://arxiv.org/abs/1604.07379></p> <h2>CoGAN</h2> <p>这类变体全名叫coupled GANs,也就是耦合对抗生成网络,其中包含一对GAN,将两个生成模型前几层、两个辨别模型最后几层的权重分别绑定起来,能学习多个域的图像的联合分布。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/cogan/cogan.py</p> <p>Paper:</p> <p>Coupled Generative Adversarial Networks</p> <p>Ming-Yu Liu, Oncel Tuzel</p> <p>https://arxiv.org/abs/1606.07536</p> <h2>CycleGAN</h2> <p>这个模型是加州大学伯克利分校的一项研究成果,可以在没有成对训练数据的情况下,实现图像风格的转换。</p> <p><img src="https://simg.open-open.com/show/98c1481903f4ea897344f73a476a02a0.jpg"></p> <p>这些例子,你大概不陌生:</p> <p><img src="https://simg.open-open.com/show/bfc5d2dda789663b4c4c277e84519aa3.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/cyclegan/cyclegan.py</p> <p>Paper:</p> <p>Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks</p> <p>Jun-Yan Zhu, Taesung Park, Phillip Isola, Alexei A. Efros</p> <p>https://arxiv.org/abs/1703.10593></p> <p>论文原作者开源了Torch和PyTorch的实现代码,详情见项目主页:</p> <p>https://junyanz.github.io/CycleGAN/</p> <h2>DCGAN</h2> <p>深度卷积生成对抗网络模型是作为无监督学习的一种方法而提出的,GAN在其中是最大似然率技术的一种替代。</p> <p><img src="https://simg.open-open.com/show/4f28be5cd01651f1fb0da554edbdc59f.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/dcgan/dcgan.py</p> <p>Paper:</p> <p>Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks</p> <p>Alec Radford, Luke Metz, Soumith Chintala</p> <p>https://arxiv.org/abs/1511.06434</p> <h2>DualGAN</h2> <p>这种变体能够用两组不同域的无标签图像来训练图像翻译器,架构中的主要GAN学习将图像从域U翻译到域V,而它的对偶GAN学习一个相反的过程,形成一个闭环。</p> <p><img src="https://simg.open-open.com/show/a34a0ec4135d1d5d96a213e142083997.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/dualgan/dualgan.py</p> <p>Paper:</p> <p>DualGAN: Unsupervised Dual Learning for Image-to-Image Translation</p> <p>Zili Yi, Hao Zhang, Ping Tan, Minglun Gong</p> <p>https://arxiv.org/abs/1704.02510></p> <h2>GAN</h2> <p>对,就是Ian Goodfellow那个原版GAN。</p> <p><img src="https://simg.open-open.com/show/975e7cb4c67bddf2a1ceabcc2bca1067.jpg"></p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/gan/gan.py</p> <p>Paper:</p> <p>Generative Adversarial Networks</p> <p>Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio</p> <p>https://arxiv.org/abs/1406.2661</p> <h2>InfoGAN</h2> <p>这个变体是GAN的信息论扩展(information-theoretic extension),能完全无监督地分别学会不同表示。比如在MNIST数据集上,InfoGAN成功地分别学会了书写风格和数字的形状。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/infogan/infogan.py</p> <p>Paper:</p> <p>InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets</p> <p>Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel</p> <p>https://arxiv.org/abs/1606.03657</p> <h2>LSGAN</h2> <p>最小平方GAN(Least Squares GAN)的提出,是为了解决GAN无监督学习训练中梯度消失的问题,在鉴别器上使用了最小平方损失函数。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/lsgan/lsgan.py</p> <p>Paper:</p> <p>Least Squares Generative Adversarial Networks</p> <p>Xudong Mao, Qing Li, Haoran Xie, Raymond Y.K. Lau, Zhen Wang, Stephen Paul Smolley</p> <p>https://arxiv.org/abs/1611.04076</p> <h2>Pix2Pix</h2> <p>这个模型大家应该相当熟悉了。它和CycleGAN出自同一个伯克利团队,是CGAN的一个应用案例,以整张图像作为CGAN中的条件。</p> <p>在它基础上,衍生出了各种上色Demo,波及猫、人脸、房子、包包、漫画等各类物品,甚至还有人用它来去除(爱情动作片中的)马赛克。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/pix2pix/pix2pix.py</p> <p>Paper:</p> <p>Image-to-Image Translation with Conditional Adversarial Networks</p> <p>Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A. Efros</p> <p>https://arxiv.org/abs/1611.07004</p> <p>Pix2Pix目前有开源的Torch、PyTorch、TensorFlow、Chainer、Keras模型,详情见项目主页:</p> <p>https://phillipi.github.io/pix2pix/</p> <h2>SGAN</h2> <p>这个变体的全称非常直白:半监督(Semi-Supervised)生成对抗网络。它通过强制让辨别器输出类别标签,实现了GAN在半监督环境下的训练。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/sgan/sgan.py</p> <p>Paper:</p> <p>Semi-Supervised Learning with Generative Adversarial Networks</p> <p>Augustus Odena</p> <p>https://arxiv.org/abs/1606.01583</p> <h2>WGAN</h2> <p>这种变体全称Wasserstein GAN,在学习分布上使用了Wasserstein距离,也叫Earth-Mover距离。新模型提高了学习的稳定性,消除了模型崩溃等问题,并给出了在debug或搜索超参数时有参考意义的学习曲线。</p> <p>本文所介绍repo中的WGAN实现,使用了DCGAN的生成器和辨别器。</p> <p>Code:</p> <p>https://github.com/eriklindernoren/Keras-GAN/blob/master/wgan/wgan.py</p> <p>Paper:</p> <p>Wasserstein GAN</p> <p>Martin Arjovsky, Soumith Chintala, Léon Bottou</p> <p>https://arxiv.org/abs/1701.07875</p> <p>最后补充一点,作者为了让没有GPU的人也能测试这些实现,比较倾向于使用密集层(dense layer),只要在模型中能得出合理的结果,就不会去用卷积层。</p> <p> </p> <p>来自:https://baijia.baidu.com/s?id=1593986547481867618&wfr=pc&fr=ch_lst</p> <p> </p>