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

这篇具有很好参考价值的文章主要介绍了CycleGAN的基本原理以及Pytorch框架实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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将转换前后图片的配对,类似于有监督学习,提升了转换效果。

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

(2)CycleGAN的应用场景 

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习 

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习 cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 2 CycleGAN原理

(1)整个模型

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

(2)优化目标 

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习 cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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

(1)训练生成器

 cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

(2)训练判别器

 cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

3.CycleGAN的网络结构 

(1)生成器模型

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

原论文的网络模型结构

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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

  • 首先对于输入图像使用的卷积:
    • 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大小图像分辨率的网络结构

     

    • cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习
  • 对于输入为256 x 256或者更大图像分辨率的网络结构

    • cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习 

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 

(2)判别器模型

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

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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

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

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习 

提示:详细理解CycleGAN的过程

4.CycleGAN代码实现 

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

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

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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

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

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

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

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 (2)转换风格过程

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

 

cyclegan 输入,pytorch,pytorch,生成对抗网络,深度学习

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文章来源地址https://www.toymoban.com/news/detail-730522.html

到了这里,关于CycleGAN的基本原理以及Pytorch框架实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于CycleGAN的山水风格画迁移

    1.1 研究背景及意义 绘画是人类重要的一种艺术形式,其中中国的山水画源远流长,具有丰富的美学内涵,沉淀着中国人的情思。游山玩水的大陆文化意识,以山为德、水为性的内在修为意识,咫尺天涯的视错觉意识,一直成为山水画演绎的中轴主线。从山水画中,我们可以

    2024年02月10日
    浏览(32)
  • 风格迁移CycleGAN开源项目代码运行步骤详细教程

       最近在学习Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks这篇论文,论文下载地址,想要复现一下文中的代码,过程中遇到了很多问题,因此记录下来。遇到其他问题欢迎在评论区留言,相互解答。 如果没有安装Anaconda或者MIniconda的可以先安装,并学一下

    2024年02月02日
    浏览(28)
  • 使用CycleGAN训练自己制作的数据集,通俗教程,快速上手

    总结了使用 CycleGAN 训练自己制作的数据集,这里的教程例子主要就是官网给出的斑马变马,马变斑马,两个不同域之间的相互转换。教程中提供了官网给的源码包和我自己调试优化好的源码包,大家根据自己的情况下载使用,推荐学习者下载我提供的源码包,可以少走一些弯

    2024年02月03日
    浏览(59)
  • 【计算机视觉|生成对抗】非配对图像到图像的翻译:使用循环一致对抗网络(CycleGAN)

    本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题: Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks 链接:[1703.10593] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (arxiv.org) 图像到图像的转换是一类涉及视觉和图形问题的任务,其

    2024年02月12日
    浏览(46)
  • WGAN基本原理及Pytorch实现WGAN

    目录 1.WGAN产生背景 (1)超参数敏感 (2)模型崩塌 2.WGAN主要解决的问题 3.不同距离的度量方式 (1)方式一 (2)方式二 (3)方式三 (4)方式四 4.WGAN原理 (1)p和q分布下的距离计算  (2)EM距离转换优化目标推导 (3)判别器和生成器的优化目标 5.WGAN训练算法  6.WGAN网络

    2024年02月10日
    浏览(28)
  • 爬虫基本原理介绍、实现以及问题解决

    1. 前言 爬虫作为网络数据采集的重要工具,在当今互联网时代具有不可替代的作用。通过爬虫,我们可以获取到丰富的网络数据,用于各种用途,包括数据分析、业务决策、舆情监测等。 2. 爬虫能做什么 爬虫可以用于获取互联网上的各种数据,无论是文字、图片、视频还是

    2024年04月14日
    浏览(36)
  • 原生Camera2的对焦原理和框架,以及代码实现流程

    在Android中,Camera2 API提供了对相机硬件的底层访问,包括对焦功能。以下是Camera2对焦原理和框架的简要概述,以及代码实现流程: 对焦原理和框架: 预览: 在开始对焦之前,通常需要先启动相机的预览。预览不仅允许用户看到实时视频流,还可以提供关于相机状态的信息,

    2024年01月16日
    浏览(57)
  • Redis实战案例14-分布式锁的基本原理、不同实现方法对比以及基于Redis进行实现思路

    基于数据库的分布式锁:这种方式使用数据库的特性来实现分布式锁。具体流程如下: 获取锁:当一个节点需要获得锁时,它尝试在数据库中插入一个特定的唯一键值(如唯一约束的主键),如果插入成功,则表示获得了锁。 释放锁:当节点完成任务后,通过删除该唯一键

    2024年02月13日
    浏览(53)
  • 爬虫框架scrapy基本原理

    scrapy是python的爬虫框架,类似于django(python的web框架)。 安装: Mac、Linux 执行 pip3 install scrapy ,不存在任何问题 Windows 执行 pip3 install scrapy ,如果安装失败,执行下面步骤: (1)安装wheel(为支持通过文件安装软件): pip3 install wheel (wheel官网) (2)安装lxml: pip3 insta

    2024年02月15日
    浏览(51)
  • JSP原理以及基本语法

    什么是JSP? Java Server Pages:Java服务器页面,和Servlet一样是动态Web技术! 和HTML的区别? HTML是静态页面。 在JSP页面中可以嵌入Java代码,为用户提供动态的数据。 JSP 和 Servlet 的关系? JSP最终会被转换为一个Java类,JSP的本质就是一个Servlet! 我的在访问 index_jsp 时,会自动生

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包