CycleGAN原理
Posted Paul-Huang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CycleGAN原理相关的知识,希望对你有一定的参考价值。
CycleGAN原理
1. 初识CycleGAN
1.1 什么是CycleGAN
-
CycleGAN是一种完成 图 像 到 图 像 \\color{red}图像到图像 图像到图像的转换的一种GAN。
-
图像到图像的转换是一类视觉和图形问题,其 目 标 是 获 得 输 入 图 像 和 输 出 图 像 之 间 的 映 射 \\color{red}目标是获得输入图像和输出图像之间的映射 目标是获得输入图像和输出图像之间的映射。
-
但是,对于许多任务,配对的训练数据是获取不了的(比如:相同动作下的马和斑马)。
-
CycleGAN提出了一种 在 没 有 成 对 数 据 的 情 况 下 , 学 习 将 图 像 从 源 域 X 转 换 到 目 标 域 Y 的 方 法 \\color{red}在没有成对数据的情况下,学习将图像从源域X转换到目标域Y的方法 在没有成对数据的情况下,学习将图像从源域X转换到目标域Y的方法。
1.2 数学表示
- 两个图像域:
A
\\color{blue}A
A、
B
\\color{blue}B
B;
- A A A:假设是马的数据集;
- B B B:假设是斑马的数据集。
- 两个单射(生成器):
G
A
2
B
:
A
→
B
\\color{blue}G_{A2B} : A \\rightarrow B
GA2B:A→B,
G
B
2
A
:
B
→
A
\\color{blue}G_{B2A}: B \\rightarrow A
GB2A:B→A ;
- 生成器 G A 2 B : A → B \\color{blue}G_{A2B}: A \\rightarrow B GA2B:A→B:将图像从 A A A 转换为 B B B(例如马到斑马)
- 生成器 G B 2 A : B → A \\color{blue}G_{B2A}: B \\rightarrow A GB2A:B→A:将图像从 B B B 转换为 A A A(例如斑马到马)
这两个映射 尽 可 能 是 双 射 \\color{red}尽可能是双射 尽可能是双射。这是通过循环一致性损失来实现的:
- G B 2 A ( G A 2 B ( A ) ) ≈ A \\color{blue}G_{B2A}\\left(G_{A2B} \\left(A\\right)\\right) \\approx A GB2A(GA2B(A))≈A
- G A 2 B ( G B 2 A ( B ) ) ≈ B \\color{blue}G_{A2B} \\left(G_{B2A}\\left(B\\right)\\right) \\approx B GA2B(GB2A(B))≈B
- 两个判别器:
D
B
\\color{blue}D_{B}
DB、
D
A
\\color{blue}D_{A}
DA
- 判别器 D A \\color{blue}D_A DA:评分 A A A 的图像看起来有多真实(例如,这个图像看起来像一匹马吗?)
- 判别器 D B \\color{blue}D_B DB:对 B B B 图像的真实程度打分(例如,这张图像看起来像斑马吗?)
循 环 一 致 性 \\color{red}循环一致性 循环一致性是:
- 如果你能够训练这对 GAN 从 A → B → A \\color{blue}A \\rightarrow B \\rightarrow A A→B→A 转换,即在确保循环一致性的同时生成图像;
- 那么 A → G ( A ) → F ( G ( A ) ) ≈ A \\color{blue}A \\rightarrow G(A) \\rightarrow F(G(A)) \\approx A A→G(A)→F(G(A))≈A,那么你就可以很好地学习图像Translate任务了。
2. 模型介绍
2.1 基本过程
以
G
A
2
B
\\color{blue}G_{A2B}
GA2B和
D
B
\\color{blue}D_B
DB为例。
2.2 生成器
生成器由三部分组成:
编
码
器
\\color{red}编码器
编码器、
转
换
器
\\color{red}转换器
转换器、
解
码
器
\\color{red}解码器
解码器。
2.2.1 编码器
第一步是利用卷积网络从输入图像中提取特征。整个编码过程,将
D
A
\\color{blue}D_A
DA 域中一个尺寸为 [256,256,3]
的图像,输入到设计的编码器中,获得了尺寸为 [64,64,256]
的输出
O
A
e
n
c
\\color{blue}O_{Aenc}
OAenc。
2.2.2 转换器
-
这些网络层的作用是组合图像的不同相近特征,然后基于这些特征,确定如何将图像的特征向量 O A e n c \\color{blue}O_{Aenc} OAenc 从 D A \\color{blue}D_A DA域转换为 D B \\color{blue}D_B DB域的特征向量。
-
作者使用 6 层 R e s n e t \\color{red}Resnet Resnet模块。
- 一个 Resnet 模块是一个由两个卷积层组成的神经网络层,其中部分输入数据直接添加到输出。
这样做是为了确保先前网络层的输入数据信息直接作用于后面的网络层,使得相应输出与原始输入的偏差缩小,否则原始图像的特征将不会保留在输出中且输出结果会偏离目标轮廓。
- 这个任务的一个主要目标是保留原始图像的特征,如目标的大小和形状,因此残差网络非常适合完成这些转换。Resnet 模块的结构如下所示:
- 一个 Resnet 模块是一个由两个卷积层组成的神经网络层,其中部分输入数据直接添加到输出。
-
O B e n c \\color{blue}O_{Benc} OBenc表示该层的最终输出,尺寸为
[64,64,256]
,这可以看作是 D B \\color{blue}D_B DB域中图像的特征向量。
2.2.3 解码器
- 解码过程与编码方式完全相反,从特征向量中还原出低级特征,这是利用了 反 卷 积 层 ( d e c o n v o l u t i o n ) \\color{red}反卷积层(deconvolution) 反卷积层(deconvolution)来完成的。
- 将这些低级特征转换得到一张在
D
B
\\color{blue}D_B
DB域中的图像,得到一个大小为
[256,256,3]
的生成图像 G e n B \\color{blue}Gen_B GenB。
2.3 判别器
判别器将一张图像作为输入,并尝试预测其为原始图像或是生成器的输出图像。判别器的结构如下所示:
判别器本身就属于卷积网络,需要从图像中提取特征;然后是确定这些特征是否属于该特定类别,使用一个产生一维输出的卷积层来完成这个任务。
2.4 Loss计算
Loss分为6个部分,可分为3类:
2.4.1 原始GAN的损失:
- 对于判别器
D
B
(
线
1
)
\\color{blue}D_B(线1)
DB(线以上是关于CycleGAN原理的主要内容,如果未能解决你的问题,请参考以下文章
[Pytorch系列-65]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 无监督图像生成CycleGan的基本原理