专栏首页新智元【猫咪生成器】DCGAN、WGAN等4种生成对抗网络猫咪图像对比

【猫咪生成器】DCGAN、WGAN等4种生成对抗网络猫咪图像对比

【新智元导读】 作者用 DCGAN,WGAN,WGAN-GP 和 LSGAN 等生成对抗网络(GAN),使用拥有1万张猫的图片的 CAT 数据集做“生成猫咪的脸”的实验。结果有非常好的,也有不够好的,作者进行了分析并提出一些改进的方法。这个研究被GAN的提出者 Ian Goodfellow,Andrew Ng 等人在推特推荐,可以说是非常有趣的深度学习应用了。

我尝试使用生成对抗网络(GAN)来生成猫的脸。我想分别以较低和较高的分辨率使用 DCGAN,WGAN,WGAN-GP 以及 LSGAN。使用的数据集是 CAT Dataset,这个数据集包含 10000 张猫咪的照片。我需要的是猫咪的脸在中央的图像,并筛除了不符合的图像(这是用肉眼观察做的,花了几个小时…)。最终,我得到 9304 张分辨率大于 64×64 的图像和 6445 张分辨率大于 128×128 的图像。

DCGAN

DCGAN 生成器只需 239 个 epoch,在约 2-3 小时内就能收敛得到非常逼真的图像,但为了得到适当的收敛,需要做一些轻微的调整。你需要分别为 D(鉴别器)和 G(生成器)选择各自的学习率(learning rate),以使 G 或者 D 的效果不会差别太大。这需要非常小心地平衡,但一旦找到了平衡的点,就能得到收敛。使用 64×64 的图像时,最佳的点是鉴别器学习率为 .0005,而生成器学习率为 .0002。没有出现明显的 mode collapse 的问题,最终我们得到了非常可爱的图像!

DCGAN 生成的 64×64 分辨率的猫猫

高分辨率 DCGAN 和 SELU

我最初用 DCGAN 生成 128×128 分辨率猫咪图像的所有尝试都失败了。但是,用 SELU 代替批标准化(batch normalization)和 ReLU 之后,虽然速度有点慢(花了6+小时),但是能够与之前相同的学习率稳定地收敛了。SELU 是自归一化的,因此不需要批标准化。SELU 是新近出现的方法,SELU 用于 GAN 的研究还非常少,但从我所观察到的,SELU 似乎大大增强了 GAN 的稳定性。这一方法生成的猫咪图像没有向前的那么好看,而且明显品种多样性不足(有大量类似的黑猫)。主要原因是样本量太小,N=6445,而不是 N=9304(因为只对分辨率大于 128×128 的图像进行训练)。不过,有些猫看起来很漂亮,而且比先前的分辨率更好,所以我仍然认为这是成功的!

DCGAN 生成的 128×128 分辨率的猫猫

WGAN

WGAN 生成器的收敛速度非常慢(花了4-5小时,600+epoch),而且只有使用64个隐藏节点(hidden node)时才收敛。我无法在使用 128 个隐藏节点时使生成器收敛。使用 DCGAN 时,需要调整的学习率很多,但当它不收敛时可以快速看到(当 D 的损失值为 0,或 G 的损失在开始时为 0 时),但是使用 WGAN 时,你需要让它运行许多 epoch,才能知道是否收敛。

从视觉上看,出现了一些相当明显的 mode collapse。例如,许多猫出现虹膜异色,有些猫一只眼睛闭着一只眼睛睁着,或者鼻子很奇怪。总体而言,结果不如 DCGAN 那么好,但由于 WGAN 神经网络没有那么复杂,所以这样比较可能不公平。它似乎也陷入了局部最优(local optimum)。到目前为止,WGAN 效果令人失望。

WGAN-GP(使用正则化而非 weight clipping 的改进版 WGAN)可以解决这些问题。在 Gulrajani 等人的论文“Improved Training of Wasserste in GANs”(2017)中,他们训练了一个 101 层的神经网络来生成图像!所以我想我训练的 5 层,128 个隐藏节点的生成器可能是问题所在。Adam 优化器还具有一些特征,可以降低 mode collapse 以及令其陷入不利的局部最优的风险。这可能有助于解决 WGAN 的问题,因为 WGAN 不使用 Adam,而 DCGAN 和 WGAN-GP 都使用。

WGAN 生成的猫猫

WGAN-GP(改进版 WGAN)

WGAN-GP 生成器收敛速度非常慢(超过6小时),但不管改变什么设置结果都是这样。它是开箱即用的,不需要任何调整。你可以增大或降低学习率,不会出现很大的影响。因此,我是非常喜欢 WGAN-GP 的。

