深度卷积对抗神经网络 进阶 第三部分 GANs Unpaired Translation with Cycle GAN 模型

news2024/11/24 7:03:54

非配对的图像转换应用 Unpaired Image-to-Image Translation

Unpaired image-to-image translation 主要用于学习两组图像之间的对应关系,检查和寻找两堆数据中的共同内容(content)以及每堆独有的特点(style)。而这个模型是非监督的,也就意味着不需要进行数据的标注便可以进行训练。

CycleGAN 循环GANs模型

循环一致性 Cycle Consistency

循环一致性指的是当图片经过生成模型后再次经过生成模型的反向模型而得到的循环后的模型,其图片与原图片的一致性问题。

当然,如果循环后图片与原图片一模一样当然是最好的,这证明了了模型的稳定性。而在循环模型中,我们通过这种方式来告诉两个模型哪些是特征,哪些不是特征。这样,我们不用通过对数据进行标注,而是原图像与循环后的图像互为配对,以此来互相纠正模型的错误,并使其能够达到我们想要的效果。

模型结构 - Two GANs

Cycle会存在两个GANs,分别代表两个方向。比如说我们要把正常马的身上涂上白色斑纹变为斑马。那么在Cycle GANs中,模型会由两个生成器(正常马生成斑马,斑马生成正常马)和两个分辨器(分辨生成的斑马与实际斑马的分辨器,以及分辨生成的马与实际马的分辨器)所组成。

因此Cycle GAN使用两个GAN来进行图片到图片的转化 CycleGAN uses two GANs for unpaired image-to-image translation。并且其分辨器是经典的PatchGAN's,也就是分辨结果是一个分类矩阵而不是一个简单的值。其生成器十分类似于U-Net和DCGAN,但是在其中加入了SKIP CONNECTIONs, 也就是增加了层之间的信息交互。

其中和U-Net最大的区别就是中间的Residual Block (残留区块),这种区块可以相当于一种skip function,它不是作为新的通道被串联起来,而是直接添加到卷积的输出。在下面的可视化中,你可以想象条纹是由卷积产生的,然后添加到马的原始图像中,将其转化为斑马。这些跳过连接也允许网络更加深入,因为它们有助于解决梯度消失的问题,当神经网络变得太深,梯度在反向传播中倍增变得非常小的时候,就会出现梯度消失的问题;相反,这些跳过连接能够实现更多的梯度流动。一个更深的网络通常能够学习更复杂的特征。Residual Block的解释还有待进一步研究(*)。

正向的从斑马到正常的马

反向的从正常的马到斑马

总之,由于是无监督的学习,数据并没有配对,因此并没有明确的目标输出。而且不同的分辨器分辨的是不同类型的数据。

损失函数

循环一致性损失 Cycle Consistency Loss

正向的从斑马到马再到斑马的循环一致性

经过连个生成器保持一致是非常重要的性质,其可以让模型去分析两组图片中的唯一特性(有条纹和没有条纹)和共同特性(马的形状),并将其他模型所误判断的特性进行逐渐的纠正。

反向的从马到斑马再到马的循环一致性

另一种理解便是循环一致性Cycle consistency可以将不一致的特征进行传递,而保持一致的内容。而且这种损失可以缓慢地矫正生成器生成结果的趋势,且两个方向的一致性都需要保证。

具体的实例代码如下。

def get_identity_loss(real_X, gen_YX, identity_criterion):
    '''
    Return the identity loss of the generator given inputs
    (and the generated images for testing purposes).
    Parameters:
        real_X: the real images from pile X
        gen_YX: the generator for class Y to X; takes images and returns the images 
            transformed to class X
        identity_criterion: the identity loss function; takes the real images from X and
                        those images put through a Y->X generator and returns the identity 
                        loss (which you aim to minimize)
    '''
    identity_X = gen_YX(real_X)
    identity_loss = identity_criterion(identity_X, real_X)
    return identity_loss, identity_X
 

最小均方误差 Least Squares Loss

最小均方误差的损失函数在某些情况下可以解决vanishing gradients 和 mode collapse的问题,其定义如下所示。

其定义的原理主要是预测值与真实值的差距,类似于BCEloss, 但是其的平方特性使得其比BCELoss更加的稳定。

不变性损失 Identity Loss

加入该损失可以非常有效地避免生成器改变图片颜色的问题,其主要利用像素距离来告诉生成器进行一定的纠正。

具体的操作便是将图片经过反向的生成器,将生成的结果与原结果比较像素距离。如果相同则说明其能够分辨出这个结果不需要进行任何变化,而不相同则说明生成器还有待进步。

而加入不变性损失会非常高效的保留原相片的颜色(Color preservation),如下图所示。

具体的示例代码如下。

def get_identity_loss(real_X, gen_YX, identity_criterion):
    '''
    Return the identity loss of the generator given inputs
    (and the generated images for testing purposes).
    Parameters:
        real_X: the real images from pile X
        gen_YX: the generator for class Y to X; takes images and returns the images 
            transformed to class X
        identity_criterion: the identity loss function; takes the real images from X and
                        those images put through a Y->X generator and returns the identity 
                        loss (which you aim to minimize)
    '''
    identity_X = gen_YX(real_X)
    identity_loss = identity_criterion(identity_X, real_X)
    return identity_loss, identity_X

模型总结

正向结构的模样

反向结构的模样

损失函数的结构

参考文献 Reference

(Optional) The CycleGAN Paper

Compelled to learn more about CycleGAN? Take a look at the original paper!

Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (Zhu, Park, Isola, and Efros, 2020): https://arxiv.org/abs/1703.10593

(Optional) CycleGAN for Medical Imaging

Intrigued by the application of CycleGANs in the medical field? See how they can be used to help augment data for medical imaging!

Data augmentation using generative adversarial networks (CycleGAN) to improve generalizability in CT segmentation tasks (Sandfort, Yan, Pickhardt, and Summers, 2019):

(Optional Notebook) MUNIT

https://colab.research.google.com/github/https-deeplearning-ai/GANs-Public/blob/master/C3W3_MUNIT_(Optional).ipynb

Please note that this is an optional notebook, meant to introduce more advanced concepts if you're up for a challenge, so don't worry if you don't completely follow!

In this notebook, you will learn about and implement MUNIT, a method for unsupervised image-to-image translation, as proposed in Multimodal Unsupervised Image-to-Image Translation (Huang et al. 2018).

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

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

相关文章

FinClip 的 2022 与 2023

相比往年,今年复盘去年与展望新年的文章来的稍慢一点。不过也希望能够借这篇文章,和关注 FinClip 的用户朋友们一起聊聊,我们在去年和今年的想法与计划。 2022 在过去的一年中,我们的身边发生了很多事情,这些事情在不…

英语二-电子邮件邀请短文写作

1. 邮件模板 Dear 邀请人, Hope you have a great day. I am writing this email to invite you to attend 主题. Please kindly find the following information for your reference: Time: 时间 Address: 地点 We hope that nothing will prevent you from coming, as…

如何轻松学习Python数据分析?

今天这篇文章来聊聊如何轻松学习『Python数据分析』,我会以一个数据分析师的角度去聊聊做数据分析到底有没有必要学习编程、学习Python,如果有必要,又该如何学习才能做到毫不费力。 1.实际的工作 如果你是一名数据分析师,我相信你…

【Linux】环境变量与进程优先级

文章目录🎪 进程优先级🚀1.孤儿进程🚀2.优先级查看🚀3.优先级修改🎪 环境变量🚀1.常见环境变量🚀2.环境变量获取🚀3.main中的命令行参数🎪 进程优先级 每个进程都有相应…

Idea修改Git账号及密码的方法

IDEA修改git账号及密码的方法:1、file->settings->passwords2、重启IDEA3、执行一次提交或更新当执行提交或更新之后,idea会自动提示输入账号、密码,如下:4、以上如果还修改不了,请尝试如下方式解决办法&#xf…

一文揭晓:手机号码归属地api的作用是什么?

