学习资料来源
读芯术 -【学术报告】阿里巴巴洪佳鹏:生成对抗网络和隐层属性交换的人脸属性迁移
[感谢读芯君,感谢供稿人:张继]
学习笔记
1. GAN(生成对抗网络)介绍
生成体现在生成器从无到有,
对抗体现在生成器和判别器的目标
可以从目标函数看出,判别器的任务就是判别真假样本,生成器的任务就是要骗过它,使得生成的样本判定成一个真的样本。
生成器生成样本,经过判别器的判别以后反馈给它的信息是生成的还不够好,也会引导继续生成更好的样本。
2. 图像翻译(图像->图像)
概念
(1)图像域:具有某种属性的图象集合
- 所有戴眼镜的人可以看成一个图像域,因为都有一套相同的属性,就是眼镜。
(2)属性相对的图像域:同一个属性的不同取值形成的不同图像域
- 戴眼镜 vs 不戴眼镜
(3)图像ID
- 对于特定属性来说,一张图像的ID是指它在该属性的不同图像域中的图像所共有的部分
(4)配对样本/费配对样本
- 配对样本:一个人戴眼镜和同一个人不戴眼镜的样本
- 非配对样本:一个人戴眼镜和其他人不戴眼镜的样本
(5)人脸图像编辑
- 添加或者移除一种或多种人脸属性
3. 常见的翻译算法
(1)判别器去判断图像是否落在图像域内(最常见做法)
CycleGAN、UNIT、DTN、StarGAN、DNA-GAN、ELEGANT
非匹配样本可训练
-
CycleGAN
有两个互为逆映射的生成器分别负责两个图像域互转,两个判别器分别判别图像是否分别来自两个图像域。这里判别器的任务有两个,一个是判别图像域是不是对的,就是有/没有属性,以及图像质量是不是跟真实样本匹配。
-
UNIT
把生成器拆成编码器和解码器,编码器分别对两个域的图像做编码,可以共享高层,这样使得两个图像域的编码落在同一个空间里面,解码的时候输入给特定的解码器,A图像域解码器生成的是A图像域,B图像域解码器生成的是B图像域,然后判别器判断图像域是否是对的。
-
StarGAN
CycleGAN的拓展,可以针对多个图像域,也有多个属性,比如眼镜、刘海和微笑各种属性,生成器提供的不只是一张图,可以把想要转过去的属性告诉它,就是可以同时指定多个属性修改,生成器也只修改指定的属性。多属性修改的算法很多都是采用条件判别器的做法,StarGAN则采用的是AcGAN的做法,通过判别器接收一张图,除了判断真假以外,还要把这个图像域的信息预测出来。
(2)判别器去判断翻译结果的匹配度
- pix2pix
- 需要配对样本(supervised learning)
-
判别器主要任务:图像域的正确性,图片质量,图像匹配程度
(3)判别器在hidden layer对抗
- FaderNets
- 通过对抗分离属性与图像ID
- 缺点:训练难度大
-
判别器主要任务
判别器要从图像的编码当中预测出图像域的信息,对编码器来说则不能让判别器得逞,要将属性的信息从图像编码中剥离出去。也就是说它需要使得判别器的预测是相反的。
4.报告作者的主要工作
(1)DNA-GAN
交换隐形编码
*编码器分别编码各个属性,然后交换两张图特定属性的编码就可以交换属性,因为是通过跟范例图交换属性,因此可以引入多样性。前面介绍的其他图像翻译方法都很难引入多样性,针对属性的建模就是1和0,也就是有和没有,没办法确定加上什么类型的眼镜或者刘海,而我们这里是可以控制的。-
如何分别编码?
首先需要指定编码的顺序,要求前面一部分是编码眼镜,后面一部分是编码刘海,还有一部分是编码和两个属性无关的图像ID。考虑第一个属性的时候只用第一个属性的图片,上面带加号的代表有这个属性,减号代表没有这个属性。考虑第一个属性的时候只用第一个属性的图片,考虑第二个属性的时候只用第二个属性的图片,这样就可以和属性编码挂上钩。然后会做一个交叉重组,会有四个结果:两种是和原来的一样,另外两个结果就是换了特定的部分,比如换了第一个属性,然后解码出来四张图,两张是和原图一样的,两张是新的图,就是只换了第一个属性。
(2)ELEGANT
继承自隐层做差。
无需湮灭/零化操作
-
无需建模图像ID
隐层直接做差的话可能不太好学,因为两张得到两张新图所需要的残差图,它们的编码在隐层做差意义下,只差了一个符号,这是有点难学的。ELEGANT则会自己去学习做差的操作,简单的做法就是把两个编码拼起来,要求从前面的编码转化到后面的编码,这也可以看成是一种做差的做法,解码器自己去学做差。这样做也没有平凡解的问题,不需要建模图像ID。
-
Batch Normalization 有问题
*训练结果正常,测试没效果
BN回破坏图像色彩、亮度、对比度等信息(U_net可解决)
涉及到两批来自不同域的图,BN不收敛导致归一化失效- 替代方案:l2 normalization