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

4. LapGAN

4.1 LapGAN基本思路

如果我们希望生成高分辨率图像,还有一种GANs可以考虑,那就是LapGAN。LapGAN与StackGAN有着非常类似的思路,都是通过先产生低分辨率图像再不断生成高分辨率图像,但LapGAN是基于拉普拉斯金字塔实现的,在金字塔的每一层都是学习与相邻层之间的残差,也就是说,高分辨率图像的生成是以低分辨率图像作为条件去生成残差,然后低分辨率图上采样再跟残差求和得到高分辨率图,这种低分辨率图向高分辨率图生成的过程其实就是一个CGAN,通过不断堆叠 CGAN 得到我们想要的分辨率。

4.2 拉普拉斯金字塔

我们先介绍一下什么是拉普拉斯金字塔:

简单来说,拉普拉斯金字塔就是图片在尺度空间中不断上采样的结果(从低分辨率层向高一层变化的过程叫上采样,反之就称作下采样),与之对应的,高斯金字塔就是图片在尺度空间中不断下采样的结果。

下采样的过程,分为两步:

(1)对图像进行高斯核卷积

(2)将偶数行除去。

用公式表示就是:

而上采样的过程,是把当前层的残差值和上一层图像上采样之后的结果加起来所得到的图像。其中残差值的定义是:

式中的表示第i层的图像。而UP()操作是将源图像中位置为(x,y)的像素映射到目标图像的(2x+1,2y+1)位置,即在进行向上取样。符号ⓧ表示卷积,为5x5的高斯内核。

4.3 LapGAN的模型架构

上图是LapGAN搭建4层时的情形,一共用到了4个GAN,其中是64*64的图像, 为32*32,为16*16,为8*8。 拉普拉斯金字塔的顶端(也就是像素最低的图像)用来训练普通的GAN ,生成器的输入只有噪声。而后像素更高的图像用来训练CGAN,输入的不光有噪声,还有同级的高斯金字塔的图像经过上采样后得到的图像。

下面我们来看一下,对于一个训练好的LapGAN,我们如何提取出它的generator。

可以看出,这其实是由多个generator级联出的一个模型。如果我们想在尺度空间k层下得到一张生成图片,我们获取该图片的公式便是:

综上,LapGAN就是依据拉普拉斯金字塔,把各个层之间的采样过程用CGAN实现,再把这些CGAN串联起来,形成了不断生成更高分辨率图片的一个结构。LapGAN的一个核心优点是它让每个GANs只需要学会计算到不同层之间的残差值,大大减少了每一次GANs需要学习的内容,并且针对残差的逼近和学习也相对容易,从这一点上说与Residual Network有异曲同工之妙。但是LapGAN也存着一些弊端,最明显的一点就是LapGAN实质上的网络深度是非常深的,逐级独立训练提高了网络简单记忆输入样本的难度,许多高性能的深度网络都面临着这样的问题。

5. PGGAN(也称ProGAN)

5.1 PGGAN基本思路

如果现在我们想生成超高分辨率的图像,譬如1024×1024图片,假设我们采用StackGAN或者是LapGAN的话,我们需要用到的GANs结构会非常多,这样会导致网络深度巨大,训练起来非常慢。为了解决这一问题,PGGAN(渐进式增长GAN)提出的想法是,我们只需要一个GANs就能产生1024×1024图片。但是一开始的时候GANs的网络非常浅,只能学习低分辨率(4×4)的图片生成,随着训练进行,我们会把GANs的网络层数逐渐加深,进而去学习更高分辨率的图片生成,最终不断的更新GANs从而能学习到1024×1024分辨率的图片生成。

也就是说,PGGAN与StackGAN和LapGAN的最大不同在于,后两者的网络结构是固定的,但是PGGAN随着训练进行网络会不断加深,网络结构是在不断改变的。这样做最大的好处就是,PGGAN大部分的迭代都在较低分辨率下完成,训练速度比传统GANs提升了2-6倍。

5.2 PGGAN的模型架构

训练开始于有着一个4×4像素的低空间分辨率的生成器和判别器。随着训练的改善,我们逐渐向生成器和判别器网络中添加层,进而增加生成图片的空间分辨率。所有现存的层在过程中保持可训练性。这里N×N是指卷积层在N×N的空间分辨率上进行操作。这个方法使得在高分辨率上也能稳定合成并且加快了训练速度。右图我们展示了六张通过使用在1024 × 1024空间分辨率上渐进增长的方法生成的样例图片。

但是上述这样的做法会有一个问题,就是从4×4的输出变为8×8的输出的过程中,网络层数的突变会造成GANs的急剧不稳定,使得GANs需要花费额外的时间从动荡状态收敛回平稳状态,这会影响模型训练的效率。为了解决这一问题,PGGAN提出了平滑过渡技术。

如上图所示,当把生成器和判别器的分辨率加倍时,会平滑的增强新的层。我们以从16 × 16像素的图片转换到32 × 32像素的图片为例。在转换(b)过程中,把在更高分辨率上操作的层视为一个残缺块,权重α从0到1线性增长。当α为0的时候,相当于图 (a),当α为1的时候,相当于图(c)。所以,在转换过程中,生成样本的像素,是从 16x16到 32x32转换的。同理,对真实样本也做了类似的平滑过渡,也就是,在这个阶段的某个训练batch,真实样本是: X=∗(1−α)+∗α。

