[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上的源代码
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模型