全文翻译&杂记《Image-to-Image Translation with Conditional Adversarial NetWorks》

Image-to-Image Translation with Conditional Adversarial NetWorks

  这是加里福利亚大学在CVPR 2017上发表的一篇论文,讲的是如何用条件生成对抗网络实现图像到图像的转换任务。
  > 原文链接:https://arxiv.org/abs/1611.07004
  > 论文主页:https://phillipi.github.io/pix2pix/,其中包含了PyTorch、Tensorflow等主流框架的代码实现

  
  图像、视觉中很多问题都涉及到将一副图像转换为另一幅图像(Image-to-Image Translation Problem),这些问题通常都使用特定的方法来解决,不存在一个通用的方法。但图像转换问题本质上其实就是像素到像素的映射问题,这篇论文提出“条件生成对抗网络(CGAN)”能够解决这一问题。如上图所示,使用CGAN可以实现语义/标签到真实图片、灰度图到彩色图、航空图到地图、白天到黑夜、线稿图到实物图的转换。使用完全一样的网络结构和目标函数,仅更换不同的训练数据集就能分别实现以上的任务。

摘要

  我们研究将条件生成对抗网络作为图像转换问题的通用解决方案。该网络不仅可以学习输入图像到输出图像的映射关系,还能够学习用于训练映射关系的loss函数。这使得我们可以使用同一种方法来解决那些传统上需要各种形式loss函数的问题。我们证明了该方法可以有效实现下列任务:从标签图合成相片,从线稿图重构对象,给图片上色等。所以我们不再需要人工设计映射函数,而且这项工作表明,我们即使不手动设计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在很多问题上都能产生合理的结果。第二个贡献是提出了一个简单有效的框架,并分析了几种重要结构选择的效果。·

相关工作

  1. 图像建模的结构loss
  图像转换问题通常表述为各像素的分类或回归问题,将输出空间视为“非结构化的”,输出的每个像素酌情视为独立于输入图像的其他所有像素。相反的,条件GANs学习结构化的loss。结构化loss会对输出的节点构造进行惩罚。大多数文献都考虑这种类型的loss,比如条件随机场、SSIM度量、特征匹配、非参数loss、convolutional pseudo-prior以及基于匹配协方差统计的loss。我们条件GAN不同于这些学习到的loss,理论上可以对不同于输出和目标的任何可能结构进行惩罚。
  2. 条件GANs
  我们并不是第一个将GANs应用到条件设置下。已经有先前工作用离散标签、文本及图像来约束GANs。以图片为条件的GANs已经解决了图像修复、从法线图预测图像、根据用户约束来编辑图像、视频预测、状态预测、从相片中产生商品和风格迁移等。这些方法都根据特殊的应用进行了改变,我们的方法比他们大多数都要简单。
  我们的方法在生成器和判别器几个结构上的选择也不同于之前的工作。不同于之前,我们生成器使用了“U-Net”结构,而判别器使用了卷积“PatchGAN”分类器(只在patch的规模下惩罚结构)(我就是为了这个才看看这篇论文的!)。前人提出过相似的PatchGAN结构,用于捕捉局部风格统计信息。我们的方法在广泛的问题上都有效,并且还讨论了改变patch size带来的影响。

方法

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

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

L c G A N ( G , D ) = E x , y p d a t a ( x , y ) [ log D ( x , y ) ] + E x p d a t a ( x ) , z p z ( z ) [ log 1 D ( x , G ( x , z ) ) ]

  
其中 G 想要最小化这个函数值, D 想要最大化这个函数值,即 G = arg min G max D L c G A N ( G , D )
  为了测试条件对判别器的重要性,我们比较了没有判别器没有 x 输入的变体形式:

L G A N ( G , D ) = E y p d a t a ( y ) [ log D ( y ) ] + E x p d a t a ( x ) , z p z ( z ) [ log 1 D ( G ( x , z ) ) ]

  
  条件GAN先前的方法发现使用传统的loss(比如L2距离)有利于混合GAN目标方程:判别器的工作保持不变,但是生成器不仅要欺骗判别器,还要尽可能生成真实的图片。我们也研究了这个方面,使用L1距离而不是L2距离,因为L1鼓励更少的模糊:

L L 1 ( G ) = E x , y p d a t a ( x , y ) , z p z ( z ) [ y G ( x , z ) 1 ]

  
我们最后的目标方程为:

G = arg min G max D L c G A N ( G , D ) + λ L L 1 ( G )

  
  没有 z 的情况下,网络仍然能够学习 x y 的映射,but would produce deterministic outputs, and therefore fail to match any distribution other than a delta function(这句话不是很理解)。过去的条件GANs也提到了这个问题,并在 x 上附加一个高斯噪声 z 作为生成器的输入。在最初的实验中,我们发现这个策略并没不有效——生成器只是简单的忽略了噪声输入,这个现象和Mathieu等人的论文一致。所以在我们最终的模型中,在训练和测试阶段我们只以dropout的形式向生成器的某几层中加入噪声。除去dropout噪声,我们在网络的输出中只观察到了微小的随机性。如何设计一个能产生随机输出的条件GAN,从而捕获模型完整的熵,还是一个未解决的问题。
  
  2.2 网络结构
  我们使用[30]中生成器和判别器的结构,两者都使用conv-BatchNorm-ReLu的卷积单元形式。附录提供了网络结构的细节,下面我们只讨论主要特征。
  
  2.2.1 带有跳线的生成器
  图像转换问题的一个特征就是将高分辨率的输入网格映射到一个高分辨率的输出网格。此外,对于我们考虑的问题,输入和输出在表象上虽然不一样,但是在底层结构上却是一致的。因此,输入的结构大致上可以和输出的结构对齐。我们基于这些考虑设计生成器结构。
  该领域许多早期工作使用了encoder-decoder network来解决这个问题。在这样的网络中,输入经过几层下采样,到达瓶颈层(bottleneck layer),然后逆转之前的过程。这种网络需要所有信息流通过所有的层结构。但是对于许多图像转换问题,在输入和输出之间存在很多可以共享的低级信息,在网络中直接传递这些信息可能会有所帮助。
  为了使生成器避开这样的信息瓶颈问题,我们模仿“U-Net”增加了跳线连接。特别的,我们在每第 i 层和第 n i 层之间添加跳线,其中 n 是网络的总层数。每根跳线简单的将第 i 层和第 n i 层的特征通道连接在一起。

  
  2.2.2 马尔科夫过程的判别器(PatchGAN)
  众所周知,L1和L2 loss在图像生成问题上会有模糊的问题。尽管这些loss不能鼓励生成高频清晰的图像,但在许多情况下它至少能准确的捕捉到低频信息。对于这种情况下的问题,我们不需要一个全新的框架来获得低频信息的准确率,L1已经做到了。
  这样做使GAN的判别器只对高频结构建模,依靠L1项来保证低频的准确性。为了对高频信息建模,关注对局部图像块(patches)就已经足够了。因此,我们设计的判别器结构只对patch规模的结构进行惩罚。判别器将每个 N × N 分类为真或假。我们在整张图片上运行这个判别器(滑动窗口),最后取平均值作为 D 的最后输出。
  在3.4节中,我们展示了远比图片尺寸小的 N 仍然可以获得高质量的结构。这是有益的,因为更小的PatchGAN参数更少,运行得更快,并且可以应用到任意大的图片上。
  这样的判别器将图像建模为马尔可夫随机场,假设通过patch直径分割的像素直接相互独立。这个发现早在[25]中就已经研究过了,并且是在纹理、风格模型中很常用的一个假设。我们的PatchGAN因此可以理解为是纹理/风格loss的一种形式。

  2.3 优化和推理
  为了优化网络,我们使用标准的方法:交替训练 D G 。我们使用minibatch SGD并应用Adam优化器。
  在推理的时候,我们用训练阶段相同的方式来运行生成器。在测试阶段使用dropoutbatch normalization,这里我们使用test batch的统计值而不是train batch的。这种方法下,当batch size设为1的时候,就是instance normalization,对于图像生成任务很有效。在我们的实验中,一些实验使用1的batch size,其他的使用4,发现在这两种情况下差异很小。

