Image-to-Image Translation with Conditional Adversarial Networks
Topic:Image-to-image Translation
问题描述:
将一幅图像按照某种规则,”翻译”成另一幅图像。
已有研究:
- 传统上,人们可以通过对规则进行定义来完成这种翻译。但是定义的规则只能适用于单个任务。
- 目前,人们可以使用CNN来学习一个image-to-image的模型。一般CNN的loss是基于生成结果和真实结果之间的欧式距离的,这会导致结果出现模糊,使得生成图像看起来比较假。
- 最近,人们使用GAN来生成图像。GAN网络会学习的loss可以判别生成图像是否真实。一般的神经网络需要自定义loss function,但是GAN可以从训练数据中学习loss,因此GAN的适用范围更广。
本文研究:
使用Conditional GAN (cGAN)来进行image-to-image任务。本文的贡献在于,1) 本文提出的cGAN可使用于多种image-to-image问题中,并且生成的图像有着不错的效果。2) 本文对怎样产生较好的生成结果进行了说明和分析。
GAN和cGAN
GAN网络分为两部分:生成网络G和判别网络D。对于生成网络G,其输入是噪声向量z,输出图像x。判别网络则会判断生成图像x是否是真实的,其输入是图像x,输出是图像x是真实图像的概率。在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。训练的流程如下图所示:

上图左边表示对于判别模型D,如果输入为真实的训练数据,那么模型最终的输出应该接近于1。上图右侧表示如果判别模型的输入为由G生成的样本,那么D的最终输出应该期望接近于0。
数学上,GAN的目标是:

cGAN和GAN稍有不同,G的输入是图像x和噪声z,输出是生成图像y。训练的流程如下图所示:

cGAN的目标是:

值得注意的是,Conditional GAN中的Conditional指的是判别网络D会在考虑输入图像x的条件下,判断生成图像的真实性。除此之外,在cGAN中还引入了L1 loss,(L2 loss会使图像变模糊),所以最终的目标是:

在实际使用的过程中,输入的噪声的目的是使得GAN/cGAN生成非确定性的图像(可以生成若干张图像)。一般在GAN中,输入使用高斯噪声。但是作者表示,在cGAN中,他们没有加入高斯噪声,而是以dropout的形式来产生噪声。
cGAN网络架构
本文使用的生成网络和判别网络来自于DCGAN (arXiv:1511.06434),卷积层符合Convolution-BN-ReLu的结构。
对于image-to-image的问题,需要保证输入图像和生成图像的结构是相似的。这通常可以使用encoder-decoder的网络结构。因此,本文的generator采用了U-Net结构的网络,如下图所示:

图3 generator的网络结构
在本文的cGAN中,discriminator使用了PatchGAN的方法。与常规的GAN中的discriminator不同,不仅仅输出一个值,而是把图像划分成许多patch,判断每个patch与label是否相符(或generator的输出)。
实验
本文在多个数据集上进行了实验,包括Semantic labels-to-photo, Architectural labels-to-photo. Map-to-aerial photo, BW-to-color, Edges-to-photo, Sketch-to-photo, Day-to-night.
下图是对于目标函数中加入L1 loss的实验结果:

可以看书,添加了L1 loss的结果更好。
下图是在generator中使用不同结构的网络的效果,可以看出使用U-Net结构效果更好。
