CVPR:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

摘要

背景:图像到图像的迁移是计算机视觉中的一个很有意思的问题。目标是学习一个从输入图片到目标图片的映射,在训练中需要使用成对的训练集。

问题:成对的训练数据并不是那么容易获得的。

本文方法:学习一个从源域(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 (反之亦然),含义就是把源域的生成的图片再映射回源域,其分布依然是趋于相同的。

实验:

  • 定性分析:不使用成对的训练集的迁移结果展示,包括collection style transfer,object transfiguration,season transfer,photo enhancement等;
  • 定量分析:与一些其它的使用成对数据训练的方法进行比较。

简介:

这里写图片描述

如图-1左上为例,同一场景下,莫奈的画作与照片的记录展现出了两种不同的情境,我们不禁畅想,给你一副莫奈的画作,是不是可以自动的产生照片中真实的场景,抑或是给你一副真实的场景,是否可以自动的将其转化为莫奈的风格。作者展示了其方法的魔力,不像其它的方法在训练中需要一一对应排序好的训练数据,只需要两个无序的集合X(源域)和Y(目标域),该算法就可以自动地进行风格的迁移。

稍微回顾下图像到图像的迁移:给定一个场景的图像x,将其转换到另一个场景的y,比如:将灰度图转化到彩色的图,图像到语义标签。目前也有很多研究工作,使用成对的数据 { x , y } 进行风格的迁移。如图-2左侧所示。
这里写图片描述

但是呢,这些成对出现的数据集并不是那么容易获得的。于是本文探究了一个算法,不需要这些成对的数据,如图-2中右侧所示。这里作者做了一个假设:在源域和目标域存在潜在的关系。其实就是两者从分布上而言,是存在相似性的。这里留下一个问题:如果两个域完全不同或者说差别非常大结果会怎么样呢?

给定源域的图片集合X以及另一个域的图片集合Y,我们使用对抗的思想学习一个映射 G : X Y ,其输出 y ^ = G ( x ) , x X ,与 y Y 无法区分。

我们不禁想到这样一个问题,这个不成对的训练是怎么进行的呢?如果仍然使用传统的GAN的损失和训练方式,使用这些不成对的数据集进行训练,会出现什么问题呢?作者发现:

  • 无法保证对于一个输入x,可以得到有意义的输出y,因为使用了不成对的训练集,但是可以学到无数种的映射G,而这些G都可以使生成的分布 y ^ 逼近与目标域。
  • 单独优化对抗损失非常困难,导致了一些不可名状的问题,如model collapse(即生成的样本的多样性问题)。

如何解决呢?作者发现在迁移过程中有这样一个特性——”循环一致性“。比如:我们将一个句子从英语翻译到法语,再将其翻译回英语,我们应该得到与原始的英文相同的句子(不禁想起了以前整理的的Dual Learning的文章,有兴趣的可以看下)。用数学符号来表示下:我们有一个转换器(映射): G : X Y ,和另一个转换器 F : Y X 。那么G和F应该是互逆的,即两者是一个双向映射。于是可以同时训练G和F来确保这个性质,增加一个循环一致性损失,使得 F ( G ( x ) ) x 以及 G ( F ( x ) ) y 。组合该损失和对抗损失,就得到了我们整体的非正对的图像到图像迁移的优化目标。

扫描二维码关注公众号,回复: 2788317 查看本文章

公式

这里写图片描述

给定训练集样本 { x i } i = 1 N X { y j } j = 1 M Y 。如图-3(a)所示,模型包含两个映射: G : X Y F : Y X 。此外,引入两个对抗的判别器 D X D Y D X 的作用是用来判别 { x } { F ( y ) } D Y 的作用是用来判别 { y } { G ( x ) } 。优化目标包含两项:

  • 对抗损失(adversarial loss):促使生成图像分布与目标域的图像分布相逼近
  • 循环一致性损失(cycle consistency loss):使得 F ( G ( x ) ) x 以及 G ( F ( x ) ) y 。防止学习到的映射G和F互相矛盾。

对抗损失

将对抗损失应用到两个映射上。对于映射函数 G : X Y 和它的识别器 D Y ,目标函数为:

(1) L G A N ( G , D Y , X , Y ) = E y p d a t a ( y ) [ l o g D Y ( y ) ] + E x p d a t a ( x ) [ l o g ( 1 D Y ( G ( x ) ) ) ]

其中,G的作用是生成图片G(x),且看起来就像目标域Y的图片, D Y 的作用是区分生成的G(x)和真实的样本y。同样的,对于映射 F : Y X ,有:
L G A N ( F , D X , Y , X ) = E x p d a t a ( x ) [ l o g D X ( x ) ] + E y p d a t a ( y ) [ l o g ( 1 D X ( F ( y ) ) ]

循环一致性损失

从理论上使用对抗学习可以使生成的分布逼近于目标域的分布,且使反转后的分布近似于源域的分布,但是实际中发现,或出现Mode Collapse问题,如下图所示(图片来源于:https://blog.csdn.net/SPARKKKK/article/details/72598041):
这里写图片描述

即我们生成的分布(红色)很可能会偏向于目标分布(蓝色)的某一部分(图中表示为一座峰)。例如训练集有很多种类别(如猫狗牛羊),但是我们只能生成狗(或猫或牛或羊),虽然生成的狗的图片质量特别好,但是!整个G就只能生成狗,根本没法生成猫牛羊,陷入一种训练结果不好的状态。这和我们对GAN的预期是相悖的(该解释来自于https://blog.csdn.net/SPARKKKK/article/details/72598041)(关于Mode Collapse大家可以阅读这篇文章)。因此有了循环一致性损失来面对这个问题。如图-3(b)所示,对于每一张来自于源域X的图片x,都有: x G ( x ) F ( G ( x ) ) x ,成为前向循环一致性(forward cycle consistency)。同样的,有反向循环一致性(backward cycle consistency): y F ( y ) G ( F ( y ) ) y 。由此得到我们的循环一致性损失:

(2) L c y c ( G , F ) = E x p d a t a ( x ) [ F ( G ( x ) ) x 1 ] + E y p d a t a ( y ) [ G ( F ( y ) ) y 1 ]

总体目标

总的优化目标是:

(3) L ( G , F , D X , D Y ) = L G A N ( G , D Y , X , Y ) + L G A N ( F , D X , Y , X ) + λ L c y c ( G , F )

我们想要解决:
(4) G , F = a r g min G , F max D x , D Y L ( G , F , D X , D Y )

实现

使用两种技术来使得训练更加稳定。首先,对于公式-1的 L G A N ,使用最小二乘损失替换负的log似然损失。利用该损失训练过程更稳定,且得到了更好的结果:

(5) L L S G A N ( G , D Y , X , Y ) = E y p d a t a [ ( D Y ( y ) 1 ) 2 ] + E x p d a t a ( x ) [ D Y ( G ( x ) ) 2 ]

第二,为了减少模型的波动,在更新识别器 D X D Y 时,使用前段时间已生成的图片,而不是进几次迭代生成的图片。

结果

  • 与最近的非成对的图像到图像的迁移方法进行对比;
  • 自身进行对比,限制使用不同的损失项;
  • 展示生成的结果。

Baseline:

  • CoGAN;
  • Pixel loss+GAN;
  • Feature loss+GAN;
  • BiGAN/ALI;
  • pix2pix;
    这里写图片描述

这里写图片描述
对于其它实验结果的展示,这里不再列出来了。

最后欢迎大家关注下我:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/cassiePython/article/details/80942899