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:XY G : X → Y 来进行图像的迁移。使用一个对抗损失,使得来自于G(X)的图片的分布与分布Y无法区分,即使得生成的图片的分布与目标域的图片的分布逼近。既然两者的分布是趋向于相同的,那么可以想到,既然A与B无法区分,那么也意味着B与A无法区分,即这个关系是相对的,所以我们就可以定义一个逆映射 F:YX 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:XY G : X → Y ,其输出 y^=G(x),xX y ^ = G ( x ) , x ∈ X ,与 yY y ∈ Y 无法区分。

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

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

如何解决呢?作者发现在迁移过程中有这样一个特性——”循环一致性“。比如:我们将一个句子从英语翻译到法语,再将其翻译回英语,我们应该得到与原始的英文相同的句子(不禁想起了以前整理的的Dual Learning的文章,有兴趣的可以看下)。用数学符号来表示下:我们有一个转换器(映射): G:XY G : X → Y ,和另一个转换器 F:YX 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=1X { x i } i = 1 N ∈ X {yj}Mj=1Y { y j } j = 1 M ∈ Y 。如图-3(a)所示,模型包含两个映射: G:XY G : X → Y F:YX 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:XY G : X → Y 和它的识别器 DY D Y ,目标函数为:

LGAN(G,DY,X,Y)=Eypdata(y)[logDY(y)]+Expdata(x)[log(1DY(G(x)))](1) (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的图片, DY D Y 的作用是区分生成的G(x)和真实的样本y。同样的,对于映射 F:YX F : Y → X ,有:
LGAN(F,DX,Y,X)=Expdata(x)[logDX(x)]+Eypdata(y)[log(1DX(F(y))] 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,都有: xG(x)F(G(x))x x → G ( x ) → F ( G ( x ) ) ≈ x ,成为前向循环一致性(forward cycle consistency)。同样的,有反向循环一致性(backward cycle consistency): yF(y)G(F(y))y y → F ( y ) → G ( F ( y ) ) ≈ y 。由此得到我们的循环一致性损失:

Lcyc(G,F)=Expdata(x)[F(G(x))x1]+Eypdata(y)[G(F(y))y1](2) (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 ]

总体目标

总的优化目标是:

L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,Y,X)+λLcyc(G,F)(3) (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 )

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

实现

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

LLSGAN(G,DY,X,Y)=Eypdata[(DY(y)1)2]+Expdata(x)[DY(G(x))2](5) (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 ]

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

结果

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

Baseline:

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

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

最后欢迎大家关注下我:

这里写图片描述

  • 20
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值