对抗生成网络GAN系列——CycleGAN简介及图片春冬变换案例

article/2025/9/24 17:52:54

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:对抗生成网络GAN系列——GAN原理及手写数字生成小案例    对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

文章目录

  • 对抗生成网络GAN系列——CycleGAN简介及风景照春冬变换案例
    • 写在前面
    • CycleGAN核心思想
    • CycleGAN损失函数
    • CycleGAN图像夏冬转换案例
    • 论文下载
    • 参考连接

 

本节已录制视频:CycleGAN✨✨✨

对抗生成网络GAN系列——CycleGAN简介及风景照春冬变换案例

写在前面

​   在前面我们已经介绍过了最原始的GAN网络和DCGAN,这篇文章我将来为大家介绍CycleGAN,并且基于CycleGAN实现一个小demo——将一张图片进行季节转换,即从冬天变换到夏天和从夏天变换到冬天。🍹🍹🍹

​  大家已经看到了CycleGAN,应该对GAN已经有了一定的了解,因此我不会对GAN的原理进行详细的讲解,只会叙述CycleGAN的独到之处。如若你还对GAN的原理不够清楚,下列两篇文章获取能帮到您:

  • 对抗生成网络GAN系列——GAN原理及手写数字生成小案例 🍁🍁🍁
  • 对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例 🍁🍁🍁

​  在正式讲解之前,我给大家先展示一下CycleGAN可以做哪些事:

horse2zebra

普通马变斑马

2222

各种风格转换

准备好了嘛,下面就正式发车了。🚖🚖🚖

 

CycleGAN核心思想

  这一部分我会来介绍CycleGAN的核心思想,相信你了解后会和我有一样的感觉,那就是这个设计太巧妙了!!!🌼🌼🌼

  首先我们还是来介绍一下这篇论文的全称—— Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks,即非成对图像转换循环一致性对抗网络。我们一点点的来解释,首先什么是非对称图像呢?其实啊,这里的非对称图像指的是我们的训练样本是不相关的。在之前的一些GAN转换实验中,往往都需要成对的图片数据,例如pix2pix,而成对的图片数据是很难获取的,于是CycleGAN对数据的要求就大大降低,不需要成对图像,即非对称图像,这样就让CycleGAN的应用场景就变得非常丰富。下图展示了对称数据和非对称数据的区别:

image-20220724214429247

  接下来再来讲讲什么是循环一致性对抗网络?这个就是本文的核心思想,听懂这个那么这篇论文你就搞懂了,这就为大家慢慢道来!!!🌼🌼🌼

​  我们先来明确一下这篇文章的目标,即有两个域的图像,分别为域X和域Y,例如域X表示夏季图片、域Y表示冬季图片,现期望将这两个域的图片互相转换,即输入域X的夏季图片生成器输出域Y的冬季图片或输入域Y的冬季图片生成器输出域X的夏季图片。我们来考虑考虑传统的GAN网络能否完成这项任务,示意图如下:

​  域X的图片经生成器G不断生成图片G(x),而 D Y D_Y DY 鉴别生成的图片和域Y中的图片,这样就构成了一个GAN网络,这样看似乎也可以完成任务,会将域X中的图片不断像域Y转换,但是呢,大家能否看出这里似乎还是存在着一些漏洞,如下图所示:

image-20220725114813626

​  上图我们的确是将域X中图片转换成了域Y中冬季图片风格,但是你会发现转换后的图片和原始图片没有任何关系,即GAN网络只学到了把一张夏季图片传化为冬季图片,但至于转换后的冬季图片和原始夏季图片有没有关系没有学习到,这样的话这个网络肯定是不符合实际要求的。那么CycleGAN就提出了循环一致性网络,如下图所示:

image-20220725131900754

​   现对上图做相关解释,首先我们先对相关字母做一定了解,如下表所示:

x x x域X中的图像数据
Y ^ {\rm{\hat Y}} Y^ x x x经生成器 G G G生成的图片域
x ^ {\rm{\hat x}} x^ Y ^ {\rm{\hat Y}} Y^ 中图片经生成器 F F F生成的数据
G G G生成器,用于将图片从域 X X X到域 Y Y Y生成
F F F生成器,用于将图片从域 Y Y Y到域 X X X生成
D Y D_Y DY判别器,用于判别图片是来自域 Y Y Y还是 G ( x ) G(x) G(x)

