[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 ...
随机推荐
- 【熊掌号mip插件】织梦DEDECMS百度熊掌号mip改造教程
第一部分:模板修改 1.js部分:删除或使用现有组件替换 2.调用百度mip文件: head里加<link rel="stylesheet" type="text/ ...
- STL——配接器、常用算法使用
学习STL,必然会用到它里面的适配器和一些常用的算法.它们都是STL中的重要组成部分. 适配器 在STL里可以用一些容器适配得到适配器.例如其中的stack和queue就是由双端队列deque容器适配 ...
- 在global.asax中启动定时任务
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { Area ...
- 计算请假天数JavaScript方法
前言 最近,有这么个需求,给用户做个请假审批系统,要输入请假开始时间和结束时间,同时计算出请假天数,如果年假数量不够提示不能提交,如果年假数量够的话,就走审批工作流,审批通过以后,自动在年假上减去这个 ...
- iOS: 数据持久化方案
数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类: plist存储:使 ...
- C# SpinWait 实现
其实SpinWait的code 非常简单,以前看过很多遍,但是从来都没有整理过,整理也是再次学习吧. 我们先看看SpinWait的一些评论或者注意点吧:如果等待某个条件满足需要的时间很短,而且不希望发 ...
- ECharts的geojson地图数据下载(根据城市区划代码的前六位查询)
链接如下: http://echarts.baidu.com/echarts2/doc/example/geoJson/china-main-city/522200.json 想要对应城市的geojs ...
- 【T06】记住TCP是一种流协议
1.TCP是一种流协议(stream protocol),这意味着数据是以字节流的形式发给接收者的,没有固定的报文和报文边界的概念. 接收端读取tcp数据,无法预知在这一次读操作中会返回多少个字节. ...
- grid - 通过网格线号码来定位网格项目
网格线实际上是代表线的开始.结束. 两者之间就是网格列或行. 以下css仅对子元素生效 ,具体详情可以看后面示例 grid-row-start: 2; grid-row-end: 3; grid-co ...
- Django Web开发学习笔记(4)
第四章 模板篇 上一章的内容,我们将HTML的代码和Python代码都混合在了在view.py的文件下.但是这样做的坏处无疑是明显的,引用DjangoBook的说法: 对页面设计进行的任何改变都必须对 ...