一代宗师__循环一致性生成对抗网络(CycleGAN)(八)

本文深入解析CycleGAN模型,一种能够将某一类图片转换成另一类图片的生成对抗网络。不同于传统GAN,CycleGAN采用双向生成机制,即使在无配对数据的情况下也能训练。文章详细介绍了其原理、结构及损失函数,并通过实例展示了CycleGAN与pix2pix模型的对比,突出了CycleGAN在图像转换任务上的优势。

简介
CycleGAN是在2017年发表的一篇文章《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》,同一时期还有两篇非常类似的DualGAN和DiscoGAN,简单来说,它们的功能就是:自动将某一类图片转换成另外一类图片。传统的GAN是单向生成,而CycleGAN是互相生成,网络是个环形,所以命名为Cycle。并且CycleGAN一个非常实用的地方就是输入的两张图片可以是任意的两张图片,也就是unpaired。
在这里插入图片描述
原论文地址:https://arxiv.org/pdf/1703.10593.pdf

一、CycleGAN原理:
单向GAN详解:
CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。其实只要理解了一半的单向GAN就等于理解了整个CycleGAN。
在这里插入图片描述
上图是一个单向GAN的示意图。我们希望能够把domain A的图片(命名为a)转化为domain B的图片(命名为图片b)。为了实现这个过程,我们需要两个生成器GAB和GBA,分别把domain A和domain B的图片进行互相转换。图片A经过生成器GAB表示为Fake Image in domain B,用GAB(a)表示。而GAB(a)经过生辰器GBA表示为图片A的重建图片,用GBA(GAB(a))表示。最后为了训练这个单向GAN需要两个loss,分别是生成器的重建loss和判别器的判别loss。
1.判别器loss:
判别器DB是用来判断输入的图片是否是真实的domain B图片,于是生成的假图片GAB(A)和原始的真图片B都会输入到判别器里面,公示挺好理解的,就是一个0,1二分类的损失。最后的loss表示为:
在这里插入图片描述
2.生成器loss:
生成器用来重建图片a,目的是希望生成的图片GBA(GAB(a))和原图a尽可能的相似,那么可以很简单的采取L1 loss或者L2 loss。最后生成loss就表示为:
在这里插入图片描述
以上就是A→B单向GAN的原理。

CycleGAN详解:
CycleGAN其实就是一个A→B单向GAN加上一个B→A单向GAN。两个GAN共享两个生成器,然后各自带一个判别器,所以加起来总共有两个判别器和两个生成器。一个单向GAN有两个loss,而CycleGAN加起来总共有四个loss。CycleGAN论文的原版原理图和公式如下:
在这里插入图片描述
我们之前已经说过,CycleGAN的原理可以概述为:将一类图片转换成另一类图片。也就是说,现在有两个样本空间,X和Y,我们希望把X空间中的样本转换成Y空间中的样本。
因此,实际的目标就是学习从X到Y的映射。我们设这个映射为G。它就对应着GAN中的生成器,G可以将X中的图片X转换为Y中的图片G(x)。对于生成的图片,我们还需要GAN中的判别器来判别它是否为真实图片,由此构成对抗生成网络。设这个判别器为 D{Y} 。这样的话,根据这里的生成器和判别器,我们就可以构造一个GAN损失,表达式为:
在这里插入图片描述
这个损失实际上和原始的GAN损失是一模一样的,但单纯的使用这一个损失是无法进行训练的。原因在于,映射G完全可以将所有x都映射为Y空间中的同一张图片,使损失无效化。我们再假设一个映射F,它可以将Y空间中的图片y转换为X中的图片F(y)。同样的我们为F也引入一个判别器 D{X} ,由此可以同样定义一个GAN的损失:
在这里插入图片描述
CycleGAN同时学习G和F两个映射,并要求将X的图片转换到Y空间后,应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了。对此,作者又提出了所谓的“循环一致性损失”(cycle consistency loss)。
而循环一致性损失(两个生成器的loss加起来)就定义为:
在这里插入图片描述
最终网络的所有损失加起来为:
在这里插入图片描述

下面放一张网友们自制的CycleGAN示意图,比论文原版的更加直观,出处见水印。
在这里插入图片描述
在这里插入图片描述
CycleGAN结果展示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CycleGAN与pix2pix模型的对比
pix2pix也可以做图像变换,它和CycleGAN的区别在于,pix2pix模型必须要求成对数据(paired data),而CycleGAN利用非成对数据也能进行训练(unpaired data)。
比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛,利用CycleGAN就可以做出更多有趣的应用。

系列传送门:
初窥门径__生成对抗网络(GAN)(一)
小试牛刀__GAN实战项目之mnist数据集(二)
融会贯通__条件生成对抗网络(cGAN)(三)
炉火纯青__深度卷积生成对抗网络(DCGAN)(四)
登堂入室__生成对抗网络的信息论扩展(infoGAN)(五)
渐入佳境__距离生成对抗网络(WGAN)(六)
登峰造极__边界均衡生成对抗网络(BEGAN)(七)

在分布式系统和算法设计领域,“循环一致性”并非一个标准术语,但可以理解为与一致性机制、事件循环机制、或一致性哈希等相关的“循环”或“闭环”性质的概念。根据用户意图寻找与“循环一致性”相关的概念和技术信息,可以从以下几个角度进行解读: ### 一致性与事件循环中的循环性质 在 JavaScript 的事件循环中,任务的执行具有循环性质,即事件循环不断从任务队列中取出任务执行,包括宏任务(Macrotask)和微任务(Microtask)。微任务的执行具有优先级,会在当前宏任务结束后立即执行所有微任务,这种机制确保了异步操作的顺序性和一致性。例如,Promise 的 `.then` 回调属于微任务,它们会在当前同步任务完成后立即执行[^2]。 ```javascript console.log('Start'); setTimeout(() => { console.log('Timeout'); // 宏任务 }, 0); Promise.resolve().then(() => { console.log('Promise'); // 微任务 }); console.log('End'); // 输出顺序为:Start -> End -> Promise -> Timeout ``` ### 一致性哈希中的循环结构 一致性哈希(Consistent Hashing)是一种用于分布式缓存和负载均衡的哈希算法。它通过将节点和数据键映射到一个虚拟的哈希环上,使得当节点增减时,受影响的数据尽可能少。该环的结构本质上是循环的,数据键按照顺时针方向找到最近的节点[^3]。 ```python import hashlib def hash_key(key): return int(hashlib.md5(key.encode()).hexdigest(), 16) class ConsistentHashing: def __init__(self, nodes=None): self.ring = {} if nodes: for node in nodes: self.add_node(node) def add_node(self, node): node_hash = hash_key(node) self.ring[node_hash] = node def remove_node(self, node): node_hash = hash_key(node) if node_hash in self.ring: del self.ring[node_hash] def get_node(self, key): key_hash = hash_key(key) for node_hash in sorted(self.ring.keys()): if key_hash <= node_hash: return self.ring[node_hash] return self.ring[min(self.ring.keys())] ``` ### Raft 算法中的日志复制循环 在 Raft 一致性算法中,Leader 节点通过不断向 Follower 节点发送日志条目(log entries),确保所有节点的日志最终一致。这种机制具有“循环”性质:Leader 持续尝试同步日志,直到所有节点达成一致[^5]。 ### Qt 中的事件循环与一致性 在 Qt 框架中,事件循环(Event Loop)是应用程序的核心机制之一,负责处理用户输入、定时器事件、网络请求等。Qt 的事件循环具有高度的一致性保证,确保 UI 更新和异步操作的顺序正确[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值