昇思MindSpore25天学习Day19:CycleGAN图像风格迁移互换

@(TOC)[CycleGAN图像风格迁移呼唤]

模型介绍

模型简介

CycleGAN(Cycle Generative Adversaial Network)即循环对抗生成网络,来自论文Link:Unpaired lmage-to-mage Translation using Cycle-Consistent AdvesairalNetworks该模型实现了—种在没有配对示例的情况下学习将图像从源域×转换到目标域Y的方法。

该模型一个重要应用领城是域迁移(Dom in Adaptation),可以通俗地理解为图像风格迁移。其实在CycieGAV之前,就已经有了域迁移模型,比以D Pi2Pk,但是Pi2Fik要求训练数据必须是成对的,而现实生活中,要找到两个城(画风)中成对出现的图片是相当困难的,因此 CyclCGAN诞生了,它只需要两种域的数据,而不需要他们有严格对应关系,是一种新的无监督的图像迁移网络。

模型结构

CycleGAN网络本质上是由两个镜像对称的GAN网络组成,其结构如下图所示(图片来源于原论文)∶

在这里插入图片描述
为了方便理解,这里以苹果和橘子为例介绍。上图中 X X X可以理解为苹果, Y Y Y为橘子; G G G为将苹果生成橘子风格的生成器, F F F为将橘子生成的苹果风格的生成器, D x D_x Dx D x D_x Dx为其相应判别器,具体生成器和判别器的结构可见下文代码。模型最终能够输出两个模型的权重,分别将两种图像的风格进行彼此迁移,生成新的图像。

该模型一个很重要的部分就是损失函数,在所有损失里面循环一致损失(Cycle ConsistencyLoss)是最重要的。循环损失的计算过程如下图所示(图片来源于原论文)︰

在这里插入图片描述
图中苹果图片 x x x经过生成器 G G G得到伪橘子 Y ˆ \^Y Yˆ,然后将伪橘子 Y ˆ \^Y Yˆ结果送进生成器 F F F又产生苹果风格的结果 x ˆ \^x xˆ,最后将生成的苹果风格结果 x ˆ \^x xˆ与原苹果图片 x x x一起计算出循环一致损失,反之亦然。循环损失捕捉了这样的直觉,即如果我们从一个域转换到另一个域,然后再转换回来,我们应该到达我们开始的地方。详细的训练过程见下文代码。

1 数据集

本案例使用的数据集里面的图片来源于Link:ImageNet,该数据集共有17个数据包,本文只使用了其中的苹果橘子部分。图像被统─缩放为256×256像素大小,其中用于训练的苹果图片996张、橘子图片1020张,用于测试的苹果图片266张、橘子图片248张。
这里对数据进行了随机裁剪、水平随机翻转和归—化的预处理,为了将重点聚焦到模型,此处将数据预处理后的结果转换为MindRecord格式的数据,以省略大部分数据预处理的代码。

1.1 数据集下载

使用download 接口下载数据集,并将下载后的数据集自动解压到当前目录下。数据下载之前需要使用pip install download安装download 包。

在这里插入图片描述

1.2 数据集加载

使用MindSpore的MindDataset接读取和解析数据集。
在这里插入图片描述

1.3 可视化

通过create_dict_iterator函数将数据转换成字典迭代器,然后使用matplotlib 模块可视化部分训练数据。
在这里插入图片描述

2 构建生成器

本案例生成器的模型结构参考的ResNet模型的结构,参考原论文,对于128×128大小的输入图片采用6个残差块相连,图片大小为256×256以上的需要采用9个残差块相连,所以本文网络有9个残差块相连,超参数n_layers参数控制残差块数。
生成器的结构如下所示:
在这里插入图片描述
具体的模型结构请参照下文代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 构建判别器

判别器其实是一个二分类网络模型,输出判定该图像为真实图的概率。网络模型使用的是Patch大小为70x70的PatchGANs模型。通过一系列的Conv2d 、 BatchNorm2d和LeakyReLu层对其进行处理,最后通过Sigmoid 激活函数得到最终概率。
在这里插入图片描述

4 优化器和损失函数

根据不同模型需要单独的设置优化器,这是训练过程决定的。
对生成器 G G G及其判别器 D y Dy Dy ,目标损失函数定义为:
在这里插入图片描述
其中 G G G试图生成看起来与 Y Y Y中的图像相似的图像 G ( x ) G(x) G(x),而 D y D_y Dy的目标是区分翻译样本 G ( x ) G(x) G(x)和真实样本 y y y,生成器的目标是最小化这个损失函数以此来对抗判别器。即
在这里插入图片描述
单独的对抗损失不能保证所学函数可以将单个输入映射到期望的输出,为了进一步减少可能的映射函数的空间,学习到的映射函数应该是周期一致的,例如对于X的每个图像x,图像转换周期应能够将x带回原始图像,可以称之为正向循环—致性,即
在这里插入图片描述
对于 Y Y Y,类似的在这里插入图片描述
可以理解采用了一个循环一致性损失来激励这种行为。
循环一致损失函数定义如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 前向计算

搭建模型前向计算损失的过程,过程如下代码。
为了减少模型振荡[1],这里遵循Shrivastava等人的策略[2],使用生成器生成图像的历史数据而不是生成器生成的最新图像数据来更新鉴别器。这里创建image_pool 函数,保留了一个图像缓冲区,用于存储生成器生成前的50个图像。

在这里插入图片描述
在这里插入图片描述

6 计算梯度和反向传播

其中梯度计算也是分开不同的模型来进行的,详情见如下代码:

在这里插入图片描述

7 模型训练

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8 模型推理

下面我们通过加载生成器网络模型参数文件来对原图进行风格迁移,结果中第—行为原图,第二行为对应生成的结果图。

在这里插入图片描述
在这里插入图片描述

9 参考

[1] I.Goodfellow.NIPS 2016 tutorial: Generative ad-versarial networks. arXiv preprint arXiv:1701.00160,2016.2,4,5
[2]A.Shwivastava T.Pister,O. Tuzel, J.Susskind W.Wang, R.Webb.Learning from simulated and unsupervised images through adversarial training. In CVPR,2017.3,5,6,7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从nginx返回404来看http1.0和http1.1的区别

序言 什么样的人可以称之为有智慧的人呢?如果下一个定义,你会如何来定义? 所谓智慧,就是能区分自己能改变的部分,自己无法改变的部分,努力去做自己能改变的,而不要天天想着那些无法改变的东西&a…

麒麟桌面操作系统上网络设置界面消失的解决方法

原文链接:麒麟桌面操作系统上网络设置界面消失的解决方法 Hello,大家好啊!今天给大家带来一篇关于麒麟桌面操作系统上网络设置界面消失解决方法的文章。在使用麒麟桌面操作系统时,可能会遇到网络设置界面突然消失的情况&#xff…

斯坦福CS224n深度学习培训营课程

自然语言处理领域的经典课程涵盖了从基础知识到最新研究的全面内容。本培训营将精选课程内容,结合实际案例和项目实践,带领学员深入探索自然语言处理的前沿,学习最先进的深度学习技术。 课程大小:2.6G 课程下载:http…

四自由度SCARA机器人的运动学和动力学matlab建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 针对SCARA 机器人系统进行了深入研究与探讨,提出SCARA机器人的动力学模型和运动学模型,并以MATLAB软件为仿真平台,通过MATLAB Robotics Too…

java核心-泛型

目录 概述什么是泛型分类泛型类泛型接口泛型方法 泛型通配符分类 泛型类型擦除分类无限制类型擦除有限制类型擦除 问题需求第一种第二种 概述 了解泛型有利于学习 jdk 、中间件的源码,提升代码抽象能力,封装通用性更强的组件。 什么是泛型 在定义类、接…

二手闲置平台小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,卖家管理,商品分类管理,商品信息管理,商品购买管理,商品配送管理 微信端账号功能包括:系统首页,商品信息&a…

