Bootstrap

李宏毅GAN 学习笔记3 -- Unsupervised Conditional Generation

Unsupervised Conditional Generation

注:本文所有图片均来自李宏毅老师授课PPT

无监督的条件GAN网络,简单来说就是给出两堆data(data之间没有任何的关联),machine自己学到怎么从一堆转到另外一堆。有两种方法:

1. Direct Transformation

Direct Transformation,直接进行转换。这种方法适用于input和output的差别比较小,比如说是颜色或者风格上的变化。举例来说,现在有两类图像一类是普通的风景照(x),一类是梵高的画作(y)。对于生成器G,我们希望输入x中的图它能生成带有x本来特征的又属于‘y’风格的图,但是因为x和y之间没有任何联系并且是无监督学习,仅仅靠生成器是很难完成任务的,所以就要用到判别器D。D的工作就是通过学习大量的梵高画作来判别G生成的图是否属于y。

所以总的说来D的工作就是判断G的输出是否是y类数据,G的工作就是尽力去骗过D。如果G成功骗过了D,那么就说明G的输出就会像是y类的图。可能有这样的疑问:如果G直接生成一张跟输入无关的但是属于梵高风格的画作就可以直接通过D的判别了(如下图)?显然这并不是我们想要达到的目的。【相关paper [Tomer Galanti, et al. ICLR, 2018]

解决这个问题的第一个方法是:无视这个问题。这样仍然是有机会可以work的,因为生成器在收到一个input的时候是不会主动改变太多的,它所希望的是改最少的地方就能通过判别器的判别。

但是如果生成器叠得很深的话,这个问题就必须要考虑了。可以做一些额外的处理,比如拿一个pre-train好的network(比如VGG),把生成器的输入和输出都扔进这个network,生成器在努力通过判别器的同时还需要让自己的输入和输出在那个network中的输出不要相差太多(也就是生成器自己的输入和输出越接近越好)。【相关paper Baseline of DTN [Yaniv Taigman, et al., ICLR, 2017]

还有一个解决方法:CycleGAN。在这个模型中除了要训练X到Y的生成器G1,还要训练一个Y到X的生成器G2,G2目的在于能把G1的输出还原成尽可能和G1输入一模一样的图。这样一来G1就不能产生一个和输入完全无关的图。下左图是单向CycleGAN的图示,右图是双向CycleGAN,也就是按照单向CycleGAN的结构增加一组一样的方向相反的生成器和判别器:把Y的图生成器转为X的图(用判别器来判别),同时再把图转回Y的图,让转回的和最初的图越接近越好。【相关paper [Jun-Yan Zhu, et al., ICCV, 2017]

                    

但是Cycle有GAN一个尚待研究的问题就是它可能会隐藏一些输入的信息。用下图的例子来讲就是,最开始的输入在红框中有一些黑点,这些黑点在第一个生成器的输出中是不存在的,但是第二个生成器可以把黑点返现出来。这说明了生成器在对图像进行转换的时候隐藏了一些信息,但是这并不是我们想要的,我们是希望生成器生成的图像能保留原图的特征。(这个问题仅是提出但还没有得到解决)【相关paper [Casey Chu, et al., NIPS workshop, 2017]

CycleGAN是在两类数据中互转,所以提出了StarGAN(左图),可以实现多个类别互转。具体的操作如右图所示:先训练处一个判别器可以判别出图像是否是真实的并且判断出属于哪一类。然后生成器方面类似于CycleGAN,有两个生成器,G1负责生成目标图片,G2把G1的输出还原,这里要求G2的输出和G1的输入越接近越好。因为StarGAN的生成器是不同类别可以互相转换的,所以G1和G2其实是同一个生成器。【相关paper StarGAN [Yunjey Choi, arXiv, 2017]

               

下面是一个具体的例子:这里的数据分类并不是说具体分类像“黑头发女性”算一类“棕头发女性算一类”,而是用一组编码来进行分类。左侧是对判别器的训练,首先它需要判断输入的图的真假,然后判断这个图属于哪一类(用编码表示 比如图中就是00101)。右侧是生成器和判别器合作部分的具体描述,我们输入一张图并输入我们希望得到的转换结果(10011 黑头发年轻男性),然后把生成的图像再扔进,生成器还原回原来的特征,当然还是希望还原的图像和最初的图像越接近越好。同时把生成器的图像给判别器进行判别,如果判别为真且类别为(10011)则说明生成器达到了目的。

下面是另一个类似的例子,就不具体解释了,是针对于人的情绪的转变。


2. Projection to Common Space

Projection to Common Space,这种方法适用于比较复杂的转换,就不仅仅是简单的改改颜色改改风格。比如下面这个模型:我们有两类图像X(普通人脸)、Y(动漫人脸),先learn一个Encoder,这个Encoder的作用是输入一张人脸的图输出人脸的特征(比如这是一个男的、戴眼镜的)。然后learn另一个Decoder,根据得到的特征输出一张拥有对应特征的动漫人物的脸。

考虑X和Y的相互转化的话,可以参考下面这个模型:还是有两类图像X(普通人脸)、Y(动漫人脸),这里有两个Encoder和两个Decoder(各不相同):ENx负责解析普通人脸特征(比如性别、是否戴眼镜等)、ENy负责解析动漫人物脸的特征、DEx负责根据得到的特征生成普通人脸,DEy负责根据得到的特征生成动漫人脸。

如果我们有X类和Y类图像之间的关系我们可以很容易达到我们的目的,但是这样就编程了监督学习。那么无监督学习要怎么来达到这样的目的呢?让ENx-DEx、ENy-DEy组成两组Auto-encoder:对ENx输入一个x类的图,让DEx重构一张x类的图,y类同理,重构的图和原图的差距尽可能地达到最小。

如果仅仅是这样的话我们很容易看出:x和y是分开训练的。那么中间解析出来的人物特征序列可能不是对应的(比如x解析出来可能是发色、性别、年龄,y解析出来可能是年龄、肤色、性别 ),这样的话可能就会出现下图的情况,这显然也不是我们想要的结果。

解决方法1 让不同类的encoder和decoder共用参数。因为encoder和decoder有很多hidden layer,我们不必让所有的layer都共用,只需要让encoder的后几层和decoder的前几层分别共用即可。这样的好处在于最后可以让同样的dimension表示同样的特征。【相关paper 1. Couple GAN[Ming-Yu Liu, et al., NIPS, 2016]    2. UNIT[Ming-Yu Liu, et al., NIPS, 2017] 

方法2 是添加一个Domain Discriminator 来判别得到的特征是来自X还是Y,而x和y的encoder需要做的就是骗过这个Discriminator,当Discriminator分不出到底是来自X还是Y的时候就说明此时X和Y的encoder得到的结果中同样的维度表示同样的特征。【相关paper [Guillaume Lample, et al., NIPS, 2017]

方法3 采用Cycle Consistency。将人脸图输入到ENx解析出特征给DEy,DEy得到image后作为ENy的输入解析特征给DEx,希望DEx的输出和最初的输入越接近越好,后面的Dx和Dy是两个判别器,分别判别DEx/y生成的图像是否分别属于x/y。【相关paper ComboGAN [Asha Anoosheh, et al., arXiv, 017]

方法4 Semantic Consistency  将人脸图输入到ENx解析出特征(1) 给DEy,DEy得到image后作为ENy的输入解析特征(2),希望得到的两组特征越接近越好。这样的好处在于上一个方法我们最后要考虑的是两张图的相似程度,而这个方法可以直接对比latent space(也就是图像中得到的特征)。【相关paper DTN [Yaniv Taigman, et al., ICLR, 2017]   XGAN [Amélie Royer, et al., arXiv, 2017]

除了图像方面的应用,无监督CGAN也可以用在音频方面,这里就不继续写了。


老师最后提到的reference:

  • Jun-Yan Zhu, Taesung Park, Phillip Isola, Alexei A. Efros, Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, ICCV, 2017
  • Zili Yi, Hao Zhang, Ping Tan, Minglun Gong, DualGAN: Unsupervised Dual Learning for Image-to-Image Translation, ICCV, 2017
  • Tomer Galanti, Lior Wolf, Sagie Benaim, The Role of Minimal Complexity Functions in Unsupervised Learning of Semantic Mappings, ICLR, 2018
  • Yaniv Taigman, Adam PolyakLior Wolf, Unsupervised Cross-Domain Image Generation, ICLR, 2017
  • Asha AnooshehEirikur Agustsson, Radu Timofte, Luc Van Gool, ComboGAN: Unrestrained Scalability for Image Domain Translation, arXiv, 2017
  • Amélie Royer, Konstantinos Bousmalis, Stephan Gouws, Fred Bertsch, Inbar Mosseri, Forrester Cole, Kevin Murphy, XGAN: Unsupervised Image-to-Image Translation for Many-to-Many Mappings, arXiv, 2017
  • Guillaume Lample, Neil Zeghidour, Nicolas Usunier, Antoine Bordes, Ludovic Denoyer, Marc'Aurelio Ranzato, Fader Networks: Manipulating Images by Sliding Attributes, NIPS, 2017
  • Taeksoo Kim, Moonsu Cha, Hyunsoo Kim, Jung Kwon Lee, Jiwon Kim, Learning to Discover Cross-Domain Relations with Generative Adversarial Networks, ICML, 2017
  • Ming-Yu Liu, Oncel Tuzel, “Coupled Generative Adversarial Networks”, NIPS, 2016
  • Ming-Yu Liu, Thomas Breuel, Jan Kautz, Unsupervised Image-to-Image Translation Networks, NIPS, 2017
  • Yunjey Choi, Minje Choi, Munyoung Kim, Jung-Woo Ha, Sunghun Kim, Jaegul Choo, StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation, arXiv, 2017
;