GAN网络的发展(持续更新)

GAN生成对抗网络是最近比较火的深度学习技术,这里记录一下自己学习GAN的笔记,以便日后复习。本文不会给出每种模型的细节,只是提一下主要区别和trick,同时给出相关参考链接。

GAN可以做很多事情,如自动生成动漫人物头像;做pix2pix(image2image)的工作,如给黑白图片上色,基于模糊图片生成高清图片,素描生成真实照片,将风景画“莫奈化”等;也可以用于最近比较火的AI换脸,GAN掉马赛克(修补图片缺失的部分),用于生成万能指纹等。

Auto-encoder

先来复习一下自编码器,自编码器结构如下图所示:

当自编码器训练好后,输入一个随机的code向量到Decoder中,理论上Decoder会生成一张图片。

自编码器的结构比较简略,效果也比较一般,往往比较难以得到质量很高的图片。

VAE(Variational Auto-Encoding)

在Auto-encoder的基础上做了改进,encoder会生成两组向量,一组代表均值,一组代表标准差,在标准差上叠加一组noise。VAE比auto-encoder改进了很多,但是VAE只是更好地学习了对照,而没有真正地学会生成。

GAN

Image-to-Image

DCGAN

LSGAN——最小二乘GAN

LSGAN修改了原始GAN的loss function,原始GAN是log损失,对应的优化目标是KL散度和JS散度;而LSGAN则是L2损失,对应Pearson散度。

我们选择 b=1 表明它为真实的数据,a=0 表明其为伪造数据。 c=1 表明我们想欺骗辨别器 D。

但是这些值并不是唯一有效的值。LSGAN 作者提供了一些优化上述损失的理论,即如果 b-c=1 并且 b-a=2,那么优化上述损失就等同于最小化 Pearson χ^2 散度(Pearson χ^2 divergence)。因此,选择 a=-1、b=1 和 c=0 也是同样有效的。

扫描二维码关注公众号,回复: 5958355 查看本文章

在LSGAN之前已有WGAN通过使用Wasserstein距离度量替代JSD距离度量,解决了GAN难以训练的问题。但WGAN训练较慢,而且需要一些特别的剪枝等操作辅助。LSGAN则比WGAN要快,又比原始GAN稳定。

选择最小二乘Loss做更新有两个好处, 1. 更严格地惩罚远离数据集的离群Fake sample, 使得生成图片更接近真实数据(同时图像也更清晰) 2. 最小二乘保证离群sample惩罚更大, 解决了原本GAN训练不充分(不稳定)的问题。

但有好处的同时也会带来问题:LSGAN对离离群点的过度惩罚, 可能导致样本生成的”多样性”降低, 生成样本很可能只是对真实样本的简单”模仿”和细微改动.

参考:LSGAN-最小二乘GAN 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速

InfoGAN

论文:InfoGAN

代码:openai InfoGAN

公式推导解析:infoGAN公式推导

pix2pix——图像翻译

论文(patchGAN):Image-to-Image Translation with Conditional Adversarial Networks

CycleGAN

在image-to-image任务基础上,有了效果更好的cycleGAN,而且cycleGAN使用的数据不再是成对的数据,而是使用unpair的数据进行训练即可,通用性更强(不过在论文里,作者还是主要使用的有一些pair性质的数据集做的实验)。

CycleGAN就是在原始GAN的基础上做了一个逆向过程,即X转换为Y后,再从Y转换回X,Loss也是在原始GAN loss的基础上多了逆向的GAN loss,此外还添加了针对X和Y的L1 loss:

Adversarial Loss(这是正向,还有一个逆向):

Cycle Consistency Loss:

总loss:

目标函数:

详细解析见CycleGAN解析博客

lua代码见https://github.com/junyanz/CycleGAN

论文见Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

基于Auto-Encoder和CycleGAN的换脸

深度解密换脸应用Deepfake

关于Generator的loss问题:heuristic, non-saturating loss和maximum likelihood loss

相关博客:https://danieltakeshi.github.io/2017/03/05/understanding-generative-adversarial-networks/

与原始minimax版本相比,不饱和的版本,根据图可以看出,在G的性能不高时能够更快地收敛,可以加快G的训练速度。

猜你喜欢

转载自blog.csdn.net/ygfrancois/article/details/88802796