机器学习-36-GAN-03-Conditional GAN(有条件的GAN)

Conditional GAN

Text-to-Image

Traditional supervised approach

对于一个依据文字生成图像的问题,我们传统的做法就是训练一个NN,然后输入一个文字,输出对应一个图片,我们希望图片与目标图片越接近越好。

这样做有什么问题?我们来看一下,例如文字:train对应的图片有很多张。例如下面的火车有正面,有侧面的,如果用传统的NN来训练,模型会想让火车长得像左边,又像一个右边的,这样的结果是不好的。模型会想产生多张图像的平均,结果就会很模糊。

Conditional GAN

Conditional,意思是条件,所以 Conditional GAN 的意思就是有条件的GAN。Conditional GAN 可以让 GAN 产生的结果符合一定的条件,即可以通过人为改变输入的向量(记不记得我们让生成器生成结果需要输入一个低维向量),控制最终输出的结果。

这种网络与普通 GAN 的区别在于输入加入了一个额外的 condition(比如在 text-to-image 任务中的描述文本),并且在训练的时候使得输出的结果拟合这个 condition。

此外如果判别器还是以前的那样的话,肯定是不行的,因为这样训练出来的生成器会无视输入的conditional vector;因为判别器只会看你的图片是不是高质量,所以生成器只要生成高质量就行了,可以完全无视其他input信息。

我们希望的是机器能够按照我们的input产生图片,因此需要变形。此时的判别器的输入只看生成器的输出,还要看conditional vector。这时候判别器有两个任务:

  • 图片质量好不好(图片是不是真实的)
  • 图片是否和输入的条件匹配。就算质量高但是不匹配的话,也是低分。

上图的火车的例子中:

  • 右上角:符合train的条件,并且生成的图像清晰,scalar=1
  • 左下角:不符合cat的条件,但是生成的图像清晰,scalar=0
  • 右下角:符合train的条件,但是生成的图像清晰,scalar=0

Algorithm(算法)

首先随机初始化,然后进行下面迭代:

训练判别器:(固定生成器)

  • 首先从database中抽取m个样本,由于是condition GAN,所以每个样本都是文字 vector c 和image的pair。(得到真实图片对)
  • 然后再从一个分布中抽取m个vector z;然后m个vector,每一个都加上一个condition vector,表示为(c,z)
  • 然后将(c,z)输入生成器,生成m张image x ~ \tilde{x} x~。(得到生成图片对)
  • 然后进入database中随机选取m个真实图片 x ^ \hat{x} x^(用于训练非对应的情况)(得到没有标签的真实图片,然后和之前真实图片标签进行配对;变成真实图片假标签对)
  • 然后计算损失:对于sample的正确的一对就给高分,文字和随机生成图片给低分,文字和不匹配的真实图片也给低分。我们去最大这个损失,然后计算梯度,梯度上升。

然后训练生成器:(固定判别器)

  • 随机产生m个噪声,随机从database中抽取m个文字。通过生成器得到G(C,Z),然后经过判别器得到D(G(C,Z)),更改G中的参数,使得它的得分最高,骗过判别器。

Conditional GAN - Discriminator

具体设计条件GAN判别器,有两种方式:

  1. 图片x经过一个网络变成一个code,一句话经过网络也变成一个code;把这两种code组合在一起丢到网络里面,输出一个数值。

  2. 首先让图片经过一个网络,输出一个分数(用于判断图片是否真实),同时这个网络也输出一个code,这个code和一句话结合起来丢到另外一个网络里,也输出一个分数(图片和文字是否匹配);其实两种分数拆开比较合理

这两种方式,前者更为常用,但李宏毅老师认为后者更加合理,它用两个神经网络分别对输出结果的质量以及条件符合程度独立进行判别。

正如我们前面的算法中所提及的,Conditional 的训练和其它 GAN 不同,它需要三种样本:

  • 期望输出为1的条件和与条件相符的训练样本;
  • 期望输出为0的条件和与条件不符的训练样本;
  • 期望输出为0的条件和 生成器的输出。

学生作业举例

学生做的效果:

上图中,根据我们选择的头发颜色以及眼睛颜色的不同,GAN生成的头像的具体特征也会不同。


Stack GAN

对于现有模型GAN来说,要实现高分辨率并不容易,首先,简单的在GAN模型中添加更多的上采样层用于生成高分辨率图像(例如,256×256)的方法通常导致 训练不稳定并产生无意义的输出,如下图所示:

除此,GAN 生成高维图片的主要问题在于,自然图像分布与模型分布在高维空间上几乎不交叠。当要生成的图像分辨率增大时,该问题更加明显。

针对上面的问题,有以下方法来进行解决:

  1. 变分自动编码器(VAE)提出了以最大化数据似然的下限为目标的概率图模型。
  2. 利用神经网络模拟像素空间的条件分布的自回归模型(例如PixelRNN)c.生成对抗网络(GAN)[已经显示出有希望生成清晰图像的性能。但是训练的不稳定性使得GAN模型很难生成高分辨率图像,基于能量的 GAN( energy-based GAN)也被提出用于更稳定的训练行为.
  3. 超分辨率方法(super-resolution methods)只能为低分辨率图像添加有限的细节。ansimov等通过学习估计文本和生成图像之间的对应的AlignDRAW模型。Reed等使用条件 PixelCNN 来使用文本描述和对象位置约束来生成图像。Nguyen等人使用近似 Langevin 抽样的方法来生成。

这里提出了一种新的model来解决这个问题:

  1. 提出了一种新的叠加生成对抗网络(stackgan),用于从文本描述中合成照片般逼真的图像。它将生成高分辨率图像的困难问题分解为更多可管理的子问题-----解决细节缺失问题,分辨率变高。

  2. 提出了一种新的条件增强技术(CA)来稳定条件GAN的训练,同时也提高了条件GAN训练的多样性。

  3. 广泛的定性和定量实验证明整体模型设计的有效及单个组件的效果。

整个model分为两个阶段:

  1. stack-I 第一阶段:勾画出在给定的文字描述上条件化的对象的原始形状和基本颜色,并从随机噪声向量中绘制背景布局,产生低分辨率图像。
  2. stack-II 第二阶段:修正了第一阶段的低分辨率图像中的缺陷,并通过再次读取文字描述来完成对象的细节,从而产生高分辨率的照片般逼真的图像

这里就不深究了,有兴趣可以看以下文献:


Image-to-image

application(应用)

设定 conditional 为输入的图片,可以用在黑白转彩色图、手绘转真实图、航拍图转地形图等。

文献👉 Image-to-Image Translation with Conditional Adversarial Networks

Traditional supervised approach(传统做法)

先收集大量的样本:

然后训练模型:

在测试的结果却很模糊,原因在上面有讲:It is blurry because it is the average of several images.

Conditional GAN

generator会吃一个从分布中抽取的vector和一个input,其中input作为条件,output是一个image。

传统做法中,仅仅使image和真实的image接近,会发现生成的图像比较模糊,即下面第二张图片。这个我们在前面都有提及。

在gan中,discriminator会输入产生的image和input(也就是condition),从而输出一个scalar。

通过算法的迭代,我们的gan可以生成下面第三张图片,看起来很清晰了,很棒了。但是仔细看,图中左上角是不是长个了角,一看,是个烟囱,但是我们的input中并没有这个东东呀,它和我们的真实image有些出入!

因此,单纯的一个conditional gan并不能达到很好的效果。GAN+close是一个好的解决办法!

在GAN+close中,我们对generator生成的image加上限制,要使得生成的image与真实对象越接近越好。通过训练,可以得到下面第四张图片,此时,生成的image不仅清晰而且也基本符合要求了!


Speech Enhancement(语音增强)

给一段声音去掉噪音:

Traditional supervised approach(传统做法)

先要有数据,然后训练一个NN,注意这里会直接套CNN。然后使output和真正clean的结果越接近越好。这样做效果当然不好。

Conditional GAN

这里和上面的image-to-image类似,就不细说了。

Video Generation

可以根据影片的前几帧产生后几帧。conditional 为之前几帧的图片。


Patch GAN

当用一个Discriminator来进行评估整个大张的图片的时候会有很多问题:容易overfitting,训练时间长。因此可以用多个Discriminator来进行评估。每个Discriminator检查的区域的大小是超参数。不能太小,例如一个pixel那么整个图片就会糊掉。

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值