深度卷积生成对抗网络

李卡

硕士毕业

控制算法工程师

作者 | 上图

深度卷积生成对抗网络-Deep Convolutional Generative Adversarial Networks ,是由Alec Radford在2016年ICLR 上发表的论文《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》中提出。从名字上来看,它是在GAN的基础上增加深度卷积网络,我们知道,在深度学习中对图像处理应用最好的模型是CNN,所以CNN与GAN的结合是必然之路,而DCGAN便是这方面最好的尝试之一。

01

DCGAN的核心

我们知道GANs至少包括两个模型:生成模型(generative model)和判别模型(discriminative model).

而在前面实现的GAN-demo中,生成器G(z) 和判别器D(X)只是两个简单神经网络,而对于DCGAN,这两个神经网络就要变成深度卷积神经网络,并且,作者对于这两个卷积网络结构还做了一些改变,以提高样本的质量和收敛的速度,这些改变有:

翻译成中文即:

取消所有pooling层。G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。

在D和G中均使用batch normalization

去掉FC层,使网络变为全卷积网络

G网络中使用ReLU作为激活函数,最后一层使用tanh

D网络中使用LeakyReLU作为激活函数

其中,DCGAN中的G网络示意如下:

02

数据收集

想要做DCGAN的实验,首先得收集合适的数据,其中DCGAN的原作者用DCGAN生成LSUN的卧室图片,网上已经有人用爬虫爬取了二次元美女照片,生成了二次元美女头像,而我们这里就是用真实的美女头像来做实验。

数据来源:从github上找的爬虫代码(photo-gevent),很快便能爬取上万的妹纸图像:

可以看到这里面的图片大多数比较杂乱,还不能直接作为数据训练,我们需要截取人物的头像进行训练。同样在github上已有合适的工具:即通过基于opencv的人脸检测分类器,参考于lbpcascade_animeface,这样,我们便能生成我们想要的头像数据集:

同时,我们注意到,生成头像的时候,头像大小已经resize到96*96了。

03

DCGAN训练

DCGAN在github上有用tensrflow实现的经典轮子:carpedm20/DCGAN-tensorflow,我们直接使用这个代码就可以了。原始代码中已经提供了几个常用的数据集,不过我们要使用自己的数据集只需要做几个些微的改动,一个是在data文件夹里新增数据集faces,另外就是命令行中指定数据集,运行脚本如下:

python main.py --input_height 96 --output_height 48 --dataset faces --crop True --train True --epoch 100

训练过程:

训练结果:

04

总结

本文简单介绍了DCGAN的基本原理,以及用github上现有的工具来收集和处理图像数据,并用现有demo来实现了一个简单的生成妹纸头像的实验。实验结果表明:最终生成的图片质量一般,但是生成的图像越来越和真实图像接近。所以探讨如何提高生成图像的分辨率成为了DCGAN的研究方向,此外本文并没有对demo代码进行深入解读,所以下篇文章将会深入解读不同的DCGAN的代码实现。

如果想联系我,后台留言吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181001G1D18V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券