​  说明了这些字母后,我们来看上图:首先域 X X X中的数据 x x x经过生成器 G G G会变成 Y ^ {\rm{\hat Y}} Y^ 中的图片 y ^ {\rm{\hat y}} y^ ,即现在夏季的图片已经转换成冬季的图片,不过此时夏冬两季图片的相关性我们是不知的,可能很差,而我们期望夏冬两季的图片相关性强,即区别只会体现在季节的差异上。于是我们会将 Y ^ {\rm{\hat Y}} Y^ 中的图片 y ^ {\rm{\hat y}} y^ 再经过生成器 F F F变换回来,即将冬季图片再转换成夏季图片,结果记为 x ^ {\rm{\hat x}} x^ 。然后我们就设置损失让 x x x x ^ {\rm{\hat x}} x^ 尽可能一样,这样就能控制生成器G生成的冬季图片和原始夏季图片相关性很强了。上述循环一致性大致过程为: x → G ( x ) → F ( G ( x ) ) ≈ x ^ x \to G(x) \to F(G(x)) \approx \hat x xG(x)F(G(x))x^ ,即让 x x x x ^ {\rm{\hat x}} x^尽可能相似。

​  上文介绍完了从域 X X X转域 Y Y Y的过程,那从域 X X X转域 Y Y Y是一样的,即尽可能让 y y y y ^ {\rm{\hat y}} y^ 相似 y → F ( y ) → G ( F ( y ) ) ≈ y ^ y \to F(y) \to G(F(y)) \approx \hat y yF(y)G(F(y))y^,过程如下:

image-20220725141506141

​  其实这样就把CycleGAN的核心思想都介绍完了,这里再贴上论文中关于这部分的一张完整的图供大家参考:

image-20220725141827484

 
 

CycleGAN损失函数

  其实介绍完理论部分,那么损失函数就很简单了,一共有三部分组成,如下表所示:【呜呜呜,这里编辑的markdown表格在网页中显示总是乱码,大家将就看一下图片吧🎃】

在这里插入图片描述

  而总的损失为上述三部分之和,公式如下:

L ( G , F , D X , D Y ) = L G A N ( G , D Y , X , Y ) + L G A N ( G , D X , Y , X ) + λ L c y c ( G , F ) L(G,F,{D_X},{D_Y}) = {L_{GAN}}(G,{D_Y},X,Y) + {L_{GAN}}(G,{D_X},Y,X) + \lambda {L_{cyc}}(G,F) L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(G,DX,Y,X)+λLcyc(G,F)

  其中 λ \lambda λ 表示循环一致损失所占比重,论文中设置 λ = 10 \lambda = 10 λ=10

 
 

CycleGAN图像夏冬转换案例

​  实验论文中也给除了Github地址,连接如下:CycleGAN 🍁🍁🍁

​  这里我就不带大家一点点的解读代码了,相信你阅读了我之前的文章看这个代码应该能大致了解,我之前几期做过一些代码的解读,但是我自己觉得描述并不算很清晰,有的想要表达的点也没有表述清楚,所以我觉得代码部分大家还是看视频讲解比较高效,但是不论怎样,阅读代码你一定要自己亲自调试调试,这样你会有很大的收获!!!

  这里我就放一张我运行的结果图片,从夏季转换到冬季,如下:

Snipaste_2022-07-24_23-28-59

  可以看出,变换的效果还是不错的。【注意:我只再Googleclab上训练了15个epoch就得动了这样的效果,大家可以增大epoch进行训练。】

 
 

论文下载

CycleGAN论文下载 🍁🍁🍁

 
 

参考连接

精读CycleGAN论文

生成式對抗網路 (Generative Adversarial Network, GAN) (四) – Cycle GAN

 
 
如若文章对你有所帮助,那就🛴🛴🛴

在这里插入图片描述


http://chatgpt.dhexx.cn/article/DQW0joZJ.shtml

相关文章

MATLAB代码:对于对抗生成网络GAN的风光场景生成算法 关键词:场景生成 GAN 对抗生成网络 风光场景

MATLAB代码:对于对抗生成网络GAN的风光场景生成算法 关键词:场景生成 GAN 对抗生成网络 风光场景 仿真平台: pythontensorflow 主要内容:代码主要做的是基于数据驱动的风光新能源场景生成模型,具体为,通过构建了一种对…

对抗生成网络GAN系列——GAN原理及手写数字生成小案例

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解   目标检测系列——Faster R-CNN原理详解 🍊近期目标&a…

GAN——对抗生成网络

GAN的基本思想 作为现在最火的深度学习模型之一,GAN全称对抗生成网络,顾名思义是生成模型的一种,而他的训练则是处于一种对抗博弈状态中的。它使用两个神经网络,将一个神经网络与另一个神经网络进行对抗。 基本思想:&…

一文读懂对抗生成网络的3种模型

https://www.toutiao.com/i6635851641293636109/ 2018-12-17 14:53:28 基于对抗生成网络技术的在线工具edges2cats, 可以为简笔画涂色 前言 在GAN系列课程中分别讲解了对抗生成网络的三种模型,从Goodfellow最初提出的原始的对抗生成网络,到…

对抗生成网络(GAN)详解

目录 前言 目标函数 原理 训练 给定生成器,训练判别器 给定判别器,训练生成器 总结 前言 之前的生成模型侧重于将分布函数构造出来,然后使用最大似然函数去更新这个分布函数的参数,从而优化分布函数,但是这种方法…

对抗生成网络(GAN)简介及生成数字实战

一、简介 生成对抗网络(Generative Adversarial Netword,简称GAN),是一种生成式机器学习模型,该方法由伊恩古德费洛等人于2014年提出,曾被称为“机器学习这二十年来最酷的想法”,可以用来创造虚…

对抗生成网络(Generative Adversarial Net)

好久没有更新博客了,但似乎我每次更新博客的时候都这么说(泪)。最近对生活有了一些新的体会,工作上面,新的环境总算是适应了,知道了如何摆正工作和生活之间的关系,如何能在有效率工作的同时还能…

【PaddleOCR-det-finetune】一:基于PPOCRv3的det检测模型finetune训练

文章目录 基本流程详细步骤打标签,构建自己的数据集下载PPOCRv3训练模型修改超参数,训练自己数据集启动训练导出模型 测试 相关参考手册在PaddleOCR项目工程中的位置: det模型训练和微调:PaddleOCR\doc\doc_ch\PPOCRv3_det_train.…

模型微调(Finetune)

参考:https://zhuanlan.zhihu.com/p/35890660 ppt下载地址:https://github.com/jiangzhubo/What-is-Fine-tuning 一.什么是模型微调 给定预训练模型(Pre_trained model),基于模型进行微调(Fine Tune)。相…

fine-tuning

微调(fine-tuning) 在平时的训练中,我们通常很难拿到大量的数据,并且由于大量的数据,如果一旦有调整,重新训练网络是十分复杂的,而且参数不好调整,数量也不够,所以我们可…

大模型的三大法宝:Finetune, Prompt Engineering, Reward

编者按:基于基础通用模型构建领域或企业特有模型是目前趋势。本文简明介绍了最大化挖掘语言模型潜力的三大法宝——Finetune, Prompt Engineering和RLHF——的基本概念,并指出了大模型微调面临的工具层面的挑战。 以下是译文,Enjoy! 作者 | B…

RCNN网络源码解读(Ⅲ) --- finetune训练过程

目录 0.回顾 1.finetune二分类代码解释(finetune.py) 1.1 load_data(定义获取数据的方法) 1.2 CustomFineTuneDataset类 1.3 custom_batch_sampler类( custom_batch_sampler.py) 1.4 训练train_mod…

FinSH

finSH介绍 FinSH 是 RT-Thread 的命令行组件,提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口 / 以太网 / USB 等与 PC 机进行通信。 命令执行过程 功能: 支持鉴权,可在系统配置中选择打开/关闭。(TODO…

从统一视角看各类高效finetune方法

每天给你送来NLP技术干货! 来自:圆圆的算法笔记 随着预训练模型参数量越来越大,迁移学习的成本越来越高,parameter-efficient tuning成为一个热点研究方向。在以前我们在下游任务使用预训练大模型,一般需要finetune模型…

finetune

finetune的含义是获取预训练好的网络的部分结构和权重,与自己新增的网络部分一起训练。下面介绍几种finetune的方法。 完整代码:https://github.com/toyow/learn_tensorflow/tree/master/finetune 一,如何恢复预训练的网络 方法一&#xf…

11.2 模型finetune

一、Transform Learning 与 Model Finetune 二、pytorch中的Finetune 一、Transfer Learning 与 Model Finetune 1. 什么是Transfer Learning? 迁移学习是机器学习的一个分支,主要研究源域的知识如何应用到目标域当中。迁移学习是一个很大的概念。 怎么理解源域…

飞桨深度学习学院零基础深度学习7日入门-CV疫情特辑学习笔记(四)DAY03 车牌识别

本课分为理论和实战两个部分 理论:卷积神经网络 1.思考全连接神经网络的问题 一般来收机器学习模型实践分为三个步骤,(1)建立模型 (2)选择损失函数 (3)参数调整学习 1.1 模型结构不…

unity sdk(android)-友盟推送SDK接入

注意:一开始想接友盟Unity的SDk,但是导入后缺少各种jar,所以最后还是接了android的,demo文档齐全 官方文档:开发者中心 按照官方文档对接即可, 接入流程 1、项目中com.android.tools.build:gradle配置&…

友盟推送学习

一、首次使用U_Push 1、首先注册友盟账号,进入工作台,选择产品U_Push。 2、创建应用 3、在自己的项目中自动集成SDK 开发环境要求: Android Studio 3.0以上 Android minSdkVersion: 14 Cradle: 4.4以上 在根目录build.gradle中添加mav…

Android 学习之如何集成友盟推送

我是利用Android studio 新建一个空的Android项目。 步骤一 导入第三方库 1.切换Android项目状态为Project状态 2.在main文件下新建 jniLibs文件夹(用来导入PushSDK项目下lib文件中的so文件) 3.在libs文件夹下添加友盟PuskSDK中的 jar 文件&#xff…