关于GAN必读的10篇论文

链接:https://juejin.cn/post/6844903885400702983
论文列表:

  1. Generative Adversarial Networks,2014
  2. Conditional GANs,2014
  3. DCGAN,2015
  4. Improved Techniques for Training GANs,2016
  5. Pix2Pix,2016
  6. CycleGAN,2017
  7. Progressively Growing of GANs,2017
  8. StackGAN,2017
  9. BigGAN,2018
  10. StyleGAN,2018
  11. StarGAN,2018

    1. Generative Adversarial Networks

    论文名称:Generative Adversarial Nets
    论文地址: arxiv.org/abs/1406.26…
    “GAN之父” Ian Goodfellow 发表的第一篇提出 GAN 的论文,这应该是任何开始研究学习 GAN 的都该阅读的一篇论文,它提出了 GAN 这个模型框架,讨论了非饱和的损失函数,然后对于最佳判别器(optimal discriminator)给出其导数,然后进行证明;最后是在 Mnist、TFD、CIFAR-10 数据集上进行了实验。
    原始GAN的损失函数:
    代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/gan/gan.py
    https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/1.%20SimpleGAN
    意义:
    创造性的提出了对抗思想的生成网络,开启了一个新的领域;
    之后的后浪,均通过GAN的思想来设计损失函数;
    存在的问题:

  12. 生成器的能力较差,衡量损失是通过JS散度,而原图像和生成图像在高维空间上重合的部分很少,导致没有足够的梯度给生成器优化(W-GAN);

  13. 容易出现模型坍塌,为了骗过鉴别器,生成器会生成真实但是都很相似的图像(熵远远小于原数据集);
  14. 只能还原原数据集,数据库之间的迁移效果不好;
  15. 只能生成分辨率较低的图片;

2. Conditional GANs

论文名称:Conditional Generative Adversarial Nets
论文地址:arxiv.org/abs/1411.17…
如果说上一篇 GAN 论文是开始出现 GAN 这个让人觉得眼前一亮的模型框架,这篇 cGAN 就是当前 GAN 模型技术变得这么热门的重要因素之一,事实上 GAN 开始是一个无监督模型,生成器需要的仅仅是随机噪声,但是效果并没有那么好,在 14 年提出,到 16 年之前,其实这方面的研究并不多,真正开始一大堆相关论文发表出来,第一个因素就是 cGAN,第二个因素是等会介绍的 DCGAN;
cGAN 其实是将 GAN 又拉回到监督学习领域,如下图所示,它在生成器部分添加了类别标签这个输入,通过这个改进,缓和了 GAN 的一大问题—训练不稳定,而这种思想,引入先验知识的做法,在如今大多数非常有名的 GAN 中都采用这种做法,后面介绍的生成图片的 BigGAN,或者是图片转换的 Pix2Pix,都是这种思想,可以说 cGAN 的提出非常关键。
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cgan/cgan.py
损失函数:
image.png
image.png

3. DCGAN

论文名称:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
论文地址:arxiv.org/abs/1511.06…
其实原作者推荐第一篇论文应该是阅读这篇 DCGAN 论文,2015年发表的。这是第一次采用 CNN 结构实现 GAN 模型,它介绍如何使用卷积层,并给出一些额外的结构上的指导建议来实现。另外,它还讨论如何可视化 GAN 的特征、隐空间的插值、利用判别器特征训练分类器以及评估结果。下图是 DCGAN 的生成器部分结构示意图
代码地址:
https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dcgan/dcgan.py
https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/2.%20DCGAN
image.png

4. Improved Techniques for Training GANs

论文名称:Improved Techniques for Training GANs
论文地址:arxiv.org/abs/1606.03…
这篇论文的作者之一是 Ian Goodfellow,它介绍了很多如何构建一个 GAN 结构的建议,它可以帮助你理解 GAN 不稳定性的原因,给出很多稳定训练 DCGANs 的建议,比如特征匹配(feature matching)、最小批次判别(minibatch discrimination)、单边标签平滑(one-sided label smoothing)、虚拟批归一化(virtual batch normalization)等等,利用这些建议来实现 DCGAN 模型是一个很好学习了解 GANs 的做法。

5. Pix2Pix

论文名称:Image-to-Image Translation with Conditional Adversarial Networks
论文地址:arxiv.org/abs/1611.07…
Pix2Pix 的目标是实现图像转换的应用,如下图所示。这个模型在训练时候需要采用成对的训练数据,并对 GAN 模型采用了不同的配置。其中它应用到了 PatchGAN 这个模型,PatchGAN 对图片的一块 70*70 大小的区域进行观察来判断该图片是真是假,而不需要观察整张图片。
此外,生成器部分使用 U-Net 结构,即结合了 ResNet 网络中的 skip connections 技术,编码器和解码器对应层之间有相互连接,它可以实现如下图所示的转换操作,比如语义图转街景,黑白图片上色,素描图变真实照片等。
参考博客:
Pix2Pix.pptx
自己的PPT
损失函数:
image.png
代码地址:
https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/Pix2Pix
https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/pix2pix/pix2pix.py
image.png

