CycleGAN

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

github


在这里插入图片描述

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

首先直观上看一下它的效果怎么样


在这里插入图片描述

在这篇文章之前,已经有很多方法来处理无配对样本的图像转换问题,比如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)=Eypdata(y)[logDY(y)]+Expdata(x)[log(1DYG(x))]LGAN(F,DX,Y,X)=Expdata(x)[logDX(x)]+Eypdata(y)[log(1DxF(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)=Expdata(x)[F(G(x))x1]+Eypdata(y)[G(F(y))y1]
将上面的两个损失项整合起来得到我们最终的目标函数是
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)


训练技巧

  1. 使用最小二乘损失(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] Expdata(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] Eypdata(y)[(D(y)1)2]+Expdata(x)[D(G(x))2]

  2. 使用生成图像的历史数据来更新判别器而不是最新生成的图像,所以开辟了一个存放50张历史图像的缓冲区

  3. 使用学习率初始化为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)=Eypdata(y)[G(y)y1]+Expdata(x)[F(x)x1]
效果如下所示


在这里插入图片描述


总结

最后作者提出,CycleGAN适合于涉及纹理、颜色变化的图像的转换任务,但是在涉及几何变化的方面效果并不好。所以在未来的工作中,如何处理更多样和更极端的转换任务是一个值得思考的问题。

此外如何想办法减小配对数据和非配对数据对于模型训练的影响,作者提出可以通过集成弱或半监督的数据的方法,可能会生成更强大的翻译器,但仍然需要监督训练方式下一小部分的标注成本。


更多

https://hardikbansal.github.io/CycleGANBlog/

http://www.sohu.com/a/139796566_297288

https://github.com/wiseodd/generative-models

### Cyclegan 介绍 CycleGAN 是一种基于生成对抗网络(GAN)的无监督图像到图像转换模型,它能够将一个领域的图像转换为另一个领域的图像风格,而无需源图像和目标图像之间的一一对应关系。CycleGAN 的核心思想是通过循环一致性约束来确保转换后的图像能被还原回原始图像,从而提高转换质量[^1]。 例如,CycleGAN 可以实现图像风格转移、季节转换、物体类别转换以及视频序列转换等多种任务。具体应用包括但不限于:将黑白照片转化为彩色图片、将风景图片转变为梵高风格的艺术作品、将春天的景色转换成冬天的样子、将马变成斑马或苹果变成橙子等[^1]。 ### CycleGAN 的原理 CycleGAN 的原理基于生成对抗网络(GAN)框架,并引入了循环一致性损失(Cycle Consistency Loss)。GAN 由生成器(Generator)和判别器(Discriminator)组成,生成器负责生成逼真的图像,判别器则负责区分生成图像与真实图像。CycleGAN 在此基础上增加了两个生成器 \(G\) 和 \(F\),分别用于 A 到 B 的转换和 B 到 A 的转换,同时引入了循环一致性损失以确保转换过程中的信息不丢失[^2]。 具体来说,循环一致性损失的作用是确保经过两次转换后,图像可以恢复到原始状态。即对于输入图像 \(x\),有 \(F(G(x)) \approx x\);对于输入图像 \(y\),有 \(G(F(y)) \approx y\)。这种机制使得 CycleGAN 能够在没有配对数据的情况下进行有效的训练。 ### CycleGAN 的实现 CycleGAN 的实现主要依赖于 PyTorch 或 TensorFlow 等深度学习框架。以下是一个简单的训练命令示例,用于训练 horse2zebra 数据集: ```bash python train.py --dataroot ./datasets/horse2zebra --name maps_cyclegan --model cycle_gan ``` 该命令指定了数据集路径、模型名称和使用的模型类型。在训练过程中,可以通过可视化工具监控生成器和判别器的损失变化,以及生成图像的质量。通常情况下,CycleGAN 的训练需要较长时间,例如可能需要两天左右完成 200 轮训练[^3]。 ### CycleGAN 的应用案例 CycleGAN 已经在多个领域取得了成功应用。例如,在艺术创作中,CycleGAN 可以将普通照片转换为特定艺术家风格的作品;在医学图像处理中,CycleGAN 可以将 MRI 图像转换为 CT 图像,从而帮助医生更方便地进行诊断;在自动驾驶领域,CycleGAN 可以模拟不同天气条件下的道路场景,从而提高自动驾驶系统的鲁棒性[^1]。 此外,CycleGAN 还可以应用于视频处理领域,例如改变视频中的天气条件或时间,从而生成更具创意的视觉效果[^1]。 ### 总结 CycleGAN 是一种强大的无监督图像到图像转换工具,其核心在于通过循环一致性约束实现了高质量的图像转换。无论是艺术创作、医学图像处理还是自动驾驶等领域,CycleGAN 都展现出了广泛的应用前景[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值