昇思25天学习打卡营第11天|linchenfengxue

深度学习:CycleGAN图像风格迁移转换 定义ResNet的残差块# 返回 x + out 的做法是实现残差学习的关键。这个设计是为了让网络能够更容易地学习到恒等映射(identity mapping)# 从而帮助解决深层网络训练中的梯度消失问题,并允许网络构建得更深而不会导致性能下降。# 定义基于ResNet的生成器# 数据集图像输入后经过的第一个网络# 随后对数据进行两次下采样# 残差网络有9个残差块# 组装残差网络# 再将图片进行上采样(转置卷积)# 定义输出层else:# 将输出压制(-1, 1) 阅读详情

CycleGAN图像风格迁移互换

模型介绍

模型简介

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

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

模型结构

CycleGAN 网络本质上是由两个镜像对称的 GAN 网络组成,其结构如下图所示:

为了方便理解,这里以苹果和橘子为例介绍。上图中 𝑋𝑋 可以理解为苹果,𝑌𝑌 为橘子;𝐺𝐺 为将苹果生成橘子风格的生成器,𝐹𝐹 为将橘子生成的苹果风格的生成器,𝐷𝑋𝐷𝑋 和 𝐷𝑌𝐷𝑌 为其相应判别器,具体生成器和判别器的结构可见下文代码。模型最终能够输出两个模型的权重,分别将两种图像的风格进行彼此迁移,生成新的图像。

该模型一个很重要的部分就是损失函数,在所有损失里面循环一致损失(Cycle Consistency Loss)是最重要的。循环损失的计算过程如下图所示:

图中苹果图片 𝑥𝑥 经过生成器 𝐺𝐺 得到伪橘子 𝑌̂ 𝑌^,然后将伪橘子 𝑌̂ 𝑌^ 结果送进生成器 𝐹𝐹 又产生苹果风格的结果 𝑥̂ 𝑥^,最后将生成的苹果风格结果 𝑥̂ 𝑥^ 与原苹果图片 𝑥𝑥 一起计算出循环一致损失,反之亦然。循环损失捕捉了这样的直觉,即如果我们从一个域转换到另一个域,然后再转换回来,我们应该到达我们开始的地方。

数据集

本案例使用的数据集里面的图片来源于ImageNet,该数据集共有17个数据包,本文只使用了其中的苹果橘子部分。图像被统一缩放为256×256像素大小,其中用于训练的苹果图片996张、橘子图片1020张,用于测试的苹果图片266张、橘子图片248张。

这里对数据进行了随机裁剪、水平随机翻转和归一化的预处理,为了将重点聚焦到模型,此处将数据预处理后的结果转换为 MindRecord 格式的数据,以省略大部分数据预处理的代码。

数据集下载

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

from download import download

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/models/application/CycleGAN_apple2orange.zip"

download(url, ".", kind="zip", replace=True)

构建生成器

本案例生成器的模型结构参考的 ResNet 模型的结构,参考原论文,对于128×128大小的输入图片采用6个残差块相连,图片大小为256×256以上的需要采用9个残差块相连,所以本文网络有9个残差块相连,超参数 n_layers 参数控制残差块数。

生成器的结构如下所示:

构建判别器

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

优化器和损失函数

根据不同模型需要单独的设置优化器,这是训练过程决定的。

对生成器 𝐺𝐺 及其判别器 𝐷𝑌𝐷𝑌 ,目标损失函数定义为:

其中 𝐺𝐺 试图生成看起来与 𝑌𝑌 中的图像相似的图像 𝐺(𝑥)𝐺(𝑥) ,而 𝐷𝑌𝐷𝑌 的目标是区分翻译样本 𝐺(𝑥)𝐺(𝑥) 和真实样本 𝑦𝑦 ,生成器的目标是最小化这个损失函数以此来对抗判别器。即 𝑚𝑖𝑛𝐺𝑚𝑎𝑥𝐷𝑌𝐿𝐺𝐴𝑁(𝐺,𝐷𝑌,𝑋,𝑌)𝑚𝑖𝑛𝐺𝑚𝑎𝑥𝐷𝑌𝐿𝐺𝐴𝑁(𝐺,𝐷𝑌,𝑋,𝑌) 。

单独的对抗损失不能保证所学函数可以将单个输入映射到期望的输出,为了进一步减少可能的映射函数的空间,学习到的映射函数应该是周期一致的,例如对于 𝑋𝑋 的每个图像 𝑥𝑥 ,图像转换周期应能够将 𝑥𝑥 带回原始图像,可以称之为正向循环一致性,即 𝑥→𝐺(𝑥)→𝐹(𝐺(𝑥))≈𝑥𝑥→𝐺(𝑥)→𝐹(𝐺(𝑥))≈𝑥 。对于 𝑌𝑌 ,类似的 𝑥→𝐺(𝑥)→𝐹(𝐺(𝑥))≈𝑥𝑥→𝐺(𝑥)→𝐹(𝐺(𝑥))≈𝑥 。可以理解采用了一个循环一致性损失来激励这种行为。

循环一致损失函数定义如下:

循环一致损失能够保证重建图像 𝐹(𝐺(𝑥))𝐹(𝐺(𝑥)) 与输入图像 𝑥𝑥 紧密匹配。

前向计算

搭建模型前向计算损失的过程。

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

计算梯度和反向传播

其中梯度计算也是分开不同的模型来进行的

模型训练

训练分为两个主要部分:训练判别器和训练生成器,在前文的判别器损失函数中,论文采用了最小二乘损失代替负对数似然目标。

  • 训练判别器:训练判别器的目的是最大程度地提高判别图像真伪的概率。按照论文的方法需要训练判别器来最小化 𝐸𝑦−𝑝𝑑𝑎𝑡𝑎(𝑦)[(𝐷(𝑦)−1)2]𝐸𝑦−𝑝𝑑𝑎𝑡𝑎(𝑦)[(𝐷(𝑦)−1)2] ;

  • 训练生成器:如 CycleGAN 论文所述,我们希望通过最小化 𝐸𝑥−𝑝𝑑𝑎𝑡𝑎(𝑥)[(𝐷(𝐺(𝑥)−1)2]𝐸𝑥−𝑝𝑑𝑎𝑡𝑎(𝑥)[(𝐷(𝐺(𝑥)−1)2] 来训练生成器,以产生更好的虚假图像。

CycleGAN算法简述 CycleGAN是一种图像到图像的翻译模型,旨在无配对训练数据的情况下完成跨域图像转换。传统方法需要成对的输入-输出数据,但这种配对数据的获取往往代价高昂且难以实现。CycleGAN通过使用无配对数据的训练策略,实现从一个图像域到另一个域的有效转换,使其在艺术风格迁移、季节变化和对象转换等任务中表现出色。 阅读详情

相关推荐

【论文笔记】CycleGAN(基于PyTorch框架)

CycleGAN(基于PyTorch框架)

Michael_Cretu_的博客 1万+

生成对抗网络CycleGAN

利用非成对数据实现对图像源域到目标域的迁移!!!

m0_56247038的博客 7003

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

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

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

Keep_Trying_Go的博客 1万+

LVDS系列23:Xilinx Ultrascale系ISERDESE3原语(一)

当FIFO_RD_CLK与CLKDIV对齐时,也就是Latency With Late FIFO Empty情况时,延迟比前一种情况长一个FIFO_RD_CLK时钟周期,也就是在FIFO_RD_CLK上升沿后一点,CLKDIV才成功驱动完FIFO_EMPTY的变化,于是读侧要得到FIFO_EMPTY为0的情况则要等到下一个FIFO_RD_CLK的上升沿采集时;IS_CLK_INVERTED、IS_CLK_B_INVERTED设置CLK和CLK_B是否反转,一般情况下设置0;

weixin_38828382的博客 900

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

昇思25天学习打卡营第14天|linchenfengxue

生成式对抗网络(Generative Adversarial Networks,GAN)是一种生成式机器学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。最初,GAN由Ian J. Goodfellow于2014年发明,并在论文生成器的任务是生成看起来像训练图像的“假”图像;判别器需要判断从生成器输出的图像是真实的训练图像还是虚假的图像。GAN通过设计生成模型和判别模型这两个模块,使其互相博弈学习产生了相当好的输出。GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。

github_zwl的博客 1159

(学习笔记)机器人自主导航从零开始第四步———Rviz、Gazebo、Meshlab的安装

一、Rviz的安装 Rviz是一个

qq_59475883的博客 5057

昇思25天学习打卡营第5天|linchenfengxue

Group Convolution(分组卷积)原理如下图所示,相比于普通的卷积操作,分组卷积的情况下,每一组的卷积核大小为in_channels/g*k*k,一共有g组,所有组共有(in_channels/g*k*k)*out_channels个参数,是正常卷积参数的1/g。Group Convolution的弊端在于不同组别的通道无法进行信息交流,堆积GConv层后一个问题是不同组之间的特征图是不通信的,这就好像分成了g个互不相干的道路,每一个人各走各的,,使网络在下一层能处理不同组别通道的信息。

github_zwl的博客 420

机器人控制入门

机器人控制入门 对于工科领域来说,脱离实践的学习都是肤浅的,对于控制这种强调经验的技术更是如此。如果去问一个程序员怎么学习一块技术,他必然让你去多编程。机器人领域也是。如果想把基本功打扎实,那么实践更是必不可少了。 机器人控制有三个元素:控制器(算法),执行器(电机),传感器; 控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位

彼岸花 1万+

Far planner 代码系列(35)动态障碍物预处理_激光雷达部分

主要讲解动态障碍物在激光雷达部分的剔除机制

博客 1056

一文教会你风格迁移CycleGAN从入门到高阶再到最终成功魔改(附成功魔改代码)

🔥🔥本文的创新点部分,我将把我的整个项目过程所使用到的绝大多数trick以及创新部分进行开源。只有淋过雨的孩子才会懂得给别人打伞,所以我开源的目的很简单,希望可以帮助到有缘相遇的初学者快速了解并掌握该方向内容。有能力的同学可以进行二次改进创新。我的最终模型在定性和定量的评估中效果均有提升。后续代码将更新到GitHub上,如果对大家有帮助,希望可以得到您的免费star✨。本人万分感谢!!! 本文的结构图均为本人绘制,如有需可以评论区留言❤ 五万字的文章创作不易,如有帮助劳烦免费点赞收藏一波,谢谢!

记录学习的小白 2万+

【红外DDE算法】一种应用于高动态范围红外可视化的算法

【红外DDE算法】一种应用于高动态范围红外可视化的算法 - 这个算法背后的动机 - 展示这个算法的流程 - 然后讨论各个可调参数的意义。

sunwindl91181的博客 1682

CycleGAN的介绍与实现效果

cyclegan、pytorch、损失函数

qq_45710342的博客 2万+

QEMU源码全解析 —— virtio(3)

QEMU源码全解析 —— virtio(3)

phmatthaus的专栏 1847

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一分钟教会你五种CycleGAN的优质创新思路(附代码)

本文的创新点部分,是来自我即将发表的一篇核心文章!!! 效果好的一批,分享给所有努力学习的你们。代码都开源了,要个赞不过分吧!

记录学习的小白 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

草履虫Cyclegan从零到一复现:介绍、配置、测试、自定义训练(大一作业)

CycleGAN是一种深度学习模型,用于图像转换任务。它可以将一组图像从一个领域转换到另一个领域,而需成对的训练数据。例如,将马的图像转换为斑马的图像,或将夏季景色的图像转换为冬季景色的图像。CycleGAN使用对抗性损失函数和循环一致性损失函数来训练模型,以生成高质量的转换图像。在许多应用中都有用,例如风格迁移、图像翻译和图像增强。本文根据官方文档的anaconda方式实现WindowsPython 3CPU 或 NVIDIA GPU + CUDA CuDNNWindows11。

qianqianlwg的博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【万物皆可 GAN】CycleGAN 原理详解

【万物皆可 GAN】CycleGAN 原理详解

我是小白呀的博客 1万+

cycleGAN算法解读

CycleGAN:循环生成对抗神经网络,是一种非监督学习模型。

benben044的专栏 8136

CycleGAN 简介与代码实战

CycleGAN 简介与代码实战

修行之路 2985

cycleganGPU训练自己的数据 (草履虫都能看懂系列)

CycleGAN主要用于图像到图像的 转换任务,能够将图像从一个领域转换到另一个领域,而无需在训练过程中使用配对示例。该模型尤其适用于将照片转换为绘画、改变图像中的季节或在不同艺术风格之间转换图像等任务。

flpmmpfl的博客 5248

使用CycleGAN训练自己制作的数据集,通俗教程,快速上手(详细图文教程)

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

qq_40280673的博客 6万+

循环生成对抗网络 (CycleGAN)

给定一组随机的图像,对抗网络可以将输入图像集映射到输出域中图像的随机排列,这可能会诱导类似于目标分布的输出分布。PatchGAN 和常规 GAN 判别器之间的区别在于,常规 GAN 从 256×256 图像映射到单个标量输出,这意味着“真实”或“虚假”,而 PatchGAN 从 256×256 映射到 NxN(这里为 70×70)输出 X 数组,其中每个 Xij表示图像中的补丁。考虑一个大小为 (256, 256, 3) 的图像,我们将其输入到编码器中,编码器的输出将为 (64, 64, 256)。

jianqimingtian的博客 1948

【生成对抗网络系列】六、CycleGAN

CycleGAN

traveller的博客 4996

CycleGAN网络详解

注:CycleGAN的生成器和判别器结构大家都没有去详细介绍,这里我给补充一下哦 简介 论文下载地址https://arxiv.org/abs/1703.10593 前言 CycleGan是一种实现图像风格转换功能的GAN网络。早在它出现之前就存在着Pix2Pix实现图像风格转换,但pip2pip具有很大的局限性,主要是针对两种风格图像要对应出现,而现实中很难找到一些风格不同相同图像,也能难去拍摄获得,于是CycleGan就实现这个功能,在两种类型图像之间进行转换,而不需要对应关系,非常强大和实用!!! 这

frighting_ing的博客 4万+

【PyTorch】14 AI艺术家:神经网络风格迁移

风格迁移 Style Transfer1、数据集2、原理简介3、用Pytorch实现风格迁移4、结果展示5、全部代码小结 详细可参考此优快云 1、数据集 使用COCO数据集,官方网站点此,下载点此,共13.5GB,82783张图片 2、原理简介 风格迁移分为两类,一类为风格图片(毕加索、梵高…),一类是内容图片,通常来自现实世界中 本文主要介绍Fast Neural Style,关于Neural Style可见pytorch官方教程 效果逼真的风格迁移图片有两个要求,一是要生成的图片在内容、细节上和输入的

YoungSeng's Blog 4563
上一篇: 昇思25天学习打卡营第10天|linchenfengxue
下一篇: 昇思25天学习打卡营第12天|linchenfengxue
github_zwl
博客等级 码龄11年 300粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值