应用:
1.目标转换,比如从猫变成狗。
2.图片风格转换,比如简笔画风格变成莫奈风格
3.…
训练数据:
CycleGAN只需要两类图片就可以训练出一个模型,不需要成对(paired)的数据
单向GAN
上图是一个单向 GAN 的示意图。我们希望能够把 domain A 的图片(命名为 a)转化为 domain B 的图片(命名为图片 b)。
为了实现这个过程,我们需要两个生成器 G_AB 和 G_BA,分别把 domain A 和 domain B 的图片进行互相转换。
图片 A 经过生成器 G_AB 表示为 Fake Image in domain B,用 G_AB(a) 表示。而 G_AB(a) 经过生辰器 G_BA 表示为图片 A 的重建图片,用 G_BA(G_AB(a)) 表示。
最后为了训练这个单向 GAN 需要两个 loss,分别是生成器的重建 loss 和判别器的判别 loss。
为什么要连两个生成器和两个判别器呢?论文中说,是为了避免所有的X都被映射到同一个Y,比如所有男人的图像都映射到范冰冰的图像上
什么是双向的cycle GAN? 先来看单向GAN。
单向 loss(A->B):
为了训练这个单向 GAN 需要两个 loss,分别是生成器的重建 loss 和判别器的判别 loss
判别 loss:生成的假图片 G_AB(A) 和原始的真图片 B 尽可能的相似。
生成 loss:目的是希望生成的图片G_BA(G_AB(a))和原图 a 尽可能的相似。
理解了单向的GAN和Loss,双向的cycle GAN和cycle loss会好理解一些。
Cycle GAN:
CycleGAN 其实就是一个 A→B 单向 GAN 加上一个 B→A 单向 GAN。
一个单向 GAN 有两个 loss,而 CycleGAN 加起来总共有四个 loss。
(a)生成器和判别器
生成器 mapping functions G : X → Y and F : Y → X
判别器 DY and DX.
DX 优化F,区分images {x} and translated images {F (y)}
DY 优化G,区分{y} and {G(x)}
(b) forward cycle-consistency loss: x →G(x) →F(G(x)) ≈ x
(c) backward cycle-consistency loss: y→F(y) →G(F(y)) ≈ y
也就是说,将X的图片转换到Y空间后,应该还可以转换回来。
Loss
1) adversarial loss:Lgan(G; DY ; X; Y )
generated images 和target domain之间的loss
2) cycle consistency loss:Lcyc(G; F )
使得 F(G(x)) ≈ x ,G(F(y)) ≈ y. 防止学习到的F和G相互矛盾
3) Full Objective
L(G; F; Dx; Dy ) =Lgan(G; Dy ; X; Y )+Lgan(F; Dx; Y; X)+ λ Lcyc(G; F );
训练目标: