Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
摘要
背景:图像到图像的迁移是计算机视觉中的一个很有意思的问题。目标是学习一个从输入图片到目标图片的映射,在训练中需要使用成对的训练集。
问题:成对的训练数据并不是那么容易获得的。
本文方法:学习一个从源域(source domain)到目标域(target domain)的映射 G:X→Y G : X → Y 来进行图像的迁移。使用一个对抗损失,使得来自于G(X)的图片的分布与分布Y无法区分,即使得生成的图片的分布与目标域的图片的分布逼近。既然两者的分布是趋向于相同的,那么可以想到,既然A与B无法区分,那么也意味着B与A无法区分,即这个关系是相对的,所以我们就可以定义一个逆映射 F:Y→X F : Y → X ,于是我们引入一个循环一致性损失(a cycle consistency loss)来使得 F(G(X))≈X F ( G ( X ) ) ≈ X (反之亦然),含义就是把源域的生成的图片再映射回源域,其分布依然是趋于相同的。
实验:
- 定性分析:不使用成对的训练集的迁移结果展示,包括collection style transfer,object transfiguration,season transfer,photo enhancement等;
- 定量分析:与一些其它的使用成对数据训练的方法进行比较。
简介:
如图-1左上为例,同一场景下,莫奈的画作与照片的记录展现出了两种不同的情境,我们不禁畅想,给你一副莫奈的画作,是不是可以自动的产生照片中真实的场景,抑或是给你一副真实的场景,是否可以自动的将其转化为莫奈的风格。作者展示了其方法的魔力,不像其它的方法在训练中需要一一对应排序好的训练数据,只需要两个无序的集合X(源域)和Y(目标域),该算法就可以自动地进行风格的迁移。
稍微回顾下图像到图像的迁移:给定一个场景的图像x,将其转换到另一个场景的y,比如:将灰度图转化到彩色的图,图像到语义标签。目前也有很多研究工作,使用成对的数据
{x,y}
{
x
,
y
}
进行风格的迁移。如图-2左侧所示。
但是呢,这些成对出现的数据集并不是那么容易获得的。于是本文探究了一个算法,不需要这些成对的数据,如图-2中右侧所示。这里作者做了一个假设:在源域和目标域存在潜在的关系。其实就是两者从分布上而言,是存在相似性的。这里留下一个问题:如果两个域完全不同或者说差别非常大结果会怎么样呢?
给定源域的图片集合X以及另一个域的图片集合Y,我们使用对抗的思想学习一个映射 G:X→Y G : X → Y ,其输出 y^=G(x),x∈X y ^ = G ( x ) , x ∈ X ,与 y∈Y y ∈ Y 无法区分。
我们不禁想到这样一个问题,这个不成对的训练是怎么进行的呢?如果仍然使用传统的GAN的损失和训练方式,使用这些不成对的数据集进行训练,会出现什么问题呢?作者发现:
- 无法保证对于一个输入x,可以得到有意义的输出y,因为使用了不成对的训练集,但是可以学到无数种的映射G,而这些G都可以使生成的分布 y^ y ^ 逼近与目标域。
- 单独优化对抗损失非常困难,导致了一些不可名状的问题,如model collapse(即生成的样本的多样性问题)。
如何解决呢?作者发现在迁移过程中有这样一个特性——”循环一致性“。比如:我们将一个句子从英语翻译到法语,再将其翻译回英语,我们应该得到与原始的英文相同的句子(不禁想起了以前整理的的Dual Learning的文章,有兴趣的可以看下)。用数学符号来表示下:我们有一个转换器(映射): G:X→Y G : X → Y ,和另一个转换器 F:Y→X F : Y → X 。那么G和F应该是互逆的,即两者是一个双向映射。于是可以同时训练G和F来确保这个性质,增加一个循环一致性损失,使得 F(G(x))≈x F ( G ( x ) ) ≈ x 以及 G(F(x))≈y G ( F ( x ) ) ≈ y 。组合该损失和对抗损失,就得到了我们整体的非正对的图像到图像迁移的优化目标。
公式
给定训练集样本 {xi}Ni=1∈X { x i } i = 1 N ∈ X 和 {yj}Mj=1∈Y { y j } j = 1 M ∈ Y 。如图-3(a)所示,模型包含两个映射: G:X→Y G : X → Y 和 F:Y→X F : Y → X 。此外,引入两个对抗的判别器 DX D X 和 DY D Y , DX D X 的作用是用来判别 {x} { x } 和 {F(y)} { F ( y ) } ; DY D Y 的作用是用来判别 {y} { y } 和 {G(x)} { G ( x ) } 。优化目标包含两项:
- 对抗损失(adversarial loss):促使生成图像分布与目标域的图像分布相逼近
- 循环一致性损失(cycle consistency loss):使得 F(G(x))≈x F ( G ( x ) ) ≈ x 以及 G(F(x))≈y G ( F ( x ) ) ≈ y 。防止学习到的映射G和F互相矛盾。
对抗损失
将对抗损失应用到两个映射上。对于映射函数
G:X→Y
G
:
X
→
Y
和它的识别器
DY
D
Y
,目标函数为:
其中,G的作用是生成图片G(x),且看起来就像目标域Y的图片, DY D Y 的作用是区分生成的G(x)和真实的样本y。同样的,对于映射 F:Y→X F : Y → X ,有:
循环一致性损失
从理论上使用对抗学习可以使生成的分布逼近于目标域的分布,且使反转后的分布近似于源域的分布,但是实际中发现,或出现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
x
→
G
(
x
)
→
F
(
G
(
x
)
)
≈
x
,成为前向循环一致性(forward cycle consistency)。同样的,有反向循环一致性(backward cycle consistency):
y→F(y)→G(F(y))≈y
y
→
F
(
y
)
→
G
(
F
(
y
)
)
≈
y
。由此得到我们的循环一致性损失:
总体目标
总的优化目标是:
我们想要解决:
实现
使用两种技术来使得训练更加稳定。首先,对于公式-1的
LGAN
L
G
A
N
,使用最小二乘损失替换负的log似然损失。利用该损失训练过程更稳定,且得到了更好的结果:
第二,为了减少模型的波动,在更新识别器 DX D X 和 DY D Y 时,使用前段时间已生成的图片,而不是进几次迭代生成的图片。
结果
- 与最近的非成对的图像到图像的迁移方法进行对比;
- 自身进行对比,限制使用不同的损失项;
- 展示生成的结果。
Baseline:
- CoGAN;
- Pixel loss+GAN;
- Feature loss+GAN;
- BiGAN/ALI;
- pix2pix;
对于其它实验结果的展示,这里不再列出来了。
最后欢迎大家关注下我: