[Pytorch系列-65]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 无监督图像生成CycleGan的基本原理

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Pytorch系列-65]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 无监督图像生成CycleGan的基本原理相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121962962


目录

第1章 什么是CycleGan网络的图像转换

1.1 项目在github上的源代码

1.2 图像转换实例

1.3 图像转换的总体共性

第2章 CycleGan图像转换的基本原理

2.1 CycleGan网络的目标

2.2 CycleGAN名称的由来

2.3 CycleGan网络的基本架构

2.4 CycleGan网络的基本工作过程

2.5 CycleGan网络的训练 - 生成网络的训练

2.6 CycleGan网络的训练 - 判决网络的训练


第1章 什么是CycleGan网络的图像转换

1.1 项目在github上的源代码

GitHub - junyanz/pytorch-CycleGAN-and-pix2pix: Image-to-Image Translation in PyTorch

1.2 图像转换实例

(1)环境的轮廓不变,更换颜色,风格 (秋天 - 夏天)

(2)马的轮廓不变,纹理替换。

(3)风景图片的轮廓不变,更换风格(冬天<--->夏天)

共性:保持一张图片的轮廓,更换其风格,得到另一张新的图片。

而风格来自于一组图片的共同特征,即为一组图片的风格。

1.3 图像转换的总体共性

(1)风格学习:网络能够学习风格图片的共同特征,即风格。

如所有冬天的图片的共同特征是“冬天”:

 如果斑马图片的共同特征是斑马:

(2)待转换图片

可以是一张,也可以是多张,但他们是相互独立的,网络不需要学习待转换图片的公共特征。

只需要提取待转换图片的各自的特征:即每一张图片实际的轮廓。

实际上,不同的图片,其轮廓外形是不同的。

(3)输出图片:

既包含待转换图片的特征(轮廓),也包括风格图片组的公共特征(风格)

(4)输入风格图片和待转换图片的关系

严格意义上讲CycleGan图像转换,不需要输入图片与待转换图片之间有什么关联,他们是相互独立的。即不要求输入图片与待转换图片在形状上、在背景上有什么必须相似的地方。即不要求他们之间有某种相似性。

(5)输入风格图片和输出图片的关系

CycleGan图像转换,不要求输入风格图片与输出图片在轮廓上有什么相似性。

输出图片风格转换图片可以是完全不相同的两类事物。即不要求上述配对关系。

即可以把风格图片的风格,叠加到任意的图片上!!!!,形成新的输出图片。

(6)待转换图片和输出图片的关系

他们之间是有轮廓上相似性,因为输出图片,是对待转换图片的转换。

如果输出图片不包含待转换图片的轮廓,那么转换后的图片,体现不出待转换图片,这种转换没有太大的意义。

第2章 CycleGan图像转换的基本原理

2.1 CycleGan网络的目标

普通的GAN确保输出的图像与真实图像具备尽可能的相似度,这就导致,网络的训练目的是输出预真实图片B具备相识性,与真实图片A没有关系。即输出图片,与真实图片不具备相似性。

很显然,这不符合我们的目标,任意的输出,应用场景及其有限。

CycleGan网络的目标是:

输出图片受输入图片所控,与输入图片之间要有“形似”的关系,而不是天马行空的输出。

输出图片,在某些特征上与输入图片A相似,这个相似性称为“形似”

输出图片,在某些特征上与真实图片B相似,这个相似性称为“神似”

2.2 CycleGAN名称的由来

输出与输入图片的相似性检查,是确保输出的图片与输入图片有明确的对应关系的重要手段。

现在的问题来了:如何检查输出与输入图片的相似性呢?

(1)pix2pix的做法

pix2pix是直接通过像素到像素进行检查的完成的,因此pix2pix的输出与输入是显性的、表象的、强关联关系,属于“形似”。

(2)CycleGAN的做法

CycleGAN通过增加还原网络,首先把输出图片重新还原成输入图片,然后对输入图片与还原后的图片进行像素到像素的检查,确保输出图片与输入图片的相似性。这个还原的过程就是形成了一个闭环,这 就是“CycleGAN”的由来。

虽然,还远后的图片与输入图片,具备像素到像素的显性的、表象的、强关联关系,属于“形似”。

