条件生成对抗网络(cGAN)用于图像风格迁移
Image-to-Image Translation with Conditional Adversarial Networks
原文链接:http://arxiv.org/pdf/1611.07004
通过这篇文章介绍一下cGAN的思想。
这篇文章的主要贡献:
现实中有大量的图像风格迁移任务。根据任务的不同,往往需要选择不同的框架,这给开发者造成了很大的困难。所以本文试图提出一种通用框架,为绝大多数图像风格迁移任务提供解决方案。下图是一些使用cGAN的例子。
通过以下四个点来介绍cGAN。
第一,cGAN中“条件”的含义。
我们与普通GAN对比来看。
GAN:
- 生成器G: z->y , 使用噪声生成图片。
- 判别器D: 识别真实图像和生成图像,也就是说一次识别一张图像的真假。
- 优化对象公式:
cGAN:
- 生成器G: (z,x)->y , 使用噪声和输入图片生成风格迁移的图片。
- 判别器D: 通过输入一对图像识别真假,如下图。
- 优化对象公式:
对比之下就可以体现出cGAN与GAN的主要不同了。
第二,G使用U-Net代替自编码器。
上图分别表示自编码器和U-Net结构。可以看出,自编码器要求信息被压缩到很小维度后,整个信息流都是流通的,或者说尽量是无损的。可以想象,这样是比较困难的。U-Net(如果有n层)将第i层与第n-i层连接(指把对应层的特征结合在一起),加强了信息的流通,这样G的功能就更加强大了。
第三,D使用了PatchGAN结构。(这句话可能不太严谨,毕竟D不可能是GAN嘛,主要是方便大家理解)
所谓PatchGAN主要就是对输入D的图像进行分块操作,对每一个块进行判决,最后对所有块的判决评分取平均就实现了对原图的判决(实验证明70x70的块大小最合适)。相比于不分块操作,主要有两个好处:
- 既然可以分块,那么网络对于图像大小就没有什么要求了。这点类似于FCNN。
- 对图像块(比较小)进行判决,网络参数和规模自然减小了。
第四,引入了L1损失。
网络训练过程中,最后的优化对象如公式所示:
其中,
可以看出,L1损失代表真实图像和生成图像差的绝对值。可以这样理解,优化目标的前半部分希望GAN能够重构图像的低频部分,那么后半部分的L1则对生成图像的高频进行一定的约束。至于为何不适用L2,作者说L1会减少模糊(至于为什么,还希望有大佬指点)。
以上四个部分就是cGAN中最关键的几个地方。实验证明,以上四点缺一不可。
总结:在有良好的成对数据集的情况下,cGAN是一个图像风格迁移的良好的baseline。
完
欢迎讨论 欢迎吐槽