[GAN] How to use GAN - Meow Generator
一篇介绍GAN应用的文章。今后GAN模型学习的主要内容。
中文链接:萌物生成器:如何使用四种GAN制造猫图
原文链接:https://ajolicoeur.wordpress.com/cats/

项目 GitHub:https://github.com/AlexiaJM/Deep-learning-with-cats
我尝试使用几种对抗生成网络(GAN)来生成猫脸,其中包括 DCGAN、WGAN 和 WGAN-GP,以及低和高分辨率。训练模型则使用 CAT 数据集(是的,真的有这么个东西)。这一数据集包含 10000 余张猫的图片。
在训练之前,我们必须让图片集中于正面猫脸,剔除数据集中其他方向的图片(作者是手动挑选的,这花了好几个小时...)。
最后,用于训练的图片为 9304 张大于 64×64 像素的图片,以及 6445 张大于 128×128 的图片。
CAT 数据集链接:https://web.archive.org/web/20150703060412/http://137.189.35.203/WebUI/CatDatabase/catData.html
DCGAN
DCGAN 生成器在两到三个小时后就可以收敛出非常逼真的图像,只用了 209 个 epoch,但为了让收敛效果更佳,我们需要做适当的调整。你必须为鉴别器与生成器选择单独的学习速率,以避免它们有一方表现过于出色——这需要非常小心的平衡,不过一旦成功,你就会得到收敛。在 64×64 像素的图片中,鉴别器的最佳学习率是 0.00005,生成器的则是 0.0002。这样就不会出现模型崩溃,得到真正可爱的图片了!
高分辨率 DCGAN 和 SELU
初步尝试 DCGAN 生成 128×128 像素猫图的所有努力都失败了。但是,把批量规范化(batch normalization)的方法和 ReLU 用 SELU 代替问题就轻松地解决了,这让我可以缓慢(需要六个小时以上)但稳定地收敛和此前相同的学习速率。
SELU 是自标准化的,因此不需要进行批量规范化。SELU 论文是在 2017 年 6 月 8 日出现的,目前还没有太多使用它的 GAN 研究,这种方法看起来可以大幅度提高 GAN 的稳定性。
【SELU就好似及时雨】
在结果中我们可以看到,猫不像之前那么好看了,还会出现大量类似面孔的黑猫。这主要是因为样本大小为 N = 6445 而非原来的 N = 9304(这次实验只对大于 128×128 的图片进行了训练)。不过,其中的一些结果看起来质量很高,而且因为分辨率的提升,该结果仍可以被视为有意义。
SELU 论文《Self-Normalizing Neural Networks》链接:https://arxiv.org/abs/1706.02515
WGAN
WGAN 生成器收敛的速度非常慢(需要花费四五个小时,600 以上个 epoch),且只会在使用 64 个隐藏节点的情况下收敛。我无法让生成器在 128 个隐藏节点时收敛。
- 使用 DCGAN 意味着必须进行大量学习速率的调整,但你可以快速看到是否收敛的结果(鉴别器损失为 0,或生成器损失为 0);
- 但在 WGAN 里,你需要运行完大量 epoch 之后才能得到结果。
看起来,WGAN 的结果有些崩坏,很多猫的两只眼睛都呈现异色,只睁一只眼睛,有些还长着奇怪的鼻子。总体而言,这样的结果并不如 DCGAN,但考虑到 WGAN 的网络复杂性更低,这样的比较或许不太公平。另外,这些结果看起来也陷入了局部最佳的状态,总体而言,WGAN 令人失望。
WGAN-GP
WGAN-GP(一种改进版本的 WGAN,用正则化代替了权重裁剪)或许可以解决这些问题。在 Gulrajani 等人(2017)的一篇论文中,他们成功训练了 101 层的神经网络来生成图片!所以,我怀疑训练一个有 5 层和 128 个隐藏节点的猫生成器还差得很远。
Adam 优化器的一些特性也可以降低模型崩溃并陷入错误局部最佳陷阱的可能性。这些方法可能会帮助 WGAN,因为 DCGAN 和 WGAN-GP 都使用了 Adam。
WGAN-GP 生成器收敛的速度非常慢(超过 6 个小时),但它几乎已经帮你完成了所有设置。它是开箱即用的,无需任何调试。你也可以增加或减少学习速率,这不会造成太多问题。所以在这个任务中,WGAN-GP 赢得了我的青睐。
如下图所示,WGAN-GP 生成的猫图具有多样性,也没有明显的模型崩溃,这是与 WGAN 相比最大的提升。但另一方面,这些猫看起来十分粗糙,就像是用高分辨率的屏幕在看低分辨率的图片,我也不知道这是为什么。或许这是 Wasserstein 损失函数的特点?我认为使用不同的学习率和体系结构将可以提升一下性能。不过,这还需要进一步的尝试,肯定还有很大的潜力。
WGAN-GP 论文《Improved Training of Wasserstein GANs》链接:https://arxiv.org/abs/1704.00028
LSGAN(Least Squares GAN)
LSGAN 是一种略为不同的方法,在这里我们得试图最小化鉴别器输出和分配标签的平方距离;研究者建议:对于真实图像为 1,对于鉴别器更新时的假图像使用 0。
Hejlm 等人(2017)的研究则认为:对于真实图像为 1,对于鉴别器更新时的假图像使用 0,而生成器更新时的假图像用 0.5 以寻找边界。
作者还没有时间运行整个流程,但它看起来非常稳定,而且可以输出漂亮的猫图。尽管它总体稳定,有一次损失函数和梯度还是爆炸了,猫变成了无意义的图片。如下图所示。
所以,LSGAN 不是完全稳定的。通过 Adam 选择更好的超参数可以帮助解决这个问题。在失败时(很少见),它可以让你无须像 DCGAN 那样调整学习速率,这个方法可以让你生成漂亮的猫图。
LSGAN 论文《Least Squares Generative Adversarial Networks》链接:https://arxiv.org/abs/1611.04076
Update:LSGAN 论文的第一作者毛旭东(香港城市大学)给我发来使用 LSGAN 生成的 128×128 分辨率猫图(如下图),结果证明了这种方法至少可以生成和 DCGAN 一样质量的结果。
[GAN] How to use GAN - Meow Generator的更多相关文章
- 【GAN与NLP】GAN的原理 —— 与VAE对比及JS散度出发
0. introduction GAN模型最早由Ian Goodfellow et al于2014年提出,之后主要用于signal processing和natural document proces ...
- 你的GAN训练得如何--GAN 的召回率(多样性)和精确率(图像质量)方法评估
生成对抗网络(GAN)是当今最流行的图像生成方法之一,但评估和比较 GAN 产生的图像却极具挑战性.之前许多针对 GAN 合成图像的研究都只用了主观视觉评估,一些定量标准直到最近才开始出现.本文认为现 ...
- 生成式对抗网络(GAN)学习笔记
图像识别和自然语言处理是目前应用极为广泛的AI技术,这些技术不管是速度还是准确度都已经达到了相当的高度,具体应用例如智能手机的人脸解锁.内置的语音助手.这些技术的实现和发展都离不开神经网络,可是传统的 ...
- Improved GAN
https://www.bilibili.com/video/av9770302/?p=16 从之前讲的basic gan延伸到unified framework,到WGAN 再到通过WGAN进行Ge ...
- GAN (Generative Adversarial Network)
https://www.bilibili.com/video/av9770302/?p=15 前面说了auto-encoder,VAE可以用于生成 VAE的问题, AE的训练是让输入输出尽可能的接近, ...
- GAN笔记——理论与实现
GAN这一概念是由Ian Goodfellow于2014年提出,并迅速成为了非常火热的研究话题,GAN的变种更是有上千种,深度学习先驱之一的Yann LeCun就曾说,"GAN及其变种是数十 ...
- [Deep-Learning-with-Python]GAN图片生成
GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...
- EB-GAN系(Energy-based GAN)
学习总结于国立台湾大学 :李宏毅老师 EB-GAN: Energy-based Generative Adversarial Network MA-GAN:MAGAN: Margin Adaptati ...
- (转) GAN应用情况调研
本文转自: https://mp.weixin.qq.com/s?__biz=MzA5MDMwMTIyNQ==&mid=2649290778&idx=1&sn=9816b862 ...
随机推荐
- VMware workstation12 密匙
VMware workstation12 密匙:5A02H-AU243-TZJ49-GTC7K-3C61N
- C# 论接口的意义---共享协议
我对接口的理解: 接口是一种协议.是一种模型. 我认为接口的意义: 接口更好的实现了项目资源共享 , 指定了可共享的范围 , 允许可使用而不可篡改的项目资源 . 我认为接口和模型是一类的: 接口一般与 ...
- Winform自动更新组件分享
作者:圣殿骑士 出处:http://www.cnblogs.com/KnightsWarrior/ 关于作者:专注于微软平台项目架构.管理和企业解决方案.自认在面向对象及面向服务领域有一定的造诣,熟悉 ...
- [Beego模型] 四、使用SQL语句进行查询
[Beego模型] 一.ORM 使用方法 [Beego模型] 二.CRUD 操作 [Beego模型] 三.高级查询 [Beego模型] 四.使用SQL语句进行查询 [Beego模型] 五.构造查询 [ ...
- cocos3.x - lua vs2013环境搭建及项目创建示例
第一步:装vs2013vs 2013下载(没试过) 安装颜色设深色(不伤眼睛),只装c++够用了 第二步:装cocos环境 (如果不打包只为了解引擎之类的话,只装cocos就可以了(就可以了,jdk, ...
- vs2013修改书签(vs书签文件位置)
visual studio 2013 的书签功能很好用,可以记录一些代码的位置:方便查阅: 不过当项目被他人修改过后,svn update 更新过后,书签的文件行号不变,但是已经不再是原来记录的哪一行 ...
- windows多线程同步互斥--总结
我的windows多线程系列文章: windows多线程--原子操作 windows多线程同步--事件 windows多线程同步--互斥量 windows多线程同步--临界区 windows多线程同步 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)
这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...
- RDLC 图形报表预览时 “本地报表处理期间错误”
在RDLC报表中有图形报表的导出和打印都正常,但预览时"本地报表处理期间错误",这是因为你设置的图形太宽已经超过默认的A4 纸的宽度,解决办法:报表页面的报表--->报表属性 ...
- FeignClient使用
在使用Spring Cloud开发微服务应用时中,各个微服务服务提供者都是以HTTP接口的形式对外提供服务,因此服务消费者在调用服务提供者时,通过HTTP Client的方式访问.当然我们可以使用JD ...