ICCV 2017 《Unpaired Image-to-Image Translatin usig Cycle-Consistent Adversarial Networks》

这篇文章讲的就是大名鼎鼎的CycleGAN,它可以实现再无配对数据的情况实现不同域(domain)之间图像的互相转换。它的基本思想和前面讲过的DiscoGAN和DualGAN是一致的,同样只看一下它精髓的地方。
首先直观上看一下它的效果怎么样

在这篇文章之前,已经有很多方法来处理无配对样本的图像转换问题,比如Bayesian framework、CoGAN等,相比于这些方法,CycleGAN有如下的优点:
- 它的通用性更强,不依赖于具体的任务
- 它不需要预先定义输入和输出之间的相似性函数
- 它不依赖于输入和输出位于相同的低维嵌入空间的假设
下面我们再看一下它的架构

它使用两个生成器、两个判别器,通过构成环状的结构来实现两个域的图像之间相互转换,和DualGAN、DiscoGAN没什么本质的区别。
在CycleGAN中主要是包含两个损失项对抗损失(Adversarial loss)和循环一致性损失(Cycle Consistency loss)。
Adversarial loss
这部分和标准GAN的损失项是一致的,它们的数学表达如下所示:
L
G
A
N
(
G
,
D
Y
,
X
,
Y
)
=
E
y
∼
p
d
a
t
a
(
y
)
[
log
D
Y
(
y
)
]
+
E
x
∼
p
d
a
t
a
(
x
)
[
log
(
1
−
D
Y
G
(
x
)
)
]
L
G
A
N
(
F
,
D
X
,
Y
,
X
)
=
E
x
∼
p
d
a
t
a
(
x
)
[
log
D
X
(
x
)
]
+
E
y
∼
p
d
a
t
a
(
y
)
[
log
(
1
−
D
x
F
(
y
)
)
]
L_{GAN}(G,D_{Y},X,Y)=E_{y\sim p_{data}(y)}[\log D_{Y}(y)]+E_{x\sim p_{data}(x)}[\log (1-D_{Y}G(x))] \\ L_{GAN}(F,D_{X},Y,X)=E_{x\sim p_{data}(x)}[\log D_{X}(x)]+E_{y\sim p_{data}(y)}[\log (1-D_{x}F(y))]
LGAN(G,DY,X,Y)=Ey∼pdata(y)[logDY(y)]+Ex∼pdata(x)[log(1−DYG(x))]LGAN(F,DX,Y,X)=Ex∼pdata(x)[logDX(x)]+Ey∼pdata(y)[log(1−DxF(y))]
那么自然所有的G都希望生成的样本尽可能的接近于真实,而所有的D 都希望尽最大努力判别出真实样本和生成样本,所以我们的目标自然就是如下的形式:
min
G
max
D
Y
L
G
A
N
(
G
,
D
Y
,
X
,
Y
)
min
F
max
D
X
L
G
A
N
(
G
,
D
X
,
Y
,
X
)
\min\limits_{G}\max \limits_{D_{Y}}L_{GAN}(G,D_{Y},X,Y) \\\min\limits_{F}\max \limits_{D_{X}}L_{GAN}(G,D_{X},Y,X)
GminDYmaxLGAN(G,DY,X,Y)FminDXmaxLGAN(G,DX,Y,X)
Cycle Consistency loss
这里同时使用的是
L
1
L_{1}
L1 度量,我们希望重构后的样本接近于输入,所以定义Cycle Consistency loss为如下的形式:
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_{cyc}(G,F)=E_{x\sim p_{data}(x)}[||F(G(x))-x||_{1}]+E_{y\sim p_{data}(y)}[||G(F(y))-y||_{1}]
Lcyc(G,F)=Ex∼pdata(x)[∣∣F(G(x))−x∣∣1]+Ey∼pdata(y)[∣∣G(F(y))−y∣∣1]
将上面的两个损失项整合起来得到我们最终的目标函数是
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
)
L(G,F,D_{X},D_{Y}) = L_{GAN}(G,D_{Y},X,Y)+L_{GAN}(F,D_{X},Y,X)+\lambda L_{cyc}(G,F)
L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,Y,X)+λLcyc(G,F)
其中
λ
\lambda
λ 是一个常数,控制两项损失的的相对重要性,在后面的实验中作者令
λ
=
10
\lambda = 10
λ=10。
那么通过对目标函数的最大最小化就可以得到最优的G和F:
G
∗
,
F
∗
=
a
r
g
min
G
,
F
max
D
X
,
D
Y
L
(
G
,
F
,
D
X
,
D
Y
)
G^{*},F^{*} = arg\min \limits_{G,F} \max \limits_{D_{X},D_{Y}}L(G,F,D_{X},D_{Y})
G∗,F∗=argG,FminDX,DYmaxL(G,F,DX,DY)
训练技巧
-
使用最小二乘损失(least-square loss)代替负的对数似然,这样做可以加强训练过程的稳定性,同时生成的结果更好。对于G来说,我们最小化的是
E x ∼ p d a t a ( x ) [ ( D ( G ( x ) ) − 1 ) 2 ] E_{x\sim p_{data}(x)}[(D(G(x))-1)^2] Ex∼pdata(x)[(D(G(x))−1)2]
对于D来说,我们需要最小化的是
E y ∼ p d a t a ( y ) [ ( D ( y ) − 1 ) 2 ] + E x ∼ p d a t a ( x ) [ D ( G ( x ) ) 2 ] E_{y\sim p_{data}(y)}[(D(y)-1)^2]+E_{x\sim p_{data}(x)}[D(G(x))^2] Ey∼pdata(y)[(D(y)−1)2]+Ex∼pdata(x)[D(G(x))2] -
使用生成图像的历史数据来更新判别器而不是最新生成的图像,所以开辟了一个存放50张历史图像的缓冲区
-
使用学习率初始化为0.0002,在训练的前100轮保持不变,在后100轮逐渐线性减小到0
实验
在实验的评估手段上同样使用的是AMT和FCN score,在Map->Photo和Photo->Map两个数据集上比较不同的GAN的变种之间的效果差异,结果如下所示
定性评估的结果,从中可以看出CycleGAN和pix2pix效果要优于其他的模型。

定量评估来看,无论是AMT的结果、FCN-scores还是分类的表现,CycleGAN都优于除pix2pix以外的模型,并且和pix2pix效果最为接近。

同样在评估两个损失向的重要性时发现,移除任何一个都会造成效果的大幅下降。另外如果只使用GAN+forward cycle或是GAN + backward cycle都会出现模式崩溃的问题,而且会影响训练过程的不稳定性。

在重构数据的质量方面,CycleGAN也取得不错的效果,重构后的图像很接近于输入的样本图像

此外作者还在有关图像的其他方面做了实验,证实了CycleGAN的效果要由于其它的模型。其中在从绘画中生成照片这项实验中,作者发现,当引进一个额外的损失项
L
i
d
e
n
t
i
t
y
L_{identity}
Lidentity 后,输出图像的颜色部分更接近于输入图像。
L
i
d
e
n
t
i
t
y
L_{identity}
Lidentity 的定义如下所示:
L
i
d
e
n
t
i
t
y
(
G
,
F
)
=
E
y
∼
p
d
a
t
a
(
y
)
[
∣
∣
G
(
y
)
−
y
∣
∣
1
]
+
E
x
∼
p
d
a
t
a
(
x
)
[
∣
∣
F
(
x
)
−
x
∣
∣
1
]
L_{identity} (G,F)= E_{y\sim p_{data}(y)}[||G(y)-y||_{1}]+E_{x\sim p_{data}(x)}[||F(x)-x||_{1}]
Lidentity(G,F)=Ey∼pdata(y)[∣∣G(y)−y∣∣1]+Ex∼pdata(x)[∣∣F(x)−x∣∣1]
效果如下所示

总结
最后作者提出,CycleGAN适合于涉及纹理、颜色变化的图像的转换任务,但是在涉及几何变化的方面效果并不好。所以在未来的工作中,如何处理更多样和更极端的转换任务是一个值得思考的问题。
此外如何想办法减小配对数据和非配对数据对于模型训练的影响,作者提出可以通过集成弱或半监督的数据的方法,可能会生成更强大的翻译器,但仍然需要监督训练方式下一小部分的标注成本。
更多
https://hardikbansal.github.io/CycleGANBlog/
http://www.sohu.com/a/139796566_297288
https://github.com/wiseodd/generative-models