英伟达 GauGAN 合成自然界的物体本身形状不确定,合成有细微的扭曲的图片不一定影响视觉感官?

“在机器学习过去的10年里,GAN是最有趣的一个想法。” ——Yann LeCun


2019年,是很重要的一年。在这一年里,GAN有了重大的进展,出现了 BigGan,StyleGan 这样生成高清大图的GAN,也出现了很多

这一切预示着GAN这个话题,马上就要被勤勉的科学家们攻克了。

从目标分类的被攻克,人脸识别的特征提取和loss改进,目标检测与分割的统一…… 深度学习的堡垒一个接一个的被攻克。一切都迅速都走上可应用化的道路。

深度学习的发展惊人,如果说互联网过的是狗年,一年抵七年,深度学习的发展一定是在天宫的,天上一天,地上一年。

本文参考Mohammad KHalooei的教程,也将GAN在图像上的应用分为4个level,第四个level将按照应用层面进行拓展。

  1. Level 0: Definition of GANs GAN的基础结构发展,时间主要是在之间,很多重要的结构,概念在这段时间被提出。譬如CGAN等。这里列出了四篇论文。

其他方向将会陆续放出。

由于导出的格式问题,表格内有些链接会发生混乱,因此转成图片展示。文章详细介绍部分有相关链接。需要表格的同学可去Github获取

生成式对抗网络(GAN, Generative Adversarial Networks )是近年来深度学习中复杂分布上无监督学习最具前景的方法之一。 监督学习需要大量标记样本,而GAN不用。 模型包括两个模块:生成模型(Generative Model)和判别模型(Discriminative Model),通过模型的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。

GAN的目标,就是G生成的数据在D看来,和真实数据误差越小越好,目标函数如下:

从判别器 D 的角度看,它希望自己能尽可能区分真实样本和虚假样本,因此希望 D(x) 尽可能大,D(G(z)) 尽可能小, 即 V(D,G)尽可能大。从生成器 G 的角度看,它希望自己尽可能骗过 D,也就是希望 D(G(z)) 尽可能大,即 V(D,G) 尽可能小。两个模型相对抗,最后达到全局最优。

从数据分布来说,就是开始的噪声noise,在G不断修正后,产生的分布,和目标数据分布达到一致:


2014 年的一个晚上,Goodfellow 在酒吧给师兄庆祝博士毕业。一群工程师聚在一起不聊姑娘,而是开始了深入了学术探讨——如何让计算机自动生成照片。

当时研究人员已经在使用神经网络(松散地模仿人脑神经元网络的算法),作为“生成”模型来创建可信的新数据。但结果往往不是很好:计算机生成的人脸图像要么模糊到看不清人脸,要么会出现没有耳朵之类的错误。

针对这个问题,Goodfellow 的朋友们“煞费苦心”,提出了一个计划——对构成照片的元素进行统计分析,来帮助机器自己生成图像。

Goodfellow 一听就觉得这个想法根本行不通,马上给否决掉了。但他已经无心再party了,刚才的那个问题一直盘旋在他的脑海,他边喝酒边思考,突然灵光一现:如果让两个神经网络互相对抗呢?

但朋友们对这个不靠谱的脑洞深表怀疑。Goodfellow 转头回家,决定用事实说话。写代码写到凌晨,然后测试…

Ian Goodfellow:如果你有良好的相关编程基础,那么快速实现自己的想法将变得非常简单。几年来,我和我的同事一直在致力于软件库的开发,我曾用这些软件库来创建第一个 GAN、Theano 和 Pylearn2。第一个 GAN 几乎是复制-粘贴我们早先的一篇论文《Maxout Networks》中的 MNIST 分类器。即使是 Maxout 论文中的超参数对 GAN 也相当有效,所以我不需要做太多的新工作。而且,MNIST 模型训练非常快。我记得第一个 MNIST GAN 只花了我一个小时左右的时间。


和监督学习的的网络结构一样,GAN的发展 也主要包含网络结构性的改进 和loss、参数、权重的改进。

