【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)

《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》

  • 论文地址:
  • 源码地址:
  • 论文简介:
  • 模型结构:
  • 损失函数:
    • Adversarial Loss(对抗损失):
    • Cycle Consistency Loss(循环一致性损失):
    • Full Objective(总损失):
  • 训练策略:
  • 项目实战——萌宠转宝可梦:
    • 爬取数据:
    • 创建colab应用:
    • 数据集格式:
    • 开始训练:

论文地址:

https://arxiv.org/abs/1703.10593

源码地址:

论文简介:

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第1张图片
CycleGAN 的作用是将一类图片转换成另外一类图片。具体点来讲,有 X 和 Y 两个图像域 (比如马和斑马),CycleGAN能够将图像域X的图像 (马) 转换为图像域Y的图像 (斑马) ,或者是将图像域Y的图像 (斑马) 转换为图像域X的图像 (马) 。

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第2张图片

相较于 pix2pix 模型,CycleGAN 最大的创新在于能够利用非成对数据(右,unpaired data)进行训练。比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用 pix2pix 模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用 CycleGAN 只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此,CycleGAN 的拓展性更好,应用更加广泛。

模型结构:

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第3张图片
在这里插入图片描述
模型的基本结构如上图所示。CycleGAN为了实现两个域 X X X Y Y Y 之间的相互映射而创建了两个生成器: G : X → Y G:X \rightarrow Y G:XY F : Y → X F:Y \rightarrow X F:YX,以及两个对应的判别器 D x D_x Dx D y D_y Dy。其中 D x D_x Dx 用于区分 X X X F ( Y ) F(Y) F(Y) 的图像, D y D_y Dy 用于区分 Y Y Y G ( X ) G(X) G(X) 的图像。

其最大的突破点在于引入了 循环映射循环一致性损失(Cycle Consistency Loss)。

CycleGAN的的生成网络包含两个步长为2的卷积层,几个残差层(residual blocks) 和两个反卷积层。此外,参考Johnson等人的做法,CycleGAN使用了 instance normalization 。
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第4张图片【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第5张图片

判别网络使用了 70x70 的 PatchGANs,目的是对 70x70 的重叠图像块进行真伪判别。这种 patch-level 的判别器结构的参数比 full-image 的鉴别器少,并且可以以完全卷积的方式应用于任意大小的图像。

损失函数:

Adversarial Loss(对抗损失):

在对抗损失函数中,生成器 G G G 试图生成和图像域 Y Y Y 相似的图片,判别器 D Y D_Y DY 尝试去区分转换的图片 G ( x ) G(x) G(x) 和真实的图片 y y y
在这里插入图片描述
优化目标就可以写作:
在这里插入图片描述
同时对于生成器 F F F 和判别器 D X D_X DX,优化目标可以写作:
在这里插入图片描述

Cycle Consistency Loss(循环一致性损失):

理论上,对抗性训练可以训练映射 G G G F F F 产生和目标域 Y Y Y X X X 相同分布的输出。然而,网络可以将同一组输入图像映射到目标域中的任意随机的图像,比如映射 F F F 完全可以将所有 x x x 都映射为 Y Y Y 空间中的同一张图片,或者是与原图完全不相关的图片。

所以作者直觉上认为学习的映射函数应该是循环一致的——图像如果一个域转换到另一个域,然后再转换回来,是可以回到原点的。

这样 Cycle Consistency Loss 就定义为:
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第6张图片

Full Objective(总损失):

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第7张图片
也可以将整个算法的优化目标写作:
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第8张图片

训练策略:

为了让模型的训练过程更加稳定,作 借鉴了LSGAN,对 adversarial loss (对抗损失)进行了改进。用最小二乘损失代替了负对数似然目标。这种损失在训练中表现得更稳定,并产生更高质量的结果:
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第9张图片

其次,为了减少模型振荡,作者使用生成图像的历史来更新判别器 D X D_X DX D Y D_Y DY,而不是(或者说不只是)使用最新生成网络生成的图像。即保存一个图像缓冲区,存储了之前生成的50个图像用来训练判别器。

项目实战——萌宠转宝可梦:

爬取数据:

数据集使用百度图片爬虫爬取,关键词分别为:宝可梦、萌宠。

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第10张图片

创建colab应用:

打开Colab并管理云盘:
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第11张图片

数据集格式:

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第12张图片
A 是宠物图片,B 是宝可梦图片。

开始训练:

【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第13张图片
【小白话CV】CycleGAN论文解读+代码实战(萌宠转宝可梦)_第14张图片

你可能感兴趣的:(深度学习-GAN)