一、简介
生成对抗网络(Generative Adversarial Netword,简称GAN),是一种生成式机器学习模型,该方法由伊恩·古德费洛等人于2014年提出,曾被称为“机器学习这二十年来最酷的想法”,可以用来创造虚构的人物和场景,人脸置换、模拟人脸老化,图像风格变换,以及产生化学分子式等等,被广泛应用于广告、娱乐、游戏、制药等等行业。
二、组成部分
生成对抗网络(GAN)由2个重要的部分构成:
①生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器。
②判别器(Discriminator):判断这张图像是真实的还
生成器从潜在空间(latent space)中随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别器的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。工作原理如图所示。
从博弈论的角度来看,如果是零和博弈(zero-sum game),两者最终会达到纳什均衡(Nash equilibrium),即存在一组策略(g, d),g和d相互成就达到均衡。如果Generator不选择策略g,那么对于Discriminator来说,总存在一种策略使得Generator输得更惨;同样地,将Generator换成Discriminator也成立。
三、公式原理
GAN公式如图所示,其中前半部分公式表示真实数据X输入到判别器D中并得到是否为真实概率值,此时优化目标是希望判别器输出真即1。
后半部分表示噪声z生成的生成数据G(z)输入到判别器D中并输出是否为真的概率值,此时对于判别器来说优化目标是输出假即0,对于生成器来说优化目标是输出真即1
四、应用
现有的GANs算法有很多,比如GAN、CGAN、DCGAN、CycleGAN、CoGAN、ProGAN、WGAN、SAGAN、BigGAN。实际应用多种多样。
1、生成图像数据集,GAN 可以自动的生成一些数据集,提供低成本的训练数据。
2、文字到图像的转换,StackGAN网络实现从鸟类和花卉等简单对象的文本描述中生成逼真的照片。
3、图像风格转化
4、语义–图像–照片的转换,在语义图像或草图作为输入的情况下使用条件GAN生成逼真图像。
5、照片到Emojis,GANs 可以通过人脸照片自动生成对应的表情(Emojis).
6、提高照片分辨率,让照片更清晰。
7、照片修复,GAN可以修复这个区域,还原成原始的状态。
五、项目实战(生成手写数字
本项目参考日月光华gan-pytorch教程并结合自己的想法制作完成,编写了一个最简易的生成对抗网络实现手写数字的自动生成模型。项目使用torch1.12.1,cuda11.3实现的。(源码获取见文末)
生成器模块
判别器模块
损失计算模块
绘图模块
最后实现的效果如下,下面是模型自动生成的图片,分别是第0、20、40、60、80个epoch生成的图片效果图。
获取源码关注公众号【OurTwenty】回复【gan生成数字】即可获取