随着手机的普及,手机号码的归属地已经成为很多网站和App中调用的重要数据资源。而手机号码归属地API可以帮助开发者快速获取手机号码归属地信息。目前,这种API已经被广泛地使用,用于各种不同的应用场景。这对于用户及开发者来说是非常重要的&…

nodejs基于vue个人需求和地域特色的外卖订餐推荐系统

1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行性 6 3.2系统现状分析 63.3功能需求分析 7 3.4系统设计规则与运行环境 8 3.5系统流程…

BP神经网络参数总结,BP神经训练窗口详解,基于BP神经网络的火灾识别,1000案例之17

目录 摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于B P神经网络的火灾识别 数据集 MATLAB编程BP神经网络代码,并附有GUI窗口 效果图…

Android 实现 NFC 读取卡片信息

效果图:因为朋友需要个读取NFC卡片数据的功能,所以最近看了一下Android 系统下NFC 读取卡片信息的操作。NFC(近距离无线通信 ) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接.借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台…

jenkins使用SSH拉取gitlab代码

jenkins机器上操作 1 创建密钥对 ssh-keygen (一路回车生成密钥对) ssh-copy-id -i id_rsa.pub xxx.xxx.xxx.xxx 2 查看公钥配置gitlab ssh cat /root/.ssh/id_rsa.pub 配置gitlab ssh 3 在jenkins配置私钥 cat /root/.ssh/id_rsa 完成以上操作后 在jenkins机器上执行git…

线程的执行

承接上文CPU原理简介程序的执行是由控制器发信号推动整个程序一步一步向前走,将数据存储在寄存器,从程序计数器中获取指令,比如先把3放到寄存器,再把5放到寄存器,再做一个加法,加法就是一个指令&#xff0c…

Redis官方可视化工具使用体验

前言 我们在使用redis不可避免的使用一些可视化工具,本文来介绍一下官方的可视化工具RedisInsight的使用体验 官方网址:https://docs.redis.com/latest/ri/ 傻瓜式下载安装,此处不作赘述 使用 安装完成后我们当然要先创建一个连接体验一…

九龙证券|全面注册制落地后IPO新增注册准备程序

历经科创板、北交所以及存量商场创业板试点注册制改革,资本商场总算迎来了全面注册制时代。 为确保全面注册制改革技能预备作业的顺利推进,近日,证监会拟定、发布了《监管规矩适用指引——发行类第8号:股票发行上市注册作业规程》…

KMP算法详细理解

一、目的1.KMP应用场景:可以解决字符串匹配问题; 在一个串中查找是否出现过另一个串。2.KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。3.KMP算法关键在于&…

NTP同步时钟为医院提供标准的时间信号

NTP同步时钟应用于城市重要公共领域,如车站、学校、医院、等。NTP同步时钟可提供准确的公众时间,为人们的日常生活提供便利,避免了因时钟不准确而带来的不便。NTP同步时钟采用智能模块化设计,与同类产品相比,更突出了安…

LoRaWAN的网络协议是怎样的?有哪些应用?

LoRaWAN是一种低功耗广域物联网协议,其网络结构包括三个主要组件:终端设备(End Device)、网关(Gateway)和网络服务器(Network Server)。终端设备通常是一些低功耗设备,例…

LeetCode 206. 反转链表

LeetCode 206. 反转链表 难度:easy\color{Green}{easy}easy 题目描述 给你单链表的头节点 headheadhead ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2&a…

51. N 皇后 (Swift 版本)

题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 …

2023年Java进阶架构师的必备思维导图,让你少走弯路!

架构师是什么?要做什么? 架构师 :是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。架构师不是一个人,他需要建立高效的体系,带领团队去攻城略地,在规定的时间内…

nodejs基于vue社区失物招领+房屋租赁+停车+宠物互助平台

1、一般用户的功能及权限 所谓一般用户就是指还没有注册的过客,他们可以浏览主页面上的信息。但如果有中意的社区互助信息时,要登录注册,只有注册成功才有的权限。 2、管理员的功能及权限 用户信息的添加和管理,社区互助详细信息添加和管理和…