1、什么是GAN
背景知识:
- 快速掌握 机器学习(Machine Learning) 常用概念术语,常用算法
https://gwj1314.blog.csdn.net/article/details/120873124
快速掌握 深度学习(Deep Learning) 常用概念术语,常用模型
https://gwj1314.blog.csdn.net/article/details/120932539
从人工到自动的机器学习:
- 从人工提取特征 到 自动提取特征
相对于传统的机器学习,深度学习厉害的地方就是能够自己学习特征提取。
机器学习:数据预处理 -> 特征提取 -> 选择分类器
深度学习:数据预处理 -> 设计模型 -> 训练
- 从人工判断生成结果的好坏 到 自动判断和优化
训练集需要大量的人工标注数据,这个过程是成本很高且效率很低的。而人工判断生成结果的好坏也是如此。
GAN 能自动完成这个过程,且不断的优化,这是一种效率非常高,且成本很低的方式。
GAN的原理:
- 生成对抗网络(GAN)由2个重要的部分构成
1、生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器
2、判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”
- 对抗过程:
1:固定「判别器」,训练「生成器」
使用一个还 OK 判别器,让一个生成器不断生成“假数据”,然后给这个判别器去判断。
一开始,「生成器」还很弱,所以很容易被揪出来。
但是随着不断的训练,「生成器」技能不断提升,最终骗过了「判别器」。
2:固定「生成器」,训练「判别器」
当通过了第一阶段,继续训练「生成器」就没有意义了。这个时候我们固定「生成器」,然后开始训练「判别器」。
「判别器」通过不断训练,提高了自己的鉴别能力,最终他可以准确的判断出所有的假图片。
到了这个时候,「生成器」已经无法骗过「判别器」。
3、循环阶段一和阶段二
通过不断的循环,「生成器」和「判别器」的能力都越来越强。
最终我们得到了一个效果非常好的「生成器」,我们就可以用它来生成我们想要的图片了。
- 简单形象的例子:
警察严打小偷导致小偷水平提升。
警察为了破案提高自己水平。
小偷为了生存提高自己水平。
警察和小偷的水平都越来越高。
GAN的应用:
- 生成图像数据集
人工智能的训练是需要大量的数据集的,如果全部靠人工收集和标注,成本是很高的。GAN 可以自动的生成一些数据集,提供低成本的训练数据。
- 生成人脸照片、动物照片、漫画人物
生成人脸照片,漫画人物等
- 图像到图像的转换
把一种形式的图像转换成另外一种形式的图像,就像加滤镜一样。
把草稿转换成照片、把照片转换成油画、三次元转化为二次元
- 文字到图像的转换
StackGAN,从鸟类和花卉等简单对象的文本描述中生成逼真的照片。
- 照片到Emojis
GANs 可以通过人脸照片自动生成对应的表情(Emojis)
- 人脸照片编辑
使用GAN可以生成特定的照片,例如更换头发颜色、更改面部表情、甚至是改变性别。
- 预测不同年龄的长相
给一张人脸照片, GAN 就可以帮你预测不同年龄阶段你会长成什么样。
- 提高照片分辨率,让照片更清晰
生成一张分辨率更高的照片,使得这个照片更加清晰
- 照片修复
假如照片中有一个区域出现了问题(例如被涂上颜色或者被抹去),GAN可以修复这个区域,还原成原始的状态。
- 自动生成3D模型
给出多个不同角度的2D图像,就可以生成一个3D模型。
2、GAN的发展历程
GAN的缺陷
- 多样性不足的问题
模式缺失(Mode Collapse)问题。GANs的学习过程可能出现模式缺失,生成器开始退化,总是生成同样的样本点,无法继续学习。
以使用GANs训练人脸图像为例,当生成分辨率较小的图像时,GANs生成的图像的多样性尚且能得到保证。但是当生成较高分辨率的图像,就会出现GANs生成的人脸图像都非常相似的情况,也就是多样性不足的问题。
- 高分辨率图像生成质量差的问题
难训练,不稳定。生成器和判别器之间需要很好的同步,但是在实际训练中很容易D收敛,G发散。D/G 的训练需要精心的设计。
所以使用GANs生成算法去生成高分辨率图像时,通常存在两大问题。其一,生成的图像失真的问题。其二,生成的高分辨率图像高频细节模糊的问题。
于是围绕着缺陷有很多的优化和变种。
GAN的种类
- GAN 算法有数百种之多,大家对于 GAN 的研究呈指数级的上涨,目前每个月都有数百篇论坛是关于对抗网络的。
GANs动物园 收录了几乎所有的GAN算法实现,论文地址。
开源地址:https://github.com/hindupuravinash/the-gan-zoo
9个比较有代表性的GAN算法
算法 论文 代码 GAN 论文地址 代码地址 DCGAN 论文地址 代码地址 CGAN 论文地址 代码地址 CycleGAN 论文地址 代码地址 CoGAN 论文地址 代码地址 ProGAN 论文地址 代码地址 WGAN 论文地址 代码地址 SAGAN 论文地址 代码地址 BigGAN 论文地址 代码地址
附:高分辨率生成的一种解决方案
参考资料:https://www.jiqizhixin.com/articles/2017-11-16-20
- 基于上下文约束的渐进式生成对抗网络
PG-GAN:
采用 progressive growing 的训练方式,先训一个小分辨率的图像生成,训好了之后再逐步过渡到更高分辨率的图像。然后稳定训练当前分辨率,再逐步过渡到下一个更高的分辨率。
充分利用上个分辨率训练的结果,通过缓慢的过渡(w 逐渐增大),使得训练生成下一分辨率的网络更加稳定。
LAP-GAN:
借助 CGAN,高分辨率图像的生成是以低分辨率图像作为条件去生成残差,然后低分辨率图上采样跟残差求和得到高分辨率图,通过不断堆叠 CGAN 得到我们想要的分辨率。
PC-GAN
首先通过GAN生成局部的小尺寸图像,通过内容扩展网络(Content Extension Network, CEN)在小尺寸图像的基础上生成更大尺寸的图像。接着通过多个CEN逐步的放大图像的尺寸,最终生成大尺寸的图像。
通过多个CEN,将最初的图像中心的小尺寸部分向四周扩展,在分辨率不变的情况下逐渐生成越来越大尺寸的图像。
- 多层次感知特征约束
多层感知机是指具有至少三层节点,输入层,一些中间层和输出层的神经网络。
感知机(Perceptron)一般只有一个输入层与一个输出层,导致了学习能力有限而只能解决线性可分问题。多层感知机(Multilayer Perceptron)是一类前馈(人工)神经网络及感知机的延伸,它至少由三层功能神经元(functional neuron)组成(输入层,隐层,输出层),每层神经元与下一层神经元全互连,神经元之间不存在同层连接或跨层连接,其中隐层或隐含层(hidden layer)介于输入层与输出层之间的,主要通过非线性的函数复合对信号进行逐步加工,特征提取以及表示学习。
多层感知机的强大学习能力在于,虽然训练数据没有指明每层的功能,但网络的层数、每层的神经元的个数、神经元的激活函数均为可调且由模型选择预先决定,学习算法只需通过模型训练决定网络参数(连接权重与阈值),即可最好地实现对于目标函数的近似,故也被称为函数的泛逼近器(universal function approximator)。
首先在图像数据集上训练一个对称的自编码器网络,通过自编码器提取每一张图像对应的多个不同层次的语义特征表达,从而获得图像数据集对应的多个不同层次的语义特征数据集。
其次,利用多个不同层次的语义特征数据集训练得到多个不同层次的语义特征判别器,用于判断输入值是否符合相应语义特征数据集的分布。
最后,在图像生成的过程中,利用上一步中得到的语义特征判别器对生成器的多个中间层加以约束。通过引入多个权重参数用于平衡多个特征判别器之间的约束权重,最终在多个语义判别器共同约束下,使得图像生成过程中的网络中间层都处于可控的范围,使得生成图像的过程更加稳定更加可靠。
- 增加生成多样性
两种可行的方法:通过 loss 让网络自己调整、通过设计判别多样性的特征人为引导。
WGAN 属于前者,它采用更好的分布距离的估计。模型收敛意味着生成的分布和真实分布一致,能够有多样性的保证。PG-GAN 则属于后者。
PG-GAN 不引入新的参数,利用特征的标准差作为衡量标准。