CycleGAN --- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
文章地址:http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdf
代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
原理:
CycleGAN这篇文章的亮点是提出了无需使用成对样本来训练模型的新思路。像pix2pix这类方法则需要成对的数据来训练。
由于在实际应用中,我们很难获取到成对的样本集,这篇文章的思想就是将一类样本转换为另一类样本。给定两个样本空间X,Y,我们希望把X空间中的
样本转换为Y空间中的样本,即寻找从源域(X)到目标域(Y)的映射关系G:X->Y,并且要使得数据G(X)的分布与Y的分布不可区分。同时反向映射关系也需要满足,
即F:Y->X,通过引入一个循环一致性损失来使得F(G(X))≈X。
其中,G对应了GAN网络的生成器部分,用于将X中的图像转换为Y中的图像,我们可得到生成的图像为G(X)。此时还需要判别器网络来对生成的图像和真实
的图像进行判别。这个判别器用DY表示。对于这部分网络,存在一个对抗损失。
其中生成器G试着生成接近目标分布Y的图像G(X),判别器旨在区分转换样本和真实样本,由此构成了一个博弈过程。对于反向映射F:Y->X,同样存在这样的
GAN损失。
理论上说,对抗训练可以学习和产生与目标域Y相似分布的输出,但如果仅使用对抗损失来训练无法得到比较好的结果。原因在于,在足够大的样本容量下,
网络可以将相同的输入图像集合映射到目标域中图像的任意排列组合。也就是说学习到的可以只是输出的一个子分布,这样就可能会导致输入X通过映射函数得
到Y空间中的特定图像的分布。
意思就是单独的对抗损失无法保证学习函数可以将单个输入Xi映射到期望的输出Yi。由此,作者便提出了“循环一致性损失(Cycle consistency loss)”
即前向循环一致性和反向循环一致性。
简单来说,思想就是把一个东西经过变换后,通过一个反变换还能回到原来的样子(突然想到了傅里叶变换和反傅里叶变换)。
总的目标函数为:
实现
- 网络结构:
生成器部分使用的是李飞飞团队提出的感知损失用来做风格转换的网络结构。
判别器采用的70x70的Patch-GANs
- 训练细节:
运用了两个技巧来稳定网络模型的训练过程
1. 使用最小二乘损失来代替对数损失
2. 更新判别其DX和DY,使用之前生成的图像而不是最新生成的图像。保存了50个的缓存数据。
- 参数设置:
λ的值设置为10.使用Adam优化求解,batch size为1.前100个epoch学习率设置为0.0002,后100个epoch学习率线性递减直至0.
实验结果:
CycleGAN --- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks的更多相关文章
- 《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》论文笔记
Code Address:https://github.com/junyanz/CycleGAN. Abstract 引出Image Translating的概念(greyscale to color ...
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 阅读笔记
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (使用循环一致的对抗网络的非配对图像-图 ...
- StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation - 1 - 多个域间的图像翻译论文学习
Abstract 最近在两个领域上的图像翻译研究取得了显著的成果.但是在处理多于两个领域的问题上,现存的方法在尺度和鲁棒性上还是有所欠缺,因为需要为每个图像域对单独训练不同的模型.为了解决该问题,我们 ...
- image-to-image translation with conditional adversarial networks文献笔记
Image-to-Image Translation with Conditional Adversarial Networks (基于条件gan的图像转图像) 作者:Phillip Isola, J ...
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks(使用循环一致的敌对网络进行不成对的图像到图像转换)
作者:朱俊彦,朱俊彦博士是计算机图形学领域现代机器学习应用的开拓者.他的论文可以说是第一篇用深度神经网络系统地解决自然图像合成问题的论文.因此,他的研究对这个领域产生了重大影响.他的一些科研成果,尤其 ...
- 《StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation》论文笔记
---恢复内容开始--- Motivation 使用单组的生成器G和判别训练图片在多个不同的图片域中进行转换 效果确实很逆天,难怪连Good Fellow都亲手给本文点赞 Introduction 论 ...
- 《Image-to-Image Translation with Conditional Adversarial Networks》论文笔记
出处 CVPR2017 Motivation 尝试用条件GAN网络来做image translation,让网络自己学习图片到图片的映射函数,而不需要人工定制特征. Introduction 作者从不 ...
- (Pixel2PixelGANs)Image-to-Image translation with conditional adversarial networks
Introduction 1. develop a common framework for all problems that are the task of predicting pixels f ...
- (转)Awesome GAN for Medical Imaging
Awesome GAN for Medical Imaging 2018-08-10 09:32:43 This blog is copied from: https://github.com/xin ...
随机推荐
- Fiddler用法整理
目 录 1 Fiddler的基本介绍 1.1 下载安装 1.2 适用平台 2 Fiddler的工作原理 3 同类工具 4 捕获非IE浏览器的会话 5 捕获不同请求的设置方法 5.1 Web HTTPS ...
- Angular ngTemplateOutlet
虽然我们可以通过使用 ViewContainerRef 将 ElementRef创建的视图插入指定的位置,但是仍然希望有某中快捷的方式帮我们实现. ngTemplateOutlet与ngCompone ...
- R语言常用数据管理
1.变量的重命名 (1)交互式编辑器修改变量名 若要修改数据集x中的变量名,键入fix(x)即可打开交互式编辑器的界面.若数据集为矩阵或数据框,单击交互式编辑器界面中对应要修改的变量名,可手动输入新的 ...
- [转载]浅谈JavaScript函数重载
原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...
- 关于post xml的请求和响应
关于post的请求作为开发者应该常用到,post请求的数据包含了参数和data,post参数相对比较容易理解,比如我们一个form提交,其实就是调用后台方法的,发送相关参数,这里我单独说一下关于pos ...
- 02.Windows2012R2安装360安全卫士失败及无法卸载问题
问题: Windows 2012 R2 安装360安全卫士失败及无法卸载,导致网络无法通信问题解决. 解决:1.进入 Windows2012R2 安全模式下:2.进行覆盖安装360安全卫士:3.覆盖安 ...
- RAS
Reliability 高可靠性 Availability 高可用性 Serviceability 高服务性
- ghci对haskell的类型推导
今天这篇文章分析一下ghci交互解释器对类型的推导. 假设有函数fn定义如下: let fn = map map 现在fn的类型是: map map :: [a -> b] -> [[a] ...
- python-条件判断
条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...
- Arrays基本使用
public static void main(String[] args) { String[] a = { "a", "b", "c" ...