6. CycleGAN

论文名称:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
论文地址:arxiv.org/abs/1703.10…
上一篇论文 Pix2Pix 的问题就是训练数据必须成对,即需要原图片和对应转换后的图片,而现实就是这种数据非常难寻找,甚至有的不存在这样一对一的转换数据,因此有了 CycleGAN,仅仅需要准备两个领域的数据集即可,比如说普通马的图片和斑马的图片,但不需要一一对应。这篇论文提出了一个非常好的方法—循环一致性(Cycle-Consistency)损失函数,如下图所示的结构:
损失函数
image.pngimage.png
代码地址
https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cyclegan/cyclegan.py
https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/CycleGAN
这种结构在接下来图片转换应用的许多 GAN 论文中都有利用到,cycleGAN 可以实现如下图所示的一些应用,普通马和斑马的转换、风格迁移(照片变油画)、冬夏季节变换等等。
image.png

7. Progressively Growing of GANs

论文名称:Progressive Growing of GANs for Improved Quality, Stability, and Variation
论文地址:arxiv.org/abs/1710.10…
这篇论文必读的原因是因为它取得非常好的结果以及对于 GAN 问题的创造性方法。它利用一个多尺度结构,从 44 到 88 一直提升到 1024*1024 的分辨率,如下图所示的结构,这篇论文提出了一些如何解决由于目标图片尺寸导致的不稳定问题。
参考博客:
ProGAN:Step by step, better than better - Uno Whoiam的文章 - 知乎 https://zhuanlan.zhihu.com/p/93748098
如何评价NVIDIA新paper:Progressive Growing of GANs? - Adelaide的回答 - 知乎 https://www.zhihu.com/question/67483407/answer/262261947
代码地址
https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/ProGAN
image.png

8. StackGAN

论文名称:StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks
论文地址:arxiv.org/abs/1612.03…
StackGAN 和 cGAN 、 Progressively GANs 两篇论文比较相似,它同样采用了先验知识,以及多尺度方法。整个网络结构如下图所示,第一阶段根据给定文本描述和随机噪声,然后输出 6464 的图片,接着将其作为先验知识,再次生成 256256 大小的图片。相比前面 推荐的 7 篇论文,StackGAN 通过一个文本向量来引入文本信息,并提取一些视觉特征
参考博客:
https://blog.csdn.net/a312863063/article/details/83574422
image.png

9. BigGAN

论文地址:Large Scale GAN Training for High Fidelity Natural Image Synthesis
论文地址:arxiv.org/abs/1809.11…
BigGAN 应该是当前 ImageNet 上图片生成最好的模型了,它的生成结果如下图所示,非常的逼真,但这篇论文比较难在本地电脑上进行复现,它同时结合了很多结构和技术,包括自注意机制(Self-Attention)、谱归一化(Spectral Normalization)等,这些在论文都有很好的介绍和说明。

image.png

10. StyleGAN

论文地址:A Style-Based Generator Architecture for Generative Adversarial Networks
论文地址:arxiv.org/abs/1812.04…
StyleGAN 借鉴了如 Adaptive Instance Normalization (AdaIN)的自然风格转换技术,来控制隐空间变量 z 。其网络结构如下图所示,它在生产模型中结合了一个映射网络以及 AdaIN 条件分布的做法,并不容易复现,但这篇论文依然值得一读,包含了很多有趣的想法。
参考博客
看GAN如何一步步控制图像生成风格?详解StyleGAN进化过程 - 机器之心的文章 - 知乎 https://zhuanlan.zhihu.com/p/133430484
StyleGAN 和 StyleGAN2 的深度理解 - 圆圆要学习的文章 - 知乎 https://zhuanlan.zhihu.com/p/263554045
代码地址
https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/StyleGAN

image.png

11.StarGAN

image.png
image.png
参考视频
https://www.bilibili.com/video/BV1ef4y1v7fF?from=search&seid=11159629965018400023&spm_id_from=333.337.0.0
代码地址
https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/stargan/stargan.py

小结

本文主要介绍了 10 篇值得一读的 GAN 论文,从最开始提出这个模型的论文,到截止至 2018 年的论文,其中既有影响很大的 cGAN 和 DCAN,也有图像转换领域非常重要的 Pix2Pix 和 CycleGAN,还有最近效果非常不错的 BigGAN。
如果是希望研究这个方向的,可以看下这 10 篇论文。另外,再推荐一个收集了大量 GAN 论文的 Github 项目,并且根据应用方向划分论文:

以及 3 个复现多种 GANs 模型的 github 项目,分别是目前主流的三个框架,TensorFlow、PyTorch 和 Keras: