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

news2024/12/24 10:27:43

@(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.coloradmin.cn/o/1905951.html

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

相关文章

【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计

系统功能: 显示时间,温湿度,体温信息,播放音乐及控制红外小夜灯,通过蓝牙模块连接手机APP。 系统上电后OLED显示“欢迎使用智能手表系统请稍后”,两秒后进入正常页面显示 第一行显示获取到的当前时间 第二行显示获…

汽车数据应用构想(六)

今天接着说车辆独有的数据信息,对于车辆本身的故障、损耗,原理上都会有相应的数据特征,举个例子: 刹车对于安全无比重要,但刹车性能的下降却并不会引发仪表告警。一般都是保养的时候,工人肉眼观察一下刹车…

文章解读与仿真程序复现思路——太阳能学报EI\CSCD\北大核心《考虑碳效益和运行策略的风电场储能优化配置》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【scau统计学】期末考试——Excel数据分析加载项

首先机房只有MicrosoftExcel没有WPS,所以需要熟悉Microsoft Excel的使用。 如果没有数据分析这块选项 如果没有数据分析这个加载项,请先下载。 左上角点击文件: 点击左下角(选项),选择加载项 点击下方&a…

【C语言】C语言编译链接和Win32API简单介绍

目录 翻译环境和运行环境翻译环境编译器预处理(预编译)编译链接 执行环境 Win32API是什么控制台程序控制台获取坐标COORDGetStdHandle函数GetConsoleCursorinfo函数CONSOLE_CURSOR_INFOSetConsoleCursorInfo函数SetConsoleCursorPostion函数GetAsyncKeyS…

完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效!!!

完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效!!! 亲测有效 完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效&#xf…

算法设计与分析 实验5 并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 (一)基准算法 (二)高效算法 五、实验结论 一、实验目的 1. 掌握图的连通性。 2. 掌握并查集的基本原理和应用。 二、问题描述 在图论中,一条边被称…

Three.js机器人与星系动态场景(四):封装Threejs业务组件

实际在写业务的时候不会在每个组件里都写几十行的threejs的初始化工作。我们可以 将通用的threejs的场景、相机、render、轨道控制器等进行统一初始化。同时将非主体的函数提到组件外部,通过import导入进组件。将业务逻辑主体更清晰一些。下面的代码是基于reactthre…

(附源码)springboot共享单车管理系统-计算机毕设 65154

springboot共享单车管理系统 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于共享单车管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了共享单车管理系…

Leetcode3194. 最小元素和最大元素的最小平均值

Every day a Leetcode 题目来源:3194. 最小元素和最大元素的最小平均值 解法1:排序遍历 将数组 nums 排序后,利用双指针计算每一对 (minElement maxElement) / 2,最小值即为答案。 代码: /** lc appleetcode.cn …

多线程网络实战之仿qq群聊的服务器和客户端

目录 一、前言 二、设计需求 1.服务器需求 2.客户端需求 三、服务端设计 1.项目准备 2.初始化网络库 3.SOCKET创建服务器套接字 4. bind 绑定套接字 5. listen监听套接字 6. accept接受客户端连接 7.建立套接字数组 8. 建立多线程与客户端通信 9. 处理线程函数&…

iptables实现端口转发ssh

iptables实现端口转发 实现使用防火墙9898端口访问内网front主机的22端口(ssh连接) 1. 防火墙配置(lb01) # 配置iptables # 这条命令的作用是将所有目的地为192.168.100.155且目标端口为19898的TCP数据包的目标IP地址改为10.0.0.148,并将目标…

【Java】垃圾回收学习笔记(一):Root Search 根可达算法+垃圾回收的起点

文章目录 1. 引用计数法优点缺点 2. 可达性分析 Root Search2.1 那些对象是GC Roots2.2 引用的分类2.3 回收方法区 3. 实现细节3.1 GC的起点:节点枚举OopMap:帮助高效的根节点枚举 3.2 何时开始GC:安全点与安全区域如何选取安全点如何让程序进…

数据驱动的内容优化:Kompas.ai如何提升内容表现

在数字化营销时代,内容是企业与用户沟通的重要桥梁。然而,随着信息量的爆炸性增长,如何让内容在激烈的竞争中脱颖而出,成为每个营销人员面临的问题。数据驱动的内容优化策略,通过精准分析和科学决策,帮助品…

华为OD机试 - 员工派遣(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型,比如小波域,曲波域,dreamlet 域等,其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法,在后续的研…

Swift 中 map 和 flatMap 的区别 (入门版)

在 Swift 中,map 和 flatMap 是用于处理集合类型(如数组、字典、集合等)的两个重要方法。尽管它们看起来相似,但它们在处理集合中的元素和结果时有着不同的行为。 map 方法 map 方法会对集合中的每一个元素应用一个变换&#xff…

C++ 面试宝典之:空类大小究竟是不是 0?

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ 首先,空类是什么?空类指的是不包含任何数据成员的类,但可能包含方法成员。 实例化时…

Redis常用命令——Set、Zset篇

文章目录 一、Set相关命令操作 SADD SMEMBERS SISMEMBER SCARD SPOP SMOVE SREM SINTER 与 SINTERSTORE SUNION 与 SUNIONSTORE SDIFF 与 SDIFFSTORE Set命令小结 二、Zset 相关命令操作 ZADD ZCARD ZCOUNT ZRANGE ZREVRANGE ZPOPMAX BZPOPMAX ZPOPMIN 与 BZPOPMIN ZRANK 与 …

AI Earth ——开发者模式案例10:基于 CNN 的 AI 分类模型开发

基于 CNN 的 AI 分类模型开发 本案例主要介绍如何快速利用 AIE Python SDK 创建机器学习建模流程。我们主要使用到 Python SDK的Machine Learning Proxy 模块(下文简称 AieMlProxy )。该模块涵盖了一系列用户与训练集群之间的交互接口,包括:鉴权、数据加载、训练任务提交、…