GAN生成图像综述
生成对抗网络(Generative adversarial network, GAN)[1]自2014年由Ian Goodfellow等人提出后,就越来越受到学术界和工业界的重视。而随着GAN在理论与模型上的高速发展,它在计算机视觉、自然语言处理、人机交互等领域有着越来越深入的应用,并不断向着其它领域继续延伸。其中,GAN在图像生成上取得了巨大的成功,这取决于GAN在博弈下不断提高建模能力,最终实现以假乱真的图像生成。
围绕GAN的研究可以分为两条主线,一是理论主线,从数学理论上研究如何解决GAN的不稳定性和模式崩塌问题,或者从信息理论和基于能量的模型等不同角度重新阐述它。二是应用主线,致力于将GAN应用于计算机视觉领域、利用GAN进行图像生成(指定图像合成、文本到图像,图像到图像、视频)以及将GAN应用于NLP或其它领域。利用GAN进行图像生成和转换是当前研究最多的,并且该领域的研究已经证明了GAN在图像合成中的巨大潜力。
本文从GAN的基本模型开始,简要总结GAN的原理和改进,介绍其在图像生成与转换中的研究和应用,并讨论其理论和应用中尚存在的挑战。
引言
在机器学习中,生成模型可以用来直接对数据建模,也可以用来建立变量间的条件概率分布。它的应用十分广泛,可以用来不同的数据进行建模,比如图像、文本、声音等。以图像生成为例,我们将图像表示为一个随机向量X,其中每一维都表示一个像素值。假设自然场景的图像都服从一个未知的分布p(x),我们希望通过一些观测样本来估计其分布,高维随机向量一般比较难以直接建模,需要通过一些条件独立性来简化模型。但是,自然图像中不同像素之间存在的复杂的依赖关系,很难用一个明确的图模型来描述其依赖关系,因此直接建模p(x)比较困难,对生成模型的要求很高。
在GAN之前,人们就已经研究了很多生成模型,随着深度神经网络的发展,生成模型也得到了巨大的飞跃。目前有影响力的生成模型主要有Autoregressive model(自回归模型)[2][3]、VAE[4]、GLOW[5]和GAN[1]:
1.自回归模型(Autoregressive model)
自回归模型在PixelRNN[2]和PixelCNN[3]上展示了很不错的实验效果,但是由于是按照像素点去生成图像,导致计算成本高,在可并行性上受限,在处理大型数据如大型图像或视频具有一定的麻烦。
2. 变分自编码器(VAE)
VAE是在Autoencoder的基础上让图像编码的潜在向量服从高斯分布从而实现图像的生成,优化了数据对数似然的下界,VAE在图像生成上是可并行的,
但是VAE存在着生成图像模糊的问题。
3.基于流的方法(Glow)
Glow提出了一种新的基于流的生成模型,通过寻找可逆的双射来实现输入和潜在空间的相互转换,其在标准图像建模基准上的对数似然性方面展示了改进的定量性能,特别是在高分辨率人脸图像合成和插值生成上取得了惊艳的效果。
4. 生成对抗网络(GAN)
GAN的思想就是利用博弈不断的优化生成器和判别器从而使得生成的图像与真实图像在分布上越来越相近。GAN生成的图像比较清晰,在很多GAN的拓展工作中也取得了很大的提高。但是GAN生成中的多样性不足以及训练过程不稳定是GAN一直以来的问题。
然而GAN存在的问题并没有限制GAN的发展,在GAN改进和应用方面的文章层出不穷。其中GAN在图像生成上的应用最为突出,当然在计算机视觉中还有许多其他应用,如图像绘画,图像标注,物体检测和语义分割。在自然语言处理中应用GAN的研究也是一种增长趋势,如文本建模,对话生成,问答和机器翻译。在不同的任务中训练GAN可能面临不同的问题并且需要更多技术,这也使其成为具有挑战性但有趣的研究领域。
GAN的基本原理与研究进展
朴素GAN的基本模型
GAN受博弈论中的零和博弈启发,将生成问题视作判别器和生成器这两个网络的对抗和博弈:生成器从给定噪声中(一般是指均匀分布或者正态分布)产生合成数据,判别器分辨生成器的的输出和真实数据。前者试图产生更接近真实的数据,相应地,后者试图更完美地分辨真实数据与生成数据。由此,两个网络在对抗中进步,在进步后继续对抗,由生成网络得到的数据也就越来越完美,逼近真实数据,从而可以生成想要得到的数据(图片、序列、视频等)。
图一:GAN的基本结构
GAN的问题与研究进展
最早GAN的提出是为了通过生成模型和判别模型对抗来达到对生成图片最大相似度的伪装,比起VAE生成的图片会比较清晰。但是原始GAN模型本身也存在一些问题,主要的问题有两个:
(1)判别器越好,生成器的梯度消失越严重,这样会导致在网络训练上很多时候生成器的参数基本上不会发生改变。
(2)由于网络是对抗式的,常常会造成训练时模型的崩溃(collapse mode),在训练时往往需要权衡训练的生成器与鉴别器的参数来防止崩溃的发生。这样在实际的应用上也带了很多不便。
WGAN[6]和WGAN- GP[7]首先分析了原始GAN的问题,前者通过对生成样本和真实样本加噪声使得两个分布产生重叠,理论上可以解决训练不稳定;后者引入梯度惩罚,使得GAN训练更加稳定,收敛更快,同时能够生成更高质量的样本。LSGAN[8] 使用最小二乘损失函数代替了原始GAN的损失函数,让模型在训练的过程中更多的关注真实度不高的样本,缓解了GAN训练不稳定和生成图像质量差多样性不足的问题。DCGAN[9]将CNN引入生成器和判别器,借助CNN更强的拟合与表达能力,缓解GAN的问题的同时,大大提高了生成图像的能力。
图二:DCGAN生成器结构图
此外,在研究中也产生了很多GAN的变种,比较突出的有将GAN与Encoder结合起来的BiGAN[10]和ALI[11],与VAE结合起来的VAE- GAN[12],添加额外辅助分类器的ACGAN[13],以及添加监督信息的cGAN[14],引入信息理论的infoGAN[15],和引入能量的概念与方法的EBGAN[16]等。这些变种在不同的目标上增强了GAN模型的拟合能力与鲁棒性,极大地扩展了GAN的应用范围。
GAN-图像生成
根据不同的GAN所拥有的生成器和判别器的数量,可以将GAN图像生成的方法概括为三类:直接方法,迭代方法和分层方法[17]。
图三:GAN在图像生成中的三类方法
** 直接法**
早期的GANs都遵循在其模型中使用一个生成器和一个判别器的原理,并且生成器和判别器的结构是直接的,没有分支。如GAN [1]、DCGAN [9]、ImprovedGAN [18],InfoGAN [15],f-GAN [19]和GANINT-CLS [20]。这类方法在设计和实现上比较容易,通常也能得到良好的效果。
分层法
分层法的主要思想是将图像分成两部分,如"样式和结构"和"前景和背景",然后在其模型中使用两个生成器和两个鉴别器,其中不同的生成器生成图像的不同部分,然后再结合起来。两个生成器之间的关系可以是并联的或串联的。
以SS-GAN [21]为例,其使用两个GAN,一个Structure-GAN用于生成表面结构,然后再由Style- GAN补充图片细节,最后生成图片,整体结构如下所示:
图四:SS- GAN的分层结构
** 迭代法**
迭代法使用具有相似或甚至相同结构的多个生成器,经过迭代生成从粗到细的图像。
以LAPGAN [22]为例:LAPGAN中的多个生成器执行相同的任务:最低级别的生成器仅将噪声向量作为输入并输出图像,而其他生成器都从前一个生成器获取图像并将噪声矢量作为输入,这些生成器结构的唯一区别在于输入/输出尺寸的大小,每一次迭代后的图像都拥有更多清晰的细节。
图五:LAPGAN的迭代结构
GAN-图像转换
图像到图像的转换被定义为将一个场景的可能表示转换成另一个场景的问题,例如图像结构图映射到RGB图像,或者反过来。该问题与风格迁移有关,其采用内容图像和样式图像并输出具有内容图像的内容和样式图像的样式的图像。图像到图像转换可以被视为风格迁移的概括,因为它不仅限于转移图像的风格,还可以操纵对象的属性。
图像到图像的转换可分为有监督和无监督两大类,根据生成结果的多样性又可分为一对一生成和一对多生成两类:
有监督下图像到图像转换
在原始GAN中,因为输出仅依赖于随机噪声,所以无法控制生成的内容。但cGAN[14]的提出使得我们可以将条件输入y添加到随机噪声Z,以便生成的图像由G(z,y)定义。条件y可以是任何信息,如图像标注,对象的属性、文本描述,甚至是图片。
图六:CGAN的结构
如果引入图片作为监督信息,cGAN就可以完成一些paired data才能完成的任务,如把轮廓图转化成真实图片,把mask转化成真实图,把黑白图转化成真实图等。其中最具代表性的工作为pix2pix[23]:
图七:pix2pix结构图
pix2pix提出将cGAN的损失与L1正则化损失相结合,使得生成器不仅被训练以欺骗判别器而且还生成尽可能接近真实标注的图像,使用L1而不是L2的原因是L1产生较少的模糊图像。其损失函数设计如下:
(1)含有条件信息的GAN损失
(2)约束自相似性的L1损失
(3)总的目标函数
图八:pix2pix生成效果
无监督的图像到图像转换
虽然有监督下图像转换可以得到很好的效果,但需要的条件信息以及paired image成为其很大的限制。但如果用无监督学习,学习到的网络可能会把相同的输入映射成不同的输出,这就意味着,我们输入任意xi并不能得到想要的输出yi。
CycleGAN [24]、DualGAN [25] 和DiscoGAN [26]突破了这个限制,这几项工作都提出了一致/重构损失(consistent loss),采取了一个直观的思想:即生成的图像再用逆映射生成回去应该与输入的图像尽可能接近。在转换中使用两个生成器和两个判别器,两个生成器和进行相反的转换,试图在转换周期后保留输入图像。
以CycleGAN为例,在CycleGAN中,有两个生成器,Gxy用于将图像从域X传输到Y,Gxy用于执行相反的转换。此外,还有两个判别器Dx和Dy判断图像是否属于该域。
图九:cycleGAN结构
其Consistent loss由L1进行描述:
图十:CycleGAN的生成效果
当然,尽管CycleGAN 和DualGAN具有相同的模型结构,但它们对生成器使用不同的实现。CycleGAN使用卷积架构的生成器结构,而DualGAN遵循U- Net结构。在实践中可以根据不同的需求更换生成器和判别器的实现结构。
从一对一生成到一对多生成(one-to-many translation)
从pix2pix[23]到CycleGAN系列[24][25][26],再到UNIT[27],这些方法实现的image-to-image translation不管是有监督的还是无监督的,都是一对一的,也就是说输入一张图片只能产生一种风格,缺乏多样性。但其实大多数情况下,image translation是多对多的,也就是一张图片对应不同风格的转换图片。比如我们设计衣服时,一张轮廓图其实可以设计成不同风格的衣服。再比如同一个场景,不同的光照条件就是一个模式,不一定只有白天和黑夜,还可能有傍晚,清晨等。
BicycleGAN[28]首先对此进行了尝试,其在模型中添加随机噪声,通过随机采样使噪声得到不同的表达,并在输出与潜在空间上添加双向映射。双向映射指的是:不仅仅可以由潜在编码映射得到输出也可以由输出反过来生成对应的潜在编码,这可以防止两个不同的潜在编码生成同样的输出,避免输出的单一性。
但直接用不同的随机噪声来产生多样化的结果,由于mode collapse的存在,很容易训练失败。MUNIT[29]和DRIT[30]在UNIT的基础上,将latent code进一步细化为内容编码 c 和风格编码 s 。不同domain的图像共享内容编码空间 C 而独享风格编码空间 S ,将内容编码c与不同的风格编码s结合起来就能得到更鲁棒的多样性的结果。
图十二:MUNIT将latent code分为内容c和风格c
如下所示,BicycleGAN、MUNIT和DRIT都取得了不错的生成结果:
总结
GAN在图像生成和转换中的巨大潜力已经得到研究证明,利用GAN进行图像到图像间的生成和转换最好已经到达几乎无法分辨的地步。除此之外,利用GAN进行指定图像合成,生成高清图像和视频,以及将GAN应用于NLP和其他领域的研究都还受到研究者们的重点关注。GAN图像生成仍然会是一个充满挑战与价值的课题,存在很大的研究空间。
小编相关推荐:
http://www.tensorinfinity.com/paper_14.html(Largescale GANtraining for high fidelity natural image synthesis文章解读)
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: