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

第三章 GANs的应用

Part1 GANs在图像生成上的应用

1. CGAN

1.1 传统GANs的问题

我们假设现在要做一个项目:输入一段文字,输出一张图片,要让这张图片足够清晰并且符合这段文字的描述。我们搭建一个传统的NeuralNetwork(下称NN)去训练。

考虑我们输入的文字是“train”,希望NN能输出清晰的火车照片,那在数据集中,下面左图是正面的火车,它们统统都是正确的火车图片;下面右图是侧面的火车,它们也统统都是正确的火车。

 

那在训练这个NN的时候,network会觉得说,火车既要长得像左边的图片,也要长得像右边的图片,那最终networkoutput就会变成这一大堆images的平均,可想而知那会是一张非常模糊并且错误的照片。

我们需要引入GANs技术来保证NN产生清晰准确的照片。

我们把原始的NN叫做GGenerator),现在它吃两个输入,一个是条件wordc,另外一个是从原始图片中sample出的分布z,它的输出是一个imagex,它希望这个x尽可能地符合条件c的描述,同时足够清晰,如下图。

GANs中为了保证输出image的质量会引入一个DDiscriminator),这个D用来判断输入的x是真实图片还是伪造图片,如下图。

但是传统GANs只能保证让x尽可能地像真实图片,它忽略了让x符合条件描述c的要求。于是,为了解决这一问题,CGAN便被提出了。

1.2 CGAN的原理

我们的目的是,既要让输出的图片真实,也要让输出的图片符合条件c的描述。Discriminator输入便被改成了同时输入cx,输出要做两件事情,一个是判断x是否是真实图片,另一个是xc是否是匹配的。

比如说,在下面这个情况中,条件ctrain,图片x也是一张清晰的火车照片,那么D的输出就会是1

而在下面两个情况中,左边虽然输出图片清晰,但不符合条件c;右边输出图片不真实。因此两种情况中D的输出都会是0

CGAN的基本思路就是这样,下面我们具体看一下CGAN的算法实现。

1.3 CGAN的算法实现

因为CGANsupervised学习,采样的每一项都是文字和图片的pairCGAN的核心就是判断什么样的pair给高分,什么样的pair给低分。

我们先关注Discriminator

第一项是正确条件与真实图片的pair,应该给高分;第二项是正确条件与仿造图片的pair,应该给低分(于是加上了“1-”);第三项是错误条件与真实图片的pair,也应该给低分。

可以明显的看出,CGANGANsDiscriminator上的不同之处就是多出了第三项。

下面再关注一下Generaotor

生成器的目的就是让判别器给仿造图片的得分越高越好,这与传统GANs本质上是一致的,只是在输入上多了一个参数c

CGAN的最终目标表达式写为:

1.4 CGAN的讨论

大部分的CGAN Discriminator都采用上述架构,为了把图片和条件结合在一起,往往会把x丢入一个network产生一个embeddingcondition也丢入一个network产生一个embedding,然后把这两个embedding拼在一起丢入一个network中,这个network既要判断第一个embedding是否真实,同时也要判断两个embedding是否逻辑上匹配,最终给出一个分数。但是也有一种CGAN采用了另外一种架构,并且据李宏毅老师的介绍这种架构的效果是不错的。

首先有一个network它只负责判断输入x是否是一个真实的图片,并且同时产生一个embedding,与c一同传给第二个network;然后第二个network只需判断xc是否匹配。最终两个network的打分依据模型需求进行加权筛选即可。

第二种模型有一个明显的好处就是Discriminator能区分出为什么这样的pair会得低分,它能反馈给Generator得低分的原因是c不匹配还是x不够真实;然而对第一种模型而言它只知道这样的pair得分低却不知道得分低的原因是什么,这会造成一种情况就是Generator产生的图片已经足够清晰了,但是因为不匹配 c而得了低分,而Generator不知道得分低的原因是什么,依然以为是产生的图片不够清晰,那这样Generator就有可能朝着错误的方向迭代。不过,目前第一种模型还是被广泛应用的,其实事实上二者的差异在实际中也不是特别明显。

2. TripleGAN

2.1 TripleGAN解决的问题

TripleGAN是基于CGAN的改进,它主要想解决的问题是,在实际训练中,我们拥有的已配对的数据(c,x)往往是非常少量的,而人工标注配对数据(cx)又比较麻烦,于是我们可以增添一个classifier去学习如何给图片x标注配对条件c,这样就能形成比较好的训练数据。

2.2 TripleGAN的模型架构

在上述架构图中,x是图片,y是条件(也就是c),(xy)构成一个配对。从图中可以看出,TripleGAN由三个部分组成,第一个是Classifier,它负责学习并提供更多的配对信息给discriminator,主要是从生成配对、真实配对和仅有图片三种输入中学会提取出它们的配对信息,并将这个配对信息与图片整合成一个新的配对()传递给discriminator;而第二个部分discriminator就需要学会鉴别输入的配对是来自真实数据,还是generator,还是classifier,最终在discriminator的帮助下都会越来越接近;至于第三个部分generator,就与CGAN中的generator一模一样了,输入一个条件y和先验分布z,产生一个输出图片x和条件y的配对。

2.3 TripleGAN的应用价值

TripleGAN最大的应用价值就是不仅generator能够被提取出来,成为一个文字生成图片的模型,classifier也能被提取出来,成为一个图片标注文字的模型。

【GANs学习笔记】(十六)CGAN、TRIPLEGAN相关推荐

  1. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  2. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  3. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  4. C语言结构体变量和结构体数组-学习笔记(十六)

    一.结构体变量 1.结构体概念 将不同类型的数据组合成一个有机的整体即为结构体.结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型. 2.结构体类型及结构体变量定义 (1)结构体类型声明 ...

  5. 【theano-windows】学习笔记十六——深度信念网络DBN

    前言 前面学习了受限玻尔兹曼机(RBM)的理论和搭建方法, 如果稍微了解过的人, 肯定知道利用RBM可以堆叠构成深度信念网络(deep belief network, DBN)和深度玻尔兹曼机(dee ...

  6. MonoRail学习笔记十六:AJax在MonoRail中的使用

    AJax几乎成了web2.0的一个代表,Java和Asp.net中都提供了一些AJax操作的控件.在MonoRail中也同样提供了AJax操作的共通类:AJaxHelper AJaxHelper可以指 ...

  7. JavaScript权威设计--CSS(简要学习笔记十六)

    1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domai ...

  8. Jenkins deploy to container部署war到tomcat(学习笔记十六)

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horiz ...

  9. IOS学习笔记十六(NSString和NSMutableString)

    1.NSString和NSMutableString NSString是不变字符串类,有点像java里面的String,NSMutableString是可变字符串类,有点类似java里面的String ...

  10. 最优化学习笔记(十六)——拟牛顿法(2)

    Hessian矩阵逆矩阵的近似 一.拟牛顿法的基本思路 令H0,H1,H2,-\boldsymbol{H_0,H_1, H_2}, \dots表示Hessian矩阵逆矩阵F(x(k))−1\bolds ...

最新文章

  1. 发布一个自己写的.Net代码生成器
  2. mysql如何查看事务日记_MySQL日志查看详解
  3. Win32汇编环境搭建教程(MASM32 SDK)
  4. 唱歌如何保持高位置_如何理解歌唱发声的高位置?如何保持高位置歌唱状态?【男高音】...
  5. python 公网ip_使用Python更换外网IP的方法
  6. mysql中常见的几种索引
  7. 刚刚,阿里发布了一个重磅技术炸弹,70% 的程序员受影响!
  8. 人工智能助力 上海科委咨询服务用机器人技术
  9. jQuery基础 - 选择器
  10. 开关电源仿真与设计基于spice 第2版 中译本_亚成微招聘模拟IC设计师、FAE工程师、系统测试工程师...
  11. 线程(一)伤害不大,侮辱性极强——idm与多人运动
  12. BUGKU-成绩查询
  13. 兼容edge、谷歌和火狐浏览器的滚动条样式纯css实现
  14. 关于Windows聚焦一直保持一个图不变或者不显示
  15. CTFshow—MISC图片篇(基础操作)
  16. mysql多表删除_MySQL中多表删除方法
  17. paper 116:自然图像抠图/视频抠像技术梳理(image matting, video matting)
  18. illustrator下载_使用Illustrator或手绘创建XP样式的图标
  19. iPhone彻底删除照片如何恢复?3个恢复方法推荐
  20. 【图文教程】Tomcat

热门文章

  1. 青蛙的约会(poj 1061)exgcd基础题
  2. fopen打开文件名(文件路径含中文或韩语)方法测试
  3. 云聚高性能,论道“新超算”
  4. Ajax的常用技巧(4)---实现数据库分页
  5. 前端怎么加粗字体_【推荐】皮卡丘怎么画?教你如何轻松绘画出可爱的宠物小精灵!...
  6. 苹果最新发布的16 英寸 MacBook Pro有哪些亮点和不足之处?
  7. grid - gap
  8. 情感驿站 | 分享一些喜欢的句子
  9. python安装gensim_python gensim
  10. dbca 命令行静默方式创建Oracle RAC