【linux服务器】大语言模型实战教程:LLMS大模型部署到个人服务器或嵌入式开发板(保姆级教学)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 说到大语言模型相信大家都不会陌生,大型语言模型(LLMs)是人工智能文本处理的主要类型,也现在最流行的人工智能…

基于Java+SpringMvc+Vue技术智慧校园系统设计与实现--60页及以上论文参考

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

网络基础:园区网络架构

园区网络 园区网络(Campus Network)是指在一个相对较大的区域内,如大学校园、企业园区或政府机关等,建立的计算机网络系统。园区网络根据规模的不同,可以分为以下几种类型: ①小型园区网络:通常…

【系统架构设计师】八、系统工程基础知识(系统工程|系统性能)

目录 一、系统工程 1.1 系统工程的方法 1.1.1 霍尔的三维结构 1.1.2 切克兰德方法 1.1.3 并行工程方法 1.1.4 综合集成法 1.1.5.WSR 系统方法。 二、系统工程生命周期 2.1 系统工程生命周期7阶段 2.2 生命周期方法 三、基于模型的系统工程(MBSE) 四、系统性能 4.1…

vb.netcad二开自学笔记6:第一个绘制线段命令

.net编写绘制直线已完全不同于ActiveX的(VBA)的方式,过程更类似于arx程序,需要通过操作AutoCAD 数据库添加对象!下面的代码是在以前代码基础上添加了一个新myline命令。 AutoCAD 数据库结构 myline命令代码 Imports A…

YoloV9改进策略:Block改进|轻量实时的重参数结构|最新改进|即插即用(全网首发)

摘要 本文使用重参数的Block替换YoloV9中的RepNBottleneck,GFLOPs从239降到了227;同时,map50从0.989涨到了0.99(重参数后的结果)。 改进方法简单,只做简单的替换就行,即插即用,非常…

使用ndoe实现自动化完成增删改查接口

使用ndoe实现自动化完成增删改查接口 最近工作内容比较繁琐,手里需要开发的项目需求比较多,常常在多个项目之间来回切换,有时候某些分支都不知道自己开发了什么、做了哪些需求, 使用手写笔记的方式去记录分支到头来也是眼花缭乱&a…

vscode调试教程

VSCode调试 VSCode Debuggers VSCode使用launch.json进行细粒度的控制,可以启动程序或将其附加到复杂的调试场景中 打开Run and Debug视图Ctrl Shift D 点击create a launch.json file,选择C(GDB/LLDB) 会在工作目录自动创建.vscode/launch.json文…

【Python】已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序 一、分析问题背景 在安装和配置MongoDB时,有…

怎样在 PostgreSQL 中优化对 UUID 数据类型的索引和查询?

文章目录 一、UUID 数据类型概述二、UUID 索引和查询的性能问题三、优化方案(一)选择合适的索引类型(二)压缩 UUID(三)拆分 UUID(四)使用覆盖索引(五)优化查询…

一二三应用开发平台应用开发示例(6)——代码生成、权限配置、运行效果查看

生成代码 完成配置工作,接下来就是见证奇迹的时刻~ 返回到实体列表,选中“文件夹”记录,点击“生成代码”按钮,提示成功后,在项目的output目录下输出了平台基于配置模板产生的各层代码,在原有后端的基础上…

Pyserial设置缓冲区大小失败

文章目录 问题描述原因分析解决方案 问题描述 使用set_buffer_size()设置缓冲区大小后,buffer size仍为默认的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello,大家好,我是一名测试开发工程师,至今已在自动化测试领域深耕9个年头,现已将本人实战多年的多终端自动化测试框架【wyTest】开源啦,在接下来的一个月里,我将免费指导大家使用wyTest,请大家…

欧拉函数.

性质1:质数n的欧拉函数为n-1. 性质2:如果p,q都是质数,那么ϕ ( p ∗ q ) ϕ ( p ) ∗ ϕ ( q ) ( p − 1 ) ∗ ( q − 1 ) 证明:p,2p....q*p都不与q*p互质,q同理,所以总的不互质个…