各类GAN算法

本文使用到的各类GAN算法,我自己完成复现,更多细节可以参考【代码

损失函数

名称 损失函数
GAN
LSGAN
WGAN
WGAN-GP
DRAGAN
DCGAN
ACGAN
CGAN
InfoGAN
LapGAN
BEGAN
EBGAN

算法细节

  • GAN:生成对抗网络的开山之作,引入零和博弈的思想交替优化判别器和生成器
  • LSGAN:直接通过L2损失将判别器的预测结果拉近各自标签
  • WGAN
    • 判别器最后一层去掉sigmoid
    • 生成器和判别器的loss不取log
    • 权重剪枝:每次更新判别器的参数之后把它们的值截断到不超过一个固定常数c
    • 不用基于动量的优化算法(包括momentum和 Adam),推荐RMSProp
  • WGAN-GP:对WGAN的改进,使用真实数据和生成数据的插值计算梯度惩罚,代替WAGN的权重剪枝
  • DRAGAN:和WGAN-GP类似的思想:添加一个梯度惩罚项,但是只考虑在真实数据x的周围梯度不能太大,不考虑其和生成数据的插值
  • DCGAN
    • 利用CNN的“卷积+反卷积”替换了原始GAN的全连接网络
    • 损失方面同原始GAN
    • 使用Batch Normalization
    • 在生成器上,除了输出层使用Tanh外,其它所有层的激活函数都使用ReLU
    • 判别器所有层的激活函数都使用LeakyReLU
  • ACGAN:生成器要接收类别信息,判别器不接收类别信息,表示分类的交叉熵损失
  • CGAN:生成器和判别器都要接受条件c
  • InfoGAN:Q是从D引申出来的一个分支,用来预测潜在编码c
  • LapGAN采用级联的结构配合CGAN损失进行训练,每个分辨率分别训练一个判别器和生成器,判别器接受高频信息(即当前分辨率图减去先下采样再上采样回来模糊图的差值);生成器接受随机噪声z和低频信息(即用当前分辨率的模糊图做条件),输出当前分辨率的高频信息,此时高频和低频信息相加得到当前分辨率的完整图像,上采样后又得到更高分辨率的低频模糊信息,不断往复生成高分辨率图。其中最低分辨率的D仅接受对应分辨的图像作为输入,最低分辨率的G仅接受z。
  • BEGAN:判别器是一个AE结构,其中表示重构损失,为k的学习率,设置为0.001; k初始值=0,其随着每次更新也会更新
  • EBGAN:判别器是一个AE结构,其中表示重构损失,表示论文中的pull away损失,其将生成的图像中间特征两两之间拉远,提升生成多样性

网络结构

GAN除了在损失函数上具有多样性,其在网络结构上也根据不同使用场合有不同的设计,以下取几个比较有代表性的进行展示:

GAN&CGAN
EBGAN&ACGAN
InfoGAN&LapGAN

生成效果

Mnist和Fashion简单效果

名称 Mnist Fashion
GAN GAN_mnist GAN_fashion
LSGAN LSGAN_mnist LSGAN_fashion
WGAN WGAN_mnist WGAN_fashion
WGAN-GP WGAN-GP_mnist WGAN-GP_fashion
DRAGAN DRAGAN_mnist DRAGAN_fashion
DCGAN DCGAN_mnist DCGAN_fashion
ACGAN ACGAN_mnist ACGAN_fashion
CGAN CGAN_mnist CGAN_fashion
InfoGAN infoGAN_mnist infoGAN_fashion
LapGAN LapGAN_mnist LapGAN_fashion
BEGAN BEGAN_mnist BEGAN_fashion
EBGAN EBGAN_mnist EBGAN_fashion

Tips:其中诸如GAN、WGAN等原始论文没有条件控制生成的,通过引入类别信息也自然是可以控制生成的。

卡通图像效果

BEGAN DRAGAN
BEGAN_cartoon DRAGAN_cartoon

InfoGAN的latent空间可视化

InfoGAN指出潜在编码latent中的每个元素都是有信息内容的:

数据集 结果1 结果2 结果3
Mnist latent_mnist1 latent_mnist2 latent_mnist3
Fashion latent_fashion1 latent_fashion2 latent_fashion3

上面可以看出在控制噪声不变的时候连续修改latent中的某个元素大小,会达到连续变化的生成效果,比如控制生成数字的角度、粗细等,但是要知道的上面实验证明latent空间虽然是包含信息的,但是具体哪个元素控制角度,那个元素控制粗细,这是不知道的。

使用DCGAN做简单图像清晰化

受到LapGAN的启发,既然生成器能够通过输入的低频图像(即模糊图像)生成高频信息,那么能够使用这个方法对图像清晰化呢?实验证明是有效的。

Mnist Fashion
SR_mnist SR_fashion

其中每格中的三张图像分别是(原图2倍降采样再上采样的模糊图、GAN清晰化结果、原始清晰图)

总结

GAN是2014年提出来的生成式算法,其相比较于之前的AE,VAE 效果有比较大的提升,并且创新性地引入零和博弈的思想让生成器和判别器进行对抗性优化。GAN不仅在图像生成具有比较好的效果,其在下游任务如图像转换、图像编辑等都具有比较好的应用效果,后面有时间会进一步更新本系列。

参考文献