实验

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

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

  3.1 评估指标
  评估合成图像的质量是一个开放性的难题。像MSE这种传统指标不涉及结果的连合统计,因此无法测量结构loss想要捕获的特定结构。
  为了更加整体性的评估我们结果的视觉质量,我们使用两种策略。第一,我们在Amazon Mechanical Turk(AMT)平台上进行了“真假判别”的感知调查。对于像上色、照片生成这样的图形学问题,可信度通常是人类观察者的终极目标。因此,我们用这种方法测试了地图生成、航空图生成和图像上色任务。第二,我们用现有的对象识别系统测量了合成的街景是否足够真实。这个指标和文献[36]中的“Inception Score”、[39]中的对象检测评估、[46]中的“Semantic Interpretability”的概念比较相似。
  1. AMT 感知调查
  我们的AMT实验使用了[46]中的方案:向Turkers提供一系列真实的图片和我们算法生成的“假冒”的图片。在每次试验中,每幅图片出现1s,图片消失后,Turkers需要在规定时间内指出哪一副图片是假的。每轮实验前10张图片用于练习,Turkers会得到正确答案。在主实验中的40次试验中,不会给出答案。每组实验只测试一种算法,Turkers只允许完成一组实验。每个算法大约50个Turkers来测试,所有图像均为256x256大小。和[46]不同,我们没有包括警惕性测试。对于图片上色实验,真实图片和假冒图片均源自同一张灰度图;对于地图 航空照片,为了提高分辨难度,真实图片和假冒图片不是源自同一输入。

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

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

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

  
  我们使用FCN分数来评价街景标签 相片的任务(上表所示)。基于GAN的loss函数得到了更高的分数,这表明合成出来的图像包含更多可识别的结构。我们也测试了移除判别器上条件(标记为GAN)的影响。这种情况下。loss没有惩罚输入和输出中不匹配的地方,它只关心生成的图片是否真实,所以结果非常差。而且不论输入图片,生成器生成几乎一样的图片,在这项任务中这是非常不好的现象,明显cGAN表现比GAN优秀。然后L1 loss项也鼓励输出尊重输入,因为L1会对预测输出和真值输出之间的距离进行惩罚,所以L1加上GAN之后同样可以产生真实且尊重输入的结果,L1+cGAN得分和L1+GAN的情况差不多。
Fig 7
  色度:条件GAN一个显著的优点是甚至能够合成在标签输入中不存在空间结构,并且产生清晰的图像。我们猜想cGANs在光谱域内也有相似的效果,即使图像色彩更丰富。就像当无法确定边界的时候,L1 loss会造成模糊的结果,当像素点无法确定颜色的时候,L1 loss会促使生成平均、灰色调的颜色。特别的,L1将会通过选择各种可能颜色的条件概率中位数来使loss最小。另一方面,对抗loss大体上能够判断灰色的输出是不符合真实情况的,会鼓励生成符合真实颜色分布的色彩。在上图中我们研究了cGANs在Cityscapes数据集中达到的实际效果。曲线描述了在Lab空间中输出色彩的边缘分布。真实分布用点线表示。显然L1导致比真实情况更窄的分布,证明了L1鼓励平均,灰度化的颜色。另一方面,使用cGAN使输出的分布更加贴合真实分布。

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

  3.4 从PixelGANs到PatchGANs到ImageGANs
  我们测试了判别器接收域使用不同patch size N的效果:从1x1的“PixelGANs”到整张图像256x256的“ImageGANs”。上图图呈现了定性结果,上表呈现了FCN分数的定量结果。请注意本文其他地方,如果没有特别指明,均使用的是70x70的“PatchGANs”,本节所有实验都使用L1+cGAN的loss。
  PixelGAN对于空间清晰度没有帮助,但是提升了结果的色彩效果。比如图中的巴士,在L1 loss下是灰色的,在PixelGAn下变成了橘红色。颜色直方图匹配在图像处理中一个很常见的问题,PixelGANs或许能成为一个解决方法。
  使用16x16的PathGAN进一步提升了输出的清晰度,但是出现了一些不自然的纹理。70x70则减轻了这种效果。如果进一步提高N,使用256x256并没有提升效果,实际上FCN得分还下降了。这也许是因为ImageGAN相比70x70的patch拥有更多的参数和更深的深度,导致难以训练。

猜你喜欢

转载自blog.csdn.net/qq_16137569/article/details/79950092