【论文笔记】CycleGAN
来源:互联网 发布:网络简介阅读答案 编辑:程序博客网 时间:2024/06/07 13:02
前言: CycleGAN是发表于ICCV17的一篇GAN工作,可以让两个domain的图片互相转化。传统的GAN是单向生成,而CycleGAN是互相生成,网络是个环形,所以命名为Cycle。并且CycleGAN一个非常实用的地方就是输入的两张图片可以是任意的两张图片,也就是unpaired。
单向GAN
读者可以按照原论文的顺序理解CycleGAN,这里我按照自己的思路解读。CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。其实只要理解了一半的单向GAN就等于理解了整个CycleGAN。
上图是一个单向GAN的示意图。我们希望能够把domain A的图片(命名为a)转化为domain B的图片(命名为图片b)。为了实现这个过程,我们需要两个生成器
判别loss
判别器DB 是用来判断输入的图片是否是真实的domain B图片,于是生成的假图片GAB(A) 和原始的真图片B 都会输入到判别器里面,公示挺好理解的,就是一个0,1二分类的损失。最后的loss表示为:LGAN(GAB,DB,A,B)=Eb∼B[logDB(b)]+Ea∼A[log(1−DB(GAB(a)))] 生成loss
生成器用来重建图片a,目的是希望生成的图片GBA(GAB(a)) 和原图a尽可能的相似,那么可以很简单的采取L1 loss或者L2 loss。最后生成loss就表示为:L(GAB,GBA,A,B)=Ea∼A[||GBA(GAB(a))−a||1]
以上就是A→B单向GAN的原理。
CycleGAN
CycleGAN其实就是一个A→B单向GAN加上一个B→A单向GAN。两个GAN共享两个生成器,然后各自带一个判别器,所以加起来总共有两个判别器和两个生成器。一个单向GAN有两个loss,而CycleGAN加起来总共有四个loss。CycleGAN论文的原版原理图和公式如下,其实理解了单向GAN那么CycleGAN已经很好理解。
X→Y的判别器损失为,字母换了一下,和上面的单向GAN是一样的:
同理Y→X的判别器损失为
而两个生成器的loss加起来表示为:
最终网络的所有损失加起来为:
- Note
论文里面提到判别器如果是对数损失训练不是很稳定,所以改成的均方误差损失,如下LLSGAN(G,DY,X,Y)=Ey∼pdata(y)[(DY(y)−1)2]+Ex∼pdata(x)[(1−DY(G(x)))2]
下面放一张网友们自制的CycleGAN示意图,比论文原版的更加直观,出处见水印。
效果展示
CycleGAN的效果还是不错的,论文里给出了很多结果图,可以欣赏一下。
- 【论文笔记】CycleGAN
- cycleGAN
- 论文笔记---小论文
- 论文笔记
- 论文笔记
- 论文笔记
- 论文笔记
- CycleGAN-Unpaired图像翻译
- 论文阅读笔记
- 笔记-作业-论文
- 一篇可视化论文笔记
- 论文阅读笔记- Dremel
- 论文阅读笔记 - Pregel
- 论文阅读笔记1
- 论文阅读笔记2
- 论文阅读笔记3
- 论文阅读笔记4
- Zookeeper论文笔记
- 面向组件编程之Unity 7.怎样脚本控制物体旋转和移动 关键字:画圆&&Translate/transform.Translate,transform.Rotate
- 自动提取OULP-C1V2_Pack步态数据库,并合成步态能量图
- Day05_jaxp修,删,改,遍历
- JavaScript闭包
- [Linux] Linux/Mac OS history命令 添加时间,用户,ip
- 【论文笔记】CycleGAN
- Codeforces 900C-Remove Extra One
- CF 294C. Shaass and Lights 组合数学
- Attribute-Enhanced Face Recognition with Neural Tensor Fusion Networks 阅读笔记
- Tianhe2使用
- Python sklearn包中的一些小函数笔记
- C语言assert宏的使用
- Ubuntu16.04+CUDA9+cudnn7+python3.5+源码编译Tensorflow1.4+opencv3.3
- Mysqlserver安装错误