目录
1.1 Traditional supervised approach
1.3 Conditional GAN - Discriminator
2.2 Traditional supervised approach
3.1 Traditional supervised approach
摘要
本节课讲的是 Conditional GAN。即有条件的GAN,可以让 GAN 产生的结果符合一定的条件,通过人为改变输入的向量,控制最终输出的结果。首先以 Text-to-Image 为例,传统的监督学习似乎可以解决 Text-to-Image 这个问题,但其不能生成没见过的 Text 下的图片,而且生成的图像比较模糊,所以需要用Conditional GAN来解决问题。然后详细讲了cGAN Discriminator 的设计,最后讲了cGAN在Speech Enhancement (去噪音功能)、视频生成Video Generation 等方面的应用。
1. Text-to-Image
1.1 Traditional supervised approach
对于一个依据文字生成图像的问题,我们传统的做法就是训练一个NN,然后输入一个文字,输出对应一个图片,我们希望图片与目标图片越接近越好。
这样做有什么问题?我们来看一下,例如文字:train对应的图片有很多张。例如下面的火车有正面,有侧面的,如果用传统的NN来训练,模型会想让火车长得像左边,又像一个右边的,这样的结果是不好的。模型会想产生多张图像的平均,结果就会很模糊。
1.2 Conditional GAN
Conditional,意思是条件,所以 Conditional GAN 的意思就是有条件的GAN。Conditional GAN 可以让 GAN 产生的结果符合一定的条件,即可以通过人为改变输入的向量,控制最终输出的结果。这种网络与普通 GAN 的区别在于输入加入了一个额外的 condition(比如在 text-to-image 任务中的描述文本),并且在训练的时候使得输出的结果拟合这个 condition。
此外如果判别器还是以前的那样的话,肯定是不行的,因为这样训练出来的生成器会无视输入的conditional vector;因为判别器只会看你的图片是不是高质量,所以生成器只要生成高质量就行了,可以完全无视其他input信息。
我们希望的是机器能够按照我们的input产生图片,因此需要变形。此时的判别器的输入不只看生成器的输出,还要看conditional vector。这时候判别器有两个任务:
- 图片质量好不好(图片是不是真实的)
- 图片是否和输入的条件匹配。就算质量高但是不匹配的话,也是低分。
1.3 Conditional GAN - Discriminator
具体设计条件GAN判别器,有两种方式:
-
图片x经过一个网络变成一个code,一句话经过网络也变成一个code;把这两种code组合在一起丢到网络里面,输出一个数值。
-
首先让图片经过一个网络,输出一个分数(用于判断图片是否真实),同时这个网络也输出一个code,这个code和一句话结合起来丢到另外一个网络里,也输出一个分数(图片和文字是否匹配);其实两种分数拆开比较合理
这两种方式,前者更为常用,但李宏毅老师认为后者更加合理,它用两个神经网络分别对输出结果的质量以及条件符合程度独立进行判别。
1.4 Stack GAN
对于现有模型GAN来说,要实现高分辨率并不容易,首先,简单的在GAN模型中添加更多的上采样层用于生成高分辨率图像(例如,256×256)的方法通常导致 训练不稳定并产生无意义的输出。这里提出了一种新的model来解决这个问题:
- 提出了一种新的叠加生成对抗网络(stackgan),用于从文本描述中合成照片般逼真的图像。它将生成高分辨率图像的困难问题分解为更多可管理的子问题-----解决细节缺失问题,分辨率变高。
- 提出了一种新的条件增强技术(CA)来稳定条件GAN的训练,同时也提高了条件GAN训练的多样性。
- 广泛的定性和定量实验证明整体模型设计的有效及单个组件的效果。
2. Image-to-image
2.1 application
设定 conditional 为输入的图片,可以用在黑白转彩色图、手绘转真实图、航拍图转地形图等。
2.2 Traditional supervised approach
先收集大量的样本,然后训练模型,在测试的结果却很模糊,原因在上面有讲:It is blurry because it is the average of several images。
2.3 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不仅清晰而且也基本符合要求了!
3. Speech Enhancement
3.1 Traditional supervised approach
先要有数据,然后训练一个NN,注意这里会直接套CNN。然后使output和真正clean的结果越接近越好。这样做效果当然不好。
3.2 Conditional GAN
4. Video Generation
可以根据影片的前几帧产生后几帧。conditional 为之前几帧的图片。
结论与展望
这节课的Conditional GAN,翻译过来就是条件GAN,所谓条件GAN就是指我们现在生成的网络不仅仅需要逼真,而且还要有一定的条件。同一般形式的GAN类似,也是先训练判别网络,再训练生成网络,然后再训练判别网络,两个网络交替训练。只是训练判别网络的样本稍有不同,分别如下:
- 条件和与条件相符的真实图片,期望输出为1
- 条件和与条件不符的真实图片,期望输出为0
- 条件和生成网络生成的输出,期望输出为0
具体的Conditional GAN判别器的设计也有两种:
- 图片x经过一个网络变成一个code,一句话经过网络也变成一个code;把这两种code组合在一起丢到网络里面,输出一个数值。
- 让图片经过一个网络,输出一个分数(用于判断图片是否真实),同时这个网络也输出一个code,这个code和一句话结合起来丢到另外一个网络里,也输出一个分数(图片和文字是否匹配)
Conditional GAN主要应用在Image-to-Image、Text-to-Image、Speech Enhancement和Video Generation上,而Conditional GAN也有许多变种,针对训练不稳定的问题,提出了Stack GAN,针对Discriminator评估大张的图片容易训练过久和过拟合问题提出了Patch GAN,用多个Discriminator来进行评估。