论文题目:Image-to-Image Translation with Conditional Adversarial Networks(CVPR 2017)

摘要

我们研究将条件生成式对抗网络作为图像转换问题的通用解决方案。该网络不仅可以学习输入图像到输出图像的映射关系,还能够学习用于训练映射关系的 loss 函数。这使得我们可以使用同一种方法来解决那些传统上需要不同形式的 loss 函数的问题。我们证明了该方法可以有效实现下列任务:从标签图合成相片,从线稿图重构对象,给图片上色等。事实上,在我们放出与本论文关联的 pix2pix 软件后,大量来自互联网的用户已经展示了他们使用我们的系统进行的实验结果,进一步证明了方法的广泛性和易用性。我们不再需要人工设计映射函数,而且这项工作表明,我们即使不手动设计 loss 函数,也能达到合理的结果。

介绍

在图像处理、计算机图形学和计算机视觉领域,很多问题都可以认为是将一张输入图片“翻译”成相对应的输出图片。一个场景可以被渲染为 RGB 图像,梯度域,边缘图或语义图等。我们将图像到图像的翻 译任务定义为:在给定足够训练数据的情况下,将场景的一个可能表示转换成另一个。传统上,每个任务都使用一种单独的,专用的机制来解决。但是实际上这些任务本质上都是一样的:从像素点预测新的像素点。本文的目标就是为这些问题设计一种通用的框架。

同行已经在这个方向取得了重大的进步,CNNs 逐渐成为解决各种图像预测问题的主力。CNNs 通过学习使 loss 函数最小化(评估结果质量的目标),尽管学习过程是自动化的,但仍需要投入大量人力来设计有效的 loss 函数。换句话说,我们仍然需要告诉 CNN 我们希望将什么最小化。但是我们必须得和 Midas 一样小心我们期望的东西!如果我们采用了不成熟的方法,要求 CNN 最小化预测图像和真值图像之间的欧氏距离,那么这将会产生模糊的结果。这是因为欧式距离是通过将所有输出平均来最小化的, 这将会产生模糊的结果。为了得到能够使 CNN 输出锐利,真实的图像,如何设计 loss 函数是一个开放性的且需要专业知识的问题。

相对的,如果我们只需要指定一个高级的目标,比如“产生难以和真实图片分辨的输出”,然后自动学习一个适合目标的 loss 函数,这就非常令人满意了。幸运的是,这正是最近提出的生成对抗网络 GANs 所做的事。GANs 学习的是一个区分真实和伪造图像的 loss 函数,同时训练一个生成模型来最小化这个 loss。模糊的图像将无法被容忍,因为它们看起来像伪造的图像。由于 GANs 学习的是适应于数据的 loss, 因此可以将 GANs 应用到大量的任务中去,而传统方法可能针对不同任务需要不同类型的 loss 函数。

本文中,我们研究有条件的 GANs。和 GANs 从数据中学习一个生成模型一样,条件 GANs 学习一 个条件生成模型。这使 cGANs 适用于图像翻译问题,我们在输入图片上设置条件,得到相应的输出图像。

GANs 在最近两年得到了广泛的研究,本文研究的许多技术在之前就已经提出了。尽管如此,之前的论文都是关注特定的应用,而 cGANs 作为图像转换问题的通用方法的有效性却仍然是不清楚的。我们主要的贡献是阐释了 cGANs 在很多问题上都能产生合理的结果。第二个贡献是提出了一个简单有效的框架,并分析了几种重要结构选择的效果。·

相关工作

图像建模的结构损失 图像翻译问题通常表述为各像素的分类或回归问题,将输出空间视为“非结构化的”,输出的每个像素酌情视为独立于输入图像的其他所有像素。相反,条件 GANs 学习结构化的损失。结构化损失会对输出的节点构造进行惩罚。大多数文献都考虑这种类型的损失,比如条件随机场、SSIM度量、特征匹配、非参数 loss、convolutional pseudo-prior 以及基于匹配协方差统计的损失。我们条件 GAN 不同于这些学习到的损失,理论上可以对不同于输出和目标的任何可能结构进行惩罚。

1.png

条件GANs 我们并不是第一个将 GANs 应用到条件设置下。已经有先前工作用离散标签、文本及图像来约束 GANs。以图片为条件的 GANs 已经解决了图像修复、从法线图预测图像、根据用户约束来编辑图像、视频预测、状态预测、从相片中产生商品和风格迁移等。这些方法都根据特殊的应用进行了改变,我们的方法比他们大多数都要简单。 我们的方法在生成器和判别器几个结构上的选择也不同于之前的工作。我们生成器使用了“U-Net”结构,而判别器使用了卷积“PatchGAN”分类器(只在 patch 的规模下惩罚结构)。前人提出过相似的 PatchGAN 结构,用于捕捉局部风格统计信息。我们的方法在广泛的问题上都有效,并且还讨论了改变 patch size 带来的影响。

方法

GANs 是一个学习随机噪声向量 $z$ 到输出图像 $y$ 的映射的生成模型:$G : z \rightarrow y$。相反的,条件 GANs 学习观察到的图像 $x$ 和随机噪声向量 $z$ 到 $y$ 的映射:$G :\{x, z\} \rightarrow y$。训练生成器 $G$ 产生判别器 $D$ 无法辨别真伪的图像,训练判别器 $D$ 尽可能检测出生成器的“伪造”图像。

目标函数

条件 GAN 的目标函数可以表示为:

$$ \mathcal{L}_{c G A N}(G, D)=\mathbb{E}_{x, y}[\log D(x, y)]+\mathbb{E}_{x, z}[\log (1-D(x, G(x, z)))] $$

其中 $G$ 想要最小化这个函数值,$D$ 想要最大化这个函数值,即 $G^{*}=\arg \min _{G} \max _{D} \mathcal{L}_{c G A N}(G, D)$。

为了测试条件对判别器的重要性,我们比较了没有判别器没有 $x$ 输入的变体形式:

$$ \mathcal{L}_{ G A N}(G, D)=\mathbb{E}_{y}[\log D(y)]+\mathbb{E}_{x, z}[\log (1-D(G(x, z)))] $$

先前的方法已经发现将 GAN 的目标函数与传统 loss 混合很有好处,比如 L2 距离。判别器的工作没有变化,但生成器不仅需要“欺骗”判别器,同时还要尽可能生成真实的图片。我们也研究了这个方面, 但是使用 L1 距离而不是 L2 距离来鼓励更少的模糊:

$$ \mathcal{L}_{L 1}(G)=\mathbb{E}_{x, y, z}\left[\|y-G(x, z)\|_{1}\right] $$

最终的目标函数为:

$$ G^{*}=\arg \min _{G} \max _{D} \mathcal{L}_{c G A N}(G, D)+\lambda \mathcal{L}_{L 1}(G) $$

没有噪声 $z$,网络仍会学习一个从 $x$ 到 $y$ 的映射,但是会产生确定性的输出,从而不满足除了 $\delta$ 函数之外的任何分布。以往的条件 GANs 意识到了这一点,并提供高斯噪声 $z$ 作为生成器除了 $x$ 之外的另一个输入。在初始实验中,我们发现这个策略是无效的,生成器只是简单地学习忽略这些噪声。在我们最终的模型中,在训练和测试阶段我们只以 dropout 的形式向生成器的某几层加入噪声。除去 dropout 噪声,我们在网络的输出中只观察到了微小的随机性。如何设计一个能产生随机输出的条件 GAN,从而捕获模型完整的熵,还是一个未解决的问题。

狄拉克 $\delta$ 函数:在除了零以外的点函数值都等于零,而其在整个定义域上的积分等于 1。

网络结构

我们的生成器和判别器使用了 DCGAN 的结构。生成器和判别器均使用了 conv-bn-relu 形式的模块。

有跳跃的生成器

图像转换问题的一个特征就是将高分辨率的输入网格映射到一个高分辨率的输出网格。此外,对于我们考虑的问题,输入和输出在表象上虽然不一样,但是在底层结构上却是一致的。因此,输入的结构大致上可以和输出的结构对齐。我们基于这些考虑设计生成器结构。

2.png

该领域许多早期工作使用了 encoder-decoder network 来解决这个问题。在这样的网络中,输入经过几层下采样,到达瓶颈层(bottleneck layer),然后逆转之前的过程。这种网络需要所有信息流通过所有的层结构。但是对于许多图像转换问题,在输入和输出之间存在很多可以共享的低级信息,在网络中直接传递这些信息可能会有所帮助。 为了使生成器避开这样的信息瓶颈问题,我们模仿“U-Net”增加了跳跃连接。特别地,我们在每第 $i$ 层和第 $n−i$ 层之间添加跳跃,其中 $n$ 是网络的总层数。每个跳跃简单地将第 $i$ 层和第 $n−i$ 层的特征通道连接在一起。

马尔科夫过程的判别器 (PatchGAN)

L1 和 L2 loss 在图像生成问题上会有模糊的问题。尽管这些 loss 不能鼓励生成高频清晰的图像,但在许多情况下它至少能准确的捕捉到低频信息。对于这种情况下的问 题,我们不需要一个全新的框架来迫使低频信息准确,L1 已经做到了。

这样做使 GAN 的判别器只对高频结构建模,依靠 L1 项来保证低频的准确性。为了对高频信息建模,关注局部图像块(patches)就足够了。因此,我们设计的判别器结构 PatchGAN 只对 patch 规模的结构进行惩罚。判别器将每个 $N \times N$ patch 分类为真或假,在整张图片上卷积地运行这个判别器(滑动窗口),最后取平均值作为 $D$ 的最后输出。

在下文中,我们展示了远比图片尺寸小的 $N$ 仍然可以获得高质量的结果。这是有益的,因为更小的 PatchGAN 参数更少,运行得更快,并且可以应用到任意大的图片上。

这样的判别器将图像建模为马尔可夫随机场,假设通过 patch 直径分割的像素之间相互独立。

最优化和推理

为了优化网络,我们使用标准的方法:交替训练 $D$ 和 $G$。根据原始 GAN 论文中的建议,我们最大化 $\log D(x, G(x, z))$ 而不是最小化 $\log(1 − D(x, G(x, z)))$。除此之外,在最优化 $D$ 时我们将目标函数除以 2,来降低 $D$ 的学习速度。我们使用 minibatch SGD 并应用 Adam 优化器,学习率 0.0002, $\beta_1 = 0.5, \beta_2 = 0.999$。

在推理的时候,我们用训练阶段相同的方式来运行生成器。在测试阶段使用 dropout 和 batch normalization,bn 使用 test batch 的统计值而不是 train batch 的。这种方法下,当 batch size 设为 1 的时 候,就是 instance normalization,对于图像生成任务很有效。在我们的实验中,根据实验使用 1 到 10 的 batch size。

实验

为了研究条件 GANs 的通用性,我们在各种任务和数据集上测试了该方法,包括图形学任务(比如照片生成)和视觉任务(比如语义分割):

3.png

我们发现在小数据集上往往能得到很不错的结果。我们 facade 训练集只包含了 400 张图片,白天到晚上的训练集只包含了 91 个不同的镜头。在这种大小的训练集下,训练可以变得很快。

评价指标

评估合成图像的质量是一个开放性的难题。像 MSE 这种传统指标不涉及结果的联合数据,因此无法测量结构化 loss 想要捕获的特定结构。 为了更加整体性的评估结果的视觉质量,我们使用两种策略。第一,我们在 Amazon Mechanical Turk(AMT)平台上进行了“真假判别”的感知调查。对于像上色、照片生成这样的图形学问题,让人类观察者觉得可信是一个终极目标。因此,我们用这种方法测试了地图生成、航空图生成和图像上色任务。第二,我们用现有的对象识别系统测试了合成的街景是否足够真实。

4.png

AMT感知调查 我们的 AMT 实验方案为:向 Turkers 提供一系列真实的图片和我们算法生成的“假冒”的图片。在每次试验中,每幅图片出现 1s,图片消失后,Turkers 需要在规定时间内指出哪一副图片是假的。每轮实验前 10 张图片用于练习,会给 Turkers 正确答案。在主实验中的 40 次试验中,不会给答案。每组实验只测试一种算法,Turkers 只允许完成一组实验。每个算法大约 50 个 Turkers 来测试,所有图像均为 256x256 大小。对于图片上色实验,真实图片和假冒图片均源自同一张灰度图:对于地图 ↔航空照片,为了提高分辨难度,真实图片和假冒图片不是源自同一输入。

FCN分数 因为生成模型定量评估的困难性,最近许多工作尝试使用已训练好的语义分类器来测量生成图片的可分辨度。从直观上理解,用真实图片训练的分类器有能力对合成的图片进行正确的分类。为了达到这个目的,我们使用流行的 FCN-8s 结构做语义分割,并在 CityScapes 数据集上训练,然后我们根据这些照片合成的标签,通过合成图片的分类准确性为合成照片进行评分。

目标函数的分析

5.png

loss 函数中哪一项更重要?我们进行了模型简化测试(Ablation Study),单独分出 L1 loss 项,GAN loss 项,还比较了加条件(cGAN)/不加条件(GAN)的判别器的情况。

从结果可以看出,只使用 L1 loss 会产生图片模糊的问题。只使用 cGAN( =0) 的情况下,生成的图片细节确实更好,但是在一些情况下会有不自然的问题。将两种 loss 结合( =100 )起来能够减轻这种现象。

我们使用 FCN 分数来评价街景标签 ↔ 相片的任务(上表所示)。基于 GAN 的 loss 函数得到了更高的分数,这表明合成出来的图像包含更多可识别的结构。我们也测试了移除判别器上条件(标记为GAN)的影响。这种情况下。loss 没有惩罚输入和输出中不匹配的地方,它只关心生成的图片是否真实,所以结果非常差。而且不论输入图片,生成器生成几乎一样的图片,在这项任务中这是非常不好的现象,明显 cGAN 表现比 GAN 优秀。然后 L1 loss 项也鼓励输出尊重输入,因为 L1 会对预测输出和真值输出之间的距离进行惩罚,所以 L1 加上 GAN 之后同样可以产生真实且尊重输入的结果,L1+cGAN 得分和L1+GAN 的情况差不多。