上图中的2× 和 0.5× 指利用最近邻卷积和平均池化分别对图片分辨率加倍和折半。toRGB表示将一个层中的特征向量投射到RGB颜色空间中,fromRGB正好是相反的过程;这两个过程都是利用1 × 1卷积。当训练判别器时,插入下采样后的真实图片去匹配网络中的当前分辨率。在分辨率转换过程中,会在两张真实图片的分辨率之间插值,类似于将两个分辨率结合到一起用生成器输出。详细的过程可以参见paper。

综上,便是PGGAN的主要思想,PGGAN的主要优点就是能生成高质量的样本。日常生活中我们需要高清图片的时候还是蛮多的,因此我觉得PGGAN的应用价值还是挺大的。

6.* SRGAN

SRGAN(Super-Resolution GAN)顾名思义,就是一个专门做图像超分辨率的GANs。核心思路非常简单,G网通过低分辨率的图像生成高分辨率图像,由D判断拿到的图像是由G网生成的,还是数据库中的原图像。当G网能成功骗过D网的时候,那这个GANs就可以完成超分辨率了。

网络架构如下:

具体的网络参数设置和损失函数的定义读者可以翻阅paper研究,因为没有什么亮点和创新点,在此就不多作介绍了。

至此,GANs在图像生成上的介绍到此就告一段落了,可以看出GANs在实现高质量图像生成上的paper非常多,是GANs的主力军,但其实GANs不光可以实现高质量图像生成,它还能实现在不同图像之间的转化以及通过提取特征定向生成图片等,我们会在接下来的部分中进行介绍。

【GANs学习笔记】(十八)LAPGAN、ProGAN、SRGAN相关推荐

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

  2. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  3. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  4. 学习笔记(十八):MoRe-Fi用深度学习网络从非线性信号中恢复呼吸波形

    <MoRe-Fi: Motion-robust and Fine-grained Respiration Monitoring via Deep-Learning UWB Radar>学习 ...

  5. 【D3D11游戏编程】学习笔记十八:模板缓冲区的使用、镜子的实现

    (注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 模板缓冲区(Stencil Buffe ...

  6. three.js学习笔记(十八)——调整材质

    介绍 到现在为止,我们都在创建新的着色器材质,但是如果我们想要修改一个Three.js内置的材质呢?或许我们对MeshStandardMaterial的处理结果感到满意,但是希望往里边添加顶点动画. ...

  7. 【theano-windows】学习笔记十八——混合蒙特卡洛采样

    #前言 继续之前的Theano学习,本次主要学习混合蒙特卡洛(Hybrid Monte-Carlo Sampling)采样算法. 国际惯例,参考网址 Hybrid Monte-Carlo Sampli ...

  8. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  9. JSTL标签引入(web基础学习笔记十八)

    一.JSTL包下载和引入 1.0.简介 JSTL全名为JavaServer Pages Standard Tag Library 1.1.下载包 下载地址:http://archive.apache. ...

  10. Go语言学习笔记(十八)之文件读写

    25.文件读写 1.文件打开和读 A.文件分类:文本和二进制文件 B.文件存取方式:随机存取和顺序存取 文件打开代码示例: 1: package main 2: 3: import ( 4: &quo ...

最新文章

  1. 字节跳动的5条远程办公最佳实践
  2. 如何在一个领域内成为顶尖人才?
  3. ArrayList转Json的2个坑
  4. [导入]ASP.NET26个常用性能优化方法
  5. javascript事件处理程序
  6. 蚂蚁金服资深技术专家经国:云原生时代微服务的高可用架构设计
  7. MySQL的MVCC底层原理
  8. Java基础中的基础
  9. React的学习曲线
  10. L3-021 神坛 (30 分)-PAT 团体程序设计天梯赛 GPLT
  11. linux 永久添加路由表,Linux 添加永久静态路由的方法
  12. 自然语言处理——句子的相似度
  13. 用python实现自动签到脚本
  14. 关于:Google Chrome 官方下载地址
  15. 关于ios app名称注册的问题(抢注)
  16. C/C++计算字符串的长度
  17. 如何低成本减少企业知识流失?天翎知识文档系统+群晖NAS值得一试
  18. CentOS7.6(1810)安装
  19. 基于vue编写的2048小游戏
  20. AccountManager getAccount 在Android O 8.0版本中获取为 null ?

热门文章

  1. 第十届蓝桥杯真题题解
  2. 【JS】Day34-35
  3. 乐学python_乐学Python-中国大学mooc-试题题目及答案
  4. 神雕侠侣服务器维修时间,《神雕侠侣2》手游新服开服时间表 7月30日新服
  5. signal函数原型解读
  6. Windows 下PowerShell 美化之旅(极其简单)
  7. collections.defaultdict
  8. 仿抖音点赞效果实现 ——————自定义View
  9. 为什么说BMC才是国产服务器的“命门”?
  10. axio请求数据如何等待异步完成接着执行