快捷搜索:  汽车  科技

gan神经对抗网络教程(生成对抗网络GAN系列三)

gan神经对抗网络教程(生成对抗网络GAN系列三)论文:https://arxiv.org/abs/1703.00848代码:https://github.com/mingyuliutw/UNITUNIT提出了一个无监督图像到图像平移的一般框架。展示了在训练数据集中,在没有任何对应图像的情况下,将图像从一个域转换到另一个域。UNIT在各种具有挑战性的非监督图像翻译任务比如街景图像翻译、动物图像翻译和人脸图像翻译等,给出高质量的图像翻译结果。后续又出了很多改进的版本比如MUNIT/DRIFT:MUNIT:UNIT的扩展,UNIT认为不同的数据集可以共享同一个隐空间,而MUNIT更进一步,他认为他们能够共享的这个空间叫做内容空间(content),而同时他们应该存在着一种彼此差异的空间,他将这个称作风格空间(style)。DRIT:提出了一种基于非纠缠表示的方法来产生不同的输出,而不需要成对的训练图像。在high-level上与MUNIT的思

GAN自从2014被提出后进展迅猛,相关论文大量涌现,仅仅The GAN Zoo记录的2018年以前就有500多篇。大体在几个方向不断改进:

  • 模型自身的理论的改进:模型改进一方面主要解决原始GAN存在的问题,比如模式崩塌、训练不稳定等,如WGAN;另一方面主要解决如何生成高质量的图片的问题(从最开始的28x28到后来的1024x1024),如PGGAN、BigGAN、StyleGAN系列等;
  • 模型应用:主要是在图像翻译(Image-to-Image Translation),如Pix2Pix、CycleGAN、FUNIT、UNIT、MUNIT、DRIT、SPADE等,图像翻译是GAN铺开应用的第一步,跨模态间的转换,文本到图像、文本到视频、语音到视频等;
  • 数据:从最开始的低质量的数据,如MNIST、CIFAR-10到FFHQ、LSUN,从有监督的图像翻译需要成对的数据(pix2pix),到无监督度不需要成对的数据(UNIT、MUNIT),从需要大量数据,到通过数据自适应增强的方式(StyleGAN-ADA),可以在小规模数据上训练比较好的模型,甚至只用单张图片即可训练(SinGAN),对数据的依赖性越来越低

本文大体梳理下GAN的发展脉络,在成百上千的模型中,列出一些重要的里程碑性的进展:

2014年6月:(GAN)Generative Adversarial Nets

论文:https://arxiv.org/abs/1406.2661
代码:https://github.com/goodfeli/adversarial

2014年Ian Goodfellow作为第一作者发表论文Generative Adversarial Nets,GAN正式出现。当时实验GAN的效果用的非常简单的数据集(MNIST、CIFAR-10等),可以看出生成图片分辨率很低,效果还很粗糙。

gan神经对抗网络教程(生成对抗网络GAN系列三)(1)

2014年11月:(CGAN)Conditional Generative Adversarial Nets

论文:https://arxiv.org/abs/1411.1784
代码:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cgan/cgan.py
简称CGAN或ConditionGAN,可以生成指定条件的样本。原始的GAN生成是没有方向的,一个随机向量进去,会随机出一个结果,而条件生成网络,可以生成指定条件的样本。以MNIST手写数字集为例,原始GAN可以任意生成0-9的数字。但是如果我们想指定生成的样本呢?譬如指定生成1或者2,就可以通过指定c(condition)来完成。CGAN在生成器和判别器中引入条件变量c(可以是标签、文本或其他数据),利用额外的信息来影响数据生成过程,为模型添加条件。
CGAN以后的一些改进模型,比如:
ACGAN:与同时获取图像和类标签作为输入的cGAN不同,ACGAN中的鉴别器只接收图像。对其进行了修改,以区分真假数据并重建类别标签。因此,除真假判别外,该判别器还利用辅助解码器网络预测图像的类别标签。
VACGAN:ACGAN的主要问题是它将分类器和判别器的损失混合为单一的损失,从而影响训练收敛。VACGAN通过在鉴别器上并行引入一个分类器网络来分离分类器损失。
Info-GAN:将输入的潜在空间分割为标准噪声向量z和附加的潜在向量c,再利用潜在向量c与生成图像G(z c)之间的互信息最大化,从而对潜在向量c进行有意义的非纠缠表示额外问网络。
SC-GAN:通过添加潜在向量c和生成图像G(z c)之间的相似性约束来学习无纠缠潜在表示。Info-GAN使用一个额外的网络来学习解缠表示,而SC-GAN只对标准GAN增加了一个额外的约束,简化了Info-GAN的架构。

