CycleGAN的基本原理以及Pytorch框架实现

2023-05-16

目录

1.了解CycleGAN

(1)什么是CycleGAN 

(2)CycleGAN的应用场景 

 2 CycleGAN原理

(1)整个模型

(2)优化目标 

(3)训练生成器和判别器

(1)训练生成器

(2)训练判别器

3.CycleGAN的网络结构 

(1)生成器模型

(2)判别器模型

4.CycleGAN代码实现 

5.mainWindow窗口显示转换之后风格图

6.数据集下载和官方代码 


GAN原理及Pytorch框架实现GAN(比较容易理解)

Pytorch框架实现DCGAN(比较容易理解)

1.了解CycleGAN

CycleGAN主页:https://junyanz.github.io/CycleGAN/

(1)什么是CycleGAN 

  • CycleGAN是实现不同图像之间风格的转换,并且样本数据无需配对即可实现转换。
  • CycleGAN的创新点在于能够在源域和目标域之间,无须建立训练数据间一对一的映射,就可以实现这种迁移。 
  • CycleGAN特点:
    • CycleGAN特点就是通过一个循环,首先将图像从一个域转换到另一个域,然后,再转回来,如果两次转换都很精准的话,那么,转换后的图像应该与输入的图像基本一致。通过这样的的一个循环,CycleGAN将转换前后图片的配对,类似于有监督学习,提升了转换效果。

比如:下面是斑马和马之间的风格转换,夏天和冬天之间风格的转换。 

(2)CycleGAN的应用场景 

        CycleGAN主要用于Domain Adaption(域迁移)领域,如image style transfer图片风格迁移,物体转换,季节转化,图像增强领域取得了不错的效果。

 

 

 2 CycleGAN原理

(1)整个模型

(2)优化目标 

         损失函数包含如下两部分:

  

(3)训练生成器和判别器

(1)训练生成器

 

(2)训练判别器

 

3.CycleGAN的网络结构 

(1)生成器模型

        在CycleGAN的原论文中提到,对于生成器,如果输入的图像分辨率为:128 X 128大小的,则在网络中使用6个residual blocks;如果输入的图像分辨率为:256 x 256大小或者更大的,则在网络中使用9个residual blocks。

原论文的网络模型结构

        看一下原论文给出的结构(很重要):

解释其中的术语(如有解释不对的地方,请指出): 

  • 首先对于输入图像使用的卷积:
    • Conv2d: out_channels = k,kernel_size = 7 x 7,stride = 1
    • Norm: InstanceNorm(理解深度学习框架中的InstanceNorm)
    • 激活函数:ReLU
  • 第二个卷积(dk表示进行下采样(downSampling),输出通道数为k):
    • Conv2d: out_channels = k, kernel_size = 3 x 3, stride = 2
    • Norm: InstanceNorm
    • 激活函数:ReLU
  • 注意:上面的卷积中的padding_mode = “reflect”(关于padding_mode的方式有哪些)
  • residuals blocks(Rk表示使用的残差连接,并且所有的residual blocks的通道数都为k):
    • 每个residuals blocks中包含两个3 x 3的卷积,out_channles = k;
      • Norm: InstanceNorm
      • 激活函数:ReLU
  • 最后的卷积输出(uk表示上采样(UpSampling),通道数为k):
    • ConvTranspose2d: out_channels = k, kernel_size = 3 x 3, stride = 2
    • Norm: InstanceNorm
    • 激活函数:ReLU

        对于生成模型的结构整体是上面样子的,但是这里网络包含输入的图像分辨率为128 x 128大小的结构和输入为256 x 256或者更大的:

  • 对于输入为128 x 128大小图像分辨率的网络结构

     

  • 对于输入为256 x 256或者更大图像分辨率的网络结构

    •  

        提示:关于在搭建网络模型过程中卷积所使用的通道数,还是根据实际的 情况来,不一定一定要像论文中给出的:64->128->256->256->256->256->256->256->256->256->256->256->128->64->3。但是一定要保证最后输出的通道数为3,因为我们就是输出一张转换之后的图像。(在下面给出的代码中,还是按论文给定的来)。

        开始使用Pytorch搭建模型结构…… 

 

(2)判别器模型

        对于判别模型,我们这里输入的图像分辨率大小为256 x 256 ,

        判别模型的网络结构简洁很多,原论文给出的判别模型结构说明如下:

 解释其中的术语(如有解释不对的地方,请指出):

  • 首先是输入(Ck表示进行卷积,通道数为k):
    • Conv2d: kernel_size = 4 x 4,stride = 2
    • 这里并没有使用InstanceNorm;
    • 激活函数:LeakReLU(negative_slope=0.2)
  • 中间层使用的通道数:128 -> 256 -> 512
  • 最后输出:
    • 由于判别模型是判别一张图像的真假,所以使用二分类激活函数作为输出:
      • Sigmoid()

        开始搭建网络模型结构…… 

 

提示:详细理解CycleGAN的过程

4.CycleGAN代码实现 

提示:代码放在了Github上,本文的代码是参考下面这位博主写的,但是自己其中只是做了一下修改,并且其中加了一个mainWindows界面代码,方便后面训练的模型进行图像风格的转换。

参考博主的代码:https://b23.tv/QUc0CNb

本文的代码下载:https://github.com/KeepTryingTo/Pytorch-GAN

提示:从自然景转换到梵高风格的图像,还不错,但是在从梵高风格的图像转换为自然景时,不是很好(只训练了一个epoch) 。

5.mainWindow窗口显示转换之后风格图

提示:这里编写了一个显示生成器显示图片的程序(mainWindow.py),加载之前训练之后保存的生成器模型,点击要生成的风格图像按钮,之后即可使用该模型进行风格转换,如下:

(1)运行mainWindow.py 初始界面如下

 (2)转换风格过程

 

 

6.数据集下载和官方代码 

CycleGAN数据集下载:https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/

本文训练的CycleGAN生成模型下载:

链接:https://pan.baidu.com/s/18S81Uje87fSeWnz2q_FXTQ 
提取码:sg00

CycleGAN官方代码:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CycleGAN的基本原理以及Pytorch框架实现 的相关文章