Avinash Hindupur建了一个GAN Zoo,他的“动物园”里目前已经收集了近500种有名有姓的GAN。 主要是年之间的GAN。

那么问题来了:这么多变体,有什么区别?哪个好用?

GAN、DRAGAN、BEGAN,另外还对比的有VAE(变分自编码器)。为了很好的说明问题,研究者们两个指标来对比了实验结果,分别是FID和精度(precision、)、召回率(recall)以及两者的平均数F1。

其中FID(Fréchet distance(弗雷歇距离) )是法国数学家Maurice René Fréchet在1906年提出的一种路径空间相似形描述,直观来说是狗绳距离:主人走路径A,狗走路径B,各自走完这两条路径过程中所需要的最短狗绳长度,所以说,FID与生成图像的质量呈负相关。

为了更容易说明对比的结果,研究者们自制了一个类似mnist的数据集,数据集中都是灰度图,图像中的目标是不同形状的三角形。

最后,他们得出了一个有点丧的结论:

都差不多……都跟原版差不多……

这些改进是否一无是处呢?当然不是,之前的GAN 训练很难, 而他们的优点,主要就是让训练变得更简单了。

那对于GAN这种无监督学习的算法,不同的模型结构改进,和不同的应用领域,才是GAN大放异彩的地方。

此外,谷歌大脑发布了一篇全面梳理 GAN 的论文,该研究从损失函数、对抗架构、正则化、归一化和度量方法等几大方向整理生成对抗网络的特性与变体。 作者们复现了当前最佳的模型并公平地对比与探索 GAN 的整个研究图景,此外研究者在 TensorFlow Hub 和 GitHub 也分别提供了预训练模型与对比结果。


GAN的很多研究,都是对Generative modeling生成模型的一种研究,主要有两种重要的工作: 1 Density Estimation 对原有数据进行密度估计,建模,然后使用模型进行估计 2 Sampling 取样,用对数据分布建模,并进行取样,生成符合原有数据分布的新数据。


在标准的GAN中,生成数据的来源一般是一段连续单一的噪声z, 在半监督式学习CGAN中,会加入c的class 分类。InfoGan 找到了Gan的latent code 使得Gan的数据生成具有了可解释性。

通过GAN可以生成想要的样本,以MNIST手写数字集为例,可以任意生成0-9的数字。

但是如果我们想指定生成的样本呢?譬如指定生成1,或者2,就可以通过指定C condition来完成。

应用方向 数字生成, 图像自动标注等

是第一篇将层次化或者迭代生成的思想运用到 GAN 中的工作。在原始 GAN和后来的 CGAN中,GAN 还只能生成32X32 这种低像素小尺寸的图片。而这篇工作[16] 是首次成功实现 64X64 的图像生成。思想就是,与其一下子生成这么大的(包含信息量这么多),不如一步步由小转大,这样每一步生成的时候,可以基于上一步的结果,而且还只需要“填充”和“补全”新大小所需要的那些信息。这样信息量就会少很多,而为了进一步减少信息量,他们甚至让 G 每次只生成“残差”图片,生成后的插值图片与上一步放大后的图片做加法,就得到了这一步生成的图片。

通常GAN的生成网络输入为一个噪声向量z,IcGAN是对cGAN的z的解释。

利用一个encoder网络,对输入图像提取得到一个特征向量z,将特征向量z,以及需要转换的目标attribute向量y串联输入生成网络,得到生成图像,网络结构如下,

为了提供更多的辅助信息并允许半监督学习,可以向判别器添加额外的辅助分类器,以便在原始任务以及附加任务上优化模型。

和CGAN不同的是,C不直接输入D。D不仅需要判断每个样本的真假,还需要完成一个分类任务即预测C

添加辅助分类器允许我们使用预先训练的模型(例如,在ImageNet上训练的图像分类器),并且在ACGAN中的实验证明这种方法可以帮助生成更清晰的图像以及减轻模式崩溃问题。 使用辅助分类器还可以应用在文本到图像合成和图像到图像的转换。


