no.2-10/23/2018
一:预定目标
-
继续对GAN的学习。掌握原始GAN的思想和实现,接触其他GAN变形的原理和实现方法。这周学习了 Conditional GAN 的相关模型,分为 supervised和unsupervised两种。(这部分是台大刘宏毅老师GAN课程的学习笔记。他每年都会更新课程,2018年课程的内容都是基于17-18年的paper,有点类似于综述。GAN的内容有10节课,Conditional GAN涉及p2-p3)
-
阅读1-2篇GAN的文献。(未达成,我下载了比较多文献,这几天打算先看老师之前建议的Big GAN开始学习GAN的整个研究过程)
二:目前进度
Project 1. Supervised Conditional GAN:案例:输入一串文字->输出一张与文字描述相符合的图片
- Conditional GAN的定义:直译就是有条件的GAN。要求输出的图片同时满足:符合输入条件限制(match)且 图片的真实性高(realistic)。
- Conditional GAN的原理:就是在G的输入端增加一个Condition:C(输入从一个Vector:z,变成 pair(Condition:C,Vector:z)**),以此来训练Generator神经网络。在训练Discriminator神经网络时,image和文字匹配时才给高分,其他情况都给低分。
- Conditional GAN**的演算法:对Discriminator的训练和常规GAN的训练的差别在于有两种negative example,即无论是图像不真实 还是文字不匹配 都给低分,只有 得高分。对Generator的训练只要使得输入 在Discriminator中得到的分数越高越好。相较于之前的GAN,在演算法上要求同时考虑图像匹配程度和图像真实性。
- Conditional GAN架构的研究:(主要是针对Discriminator)
最常见的架构(大多数paper):输入的image x和 condition c 分别输入到一个网络中,得到输出,将两个输出一起输入到最后一个网络中,以此得到分数。
image.png另一种架构:image x先经过网络得到真实性得分,再和 condition c输入到另一个网络中得到match的程度。
image.png输出两个结果,更好地表达条件(conditional)的关系,如果x的realistic比较低,就训练网络使得realistic变高。如果x的realistic已经够高了,只是和condition不match,就调下面网络,而第一个网络不用变。
- Stack GAN:网络比较复杂,主要原理是先用网络训练Size小的图,再叠加Size大的图一起train,之后一直叠加。
-
其他Conditional GAN 的应用:
Image to image :
-
Traditional supervised approach:产生的图片会是比较模糊的,因为在训练的时候,同一个image会对应很多不同的结果。产生的是很多张图片“平均”的结果。会很模糊。
-
引入GAN,会清晰很多,但是会多一些奇怪的东西,因为在D看来并没有不对的地方。
-
GAN+Close:产生的结果清晰realistic,且和原来的图像接近。
Patch GAN:
-
在image to image 中对D进行设计。如果图像很大,D的参数很多,很容易在训练时网络容易崩溃,而且训练时间长。对很大的图片D只看一小块区域然后进行打分。
-
文章:http://arxiv.org/pdf/1611.07004.pdf Image-to-Image Translation with Conditional Adversarial Networks
-
用GAN做speech enhancement:音频去噪。
-
用GAN做Video Generation:预测影片。
Project 2. Unsupervised Conditional Generation:从两个没有link的数据集训练网络。
案例:输入摄像机拍摄的真实图像->输出真实图像油画版本
Approach 1:Direct Transformation
image.pngDiscriminator用油画进行训练,使得D可以鉴别图像是否是油画。此后使得Generator产生的图像在D中得到高分(原画->油画)。
问题:若G产生了一个完全与input无关的“油画”,这样既骗过了D,但是又不是真实图像的“油画”版本。
要求:G产生的图像不仅要骗过D,还要与input有一定联系。
解决方案:
- 不理会这种情况,在网络不深的情况下,图像改变的程度有限,G的output不可能与input完全无关。
- 用一个per-train的网络,使得input/output经过该网络后产生的结果(Vector)不会差太多。
- 最实用Cycle GAN:在原本网络情况下,在G的output后接一个 还原G的input,训练网络使得还原的图像和原始图像近似。若output与input完全不同,就无法通过 产生与input相似的输出。
- 双向的Cycle GAN:在 原图->油画->原图 的基础上,再训练一个 油画->原图->油画 的网络。
将卡通任务的头发转为银色:[http://github.com/Aixile/chainer-cyclegan](http://github.com/Aixile/chainer-cyclegan)
-
Cycle GAN存在的问题:把咨询藏在人看不到的地方。比如原图红框处是由黑点的,经过 的output图二红方框处是没有黑点的,但是经过 还原的图三又出现了图一的黑点。原因也很好理解,就是经过网络 转换后的信息,不一定是视觉上图像的信息,而可能储存在其他地方。
弊端:机器可能会通过一些方式避开我们原本就要的信息。
- Star GAN****:对应需求,需要进行多个domain之间互相转换。对于一个4 domain 的项目,就需要6个Generator,但是Star GAN可以只用一个Generator完成在多个domain之间互相转换。[Yunjey Choi , arXiv , 2017]
**StarGAN**的原理:
-
在D的训练上:要求对于一个input image要分辨出其真实性(realistic)和所属类型(Domain)。
-
在G的训练上:输入Original Image和Target domain,然后将生成的Output Image和Original domain重新丢回同一个G,生成Reconstructed Image,使得Reconstructed Image和Original Image越接近越好。
-
最后用D鉴别G产生的Output Image是否realistic和所属Domain是否正确。
Approach 2: Projection to Common Space。
原理上就是通过把真人image通过一个Ecoder提取Face Attribute,之后通过Decoder生成对应的二次元任务头像。
image.png过程:通过Encoder X把真人图像的特征Attribute提取出来,然后用Decoder还原真人图像,并用Discriminator进行判别其所属Domain。VAE(Variational Auto-encoder)和GAN两者结合在一起作者称为强化VAE GAN。同理二次元头像一样设计一个VAE GAN。
image.png问题:由于这两个网络是完全独立的,它们的latent space可能是不一样的,所以 产生的Attribute经过 后并不会产生对应的二次元头像。
解决方案:
- 共用接近Attribute的几层网络的hidden layer的参数。使得Encoder将image压到同一个latent spac(真实图像和二次元图像用同样的dimension表示人脸的特征)。Couple GAN和UNIT用这种技术。
- 训练一个Discriminator用来识别Attribute是来自 还是 ,不断训练 和 使得其产生的Attribute不会被Discriminator分辨出来。这样就可以期待两种图像的latent space可以代表一样的特征。
- 类似Cycle GAN,流程:这两个真人image越像越好。Combo GAN用这种技术。
- 改进上面的网络,流程:比较两个 越接近越好。好处在于将图像之间的相似性计算转换为 之间的相似性计算(Semantic Consistency)。DTN和XGAN用这种技术。
代码:https://github.com/Hi-king/kawaii_creator
三:总结和计划
总结:
-
GAN有许多变形,各种类型的GAN是根据需求产生变形的。原始的GAN只考虑产生真实的图像,而Conditional GAN则给图像的类型加了一些限制,使得GAN可以产生我们所需要的特定的图像。
-
新的GAN模型设计思路大多都很巧妙,理解都不太难,但是实现起来难度应该会增加很多。
计划:
-
阅读1-2篇GAN的文献。。
-
继续对GAN的学习。掌握原始GAN的思想和实现,接触其他GAN变形的原理和实现方法。
黄俊嘉
2018年10月23日