gan神经对抗网络教程(生成对抗网络GAN系列三)(2)

2015年11月:(DCGAN)Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

论文:https://arxiv.org/abs/1511.06434
代码:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dcgan/dcgan.py
DCGAN将卷积网络引入到生成式模型当中来做无监督的训练,利用卷积网络强大的特征提取能力来提高生成网络的学习效果。DCGAN的原理和GAN对抗生成是一样的,只是把GAN的G和D换成了两个卷积神经网络,特点包括:1)去掉全连接层,使网络变为全卷积网络,G网络中使用ReLU作为激活函数,最后一层使用tanh,D网络中使用LeakyReLU作为激活函数;2)取消所有pooling层,G网络中使用转置卷积进行上采样,D网络中用加入stride的卷积代替pooling;3)使用Batch Normalization稳定学习过程。

gan神经对抗网络教程(生成对抗网络GAN系列三)(3)

2016年11月:(pix2pix)Image-to-Image Translation with Conditional Adversarial Networks

论文:https://arxiv.org/abs/1611.07004
代码:https://github.com/phillipi/pix2pix
pix2pix是一个条件生成对抗网络(CGAN),可以说是用于解决图像到图像的翻译(Image Translation)问题的鼻祖。GAN由一个具有U-Net架构的Generator和一个PatchGAN分类器组成。pix2pix模型不仅学习了从输入图像到输出图像的映射,而且构造了一个损失函数来训练这种映射。不同于常规的gan,没有随机噪声矢量输入到pix2pix生成器。生成器学习从输入图像x到输出图像G(x)的映射。鉴别器的损失函数是传统的对抗损失函数。Generator使用伴随生成图像与真实图像或目标图像之间的像素距离损失进行训练。损失鼓励为特定输入生成的图像尽可能地保持与相应的输出真实或地面真实图像相似。

gan神经对抗网络教程(生成对抗网络GAN系列三)(4)

2017年1月:(WGAN)Wasserstein GAN

论文:https://arxiv.org/abs/1701.07875
代码:https://github.com/martinarjovsky/WassersteinGAN
原始GAN训练非常不稳定,容易模式崩溃。WGAN从理论上解释了GAN训练不稳定的原因,即交叉熵不适用于测量部分不相交的分布之间的距离。因此,WGAN提出了一种新的距离测量方法Earth Moving distance,是指将概率分布q转换为p的最小传输质量。与KL散度和JS散度相比,Wasserstein距离的优势在于即使两个分布不重叠,Wasserstein距离仍然可以反映它们的距离。
WGAN具体的改进包括:1)判别器最后一层去掉sigmoid;2)生成器和判别器的loss不取log;3)每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c;4)不用基于动量的优化算法(包括momentum和Adam),推荐RMSProp或SGD。

gan神经对抗网络教程(生成对抗网络GAN系列三)(5)

2017年3月:(UNIT)Unsupervised Image-to-Image Translation Networks

论文:https://arxiv.org/abs/1703.00848
代码:https://github.com/mingyuliutw/UNIT
UNIT提出了一个无监督图像到图像平移的一般框架。展示了在训练数据集中,在没有任何对应图像的情况下,将图像从一个域转换到另一个域。UNIT在各种具有挑战性的非监督图像翻译任务比如街景图像翻译、动物图像翻译和人脸图像翻译等,给出高质量的图像翻译结果。
后续又出了很多改进的版本比如MUNIT/DRIFT:
MUNIT:UNIT的扩展,UNIT认为不同的数据集可以共享同一个隐空间,而MUNIT更进一步,他认为他们能够共享的这个空间叫做内容空间(content),而同时他们应该存在着一种彼此差异的空间,他将这个称作风格空间(style)。
DRIT:提出了一种基于非纠缠表示的方法来产生不同的输出,而不需要成对的训练图像。在high-level上与MUNIT的思路是完全一样的,都是共享content space(内容空间),独享attribute space (属性空间,MUNIT叫风格空间)。可以在不需要成对训练数据的情况下,在广泛的任务中生成多样的和逼真的图像。

