文章目录

前言

生成对抗网络(Generative Adversarial Net, GAN)是近年来深度学习中十分热门的方向。本文将简要介绍GAN的基本原理,并带领读者实现一个简单的生成对抗网络,用以生成动漫人物的头像。

GAN的原理简介

GAN的开山之作是被称为“GAN之父”的Ian Goodfellow发表于2014年的经典论文Generative Adversarial Networks,在这篇论文中他提出了生成对抗网络,并设计了第一个GAN实验——手写数字生成。

如果深度学习不能创造图片,那么它也没有真正地理解图片。GAN从生成学习角度展示了神经网络的强大能力。GAN解决了非监督学习中的著名问题:给定一批样本,训练一个系统能够生成类似的新样本

生成对抗网络的网络结构如下图所示,主要包含以下两个子网络。

  • 生成器(generator):输入一个随机噪声,生成一张图片。
  • 判别器(discriminator):判断输入的图片是真图片还是假图片。

生成对抗网络(GAN)_生成器
训练判别器时,需要利用生成器生成的假图片和来自真实世界的真图片;训练生成器时,只用噪声生成假图片。判别器用来评估生成的假图片的质量,促使生成器相应地调整参数。

生成器的目标是尽可能地生成以假乱真的图片,让判别器以为这是真的图片;判别器的目标是将生成器生成的图片和真实世界的图片区分开。可以看出这二者的目标相反,在训练过程中互相对抗,这也是它被称为生成对抗网络的原因。

判别器的目标是判断输入的图片是真的还是假的,所以可以看成是一个二分类网络。生成器的目标是从噪声中生成一张彩色图片,这里我们采用广泛使用的DCGAN(Deep Convolutional Generative Adversarial Networks)结构,即采用全卷积网络,其结构如下图所示。网络的输入是一个100维的噪声,输出是一个3×64×64的图片。这里的输入可以看成是一个100×1×1的图片,通过上卷积慢慢增大为4×4、8×8、16×16、32×32和64×64。上卷积,或称转置卷积,是一种特殊的卷积操作,类似于卷积操作的逆运算。当卷积的stride为2时,输出相比输入会下采样到一半的尺寸;而当上卷积的stride为2时,输出会上采样到输入的两倍尺寸。这种上采样的做法可以理解为图片的信息保存于100个向量之中,神经网络根据这100个向量描述的信息,前几步的上采样先勾勒出轮廓、色调等基础信息,后几步上采样慢慢完善细节。网络越深,细节越详细。
生成对抗网络(GAN)_动漫_02
在DCGAN中,判别器的结构和生成器对称:生成器中采用上采样的卷积,判别器就采用下采样的卷积,生成器是根据噪声输出一张64×64×3的图片,而判别器则是根据输入的64×64×3的图片输出图片属于正负样本的分数(概率)。

用GAN生成动漫头像

本节将用GAN实现一个生成动漫人物头像的例子。在日本的技术博客网站上由个博主,利用DCGAN从20万张动漫头像中学习,最终能够利用程序自动生成动漫头像。

参考:​​https://github.com/chenyuntc/pytorch-book/tree/master/chapter07-AnimeGAN​

用GAN生成花

花的数据集可以通过百度网盘下载:
链接: https://pan.baidu.com/s/1s7ccPiWYCTCd3eRETdRy6Q 提取码: sdup

复现结果
生成对抗网络(GAN)_生成器_03