深度卷积对抗神经网络 进阶 第三部分 GANs Unpaired Translation with Cycle GAN 模型
非配对的图像转换应用 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 Xgen_YX: the generator for class Y to X; takes images and returns the images transformed to class Xidentity_criterion: the identity loss function; takes the real images from X andthose 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 Xgen_YX: the generator for class Y to X; takes images and returns the images transformed to class Xidentity_criterion: the identity loss function; takes the real images from X andthose 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).
相关文章:

深度卷积对抗神经网络 进阶 第三部分 GANs Unpaired Translation with Cycle GAN 模型
非配对的图像转换应用 Unpaired Image-to-Image Translation Unpaired image-to-image translation 主要用于学习两组图像之间的对应关系,检查和寻找两堆数据中的共同内容(content)以及每堆独有的特点(style)。而这个…...

常见的排序算法 | 直接插入排序 | 希尔排序 | 选择排序 | 堆排序 | 冒泡排序 | 快速排序 | 归并排序 |(详解,附动图,代码)
思维导图: 一.插入排序 1.直接插入排序(InsertSort) ①手机通讯录时时刻刻都是有序的,新增一个电话号码时,就是使用插入排序的方法将其插入原有的有序序列。 ②打扑克 步骤: ①如果一个序列只有一个数&am…...

深入浅出 MySQL 索引(一)
MySQL 索引(基础篇) 你好,我是悟空。 本文目录如下: 一、前言 最近在梳理 MySQL 核心知识,刚好梳理到了 MySQL 索引相关的知识,我的文章风格很多都是原理 实战的方式带你去了解知识点,所以…...

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

Python 泛型 - 如何在实例方法中获取泛型参数T的类型?
先上解决方法:https://stackoverflow.com/questions/57706180/generict-base-class-how-to-get-type-of-t-from-within-instance 再来简单分析下源码。 talk is cheap, show me the code. from typing import Dict Dict[str, int]Dict只是一个类型,并不…...

Shell语法基础总结
Shell 变量使用变量只读变量删除变量变量类型Shell 字符串单引号与双引号字符串获取字符串长度提取子字符串拼接字符串Shell 数组定义数组读取数组获取数组的长度Shell 传递参数Shell 基本运算符算术运算符关系运算符布尔运算符逻辑运算符字符串运算符Shell 信息输出命令Shell …...

架构基本概念和架构本质
什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础&…...

taobao.trade.ordersku.update( 更新交易的销售属性 )
¥开放平台免费API必须用户授权 只能更新发货前子订单的销售属性 只能更新价格相同的销售属性。对于拍下减库存的交易会同步更新销售属性的库存量。对于旺店的交易,要使用商品扩展信息中的SKU价格来比较。 必须使用sku_id或sku_props中的一个参数来更新&a…...

算法实战应用案例精讲-【图像处理】使用scikit-image做图像处理(最终篇)(附python代码实现)
目录 高级滤波 autolevel bottomhat 与 tophat enhance_contrast entropy equalize gradient 其它滤波器...

数据结构与算法(四):树结构
前面讲到的顺序表、栈和队列都是一对一的线性结构,这节讲一对多的线性结构——树。「一对多」就是指一个元素只能有一个前驱,但可以有多个后继。 一、基本概念 树(tree)是n(n>0)个结点的有穷集。n0时称…...

taobao.trade.shippingaddress.update( 更改交易的收货地址 )
¥开放平台免费API必须用户授权 只能更新一笔交易里面的买家收货地址 只能更新发货前(即买家已付款,等待卖家发货状态)的交易的买家收货地址 更新后的发货地址可以通过taobao.trade.fullinfo.get查到 参数中所说的字节为GBK编码的&…...

VS Code安装及(C/C++)环境配置(Windows系统)
参考资料2份: 从零开始的vscode安装及环境配置教程(C/C)(Windows系统)_光中影zone的博客-CSDN博客_vscode运行配置https://blog.csdn.net/qq_45807140/article/details/112862592 VSCode配置C/C环境 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/87864677 五…...

【Spring Cloud Alibaba】006-OpenFeign
【Spring Cloud Alibaba】006-OpenFeign 文章目录【Spring Cloud Alibaba】006-OpenFeign一、概述1、Java 项目实现接口调用的方法HttpclientOkhttpHttpURLConnectionRestTemplate WebClient2、Feign 概述二、Spring Cloud Alibaba 快速整合 OpenFeign1、添加依赖2、启动类加注…...

挚文集团短期内不适合投资,长期内看好
来源:猛兽财经 作者:猛兽财经 挚文集团(MOMO)在新闻稿中称自己是“中国在线社交和娱乐领域的领军企业”。 该公司旗下的陌陌是中国“陌生人社交网络”移动应用类别的领导者,并在2022年9月拥有超过1亿的月活跃用户。探…...

clion开发的常用快捷键以及gitcrlf的问题
前段报错:git config core.autocrlf false 然后删除app目录下的文件,除了.git文件夹然后 git bash ,执行 git reset --hardclion常用快捷键:Double shift 搜索文件F9调试F9运行到断点Ctrl F8 打断点F7单步步入Shift F8 单步跳出F8执行下一行代…...

LeetCode 格雷编码问题
格雷编码格雷编码的定义格雷编码的码表LeetCode 89. 格雷编码实例思路与代码思路一:找规律代码一代码二思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道)代码一LeetCode 1238. 循环码排列实例思路与代码…...

java生成html文件输出到指定位置
String fileName "filename.html";StringBuilder sb new StringBuilder();// 使用StringBuilder 构建HTML文件sb.append("<html>\n");sb.append("<head>\n");sb.append("<title>HTML File</title>\n");sb.a…...

华为OD机试用Python实现 -【微服务的集成测试】(2023-Q1 新题)
华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 微服务的集成测试…...

js版 力扣 62. 不同路径
一、题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径࿱…...

Qt音视频开发16-通用悬浮按钮工具栏的设计
一、前言 通用悬浮按钮工具栏这个功能经过了好几个版本的迭代,一开始设计的时候是写在视频控件widget窗体中,当时功能简单就放一排按钮在顶部悬浮widget中就好,随着用户需求的变化,用户需要自定义悬浮条的要求越发强烈࿰…...

商品比价API使用说明
商品数据分析 国内最早的比价搜索平台,专注于电商大数据的分析,有10年技术和数据沉淀。 公司自主研发的爬虫、搜索引擎、分布式计算等技术, 实现了对海量电商数据的及时监测、清洗和统计。 数据丰富 详细使用api 数据采集维度ÿ…...

基于 TensorFlow 的植物识别教程
首先,需要准备一些训练数据集。这些数据集应该包含两个文件夹:一个用于训练数据,另一个用于测试数据。每个文件夹应该包含子文件夹,每个子文件夹对应一个植物的种类,并包含该植物的图像。接下来,我们需要使…...

渗透测试之主机探测存活性实验
渗透测试之主机探测存活性实验实验目的一、实验原理1.1 TCP/IP协议1. TCP2. IP1.2 Ping的原理二、实验环境2.1 操作机器2.2 实验工具三、实验步骤1. 学会使用ping命令2. 使用Nmap进行多种方式的探测总结实验目的 熟悉TCP/IP协议、Ping命令基本概念学习nmap、SuperScan扫描方式…...

好用的idea插件leetcode editor【详细安装指南】
如果你和我一样存在着如下困扰: 上班想摸鱼刷leetcode,但是直接打开leetcode界面太扎眼了或者为leetcode刷题不可以debug而发愁 那今天分享的一款IDEA插件可以统统解决上述问题,插件名字叫leetcode editor,你可以直接在plugins中…...

二氧化碳地质封存技术应用前景及模型构建实践方法与讨论
2022年七月七日,工业和信息化部、发展改革委、生态环境部关于印发工业领域碳达峰实施方案的通知落地。全国各省份积极响应,纷纷出台地方指导文件,标志着我国碳减排事业的全面铺开。二氧化碳地质封存技术作为实现我国“双碳”目标的重要一环&a…...

STM32开发(12)----CubeMX配置WWDG
CubeMX配置窗口看门狗(WWDG)前言一、窗口看门狗的介绍二、实验过程1.STM32CubeMX配置窗口看门狗2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对窗口看门狗定时器进行配置的方法。门狗本质上是一个定时器,提供了更高的安…...

JVM18运行时参数
4. JVM 运行时参数 4.1. JVM 参数选项 官网地址:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 4.1.1. 类型一:标准参数选项 > java -help 用法: java [-options] class [args...](执行类)或 java [-options] -jar …...

Cesium集成WebXR_连接VR设备
Cesium集成WebXR 文章目录Cesium集成WebXR1. 需求2. 技术基础2.1 WebGL2.2 WebXR2.3 其他3. 示例代码4. 效果图5. 参考链接1. 需求 通过WebXR接口,将浏览器端连接到VR头盔,实现在VR头盔中浏览Cesium场景,并可将头盔旋转的操作同步映射为场景…...

物联网在物流行业中的应用
物流管理需要同时监控供应链、仓储、运输等多项活动,然而许多因素会影响物流流程本身并导致延迟。为了简化流程和提高客户满意度,一些行业领导者和决策者积极创新,不断评估并使用物联网对物流流程的成本效益进行深入优化。在本文中࿰…...