gan神经对抗网络教程(生成对抗网络GAN系列三)(6)

gan神经对抗网络教程(生成对抗网络GAN系列三)(7)

2017年3月:(CycleGAN)Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

论文:https://arxiv.org/abs/1703.10593
代码:https://github.com/junyanz/CycleGAN
图像到图像翻译的目标是学习输入图像和输出图像之间的映射,使用对齐图像对的训练集。然而,对于许多任务,无法获得成对的训练数据。CycleGAN提出了一种学习将图像从源域X转换到目标域Y的方法,不需要成对的样本。它的目标是学习映射G:X→Y,使来自G(X)的图像分布与使用对抗损失的分布Y难以区分。由于这个映射是高度欠约束的,CycleGAN将它与一个逆映射F:Y→X耦合,并引入一个循环一致性损失来推动F(G(X))≈X(反之亦然)。在不存在成对训练数据的情况下在风格转移、对象变形、季节转移、照片增强等任务上都取得了不错的结果。

gan神经对抗网络教程(生成对抗网络GAN系列三)(8)

2017年10月:(Progressive GAN)Progressive growing of Generative Adversarial Networks

论文:https://arxiv.org/abs/1710.10196
代码:https://github.com/tkarras/progressive_growing_of_gans
简称Progressive GAN或PGGAN或ProGAN,通过一种渐进式的结构,逐步增加生成器和鉴别器:从低分辨率开始,添加新的层,随着训练的进展,建模越来越精细的细节。这既加快了训练的速度,又极大地稳定了训练,首次实现了1024x1024的人脸图像的生成。
这里的直观感受是,生成4x4图像比生成1024x1024图像更容易。此外,将16x16图像映射到32x32图像比将2x2图像映射到32x32图像更容易。因此,Progressive GAN首先训练一个4x4生成器和一个4x4鉴别器,并在随后的训练过程中添加相应于更高分辨率的层。当然,由于是渐进式的,所以相当于要串联地训练很多个模型,所以训练也很慢。

gan神经对抗网络教程(生成对抗网络GAN系列三)(9)

2017年11月:(StarGAN)Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation

论文(v1):https://arxiv.org/abs/1711.09020
代码(v1):https://github.com/yunjey/StarGAN
论文(v2):https://arxiv.org/abs/1912.01865
代码(v2):https://github.com/clovaai/stargan-v2
StarGAN可以只使用一个模型就可以在多个领域执行图像到图像的转换,是一个单一的框架,满足生成图像的多样性和跨多个域的可扩展性。StarGAN之前的方法在处理两个以上的域时扩展性和鲁棒性有限,因为每一对图像域都需要独立构建不同的模型。 StarGAN的这种统一模型架构允许在单个网络中同时训练多个具有不同域的数据集,翻译图像的质量优于现有模型,同时可以灵活地翻译输入图像到任何期望的目标域的新能力。实验证明了该方法在人脸属性转移和面部表情合成任务中的有效性。

gan神经对抗网络教程(生成对抗网络GAN系列三)(10)

2018年5月:(SAGAN)Self-Attention Generative Adversarial Networks

论文:https://arxiv.org/abs/1805.08318
代码:https://github.com/heykeetae/Self-Attention-GAN
SAGAN允许注意力驱动的远程依赖建模的图像生成任务。传统卷积gan在低分辨率特征地图中仅通过空间局部点的函数生成高分辨率细节。在SAGAN中可以使用来自所有特征位置的线索生成细节。此外,鉴别器可以检查图像的远处部分的高度详细的特征是否彼此一致。同时SAGAN也使用了谱归一化(spectral normalization)来改善生成器的稳定性,提升训练效果。

gan神经对抗网络教程(生成对抗网络GAN系列三)(11)

2018年9月:(BigGAN)Large Scale GAN Training for High Fidelity Natural Image Synthesis

论文:https://arxiv.org/abs/1809.11096
代码:https://github.com/ajbrock/BigGAN-PyTorch
DeepMind团队提出BigGAN模型是基于ImageNet生成图像质量最高的模型之一。作为GAN发展史上大力出奇迹的代表之一,将精度作出了跨越式提升,实现了ImageNet等复杂数据集中成功生成高分辨率、多样化样本的目标。BigGAN引入了各种技术,以克服在跨越许多机器的大批量训练GAN时的不稳定性,包括:1)使用 SAGAN 作为基线,并添加了谱归一化(Spectral Normalization)特征作为输入;2)将批大小提升了 50%,通道数提升了 20%,同时了截断方法来提升样本的质量;3)在新的数据集 JFT-300 上进行训练,这是一个类似于 ImageNet 的数据集,有 3 亿张图片。