随机推荐

  • 为何HBase速度很快

    为何HBase速度很快 xff1f HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的 xff0c 即由LSM Tree Log Structured Merge Tree 43 HTable region分区 43 Ca
  • 二叉排序树详解以及实现

    目录 1 二叉排序树概念 2 二叉排序树的插入 xff08 1 xff09 二叉排序树的插入过程 xff08 2 xff09 节点插入实现 3 二叉排序树的查找 4 二叉排序树的遍历 5 二叉树排序树节点的删除 xff08 1 xff09
  • 使用pytorch加载数据集和对数据集进行处理

    目录 1 torchvision中加载数据集 2 重写Dataset类加载数据集 3 transforms 4 Dataloader对数据进一步处理 1 torchvision中加载数据集 官方文档给出的数据 下面以CIFAR数据集为例子
  • 使用Tensorflow训练检测口罩模型完整实例

    目录 1 数据集下载 2 相关知识点 3 训练模型实战开始 xff08 1 xff09 整个过程思路 xff08 2 xff09 导入相关的库 xff08 3 xff09 参数预设置 xff08 4 xff09 数据增强 xff08 5 x
  • 使用python修改文件名并保存

    使用Tensorflow训练检测口罩模型完整实例 使用pytorch加载数据集和对数据集进行处理 Tensorflow中预处理图像的方法 使用python批量的转换图片的格式并保存 LabelImg标注的YOLO格式txt标签中心坐标和物体
  • python实现图片的大小变换之后图片中的目标坐标一起等比例变换

    目录 1 坐标值变换 xff08 1 xff09 关键 xff08 2 xff09 坐标变换完整实现 提示 xff1a 由于我们要训练的网络模型输入的尺寸一般都是自己根据实际情况规定的 xff0c 但当我们使用迁移学习的时候 xff0c 我
  • 静态实现多态和动态实现多态的方式

    什么是多态 xff0c 什么是静态多态和动态多态 xff1f 多态 多态字面意思为多种状态 在面向对象语言中 xff0c 一个接口 xff0c 多种实现即为多态 C 43 43 中的多态性具体体现在编译和运行两个阶段 编译时多态是静态多态
  • 记一次mysql 5.7.34编译过程错误

    错误一 编译时报没有配套的boost 解决办法 xff1a 下载配套的boost xff0c 并指定 DWITH BOOST span class token operator 61 span app boost 1 59 0 错误二 op
  • 使用pytorch实现预训练模型迁移学习中的图像分类

    目录 相关知识点 1 加载分类网络模型 xff08 1 xff09 加载网络模型 xff08 2 xff09 查看网络模型和模型参数 xff08 3 xff09 读取ImageNet txt分类文件 xff08 4 xff09 使用预训练模
  • 使用pytorch实现预训练模型迁移学习中的目标检测

    目录 1 COCO数据集类别文件下载 2 fasterrcnn resnet50 fpn预训练模型预测图片 导入相关的包 xff08 1 xff09 读取类别文件 xff08 2 xff09 数据变换 xff08 3 xff09 加载预训练
  • 树莓派系统安装及相关配置教程(Raspberry Pi 3 Model B)

    目录 1 准备硬件 2 官方安装系统方式 xff08 1 xff09 下载官方推荐的烧录工具 xff08 2 xff09 烧录镜像过程 3 Putty连接树莓派并进行树莓派相关配置 xff08 1 xff09 连接树莓派过程 xff08 2
  • 基于Pytorch框架的目标检测迁移学习和微调训练自己的数据集

    目录 1 前置知识点 2 数据集准备 xff08 1 xff09 下载数据集 xff08 2 xff09 标注自己的数据集步骤 xff08 3 xff09 加载数据集 3 预训练模型进行修改 4 Pytorch中TensorBoard的使用
  • GAN原理及Pytorch框架实现GAN(比较容易理解)

    目录 1 初识GAN 什么是GAN xff1f GAN应用场景 2 GAN原理结构 xff08 1 xff09 生成对抗网络子网络 xff08 2 xff09 结构图 xff08 1 xff09 生成器 xff08 2 xff09 判别器
  • Windows下的CodeBlocks配置Opencv环境

    目录 1 Opencv下载 2 CodeBlocks下载 3 Cmake编译工具下载 4 编译Opencv源码 5 编译OpenCV库文件 xff08 1 xff09 方式一 xff08 2 xff09 方式二 6 动态链接库文件环境配置
  • Pytorch框架实现DCGAN(比较容易理解)

    目录 1 了解DCGAN 2 本文DCGAN网络模型结构 xff08 1 xff09 生成模型结构 xff08 2 xff09 判别模型结构 xff08 3 xff09 DCGAN模型结构 3 数据集下载 4 GAN代码实现 5 mainW
  • OpenCV的数据结构

    目录 1 各种类模板 xff08 1 xff09 二维点Point 类模板 xff08 2 xff09 三维点Point3 类模板 xff08 3 xff09 尺寸Size 类模板 xff08 4 xff09 矩形Rect 类模板 xff0
  • OpenCV下的Mat类模板基础(实例)

    目录 1 Mat类模板相关知识点 2 创建cv Mat类对象 3 cv Mat类对象基本操作 xff08 1 xff09 读取图像 显示图像 存储图像 Windows下的CodeBlocks配置Opencv环境 OpenCV的数据结构 1
  • OpenCV中Mat类模板的一些基本操作(实例)

    目录 1 操作图像像素 xff08 1 xff09 at方式访问图像像素 xff08 2 xff09 迭代器访问图像中像素 xff08 3 xff09 指针访问图像像素 xff08 4 xff09 整行整列像素值的赋值 Windows下的C
  • window平台搭建服务器

    在windows如何搭建服务器 xff1a 1 先打开控制面板 xff0c 然后打开程序和功能 xff0c 点击启用或者关闭windows功能 xff0c 找到Internet information services xff0c 选中后点
  • CycleGAN的基本原理以及Pytorch框架实现

    目录 1 了解CycleGAN xff08 1 xff09 什么是CycleGAN xff08 2 xff09 CycleGAN的应用场景 2 CycleGAN原理 xff08 1 xff09 整个模型 xff08 2 xff09 优化目标