但输出图片与输入图片以及还原后的图片并非这种“形似”,而是内在特征的关系。

因此,CycleGAN的输出图片与输入图片之间是隐性、内在的、语义关系。

CycleGAN同时具备如下特征:

  • 具备GAN网络自由创作的优点
  • 具备pix2pix网络,输入对输出进行控制的优点
  • 克服pix2pix网络,输出与输入只是“形似”的缺点与不足。
  • 具备了输出与输入具备内在特征的相似,得到了“神似”的效果。

2.3 CycleGan网络的基本架构

(1)相对于GAN网络,CycleGan增加了一个还原网络。

通过对还原图片与原始图片的比较,可以确保生成图片的准确性以及与输入图片的关联性。

(2)相对于GAN网络,CycleGan增加了双向转换

为了确保生成网络和还原网络的准确性,CycleGan增加了双向转换,

即一方面:网络源真实图片-》生成图片-》源真实图片的转换,主要验证创作的准确性。

另一方面:目标真实图片-》生成图片-》目标真实图片的转换,主要验证还原的准确性。

2.4 CycleGan网络的基本工作过程

(1) CycleGan的做法

  • 用真实图片B对输出图片进行判决,判决生成图片是否符合真实图片的特征。
  • 用输入图片A自身对输出图片的反向还原的图片进行判决(loss最小),确保生成图片与源图片具备相似性。
  • 这种方法,可以通过还原的方式,保证输出图片与真实图片B和真实图片A两者的loss都非常小。
  • 这种方式的结果是:输出图片与真实图片B主要特征与核心特征上相似,只有部分特征与真实图片A相似。与真实图片的全部相似性是通过还原实现的。这种方式的输出图片是由倾向性的:主体特征与输入图片B相似,部分特征来源于真实图片A.
  • 这种方法的关键是反向还原。

(2) 使用两个判决网络? 

  • 用输入图片A自身对输出图片进行判决
  • 用输入图片B对输出图片进行判决
  • 这种方法使得输出图片同时与输入图片A和B相似。

2.5 CycleGan网络的训练 - 生成网络的训练

(1)生成网络G-A2B和生成网络G-B2A的结构是完全一致的,不同的是一个输入是源真实图片集,一个是目标真实图片集。

(2)G-A2B和G-B2A是一起训练的,其loss函数是整合在一起的。

(3)在训练G-A2B和G-B2A时,需要锁定判决网络D-A2B和D-B2A

(4)最终的loss函数包含4部分

  • G-A2B:判断网络对生成图片的判决结果(G网络的目标是骗过判决网络D-A2B)与1之间的MSE loss。
  • G-A2B:生成图片与还原图片之间的L1 loss(平均绝对误差(MAE))
  • G-B2A:判断网络对生成图片的判决结果(G网络的目标是骗过判决网络D-B2A)与1之间MSE loss。
  • G-B2A:生成图片与还原图片之间的L1 loss(平均绝对误差(MAE))

2.6 CycleGan网络的训练 - 判决网络的训练

(1)判决网络D-A2B和生成网络D-B2A的结构是完全一致的,不同的是一个输入是源真实图片集,一个是目标真实图片集。

(2)D-A2B和G-B2A是独立训练的,他们有各自独立的loss函数

(3)在训练D-A2B和G-B2A时,需要锁定生成网络G-A2B和G-B2A

(4)各自的loss函数包含2部分:

  • 判决网络对生成图片的判决结果与“0” 之间的距离, 即判为“假”
  • 判决网络对真实图片的判决结果与“1” 之间的距离, 即判为“真”

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121962962

以上是关于[Pytorch系列-65]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 无监督图像生成CycleGan的基本原理的主要内容,如果未能解决你的问题,请参考以下文章

[Pytorch系列-69]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - test.py代码详解

[Pytorch系列-61]:生成对抗网络GAN - 基本原理 - 自动生成手写数字案例分析

[Pytorch系列-75]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - CycleGAN网络结构与代码实现详解

[Pytorch系列-63]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 代码总体架构与总体学习思路

[Pytorch系列-73]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - Train.py代码详解

[Pytorch系列-68]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型测试CycleGAN模型