完整笔记:http://www.gwylab.com/note-gans.html
———————————————————————

Part2 GANs在风格迁移上的应用

1. CycleGAN

1.1 CycleGAN解决的问题

假设我们现在要训练一个风格迁移的神经网络,也就是说输入一张图片,输出一张它的不同风格的图片,比如说输出一张具有泛古抽象质感的图片。

那么我们考虑应用GANs技术。一个很自然的想法是给它增添一个Discriminator,这个Discriminator用来判别输入的图像是真实的还是G伪造的。

这个架构看似合理,但是会有一些潜在的危险。在Generator很深时,它的输出和输入差别是可能非常大的,存在一种情况是当输出图像靠近真实分布Y里的某一张图像时,Generator就发现了一个BUG,只要它的输出越逼近这张真实图像,Discriminator给的评分就越高,于是Generator最终可以完全忽略输入长什么样,输出这张偷学到的真实图片,就能产生“高质量”图片。

为了消除这种潜在危险,CycleGAN诞生了。

1.2 CycleGAN的原理

为了防止generator学习到具有欺骗性的造假数据,我们只需要保证generator的输出和原图具有很高的相似性,也就是不丢失原图的特征,于是CycleGAN中加入了一个新的generator,把第一个genreator的输出当作输入丢进去,希望能输出一个和原始输入尽可能相似的图片,如果能够比较好的还原回原始图片,证明第一个generator的输出保留了大量原始图片的特征,输出结果是较为可靠的;而如果不能较好的还原回原始图片,意味着第一个generator可能使用了“造假”的输出结果。

那CycleGAN还可以做成双向的,除了从X domain--(G1)-->Y domain--(G2)-->X domain的训练,同时还会有Y domain--(G2)-->X domain--(G1)-->Y domain 这样的训练,在第二种训练中会新引入一个discriminator,功能同样是保证整次训练的输入和输出尽可能相似。

1.3 CycleGAN的讨论

CycleGAN也不是没有问题。CycleGAN: a Master of Steganography (隐写术) [Casey Chu, et al., NIPS workshop, 2017 ]这篇论文就指出,CycleGAN存在一种情况,是它能学会把输入的某些部分藏起来,然后在输出的时候再还原回来。比如下面这张图:

可以看到,在经过第一个generator的时候,屋顶的黑色斑点不见了,但是在经过第二个generator之后,屋顶的黑色斑点又被还原回来了。这其实意味着,第一个generator并没有遗失掉屋顶有黑色斑点这一讯息,它只是用一种人眼看不出的方式将这一讯息隐藏在输出的图片中(例如黑点数值改得非常小),而第二个generator在训练过程中也学习到了提取这种隐藏讯息的方式。那generator隐藏讯息的目的是什么呢?其实很简单,隐藏掉一些破坏风格相似性的“坏点”会更容易获得discriminator的高分,而从discriminator那拿高分是generator实际上的唯一目的。

综上,CycleGAN所宣称的CycleConsistency其实是不一定能完全保持的,毕竟generator的学习能力非常强大,即便人为地赋予它诸多限制,它也有可能学到一些trick去产生一些其实并不太符合人们要求的输出结果。

2. StarGAN

2.1 StarGAN解决的问题

有的时候我们可能希望图片能在n个domain当中互转,那依据CycleGAN的设计思路,理论上我们需要训练个generator,如下图所示:

很明显这需要训练的generator太多了。那为了用更少的generator实现多个风格之间的互转,StarGAN被提出了。

2.2 StarGAN的原理

StarGAN在设计的时候就希望只用一个generator去实现所有domain之间的互转。

对于discriminator,它的输入是一张图片,它需要去鉴别出这张图片是真实图片还是generator产生的图片,同时它还需要分辨出这张输入的图片来自于哪个domain(哪种风格)。

对于generator,它有两个输入,分别是目标domain和输入图片,它的输出是一张符合目标domain风格的图片。

整个训练架构如下图所示:

首先目标domain和输入图片会被输入到generator当中,然后generator产生的伪造图片一方面会被传给discriminator(右图),discriminator会判别这张图片的真假以及domain分类是哪,另一方面这个伪造图片会被再次传回给这个generator(中图),不过目标domain改成了原始的来源domain,那模型会希望第二次输出的图片能和最开始的输入图片尽可能相似。其实整套训练流程与CycleGAN是非常相似的,不同之处在于CycleGAN使用了两个generator做风格的来回变换,而在StarGAN中仅使用了一个generator实现这一变换。

2.3 StarGAN的实现举例

我们用一个实例来说明StarGAN的具体训练方式。

首先domain的定义在StarGAN中是用一个vector表示的,譬如:

那如果一个domain表示为00101 00000 10,就意味着这是一个CelebA的label,并且这个domain的风格是棕发年轻女性,如果希望要转移到的风格是黑发年轻男性,那么训练过程如下图所示:

首先原始图片被丢入这个generator中,target domain是10011(黑发年轻男性),然后generator就会产生一个黑发年轻男性的图片,接着这张图片又会再次被丢进这个generator中,但是target domain改成了00101(棕发年轻女性),然后generator就会产生一个棕发年轻女性的图片,StarGAN希望这张图片和原始的输入的棕发年轻女性的图片尽可能相似,此处用到的loss就是CycleGAN当中的loss。另外一方面,第一次generator产生的黑发年轻男性图会传给discriminator,discriminator一方面要判断这张图的真假,另外一方面还要判断出这张图的domain,如果判断结果是10011的话就证明这张图的效果是好的。

综上就是StarGAN的实现过程,它能实现多种风格之间的互转,并且模型比较小巧且高效。

【GANs学习笔记】(十九)CycleGAN、StarGAN相关推荐

  1. Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法

    Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...

  2. Mr.J-- jQuery学习笔记(十九)--自定义动画实现图标特效

    之前有写过自定义动画Mr.J-- jQuery学习笔记(十八)--自定义动画 这次实现一个小demo 图标特效 页面渲染 <!DOCTYPE html> <html lang=&qu ...

  3. 【theano-windows】学习笔记十九——循环神经网络

    前言 前面已经介绍了RBM和CNN了,就剩最后一个RNN了,抽了一天时间简单看了一下原理,但是没细推RNN的参数更新算法BPTT,全名是Backpropagation Through Time. [注 ...

  4. javascript学习笔记(十九) 节点的操作

    包括节点的创建.添加.移除.替换.复制 本节要用到的html例子 1 <ul id="myList"> 2 <li>项目一</li> 3 < ...

  5. 乐优商城学习笔记十九-商品详情(二)

    2.页面静态化 2.1.简介 2.1.1.问题分析 现在,我们的页面是通过Thymeleaf模板引擎渲染后返回到客户端.在后台需要大量的数据查询,而后渲染得到HTML页面.会对数据库造成压力,并且请求 ...

  6. 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)

    概述 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合. 如何使请求的发送者不需要指定具体的接受者?让请求的 ...

  7. angular学习笔记(十九)-自定义指令修改dom

    使用angular指令可以自己扩展html语法,还可以做很多自定义的事情.在后面会专门讲解这一块的知识,这一篇只是起到了解入门的作用. 与控制器,过滤器,服务,一样,可以通过模块实例的directiv ...

  8. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  9. IOS学习笔记十九NSArray和NSMutableArray

    1.NSArray NSArray不可变集合,不能添加新元素和删除已有元素和替换元素 2.demo Dog.h #import <Foundation/Foundation.h> #ifn ...

  10. 最优化学习笔记(十九)——拟牛顿法(5)BFGS算法

    一.BFGS算法的更新公式 为了推导BFGS算法,需要用到对偶或者互补的概念,前边已经讨论过hessian矩阵逆矩阵的近似矩阵需要满足以下条件: Hk+1Δg(i)=Δx(i)0≤i≤k \bolds ...

最新文章

  1. 概率论与数理统计--第三章
  2. Centos和Redhat的区别和联系
  3. 利用openfiler建立仲裁磁盘
  4. 读取excel日期 c++_实例9:用Python自动生成Excel档每日出货清单
  5. python文件中环境声明_Python环境构建
  6. 火山小视频尼尔森:2019新线消费市场人群洞察报告(附下载)
  7. MySQL的chap服务器_chap01 初涉MySQL
  8. 一个完整的项目流程图_工程建设项目史上最完整的全流程图,必收藏备用!
  9. java jtextfield 居中_有什么办法可以使JFrame的中心居中吗? - java
  10. java中的“+”运算符,产生新对象问题。(非常好的面试题!)
  11. 大一学生《web课程设计》用DIV+CSS技术设计的个人网页(网页制作课作业)
  12. QT 对话框添加背景图片的方法
  13. Laravel自定义错误提示语语言包
  14. PhoneApplicationFrame以及设置Obscured/Unobscured的event handler
  15. Python——第四天的Gut Punch
  16. 这样的C盘或许还有?救救C盘......
  17. 常用分辨率设置,RGB与CMYK_几何途行_新浪博客
  18. 某鉴黄师:“我并不幸福”,AI加持下CDN鉴黄又是何物?
  19. 2023.1. Stimulsoft 报告和仪表板的新版本:Crack
  20. 四川大学计算机学院陈宇老师,吕建成(四川大学计算机学院(软件学院)院长)_百度百科...

热门文章

  1. Subclass in C++ - C++ 中的子类
  2. python换发型_初学Python的一些细节
  3. ubuntu 14.04 opera浏览器flash插件安装
  4. web端第三方微信登录
  5. 微软终止支持Win7 但系统仍然可正常使用
  6. 视频网站存储在服务器,网络视频存储服务器
  7. Talib中文文档(二):Momentum Indicators 动量指标
  8. Buffer之position,limit,capacity
  9. AI算法工程师 | 02人工智能基础-Python基础(四)os模块_打开读取文件
  10. 拼装机器人感想_对机器人搭建的认识及感悟