单一的噪声z,使得人们无法通过控制z的某些维度来控制生成数据的语义特征,也就是说,z是不可解释的。

以MNIST手写数字集为例,每个数字可以分解成多个维度特征:数字的类别、倾斜度、粗细度等等,在标准GAN的框架下,是无法在维度上具体指定生成什么样的数字。但是Info Gan 通过latent code的设定成功让网络学习到了可解释的特征表示(interpretable representation)

把原来的噪声z分解成两部分:一是原来的z;二是由若干个latent variables拼接而成的latent code c,这些latent variables会有一个先验的概率分布,且可以是离散的或连续的,用于代表生成数据的不同特征维度,如数字类别(离散),倾斜度(连续),粗细度(连续)等。通过找到对信息影响最大的c,来得到数据中最重要的特征。


然后看看 loss、参数、权重的改进:

用了最小二乘损失函数代替了GAN的损失函数,缓解了GAN训练不稳定和生成图像质量差多样性不足的问题。

但缺点也是明显的, LSGAN对离离群点的过度惩罚, 可能导致样本生成的'多样性'降低, 生成样本很可能只是对真实样本的简单模仿和细微改动.

WGAN: 在初期一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

为啥难训练? 令人拍案叫绝的Wasserstein GAN 中做了如下解释 : 原始GAN不稳定的原因就彻底清楚了:判别器训练得太好,生成器梯度消失,生成器loss降不下去;判别器训练得不好,生成器梯度不准,四处乱跑。只有判别器训练得不好不坏才行,但是这个火候又很难把握,甚至在同一轮训练的前后不同阶段这个火候都可能不一样,所以GAN才那么难训练。

WGAN 针对loss改进 只改了4点: 1.判别器最后一层去掉sigmoid 2.生成器和判别器的loss不取log 3.每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c 4.不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行


2 Fréchet Inception Distance (FID,越小越好) 在FID中我们用相同的inception network来提取中间层的特征。然后我们使用一个均值为 μμ 方差为 ΣΣ 的正态分布去模拟这些特征的分布。较低的FID意味着较高图片的质量和多样性。FID对模型坍塌更加敏感。

FID和IS都是基于特征提取,也就是依赖于某些特征的出现或者不出现。但是他们都无法描述这些特征的空间关系。

这是CNN在unsupervised learning领域的一次重要尝试,这个架构能极大地稳定GAN的训练,以至于它在相当长的一段时间内都成为了GAN的标准架构,给后面的探索开启了重要的篇章。

GANs的主要问题之一是收敛性不稳定,尽管DCGAN做了结构细化,训练过程仍可能难以收敛。GANs的训练常常是同时在两个目标上使用梯度下降,然而这并不能保证到达均衡点,毕竟目标未必是凸的。也就是说GANs可能永远达不到这样的均衡点,于是就会出现收敛性不稳定。

为了不让生成器尽可能地去蒙骗鉴别器,ImprovedDCGAN希望以特征作为匹配标准,而不是图片作为匹配标准,于是提出了一种新的生成器的目标函数

顾名思义,PGGAN 通过一种渐进式的结构,实现了从低分辨率到高分辨率的过渡,从而能平滑地训练出高清模型出来。论文还提出了自己对正则化、归一化的一些理解和技巧,值得思考。当然,由于是渐进式的,所以相当于要串联地训练很多个模型,所以 PGGAN 很慢。

论文地址: 代码实现地址:

"随着 ResNet 在分类问题的日益深入,自然也就会考虑到 ResNet 结构在 GAN 的应用。事实上,目前 GAN 上主流的生成器和判别器架构确实已经变成了 ResNet:PGGAN、SNGAN、SAGAN 等知名 GAN 都已经用上了 ResNet

相当于将图像的长/宽放大若干倍; 3) 有些作者认为 BN 不适合 GAN,有时候会直接移除掉,或者用 LayerNorm 等代替。

然而,ResNet层数更多、层之间的连接更多,相比 DCGAN,ResNet比 DCGAN 要慢得多,所需要的显存要多得多。 ---苏剑林

由于卷积的局部感受野的限制,如果要生成大范围相关(Long-range dependency)的区域会出现问题,用更深的卷积网络参数量太大,于是采用将 Self Attention 引入到了生成器(以及判别器)中,使用来自所有特征位置的信息生成图像细节,同时保证判别器能鉴别距离较远的两个特征之间的一致性,获取全局信息。 IS从36.8提到了52.52,并把FID(Fréchet

SAGAN 使用注意力机制,高亮部位为注意力机制关注的位置。

SELF-MOD 考虑到 cGAN 训练的稳定性更好,但是一般情况下 GAN 并没有标签 c 可用,而以噪声 z 自身为标签好了,自己调节自己,不借助于外部标签,但能实现类似的效果。

Normalization和带有投影鉴别器的cGAN,这些组件在各自的论文中都有更好的解释。不过,这篇论文对构成当前最先进技术水平的基础论文的思想提供了很好的概述,论文贡献包括,大batchsize,大channel数,截断技巧,训练平稳性控制等。(暴力出奇迹)

这篇文章提供了 128、256、512 的自然场景图片的生成结果。 自然场景图片的生成可是比 CelebA 的人脸生成要难上很多

ProGAN是逐级直接生成图片,特征无法控制,相互关联,我们希望有一种更好的模型,能让我们控制生成图片过程中每一级的特征,要能够特定决定生成图片某些方面的表象,并且相互间的影响尽可能小。于是,在ProGAN的基础上,StyleGAN作出了进一步的改进与提升。

StyleGAN首先重点关注了ProGAN的生成器网络,它发现,渐进层的一个潜在的好处是,如果使用得当,它们能够控制图像的不同视觉特征。层和分辨率越低,它所影响的特征就越粗糙。简要将这些特征分为三种类型: 1、粗糙的——分辨率不超过8^2,影响姿势、一般发型、面部形状等; 2、中等的——分辨率为16^2至32^2,影响更精细的面部特征、发型、眼睛的睁开或是闭合等; 3、高质的——分辨率为64^2到1024^2,影响颜色(眼睛、头发和皮肤)和微观特征;

大规模对抗性表示学习 DeepMind基于最先进的BigGAN模型构建了BigBiGAN模型,通过添加编码器和修改鉴别器将其扩展到表示学习。

BigBiGAN表明,“图像生成质量的进步转化为了表示学习性能的显著提高”。

研究人员广泛评估了BigBiGAN模型的表示学习和生成性能,证明这些基于生成的模型在ImageNet上的无监督表示学习和无条件图像生成方面都达到了state of the art的水平。

PS: O-GAN 可以加入其它的loss 将生成器 变为编码器。

通过简单地修改原来的GAN模型,就可以让判别器变成一个编码器,从而让GAN同时具备生成能力和编码能力,并且几乎不会增加训练成本。这个新模型被称为O-GAN(正交GAN,即Orthogonal Generative Adversarial Network),因为它是基于对判别器的正交分解操作来完成的,是对判别器自由度的最充分利用。

TL-GAN : 找到隐藏空间中的特征轴(如BigGAN PGGAN等,然后在特征轴上调节)


图像翻译,指从一副(源域)输入的图像到另一副(目标域)对应的输出图像的转换。它代表了图像处理的很多问题,比如灰度图、梯度图、彩色图之间的转换等。可以类比机器翻译,一种语言转换为另一种语言。翻译过程中会保持源域图像内容不变,但是风格或者一些其他属性变成目标域。

成对图像翻译典型的例子就是 pix2pix,pix2pix 使用成对数据训练了一个条件 GAN,Loss 包括 GAN 的 loss 和逐像素差 loss。而 PAN 则使用特征图上的逐像素差作为感知损失替代图片上的逐像素差,以生成人眼感知上更加接近源域的图像。

传统的GAN也不是万能的,它有下面两个不足:

  1. 没有用户控制(user control)能力 在传统的GAN里,输入一个随机噪声,就会输出一幅随机图像。但用户是有想法滴,我们想输出的图像是我们想要的那种图像,和我们的输入是对应的、有关联的。比如输入一只猫的草图,输出同一形态的猫的真实图片(这里对形态的要求就是一种用户控制)。

Pix2Pix对传统的CGAN做了个小改动,它不再输入随机噪声,而是输入用户给的图片:

pix2pix的核心是有了对应关系,这种网络的应用范围还是比较广泛的,如草稿变图片,自动上色,交互式上色等。

对于无成对训练数据的图像翻译问题,一个典型的例子是 CycleGAN。CycleGAN 使用两对 GAN,将源域数据通过一个 GAN 网络转换到目标域之后,再使用另一个 GAN 网络将目标域数据转换回源域,转换回来的数据和源域数据正好是成对的,构成监督信息。

CycleGan是让两个domain的图片互相转化。传统的GAN是单向生成,而CycleGAN是互相生成,一个A→B单向GAN加上一个B→A单向GAN,网络是个环形,所以命名为Cycle。理念就是,如果从A生成的B是对的,那么从B再生成A也应该是对的。CycleGAN输入的两张图片可以是任意的两张图片,也就是unpaired。

有趣的应用: 地图转换 风格转换 游戏画风转换:Chintan Trivedi的实现:用CycleGAN把《堡垒之夜》转成《绝地求生》写实风。

StarGAN的引入是为了解决多领域间的转换问题的,之前的CycleGAN等只能解决两个领域之间的转换,那么对于含有C个领域转换而言,需要学习Cx(C-1)个模型,但StarGAN仅需要学习一个

CoGAN会训练两个GAN而不是一个单一的GAN。

当然,GAN研究人员不停止地将此与那些警察和伪造者的博弈理论进行类比。所以这就是CoGAN背后的想法,用作者自己的话说就是:

在游戏中,有两个团队,每个团队有两个成员。生成模型组成一个团队,在两个不同的域中合作共同合成一对图像,用以混淆判别模型。判别模型试图将从各个域中的训练数据分布中绘制的图像与从各个生成模型中绘制的图像区分开。同一团队中,参与者之间的协作是根据权重分配约束建立的。这样就有了一个GAN的多人局域网竞赛

CoupledGAN 通过部分权重共享学习到多个域图像的联合分布。生成器前半部分权重共享,目的在于编码两个域高层的,共有信息,后半部分没有进行共享,则是为了各自编码各自域的数据。判别器前半部分不共享,后半部分用于提取高层特征共享二者权重。对于训练好的网络,输入一个随机噪声,输出两张不同域的图片。

值得注意的是,上述模型学习的是联合分布 P(x,y),如果使用两个单独的 GAN 分别取训练,那么学习到的就是边际分布 P(x) 和 P(y)。。

小样本(few-shot)非监督图像到图像转换。


超分辨率的问题研究由来已久,其目标是将低分辨率图像恢复或重建为高分辨率图像,随着GAN的发展,使得这个问题有了惊人的进展。这项技术得以广泛应用于卫星和航天图像分析、医疗图像处理、压缩图像/视频增强及手机摄像领域,有着明确商业用途。SR技术存在一个有趣的“悖论”,即还原或重建后的高分辨率图像与原图相似度越高,则肉眼观察清晰度越差;反之,若肉眼观察清晰度越好,则图像的失真度越高。导致这一现象的原因在于畸变(Distortion)参数和感知(Perception)参数之间侧重点选择的不同。

超分辨率的比赛 为 NTIRE

主观指标:在纯的超分辨领域,评价性能的指标是 PSNR(和 MSE 直接挂钩),所以如果单纯看 PSNR 值可能还是 L2 要好。如果考虑主观感受的话估计 L1 要好。

SR可分为两类:从多张低分辨率图像重建出高分辨率图像和从单张低分辨率图像重建出高分辨率图像。基于深度学习的SR,主要是基于单张低分辨率的重建方法,即Single Image Super-Resolution (SISR)。

SISR是一个逆问题,对于一个低分辨率图像,可能存在许多不同的高分辨率图像与之对应,因此通常在求解高分辨率图像时会加一个先验信息进行规范化约束。在传统的方法中,这个先验信息可以通过若干成对出现的低-高分辨率图像的实例中学到。而基于深度学习的SR通过神经网络直接学习分辨率图像到高分辨率图像的端到端的映射函数。

GAN 对于高分辨率图像生成一直存在许多问题,层级结构的 GAN 通过逐层次,分阶段生成,一步步提生图像的分辨率。典型的使用多对 GAN 的模型有 StackGAN,GoGAN。使用单一 GAN,分阶段生成的有 ProgressiveGAN。

SRGAN,2017 年 CVPR 中备受瞩目的超分辨率论文,把超分辨率的效果带到了一个新的高度,而 2017 年超分大赛 NTIRE 的冠军 EDSR 也是基于 SRGAN 的变体。

思想,重点关注中间特征层的误差,而不是输出结果的逐像素误差。避免了生成的高分辨图像缺乏纹理细节信息问题。让图片在最后面的网络层才增加分辨率,提升分辨率的同时减少计算资源消耗。

胡志豪提出一个来自工业界的问题 在实际生产使用中,遇到的低分辨率图片并不一定都是 PNG 格式的(无损压缩的图片复原效果最好),而且会带有不同程度的失真(有损压缩导致的 artifacts)。很多算法包括SRGAN、EDSR、RAISR、Fast Neural Style 等等都没法在提高分辨率的同时消除失真。 Photo-Realistic Single Image 2016)这篇文章将对抗学习用于基于单幅图像的高分辨重建。基于深度学习的高分辨率图像重建已经取得了很好的效果,其方法是通过一系列低分辨率图像和与之对应的高分辨率图像作为训练数据,学习一个从低分辨率图像到高分辨率图像的映射函数,这个函数通过卷积神经网络来表示。

