目录
2. Unsupervised Conditional Generation
2.2 Projection to Common Space
2.2.3 Combo GAN(Cycle Consistency)
摘要
对于cGan中的无监督学习部分,可以理解为一种“风格迁移”的技术。但是我们收集不到不同风格间有 link 的数据。对于 Unsupervised Conditional Generation ,将其分为两类:Direct Transformation 与 Projection to Common Space。
首先来讨论第一个类别 Direct Transformation(直接转),直接学习一个生成器,可以将domainX转换为domainY的东西 。接下来讨论了第二个类别 Projection to Common Space(投影到公共空间),先学习一个domain X的encoder,将特征抽出来;之后输入domain Y的decoder,将特征转换为想要的东西。而无监督的cGan主要用于做图片的风格迁移和语音转换等应用上。
1. Unsupervised Condition GAN
上节课讲的是CGAN都是有监督学习,那能不能无监督学习呢?当然可以啦,大多数情况我们很难弄到一个个对应匹配的数据,比如做图片风格转换,你很难弄到同一个图片的不同种风格,里面东西还是一模一样的,再比如,你很难把一个人的声音风格转换到另外一个人声音上,因为可能你说的是中文,另外一个人说英文,找不到一模一样的发音,所以我们需要研究无监督学习,只需要两堆数据,可将某种特征从一堆转到另一堆。
2. Unsupervised Conditional Generation
有两大类的做法:
- 直接转:直接学习一个生成器,可以将domainX转换为domainY的东西
- 投影到公共空间:你先学习一个domain X的encoder,将特征抽出来;之后输入domain Y的decoder,将特征转换为想要的东西
2.1 Direct Transformation
我们要learn一个生成器,他可以将X domain的东西转换为 Y domain的东西;现在我们X domain的东西有一堆,Y domain的东西有一堆,但是合起来的pair没有。那生成器怎么知道给定X domain的东西输出Y domain的东西呢?
- 这个时候就需要一个Y domain的判别器,这个判别器他看过很多Y domian的图片,所以给它一张image,他可以鉴别这个image是不是Y domian的image
- 生成器要做的就是想办法去骗过判别器,这样就生成Y domain的东西
- 但是还要注意生成器生成的东西要与输入有关
2.1.1 利用判别网络
这种方法利用一个判别器,判断生成器输出的图片属于 x domain 或者 y domain,从而训练 生成器使得其输出的图片尽可能贴近于 y domain。但这样的问题是生成器可能输出和输入不相关的图像。
有很多种方法可以解决这个问题,最简单粗暴的方法就是直接无视,因为直接转换下,生成器的深度不足以产生和输入图像相差过大的输出结果。也就是说如果你的生成器网络很浅,输入和输出会特别像,这时候就不需要额外的处理;如果你的生成器网络很深,输入和输出会真的很不一样,这时候就需要额外的处理;
2.1.2 利用预训练网络
用一个已训练好的网络,如VGG;把生成器的输入和输出image,统统丢给这个pre-train好的网络,就会输出两个embedding vector;接下来在训练的时候,一方面生成器要骗过判别器,同时希望两个embedding的vector不要差太多。
2.1.3 Cycle GAN
- 如果你想train一个X domain到Y domain的生成器,你需要同时train一个Y domain到X domain的生成器;第一个生成器用于将风景画变成复古画,第二个用于将复古画还原为原来一模一样的图;然后目标是两次转换以后的图越接近越好。(这个路径叫做cycle consistency)
- 同时训练Y domain的判别器;
- 重复上面的X domain转换为Y domain;我们再训练一个Y domain到X domain同样的结构;
2.2 Projection to Common Space
我们想要做到:
真人图片丢到ENx,可以抽出真人的特征到latent vector(橙色),然后经过二次元的DEx,得到对应的二次元图片;二次元图片丢到ENy,可以抽出二次元的特征到latent vector(橙色),然后经过真人的DEy得到对应的真人图片。
一般的结构为,分别训练两个编码器以编码实际图片和风格图片,再训练两个解码器以解码实际图片和风格图片,最终即可得到一条路径,可以将实际图片转换为风格图片。
由于两个auto-encoder是分开train的,所以两者之间是没有关联的;例如当你丢个X domain的人脸进去,变成一个vector,当输入Y domain的encoder中时,可能出现一个截然不同的卡通人物。因为是分开训练的,所以在latent space中每个维度的表示属性是不一样的,如上面的auto-encoder用第一维代表性别,而下面一组则用其他代表性别;
2.2.1 共享参数
让不同domain的decoder的最后几个hidden layer和encoder的最前面几个hidden layer的参数是共用的;通过共享参数,可能会是不同domain的image压缩到同一个latent space(潜在的空间),即同样的dimension 表示同样的属性。这样的技术被用在couple GAN 和UNIT里面。
2.2.2 增加判别网络
原来X domain和Y domain都是自己搞自己的东西,现在,用一个domain 判别器来判断这个vector是来自于X domain的image还是来自于Y domain的image。两个encoder的作用是骗过这个domain 判别器。当无法判断的时候,就是说明两者被encode到同一个空间。
2.2.3 Combo GAN(Cycle Consistency)
将一张image经过X encoder变成code;再经过Y docoder把它解回来;然后再丢给Y domain的encoder,再透过X domain的decoder把它解回来;然后希望input和output越接近越好。
3. Voice Conversion
过去,用的监督学习的方法,要有一堆对应的声音:然后训练一个seq2seq的模型就可以了,但是这个模型是有缺陷的,例如我想要变声为张学友,那很难请到张学友跟我一起念同样的句子,然后来训练,很麻烦。那如果我想要变声为尼古拉斯凯奇,那就很难搞了,因为他不会中文,就算请到他也讲不来相同的句子。
如今,我们只要收集两组声音,不用讲一样的内容就可以进行训练。
结论与展望
研究无监督CGAN很有意义,因为大多数情况我们很难弄到一个个对应匹配的数据,比如做图片风格转换,你很难弄到同一个图片的不同种风格,里面东西还是一模一样的,所以我们需要研究无监督学习,只需要两堆数据,可将某种特征从一堆转到另一堆。
对于方法一,Direct Transformation(直接转),具体步骤:
- 需要一个Y domain的判别器,这个判别器他看过很多Y domian的图片,所以给它一张image,他可以鉴别这个image是不是Y domian的image
- 生成器要做的就是想办法去骗过判别器,这样就生成Y domain的东西
- 但是还要注意生成器生成的东西要与输入有关
对于方法二,Projection to Common Space(投影到公共空间),具体步骤:
- 分别训练两个编码器以编码实际图片和风格图片
- 再训练两个解码器以解码实际图片和风格图片
- 最终即可得到一条路径,可以将实际图片转换为风格图片