学习报告 2
条件对抗网络的图像到图像翻译 PIX2PIX (CVPR 2017)
(参考:翻译)
该论文研究将条件生成对抗网络作为图像转换问题的通用解决方案。该网络不仅可以学习输入图像到输出图像的映射关系,还能够学习用于训练这种映射关系的损失函数。这使得我们可能可以使用一种通用方法来解决那些传统上需要各种形式损失函数的问题。论文证明了该方法可以有效实现下列任务:根据标签图合成相片,从线稿图重构对象,给图片上色等。大量的系统实验证明,其具有广泛的适用性且易于采用,而无需参数调整。所以我们不再需要人工设计映射函数。并且这项工作表明,即使我们不手动设计损失函数,也能获得合理的结果。
该论文的主要贡献包括:
-
证明conditional GAN在各种各样的问题上都能产生合理的结果。
-
提出一个简单的框架,其效果足以达到良好,并分析几个重要的结构选择的效果。
在图像处理、计算机图形学和计算机视觉领域,很多问题都可以认为是像语言翻译一样,将一张输入图片“翻译”成相对应的输出图片。一个场景可以被渲染为RGB图像,梯度域,边缘图或语义图等。类比自动语言翻译,我们将图像到图像的转换问题定义为,在给定足够训练数据的情况下,将场景的一个可能表示转换成另一个。传统上,每个任务都使用一种单独的,专用的机制来解决(例如用于纹理合成和转移的图像绗缝,图像类比,用于语义分割的全卷积网络,整体嵌套边缘检测等等)。但是实际上这些任务本质上都是一样的:根据像素点来预测新的像素点。本文的目标就是为这些问题设计一种通用的框架。
此前CNNs逐渐成为解决各种图像预测问题的主力,通过学习使损失函数最小化(评估结果质量的目标)。尽管学习过程是自动化的,但仍需要投入大量人力来设计有效的损失函数。而如果采用了不成熟的方法,例如要求CNN最小化预测图像和真值图像之间的欧氏距离,因为欧式距离是通过将所有输出平均来最小化的,这将会产生模糊的结果(例如上下文编码器:图像修复的特征学习的实验结果)。为了使CNN输出锐利,真实的图像,如何设计损失函数是一个开放性的且需要专业知识的问题。
传统方法可能针对不同任务需要不同类型的loss函数,相对的,生成对抗网络GANs只需要指定一个高级的目标,比如“产生难以和真实图片分辨的输出”,然后就能自动学习一个适合目标的损失函数。GANs学习的是一个区分真实和伪造图像的损失函数,同时训练一个生成模型来最小化这个loss。模糊的图像将无法被容忍,因为它们看起来像伪造的图像。由于GANs学习的是适应于数据的loss,因此可以将GANs应用到大量的任务中去。而有条件的GANs在图像到图像翻译问题的通用方法的有效性此前尚未清楚,该论文正是探讨这一问题。
-
用于图像建模的图像到图像转换问题通常表示为像素分类或回归问题(例如用于语义分割的全卷积网络,整体嵌套边缘检测等)。这些构思将输出空间视为“非结构化”的,因为在给定输入图像的情况下,每个输出像素被视为条件独立于所有其他像素,而有条件的GAN学习结构性的损失。结构化损失会对输出的节点构造进行惩罚。大量文献考虑了这类损失,包括条件随机场、SSIM度量、特征匹配、非参数损失、卷积pseudo-prior和基于匹配协方差统计的损失。条件GAN的不同之处在于它的损失是可学习的,并且在理论上可以惩罚输出和目标之间的任何可能的结构。
-
在该论文之前,将GANs应用到条件设置下的工作包括:用离散标签、文本及图像来约束GANs。以图片为条件的GANs已经解决了图像修复、从法线图预测图像、根据用户约束来编辑图像、视频预测、状态预测、从相片中产生商品(PixelDTGAN)和风格迁移等。这些方法都根据特殊的应用进行了改变,而本文的方法比他们大多数都要简单。该方法在生成器和判别器几个结构上的选择也不同于之前的工作,其生成器使用了“U-Net”结构(U-Net:用于生物医学图像分割的卷积网络),而判别器使用了卷积“PatchGAN”分类器(只在patch的规模下惩罚结构)。前人提出过相似的PatchGAN结构(马尔可夫生成对抗网络预先计算的实时纹理合成),用于捕捉局部风格统计信息。该论文的方法在广泛的问题上都有效,并且还讨论了改变patch size带来的影响。
![](https://i-blog.csdnimg.cn/blog_migrate/79389f195ccc63f47cfc4db08a99dfde.png)
PIX2PIX网络要求提供image pairs,也即是要求提供x和y,整个思路为:从噪声z,根据条件x,生成和真实图片y相近的y’(即G(x))。而条件x和图像y是具有一定关联性的。
条件GAN的目标函数可表示为:
![](https://i-blog.csdnimg.cn/blog_migrate/33ee9a715eda4cf11f417d563c5a877e.png)
没有条件的GAN,即没有x输入的情况下目标函数为:
![](https://i-blog.csdnimg.cn/blog_migrate/a1a58a73c5025055852eb9e2eead21c9.png)
由于上下文编码器:图像修复的特征学习发现了混合GAN目标函数和一个传统的损失如 L 2 L_{2} L2损失,效果更好。因此判别器工作不变,而生成器的任务不仅要欺骗判别器,还要使输出在欧式距离上接近ground truth。而为了使模糊更少,与 L 2 L_{2} L2相比,本文采用了 L 1 L_{1} L1损失。
![](https://i-blog.csdnimg.cn/blog_migrate/fa2b8670d9e0c289f0dfb9afa11653c9.png)
最终的目标函数为:
![](https://i-blog.csdnimg.cn/blog_migrate/0763b1fd1b06e1b2b83eb711c706400f.png)
没有z的情况下,网络会产生确定性输出。而在x上附加一个高斯噪声z作为生成器输入,这个策略也没有效(由超越均方误差的深度多尺度视频预测一文可知)。因此在最终的模型中,作者在训练和测试阶段以dropout的形式向生成器的某几层中加入噪声。但尽管有dropout噪声,作者在网络的输出中只观察到了微小的随机性。如何设计产生随机输出的条件GAN,从而捕获其模型的条件分布的完整熵,仍然是一件待完成的工作。
作者使用深度卷积生成对抗网络的无监督表示学习(DCGAN)中生成器和判别器的结构,两者都使用conv-BatchNorm-ReLu的卷积单元形式。
![](https://i-blog.csdnimg.cn/blog_migrate/2c22b85b5a066b381a10718cba639ab1.png)
图像转换问题的一个特征就是将高分辨率的输入网格映射到一个高分辨率的输出网格。对于我们考虑的问题,输入和输出在表象上虽然不一样,但是在底层结构上却是一致的。因此,输入的结构大致上可以和输出的结构对齐。生成器结构基于这些考虑设计。
该领域许多早期工作(例如上下文编码器:图像修复的特征学习)使用了encoder-decoder network(图2 左)来解决这个问题。在这样的网络中,输入经过几层下采样,到达瓶颈层(bottleneck layer),然后逆转之前的过程。这种网络需要所有信息流通过所有的层结构。但是对于许多图像转换问题,在输入和输出之间存在很多可以共享的低级信息,最好在网络中直接传递这些信息。
![](https://i-blog.csdnimg.cn/blog_migrate/6cf01c5401a067f9b67b13e587bf52c6.png)
为了使生成器避开这样的信息瓶颈问题,作者模仿“U-Net”(图2右)(U-Net:用于生物医学图像分割的卷积网络)增加了跳线连接。在每对第i层和第n−i层之间添加跳线,其中n是网络的总层数。每根跳线简单的将第i层和第n−i层的特征通道连接在一起。
我们不需要一个全新的框架来获得低频信息的准确率,因为 L 1 L_{1} L1已经做到了。这样做促使让GAN的判别器只对高频结构建模,依靠L1项来保证低频的准确性。为了对高频信息建模,关注对局部图像块(patches)就已经足够了。因此,作者设计了一种判别器结构只对patch规模的结构进行惩罚。判别器将每个N×N分类为真或假。我们在整张图片上运行这个判别器(滑动窗口),最后取平均值作为判别器D的最后输出。通过实验发现,远比图片尺寸小的N仍然可以获得高质量的结构。因为更小的PatchGAN参数更少,运行得更快,并且可以应用到任意大的图片上。
这样的判别器将图像建模为马尔可夫随机场,假设距离大于patch直径的像素之间相互独立。这个发现早在马尔可夫生成对抗网络预先计算的实时纹理合成中研究过,并且是在纹理、风格模型中很常用的一个假设。该论文的PatchGAN因此可以理解为是纹理/风格损失的一种形式。
为了优化网络,作者使用方法:交替训练D和G。使用minibatch SGD并应用Adam优化器。
在推理的时候,作者用训练阶段相同的方式来运行生成器。在测试阶段使用dropout和batch normalization(批次归一化),这里使用test batch的统计值而不是train batch的。这种方法下,当batch size设为1的时候,就是instance
normalization(实例归一化),对于图像生成任务很有效。
使用周期一致的对抗网络进行不成对的图像到图像的翻译 CycleGAN (ICCV 2017)
图像到图像的转换是一类视觉和图形问题,其目标是学习一个从输入图片到目标图片的映射,在训练中需要使用成对的训练集。但是对于许多任务,成对的训练数据并不是那么容易获得的。该论文提出了一种在没有成对例子的情况下学习将图像从源域X转换到目标域Y的方法。目标是学习一个从源域(source domain)到目标域(target domain)的映射G:X→Y来进行图像的迁移。使用一个对抗损失,使得来自于G(X)的图片的分布与分布Y无法区分,即使得生成的图片的分布与目标域的图片的分布逼近。既然两者的分布是趋向于相同的,那么可以想到,既然A与B无法区分,那么也意味着B与A无法区分,即这个关系是相对的,所以就可以定义一个逆映射F:Y→X,于是引入一个循环一致性损失(a cycle consistency loss)来使得F(G(X))≈X(反之亦然),含义就是把源域的生成的图片再映射回源域,其分布依然是趋于相同的。实验结果和分析证明了该方法的优越性。
该论文的核心贡献是提出了一种双向GAN模型,通过双向对抗损失和循环损失的约束使得生成器的映射域更加逼真。该方法在训练过程中对图片不要求匹配,即给出的是两个图像域,需要学习域之间的映射。
CycleGAN与PIX2PIX来自同一个团队,其与PIX2PIX的不同之处在于CycleGAN不要求提供具有关联性的成对图像,而PIX2PIX需要。
CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。两个GAN共享两个生成器,并各自带一个判别器,即共有两个判别器和两个生成器。从理论上使用对抗学习可以使生成的分布逼近于目标域的分布,且使反转后的分布近似于源域的分布,但是实际中发现,可能出现Mode Collapse问题,因此有了循环一致性损失来面对该问题。