得益于 GAN 在超分辨中的应用,针对小目标检测问题,可以通过 GAN 生成小目标的高分辨率图像从而提高目标检测精度


3.3 交互式图像生成

基于DCGAN,Adobe公司构建了一套图像编辑操作,能使得经过这些操作以后,图像依旧在“真实图像流形”上,因此编辑后的图像更接近真实图像。

具体来说,iGAN的流程包括以下几个步骤:

1 将原始图像投影到低维的隐向量空间

2 将隐向量作为输入,利用GAN重构图像

3 利用画笔工具对重构的图像进行修改(颜色、形状等)

4 将等量的结构、色彩等修改应用到原始图像上。

值得一提的是,作者提出G需为保距映射的限制,这使得整个过程的大部分操作可以转换为求解优化问题,整个修改过程近乎实时。

你画一幅涂鸦,用颜色区分每一块对应着什么物体,它就能照着你的大作,合成以假乱真的真实世界效果图。 通过语义布局进行图像的生成 Segmentation mask,算法是源于Pix2PixHD,生成自然的图像。

数据来源是成对的,通过自然场景的图像进行分割,就可以得到分割图像的布局,组成了对应的图像对。 但是区别在于,之前的Pix2PixHD,场景都很规律,如室内,街景,可以使用BN,但是后来发现Pix2PixHD在COCO这些无限制的数据集训练结果很差。如果整张天空或者整张的草地,则计算通过BN后,结果很相似,这样合成会出现问题。于是修改了BN,这种方法称为空间自适应归一化合成法SPADE。将原来的label信息代入到原来BN公式中的γ和β

这篇论文的一作,照例还是实习生。另外几位作者来自英伟达和MIT,CycleGAN的创造者朱俊彦是四作。

在基于语义合成图像这个领域里,这可是目前效果最强的方法。


最后,之前说全民AI的时代即将到来,现在发现全民GAN的时代也不远了。希望大家继续努力学习~ 加油鸭

如果对深度学习的基础模型感兴趣的朋友,可以看之前的文章:

最近Github上做了很多完善,也用 画了一些模型,

源码地址如下,如果喜欢别忘记右上角star一下哦:

目前国内版 在这: 欢迎挑战

}

我要回帖

更多关于 自然界一切物体都在运动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信