色度 条件 GAN 一个显著的优点是甚至能够合成清晰的图像,真实的空间结构,即使该结构在标签输入中不存在。我们猜想 cGANs 在光谱域内也有相似的效果,即使图像色彩更丰富。就像当无法确定边界的时候,L1 loss 会造成模糊的结果,当像素点无法确定颜色的时候,L1 loss 会促使生成平均、灰色调的颜色。特别地,L1 将会通过选择各种可能颜色的条件概率中位数来使 loss 最小。另一方面,对抗 loss 大体上能够判断灰色的输出是不符合真实情况的,会鼓励生成符合真实颜色分布的色彩。在上图中我们研究了 cGANs 在 Cityscapes 数据集中达到的实际效果。图片描述了在 Lab 空间中输出色彩的边缘分布。真实分布用点线表示。显然 L1 导致比真实情况更窄的分布,证明了 L1 鼓励平均,灰度化的颜色。另一方面,使用 cGAN 使输出的分布更加贴合真实分布。

6.png

生成器结构分析

U-Net 结构允许低级信息直接在网络中传递。这会导致更好的结果吗?上图比较了有无 U-Net 结构的效果。单纯的 encoder-decoder 在我们的实验中无法学会生成真实的图像,对于每个输入标签,生成了几乎一样的图像(朦朦胧胧一片)。U-Net 结构并没有依赖于条件 GAN 结构:加和不加 U-Net 结构的网络分别在 L1 和 L1+cGAN 条件下进行了训练,两种情况下 U-Net 结构都达到了更好的效果。

从 PixelGANs 到 PatchGANs 到 ImageGANs

我们测试了判别器接收域使用不同 patch size N 的效果:从 1x1 的 PixelGANs 到整张图像 $256\times 256$ 的 ImageGANs。图片 6 呈现了定性结果,表格 3 呈现了 FCN 分数的定量结果。请注意本文其他地方,如果没有特别指明,均使用的是 $70\times 70$ 的 PatchGANs,本节所有实验都使用 L1+cGAN 的 loss。

7.png

PixelGAN 对于空间清晰度没有帮助,但是提升了结果的色彩效果。比如图中的巴士,在 L1 loss 下是灰色的,在 PixelGAn 下变成了橘红色。颜色直方图匹配在图像处理中一个很常见的问题,PixelGANs 或许能成为一个解决方法。

使用 $16times 16$ 的 PathGAN 进一步提升了输出的清晰度,但是出现了一些不自然的纹理。$70\times 70$ 则减轻了这种效果。如果进一步提高 $N$,使用 $256\times 256$ 并没有提升效果,实际上 FCN 得分还下降了。这也 许是因为 ImageGAN 相比 $70\times 70$ 的 patch 拥有更多的参数和更深的深度,导致难以训练。

附录

网络结构

$C_k$ 表示含有 $k$ 个滤波器的 conv-bn-relu 层,$CD_k$ 表示丢弃率为 50% 的 conv-bn-dropout-relu 层。所有的卷积均为 4x4,stride 为 2。encoder 和判别器中的卷积以 2 为倍数进行下采样,而 decoder 中的卷积以 2 为倍数进行上采样。

生成器结构

encoder-decoder 结构组成如下:
encoder: C64-C128-C256-C512-C512-C512-C512-C512
decoder: CD512-CD512-CD512-C512-C256-C128-C64

在 decoder 的最后一层之后,使用一个卷积来映射到输出信道维数(通常为 3,上色问题中为 2),并跟随一个 Tanh 函数。作为一个例外,BN 没有被应用到 encoder 的第一个 C64 层。encoder 中的所有ReLUs 均为 Leaky-ReLU,slope 为 0.2,decoder 中的 ReLUs 均不是 Leaky-ReLU。U-Net 结构与此基本相同,但 skip 连接改变了 decoder 中的信道数。

U-Net decoder: CD512-CD1024-CD1024-C1024-C1024-C512-C256-C128

判别器结构

70x70 判别器结构为:C64-C128-C256-C512

在最后一层之后,使用一个卷积来映射到一维输出,并跟随一个 Sigmoid 函数。作为一个例外,BN 没有被应用到第一个 C64 层。所有的 ReLUs 均为 Leaky-ReLU,slope 为 0.2。

参考文献

[1] Image-to-Image Translation with Conditional Adversarial Networks

Last modification:August 11th, 2019 at 11:11 pm
如果觉得我的文章对你有用,请随意赞赏