生成的猫非常多样化,而且没有明显的 mode collapse,这是相对 WGAN 的一个重大改进。但是,生成猫的外观非常模糊,就像高分辨率图片被变成低分辨率了一样,我不知道这是什么原因。可能是 Wasserstein loss 的特点。我想使用不同的学习率和架构可能有所帮助。这需要进一步的尝试,肯定还有很大的潜力。

WGAN-GP 生成的猫猫

LSGAN(最小二乘GAN)

LSGAN 是一种比较不同的方法,我们尝试将鉴别器输出和其指定的标签之间的平方距离最小化。Xudong Mao(毛旭东)等人的原始 LSGAN 论文中建议使用:在鉴别器 update 中使1为真实图像,0为伪造图像,然后在生成器 update 中使1为伪造图像,0为真实图像。但是 Hejlm 等人的论文建议使用:在鉴别器 update 中使1为真实图像,0为伪造图像,但在生成器update中使.50作为伪造图像来寻找边界。

我没有时间进行完整的运行,但 LSGAN 总体相当稳定,并且输出的猫非常漂亮。虽然一般情况下是稳定的,但又一次,损失和梯度崩溃了,生成的别说猫了,啥也没有。你可以看下面的 epoch 31 和 32:

因此,它不是绝对稳定的,可能会崩溃造成非常糟糕的结果。为 Adam 优化器选择更好的超参数可能有助于防止这种情况。你不需要像 DCGAN 那样调整学习率,但如果出故障(可能很少见),生成的猫咪还是非常好看的。

后记:LSGAN 的第一作者 Xudong Mao 发给我一张128×128分辨率的 LSGAN 生成的猫的图像,证明 LSGAN 可以生成跟 DCGAN 一样好的图,甚至更好。结果如下面这张图:

开源代码:https://github.com/AlexiaJM/Deep-learning-with-cats

数据集:CAT Dataset:https://web.archive.org/web/20150703060412/http://137.189.35.203/WebUI/CatDatabase/catData.html

相关论文:

1. Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.

2. Arjovsky M, Chintala S, Bottou L. Wasserstein gan[J]. arXiv preprint arXiv:1701.07875, 2017.

3. Gulrajani I, Ahmed F, Arjovsky M, et al. Improved training of wasserstein gans[J]. arXiv preprint arXiv:1704.00028, 2017.

4. Mao X, Li Q, Xie H, et al. Least squares generative adversarial networks[J]. arXiv preprint ArXiv:1611.04076, 2016.

原文:https://ajolicoeur.wordpress.com/cats/

本文分享自微信公众号 - 新智元(AI_era)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【观点】三星首席专家漫谈虚拟现实:AI能让虚拟现实更酷炫

    【新智元导读】虚拟现实(VR)已经从最初的倍受质疑走向了高速发展的阶段。然而即使是现在,我们也不得不承认,我们在这条道路上才刚刚开始,距离最终的目标还有遥远甚至...

    新智元
  • 实用:用深度学习方法修复医学图像数据集

    新智元
  • 震撼!英伟达用深度学习做图像修复,毫无ps痕迹

    新智元
  • A/B Test;名字取得不好, 很容易让人产生误解

    2017.9.24, 深圳, Ken Fang A/B Test;名字取得不好, 很容易让人产生误解, 认为它是 “测试”。 其实… A/B Test 是...

    Ken Fang 方俊贤
  • 【BDTC 2016】专访中兴飞流吕阿斌、郑龙:Yita,基于数据流的大数据计算引擎

    在此次大会的大数据分析与生态系统论坛上,中兴飞流信息科技有限公司CTO郑龙发表了“Yita:基于数据流的大数据计算引擎”的演讲,阐述了数据流对于大数据的影响,以...

    CSDN技术头条
  • php文件下载限速,文件断点续传,多线程下载文件原理解析

    可以看出,php实现浏览器下载文件,主要是靠header头的支持以及echo 文件数据,那么,该如何限制速度呢?可以通过限制输出频率吗?例如每次读取1024之后...

    仙士可
  • 远程请求

    function simpleRequest( $url , $post_data = array() ,$option=array()) {/*{{{*/ ...

    joshua317
  • 为何优先选用unique_ptr而不是裸指针?

    在《拥抱智能指针,告别内存泄露》中说到了内存泄漏问题,也提到了C++中的智能指针基本原理,今天就来说说类模板unique_ptr。 在此之前,先回答读者的一个提...

    编程珠玑
  • 四部委关于组织申报国家2014年云计算工程的通知

    关于请组织申报2014年云计算工程的通知 各省、自治区、直辖市及计划单列市、新疆生产建设兵团发展改革委、财政厅(局)、工业和信息化主管部门、科技厅(局),有关中...

    静一
  • 2017年云计算行业最受追捧的3个职位

    我们经常能听到别人讨论云计算领域最好的工作是什么?哪些云计算领域的工作薪酬最高?以下是我们根据工作需求、薪资和工作稳定性筛选出来最好的三个职位。 ? ❆ 云计算...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券