Abstract
CycleGAN 是Berkeley AI Research (BAIR) laboratory, UC Berkeley发表在ICCV2017上的工作, 传统的GAN都是单向的, 论文首先提出了GAN inverse 构建功能, 即将生成的假图, 重建回原图的风格.
Contents
之前的工作考虑的都是在训练集中, 训练样本和label中的物体都是匹配好的, 但是在真实生活中, 这样标记好的数据是很少的, 所以作者考虑的是unpaired数据, 让GAN可以实现图像从源域到目标域的转换.
文章中的网络流程图如上所示, 首先是输入inputs, 通过G(Generate) 生成Y(Fake images), 通过
D
Y
D_Y
DY来判别生成图像的真假; 所以这有一个Discrimitor loss, 用来评估生成图像的好坏.
紧接着, 将生成图像采用F(Generate) 还原成X; 这里使用一个cycle-consistency loss来评估重建的效果;
可以用一张网络上的图, 将这样一个流程表示的更佳清楚;
正向过程:
反向过程:
CycleGAn其实就是A-> B一个生成器一个判别器 再加一个生成loss,一个判别loss;
B-> A 也是一个生成器一个判别器, 再加上一个生成loss, 一个判别loss;
那么理解了这个原理以后,剩下的问题是怎么设计loss函数;
- 判别器的Loss
判别器判别生成的图片跟目标域的图片是否真实?
所以作者简单才用了而二分类的交叉熵损失函数:
L G A N ( G A B , D B , A , B ) = E b ∼ B [ l o g D B ( b ) ] + E a ∼ A [ l o g ( 1 − D B ( G A B ( a ) ) ) ] LGAN(G_{AB},D_B,A,B)=E_{b∼B}[logD_B(b)]+E_{a∼A}[log(1−D_B(G_{AB}(a)))] LGAN(GAB,DB,A,B)=Eb∼B[logDB(b)]+Ea∼A[log(1−DB(GAB(a)))] - 生成的Loss
生成器是用来重建图片的, loss的目的是希望生成的图像与原图尽可能的相似; 所以作者首先采用了L2 Loss:
L ( G A B , G B A , A , B ) = E a A [ ∣ ∣ G B A ( G A B ( a ) ) − a ∣ ∣ 1 ] L(G_{AB}, G_{BA}, A,B)=E_{a~A}[||G_{BA}(G_{AB}(a))-a||_1] L(GAB,GBA,A,B)=Ea A[∣∣GBA(GAB(a))−a∣∣1]
论文里面提到判别器如果是对数损失训练不是很稳定,所以改成的均方误差损失,如下
L
L
S
G
A
N
(
G
,
D
Y
,
X
,
Y
)
=
E
y
∼
p
d
a
t
a
(
y
)
[
(
D
Y
(
y
)
−
1
)
2
]
+
E
x
∼
p
d
a
t
a
(
x
)
[
(
1
−
D
Y
(
G
(
x
)
)
)
2
]
L_{LSGAN}(G,D_Y,X,Y)=E_{y∼p_{data}(y)}[(D_Y(y)−1)^2]+E_{x∼p_{data}(x)}[(1−D_Y(G(x)))^2]
LLSGAN(G,DY,X,Y)=Ey∼pdata(y)[(DY(y)−1)2]+Ex∼pdata(x)[(1−DY(G(x)))2]
Conclusion
CycleGAN的问世可谓在image-to-image应用上有了很大的提升, cyclegan的主要应用领域也是图像转换.
- Cycle project [url]