gan神经对抗网络教程(生成对抗网络GAN系列三)(12)

2019年5月:(SinGAN)Learning a Generative Model from a Single Natural Image

论文:https://arxiv.org/abs/1905.01164
代码:https://github.com/tamarott/SinGAN
SinGAN可以从单个自然图像训练生成模型,然后从给定的图像生成随机样本,模型经过训练以捕获图像中斑块的内部分布,然后能够生成高质量、不同的样本,这些样本携带与图像相同的视觉内容。SinGAN包含一个由完全卷积GAN组成的金字塔,每个GAN负责在图像的不同尺度上学习补丁分布。这允许生成任意大小和纵横比的新样本,具有显著的变化,同时保持训练图像的全局结构和精细纹理。与之前的单图像GAN方案相比,我们的方法不局限于纹理图像,也没有条件,即可以从噪声中生成样本。

gan神经对抗网络教程(生成对抗网络GAN系列三)(13)

2018年12月:(StyleGAN)A Style-Based Generator Architecture for Generative Adversarial Networks

StyleGAN (2018):
论文:https://arxiv.org/abs/1812.04948
代码:https://github.com/NVlabs/stylegan
StyleGAN2 (2019):
论文:https://arxiv.org/abs/1912.04958
代码:https://github.com/NVlabs/stylegan2
StyleGAN2-ADA (2020):
论文:https://arxiv.org/abs/2006.06676
代码(pytorch): https://github.com/NVlabs/stylegan2-ada-pytorch
代码(tensorflow):https://github.com/NVlabs/stylegan2-ada
StyleGAN3 (2021):
论文:https://arxiv.org/abs/2106.12423
代码:https://github.com/NVlabs/stylegan3
可以说是StyleGAN训练GAN来生成图片的巅峰之作,从2018年提出来到现在已经发展到了第三版(StyleGAN3)。目前常见的很多图片编辑、风格转换还有一些生成的逼真的假数据,都是StyleGAN系列或者其变体的生成结果。这个系列源自于Progressive GAN,第一作者都是Tero Karras。
stylegan1:受风格迁移启发,StyleGAN重新设计了生成器网络结构,新的结构可以自动学习、无监督地分离高级属性(例如,当训练人脸时的姿势和身份)和生成的图像中的随机变化(例如,雀斑、头发),并且可以对合成进行直观的、比例特定的控制。
stylegan2:StyleGANv1一个明显的缺陷是生成的图像有时包含斑点似的伪影(artifacts),为解决这个问题,提出了StyleGAN v2。
stylegan-ada:ada全称是adaptive discriminator augmentation。训练生成对抗网络(GAN)使用的数据太少通常会导致鉴别器过拟合,导致训练发散。stylegan-ada提出一种自适应鉴别器增强机制,显著稳定训练在有限的数据制度。该方法不需要更改丢失函数或网络架构,并且在从头开始训练和在另一个数据集中微调现有GAN时都适用。
stylegan3:主要解决StyleGAN2生成的图像细节似乎“粘”在坐标上的现象,原因出自“粗糙”的信号处理过程和神经网络混叠上。StyleGAN3将网络中的所有信号解释为连续的、对架构做了小的更改,以保证不需要的信息不会泄漏到分层合成过程中。保证了图像基本质量的同时,明显改善了其内部的表示方式,即使在亚像素尺度上也能实现绝对的平移和旋转,更适合生成视频和动画。

gan神经对抗网络教程(生成对抗网络GAN系列三)(14)

gan神经对抗网络教程(生成对抗网络GAN系列三)(15)

参考资料
  • https://github.com/OUCMachineLearning/OUCML/tree/master/GAN
  • https://journalofbigdata.springeropen.com/articles/10.1186/s40537-021-00414-0
  • https://github.com/eriklindernoren/PyTorch-GAN
  • https://arxiv.org/ftp/arxiv/papers/2006/2006.05132.pdf
  • https://github.com/sheqi/GAN_Review

猜您喜欢: