李宏毅2018GAN笔记 (二) Conditional Gen

2019-05-24  本文已影响0人  tianchen627

李宏毅对抗生成网络(GAN)国语教程(2018):

https://www.bilibili.com/video/av24011528?from=search&seid=13805566188303016426

课件:

http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html


上一节中提到的GAN模型都是输入一个分布(随机采样的一维向量)输出一个张量,这个张量可以是图片可以是语音可以是视频。这一节着重讨论 Conditional Generation,也就是给定条件的生成。

在Conditional Generation 中我们会给定一个Condition,比如模型输入中给定的Condition是猫,则模型会输出猫的图片;Condition是狗则输出狗的图片。

Conditional Generation GAN 也分为有监督和无监督的模型架构。我们先来看有监督的架构。


1.Supervised Conditinal Generation

对于有监督的条件生产模型,我们先来看一下传统的模型:


传统模型

如图这是一个Text-to-Image的模型,即模型输入文本输出图片。在传统的有监督生成模型中,我们需要大量的图片和文本的配对作为训练样本,文本作为模型的输入而对应的图片则作为损失函数的组成(如生成图片和样本图片的L1或L2 loss)。
同时传统的有监督生成模型的缺点是,生成的图像会很模糊。比如图中的火车有正面的图像和侧面的图像,生成的图像可能是正面和侧面中和的一个模糊的图像(模型在训练时期望获得的结果是多张图像的平均)。


有三种可能的配对

Conditional GAN的模型输入除了向量z外还需要输入一个condition,如图中的train火车(一般会转换为向量)。同时因为有三种可能的配对判别器D相应的判分项又多了一项,对应下图中需要提升的得分函数V有三项。


算法流程 判别器

Conditional GAN的判别器架构常见的有图中两种,图上方的结构中只有一个输出,图下方有两个输出分开判别图像是否逼真以及图像是否和condition能配对。最近看的一些用GAN做anomaly detection 以及BiGAN的文章似乎就是图下方的这种结构。李宏毅认为图下方的结构比较合理,但是上方的结构更常用。

image to image image to image

之前举的是text to image 的例子,现在我们换一个image to image 的例子,其实原理都是一样的只是condition从text换成了image,同样传统有监督学习的模型会产生模糊的图片。这里GAN产生的图片会和输入的抽象图片在一些特征上可能有所区别,所以如果我们在训练生成器时,除去获得判别器较高的评价,再加上减小项重构损失(生成图像和输入抽象图像的距离损失)的话,会得到更好些的结果(GAN+close)。

Patch GAN

同时在image to image的paper中,判别器用到了patch GAN 的设计即判别器一次只输入部分的图片而不是一次把整一个图片输入,以减小参数量维护训练的稳定性。

语音去噪 视频生成

再举两个别的生成目标的例子,其实原理都是一样的。语音去噪中判别器要吃两个张量判别是不是匹配,视频生成里判别器需要将生成器的输入和输出一起输入。

Stack GAN

在有监督Conditional GAN的最后放一篇有趣的paper的思想。Stack GAN的思想就是先产生低分辨率的图片,再用低分辨率的图片产生高分辨率的图片。注意区别图中的Text Embedding 产生的φ和Conditioning Augmentation 产生的 C。


2.Unsupervised Conditinal Generation

Unsupervised

区别于之前有监督的生成,无监督的方法不需要匹配的样本(无标签)。无论在图像还是语音还是其他场景,风格迁移是其一种应用。

常见方法

Unsupervised Conditinal Generation的常见方法有两类,一类是用传统的生成器直接转化生成。另一类是在生成器中加入auto-encoder。

直接转换

2.1Direct Transformation

直接转换的原理很简单,生成器从X的分布生成图像后由判别器来判断生成图像是属于X分布还是Y分布。但是只是简单地这样做可能会存在一个问题,即生成的图像虽然属于Y分布但是和输入图像没有联系。

DTN

所以一种做法就是引入预训练的网络如vgg,训练生成器时加上一个约束。

Cycle GAN

Cycle GAN的思想类似,即加了一个Cycle consistency即图像重构约束,确保中间生成的图像与输入有关最后能够重构回输入图像。

撞车.jpg

同期不同会议的几种GAN,其实思想是一样的。

StarGAN

把Cycle GAN的思想推广到多个分布之间转换,即Star GAN。需要注意的是Star GAN 是共用一个生成器。

StarGAN

Star GAN 中判别器除了要判别图像是否是生成的,还需要输出图像的分布类别。生成器除了输入图像还需要输入图像的分布类别。

StarGAN

如图先训练判别器,让判别器能够分辨图像是否是生成的并且能正确分类非生成图像的类别信息( 见(1) )。

接着训练生成器。生成器输入图像及分布(紫色的Mask vector作用为掩码,图中01即代表不考虑黄色标签,考虑绿色标签),需要将图像转换为开心(0 0 1 0 0)分布的图像,并且骗过判别器让判别器认为产生的图片是真实的不是生成的(这里我觉得课件上标错了判别器输出的应该是(0 0 1 0 0)开心的分布)。而从重构中我们可以看出图像原本为生气(1 0 0 0 0)的分布,用同一个生成器需要将图像还原回去作为Cycle consistency。

2.2Projection to Common space

除了上述的方法,我们还可以通过将输入的图像编码再解码的方式来完成风格迁移。 常见问题

如图,X分布为三次元头像Y分布为二次元头像。编码器将输入图像编码为潜在向量,潜在向量是图像特征的体现。再由解码器重构图像,同时加入最小化重构损失和判别器对抗训练。然而这样的做法存在的问题是,由于X分布的auto-encoder和Y分布的auto-encoder是分开训练的,所以这两个分布的自编码器(auto-encoder)对潜在变量的解读不同。比如对于X的自编码器的解释规则可能是第一个元素代表性别,第二个元素代表是否有眼镜,而Y的自编码器的解释则为第一个元素代表是否有眼镜第二个元素代表性别。会产生图中这种输出图像和输入图像不太匹配的情况。

Couple GAN

一种解决方法是编码器的最后几层和解码器的前几层共享参数。这样的方法可以让X和Y的自编码器对潜在变量有同样的解释规则。

秒啊

一种解决方法是在潜在变量处加上一个判别器,通过训练让判别器无法分辨处潜在变量来自X分布还是Y分布。这样来训练即可以确保X编码器输出和Y编码器的输出有相同的分布,即图中三次元头像和二次元头像有着相同的特征。


秒啊X2

还可以让输入图像按照图中的流程输入输出最后计算重构损失,即加入Cycle Consistency 这就是ComboGAN。


秒啊X3
类似的思路还可以最小化潜在变量的距离来训练。
上一篇 下一篇

猜你喜欢

热点阅读