编者按:这篇文章是Erik Linder-Norén在GitHub上发布的,用PyTorch实现各种生成对抗网络(GAN)及其变体的合集。这里作者所用的模型架构可能与论文中的略有不同,但重点是其中的核心思想,而不是保证每层的配置都正确。以下是论智对原文的编译,如有不足欢迎提出建议。
安装
Auxiliary Classifier GAN
Adversarial Autoencoder
Boundary-Seeking GAN
Context-Conditional GAN
Conditional GAN
CycleGAN
Deep Convolutional GAN
DiscoGAN
DRAGAN
DualGAN
GAN
LSGAN
Pix2Pix
PixelDA
Semi-Supervised GAN
Super-Resolution GAN
Wasserstein GAN
Wasserstein GAN GP
$ git clone https://github.com/eriklindernoren/PyTorch-GAN
$ cd PyTorch-GAN/
$ sudo pip3 install -r requirements.txt
论文:Auxiliary Classifier Generative Adversarial Network
作者:Augustus Odena、Christopher Olah、Jonathon Shlens
摘要:合成高分辨率且极具真实感的图像在机器学习界一直是个挑战。在这篇论文中,我们介绍了一种新方法,用于训练GANs的图像合成。我们建立了一种GANs的变体,加入了标签条件,可以生成128×128分辨率的图像样本,并具有全局一致性。在原先图像质量评估标准的基础上,我们扩展了两个新的评估条件,分别用于分析图像合成模型中样本的可变性和多样性。分析表明,高分辨率样本图像中含有的分类信息在低分辨率图像中不存在。在ImageNet的1000个类别中,128×128的图像样本的可辨别性是人工调整的32×32的样本图像的两倍。此外,84.7%的类别具有与真实ImageNet数据集相媲美的样本。
论文地址:arxiv.org/abs/1610.09585
代码地址:github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/acgan/acgan.py
运行示例:
$ cd implementations/acgan/
$ python3 acgan.py
论文:Adversarial Autoencoder
作者:Alireza Makhzani、Jonathon Shlens、Navdeep Jaitly、Ian Goodfellow、Brendan Fray
摘要:在这篇论文中,我们提出了“对抗自动编码器(AAE)”,它是基于概率的自动编码器,用最近提出的生成对抗网络的理论通过将自动编码器的隐藏代码向量的聚合后验与任意先验分布进行匹配来进行变分推理。将后验与先验匹配可以保证从先前空间的任何部分生成的都是有意义的样本。最后,对抗自动编码器的解码器学习了一种深层生成模型,该模型将之前的先验映射到数据分布中。我们展示了对抗自动编码器是如何应用于半监督分类、图像风格和内容解析、无监督聚类、降维和数据可视化等应用中的。我们在MNIST、Street View House Numbers和Toronto Face数据集中进行了实验,结果表明对抗自动编码器在生成模型和半监督分类任务中取得了不错的结果。
论文地址:arxiv.org/abs/1511.05644
代码地址:github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/aae/adversarial_autoencoder.py
运行示例:
$ cd implementations/aae/
$ python3 aae.py
论文:Boundary-Seeking Generative Adversarial Networks
作者:R Devon Hjelm、Athul Paul Jacob、Tong Che、Adam Trischler、Kyunghyun Cho、Yoshua Bengio
摘要:生成对抗网络(GANs)是一种学习框架,它通过判断生成图像和目标图像之间的差异来训练。通常人们认为,GAN主要是靠生成完全不同参数的样本,因此不适用于离散数据。我们引入了一种用离散数据训练GAN的方法,该方法用判别器估计的差异来计算生成样本的重要性权重,从而为训练生成器提供策略梯度。重要性权重与鉴别器的决策边界有很强的联系,所以我们称这种方法为boundary-seeking GANs(BGANs)。我们证明了所提出的算法在离散图像下以及基于字符的自然语言生成的效果。此外,boundary-seeking的目标扩展到了连续数据,可用于提高训练的稳定性。我们在Celeba、LSUN的卧室和ImageNet上进行的实验,无需调节。
论文地址:https://arxiv.org/abs/1702.08431
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/bgan/bgan.py
运行示例:
$ cd implementations/bgan/
$ python3 bgan.py
论文:Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks
作者:Emily Denton、Sam Gross、Rob Fergus
摘要:在这篇论文中,我们介绍了一种简单的半监督学习方法,利用对抗损失进行图像的半自动修复。经过随机补丁删除的图像输入生成器中,生成器的任务是根据周围的像素填补空白。修复好的图像再被输入到判别器中,判断它是否是未经改变的真是图像。这项任务充当着鉴别器的标准监督训练的正则化项。利用这种方法,我们可以用半监督的方法直接训练大型VGG风格的网络。评估过程在STL-10和PASCAL数据集上进行,我们的方法达到了与现有方法相媲美、甚至优于现有方法的性能。
论文地址:https://arxiv.org/abs/1611.06430
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/ccgan/ccgan.py
运行示例:
$ cd implementations/ccgan/
$ python3 ccgan.py
论文:Conditional Generative Adversarial Nets
作者:Mehdi Mirza、Simon Osindero
摘要:最近生成对抗网络(GANs)成为训练生成模型的新方法。在这篇文章中,我们介绍了生成对抗网络的传统版本,只需要输入数据就能创建。我们证明这个模型可以根据类别标签生成MNIST数字。我们还说明了该模型是如何被用来学习多模态模型的,以及对图像进行打标签。在我们的方法中,这种打标签的方法可以生成训练标签中没有的描述性标签。
论文地址:https://arxiv.org/abs/1411.1784
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cgan/cgan.py
运行示例:
$ cd implementations/cgan/
$ python3 cgan.py
论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
作者:Jun-Yan Zhu、Taesung Park、Phillip Isola、Alexei A. Efros
摘要:图像到图像的转换是一系列视觉和图形问题,其目标是使用一组对齐的训练图像学习输入图像和输出图像之间的映射。但是对许多任务来说,成对的训练数据往往不可用。我们提出了一种学习方法:在没有配对样本的情况下,将图像从源域X转换到目标域Y。我们的目标是学习映射:G:X→Y,使得G(X)中的图像分布与使用对抗损失的分布Y无法区别。由于这种映射受到严格约束,我们将他与反映射F:Y→X联合起来,并引入一个周期一致性损失推理F(G(X))≈X(反之亦然)。定性结果在多项任务中显示不存在成对的训练数据,包括风格转换、目标变形、季节转换、照片增强等等。我们还对先前方法进行了定量比较,证明我们的方法更优秀。
论文地址:https://arxiv.org/abs/1703.10593
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cyclegan/cyclegan.py
运行示例:
$ cd data/
$ bash download_cyclegan_dataset.sh apple2orange
$ cd ../implementations/cyclegan/
$ python3 cyclegan.py --dataset_name apple2orange
论文:Deep Convolutional Generative Adversarial Network
作者:Alec Radford、Luke Metz、Soumith Chintala
摘要:最近几年,利用CNN实现的监督学习在计算机视觉方面有广泛的应用。与此同时,基于CNN的半监督学习得到的关注较少。在这篇文章中,我们希望缩小CNN监督学习和无监督学习之间的差距。我们引入了一种新的CNN,名为深度卷积生成对抗网络(DCGANs),它具有特定的结构限制,同时我们证明这是无监督学习潜在的好方式。通过在不同的数据集上训练,我们的深度卷积对抗样本学习了生成器和判别器中包括目标物体和场景在内的一系列表示。另外,我们用学习到的特征进行新任务——将他们作为通用图像表示器。
论文地址:https://arxiv.org/abs/1511.06434
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dcgan/dcgan.py
运行示例:
$ cd implementations/dcgan/
$ python3 dcgan.py
论文:Learning to Discover Cross-Domain Relations with Generative Adversarial Networks
作者:Taeksoo Kim、Moonsu Cha、Hyunsoo Kim、Jung Kwon Lee、Jiwon Kim
摘要:人类可以在无监督的情况下轻易地辨认不同域的数据中的差异,但是要学习自动发现这种差异是十分具有挑战性的任务,同时需要大量真实的图像对来表明这种关系。为了减少配对时所需要的经历,我们的研究目标使用给定的未配对数据发现跨域的关系。我们提出了一种基于生成对抗网络的方法,它可以学习发现不同域之间的关系(DiscoGAN)。利用发现的关系,我们提出的网络能成功地将一个域的风格迁移到另一个域中,同时保留关键特征,例如方向或面部特征。
论文地址:https://arxiv.org/abs/1703.05192
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/discogan/discogan.py
运行示例:
$ cd data/
$ bash download_pix2pix_dataset.sh edges2shoes
$ cd ../implementations/discogan/
$ python3 discogan.py --dataset_name edges2shoes
论文:On Convergence and Stability of GANs
作者:Naveen Kodali、Jacob Abernethy、James Hays、Zsolt Kira
摘要:我们提出研究用GAN训练动力学作为遗憾最小化,这与普遍认为的实际分布与生成分布之间存在已知的最小化差异相反。我们从这个新角度分析了GAN训练时的收敛性,以理解为什么模型会发生崩溃。我们假设在这个非凸面博弈中不该出现的局部均衡是造成崩溃的原因。我们观察到,这些局部均衡常常在一些真实数据点周围呈现出判别函数尖锐的梯度。我们证明,这些退化的局部均衡可以用DRAGAN的梯度惩罚方案避免。我们证明了DRAGAN可以加快训练速度,以更少的模式崩溃实现更高的稳定性,并让生成器网络在各种结构和目标函数中实现更佳的建模性能。
论文地址:https://arxiv.org/abs/1705.07215
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dragan/dragan.py
运行示例:
$ cd implementations/dragan/
$ python3 dragan.py
论文:DualGAN: Unsupervised Dual Learning for Image-to-Image Translation
作者:Zili Yi、Hao Zhang、Ping Tan、Minglun Gong
摘要:传统生成对抗网络(GANs)在跨域的图像到图像的转换任务上起到了很大的作用。根据不同任务的复杂程度,大量有标记的图像对需要用来训练传统的GAN。但是,人工手动打标签成本太高,并且也不可能总有大量可用的数据。受到自然语言处理的双学习的启发,我们创建了一种新颖的“双GAN机制”,它能从两个域中未标记的图像里训练图片转换器。在我们的架构中,原始的GAN学习从域U将图像转移到域V,而dual-GAN学习反转这一任务。这种闭环可以让任意域的图像经过转换后再被重建。多个无标记图像转换的任务表明DualGAN的性能优于单个GAN的表现。对于某些任务来说,DualGAN甚至能在标记数据上表现得比传统GAN更好。
论文地址:https://arxiv.org/abs/1704.02510
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dualgan/dualgan.py
运行示例:
$ cd data/
$ bash download_pix2pix_dataset.sh facades
$ cd ../implementations/dualgan/
$ python3 dualgan.py --dataset_name facades
论文:Generative Adversarial Network
作者:Ian J. Goodfellow、Jean Pouget-Abadie、Mehdi Mirza、Bing Xu、David Warde-Farley、Sherjil Ozair、Aaron Courville、Yoshua Bengio
摘要:我们提出了一种用对抗过程评估生成模型的框架,其中我们训练两个模型:生成模型G和判别模型D。生成模型用来捕捉数据的分布,判别模型D用来判断样本图像是来自于D还是G。训练的过程就是G要尽可能地让D犯错误,就像二者的对抗游戏。
论文地址:https://arxiv.org/abs/1406.2661
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/gan/gan.py
运行示例:
$ cd implementations/gan/
$ python3 gan.py
论文:Least Squares Generative Adversarial Networks
作者:Xudong Mao、Qing Li、Haoran Xie、Raymond Y.K. Lau、Zhen Wang、Stephen Paul Smolley
摘要:基于GAN的无监督学习已经取得了巨大的成功,传统GAN假设判别器是一个具有Sigmoid交叉熵损失函数的分类器。然而,我们发现这种损失函数可能会导致学习过程中的梯度消失问题。为了克服这一问题,我们在本文中提出对判别器采用最小平方损失函数。我们证明了最小化LSGAN的目标函数可以最小化Pearson χ2散度。LSGAN比传统GAN有两个好处。首先LSGAN能够生成更高质量的图像。其次,LSGAN在学习过程中表现得更加稳定。
论文地址:https://arxiv.org/abs/1611.04076
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/lsgan/lsgan.py
运行示例:
$ cd implementations/lsgan/
$ python3 lsgan.py
论文:Unpaired Image-to-Image Translation with Conditional Adversarial Networks
作者:Phillip Isola、Jun-Yan Zhu、Tinghui Zhou、Alexei A. Efros
摘要:本文研究的是将条件对抗网络看作图像到图像转换的通用解决方案。这些网络不仅学习从输入图像到输出图像的映射,还学习损失函数来训练这个映射。我们证明这种方法在合成带有标签映射的图像、对象重建以及填色等任务是有效的。自从发布了pix2pix软件,许多用户已经在我们的系统上发布了他们的作品,这进一步证明了它的广泛适用性和易用性,无需调整参数。
论文地址:https://arxiv.org/abs/1611.07004
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/pix2pix/pix2pix.py
运行示例:
$ cd data/
$ bash download_pix2pix_dataset.sh facades
$ cd ../implementations/pix2pix/
$ python3 pix2pix.py --dataset_name facades
论文: Unsupervised Pixel-Level Domain Adaptation with Generative Adversarial Networks
作者:Konstantinos Bousmalis、Nathan Silberman、David Dohan、Dumitru Erhan、Dilip Krishnan
摘要:收集经过标注的图像数据集对机器学习算法来说成本很高。我们提出了一种新方法,以无监督的方式学习像素空间中从一个域到另一个域的变换。我们基于GAN的技术将源域图像调整得像是目标域中的图像。这种方法不仅可以生成高质量图片,而且在无监督领域超越了最先进的技术。
论文地址:https://arxiv.org/abs/1612.05424
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/pixelda/pixelda.py
MNIST到MNIST-M分类
在MNIST数据集上训练一个分类器,这个模型最终于普通方法作比较,并在MNIST-M数据集上评测。最终显示普通模型的分类准确度为55%,在域适应期间训练的分类准确率达95%。
$ cd implementations/pixelda/
$ python3 pixelda.py
论文:Semi-Supervised Generative Adversarial Network
作者:Augustus Odena
摘要:通过强制判别器网络输出类别标签,我们将生成对抗网络扩展到半监督环境。在有N个类别的数据集上训练G和D,在训练期间,D用来预测输入图像属于N+1类别中的哪个,其中添加的额外类别也对应着G的输出。我们证明这种方法可用于创建更高效地数据分类器,并且输出的样品比传统GAN要高。
论文地址:https://arxiv.org/abs/1606.01583
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/sgan/sgan.py
运行示例:
$ cd implementations/sgan/
$ python3 sgan.py
论文:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
作者:Christian Ledig、Lucas Theis、Ferenc Huszar、Jose Caballero、Andrew Cunningham、Alejandro Acosta、Andrew Aitken、Alykhan Tejani、Johannes Totz、Zehan Wang、Wenzhe Shi
摘要:尽管使用更快和更深的卷积神经网络在单幅超分辨率的准确性和速度上取得了突破,但核心问题仍然在很大程度上未解决:当我们大规模放大图像时,如何恢复更精细的纹理细节?为了达到这个目标,我们提出了一个感知损失函数,它包含对抗性损失和内容损失。
论文地址:https://arxiv.org/abs/1609.04802
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/srgan/srgan.py
运行示例:
$ cd implementations/srgan/
<follow steps at the top of srgan.py>
$ python3 srgan.py
论文:Wasserstein GAN
作者:Martin Arjovsky、Soumith Chintala、Léon Bottou
摘要:简称WGAN,在学习分布上使用了Wasserstein距离,也叫Earth-Mover距离。新模型提高了学习的稳定性,消除了模型崩溃等问题,并给出了在debug或搜索超参数时有参考意义的学习曲线。
论文地址:https://arxiv.org/abs/1701.07875
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/wgan/wgan.py
运行示例:
$ cd implementations/wgan/
$ python3 wgan.py
论文:Improved Training of Wasserstein GANs
作者:Ishaan Gulrajani、Faruk Ahmed、Martin Arjovsky、Vincent Dumoulin、Aaron Courville
摘要:在之前的WGAN的基础上提出了代替减少权重的方案:依据输入对判别器的梯度进行惩罚,使模型更加稳定。
论文地址:https://arxiv.org/abs/1704.00028
代码地址:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/wgangp/wgangp.py
运行示例:
$ cd implementations/wgan_gp/
$ python3 wgan_gp.py
原文地址:https://github.com/eriklindernoren/PyTorch-GAN#least-squares-gan