Pytorch——零基础入门GAN网络

235 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情


前言

在上一篇文章中,我们介绍了COCO数据集、Detectron框架、coco数据集标注文件解析。

今天,我们来介绍GAN网络的基本概念,GAN网络的优化目标函数,常见的生成式模型, 常见的GAN网络, GAN的优缺点,如何训练GAN网络,GAN的重要应用。


  • 1.1 GAN网络的基本概念

  • GAN(Generative Adversarial Networks)是一种生成式的,对抗网络

    • 生成网络尽可能生成逼真样本判别网络尽可能区判别该样本是真实样本还是生成的假样本。示意图如下
    • 1.png
    • GAN网络包含生成器判别器两个部分。生成器主要完成的是生成逼真的样本;判别器区判别生成器生成的样本是真样本还是假样本,二者之间进行相互的博弈,直到达到一个平衡,就是各占50%,生成器生成的样本能够达到以假乱真的地步,这个时候去掉判别器,就可以利用生成器生成想要生成的样本。
  • 1.2 GAN网络的优化目标函数

  • KL散度、JS散度、Wasserstein距离

    • 2.png
  • 1.3 常见的生成式模型

  • 生成模型:给定训练数据,从相同的数据分布中生成新的样本

    • PixelRNN/CNN:逐像素生成/从图像拐角处生成整个图像
    • 自动编码器(AE):编解码重构输入数据
    • 变分自动编码器(VAE):向自编码器加入随机因子获得的一种模型
    • 生成对抗网络(GAN):采用博弈论的方法
  • 1.4 常见的GAN网络:

3.png

  • DCGAN

    • DCGAN的判别器和生成器都使用了卷积神经网络(CNN)来替代GAN中的多层感知器,同时为了使整个网络可微,拿掉了CNN中的池化层,另外将全连接层以全局池化层替代以减轻计算量,加入BN,使用激活函数RELULeakyReLU
    • 4.jpg
  • Pixel2pixel, conditional GAN

    • L1和L2 distance的loss,经常产生blur的模糊的image(损失高频信息)
    • UNet,l1 loss
    • Maekovian Discriminator(PatchGAN)
    • 5.png
  • CycleGAN

    • CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。
    • 两个GAN共享两个生成器,并各自带一个判别器,即共有两个判别器和两个生成器。一个单向GAN两个loss,两个即共四个loss
    • 6.png
  • StyleGAN

    • 移除了传统的输入(remove traditional input)
    • 映射网络(Mapping Network)
    • 样式模块(style modules, AdaIN,自适应实例归一化)
    • 随机变化(Stohastic variation,通过加入噪声为生成器生成随机细节)
    • StyleGAN在面部生成任务中创造了新纪录
    • 7.png
  • BigGAN

    • 加大Batchsize
    • 发现增加网络宽度可以提高IS分数,但加深网络的深度并没有明显的提升网络的效果
    • Truncation trick 截断技巧
    • Orthogonal Regularzation正交正则化
    • 不稳定性的分析
    • 8.png
  • 1.4 GAN的优缺点

  • 优点:

    • GAN是一种生成式模型,相比较其他生成没模型(玻尔兹曼机和GSNs)只用到了反向传播,而不需要复杂的马尔科夫链
    • 相比其他所有模型,GAN可以产生更加清晰真实的样本
    • 无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域
    • GANs是渐进一致的,但是VAE是由偏差的
    • GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难
  • 缺点

    • 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时做不到
    • GAN不适合处理离散形式的数据,比如文本
    • GAN存在训练不稳定、梯度消失、模式崩溃的问题
  • 1.5 如何训练GAN网络?

    • 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(BEGAN除外)
    • 使用wassertein GAN的损失函数
    • 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑
    • 使用mini-batch norm,如果不用batch norm 可以使用instance norm 或者weight norm
    • 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakyrelu激活函数
    • 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率
    • 给D的网络层增加高斯噪声,相当于是一种正则
  • 1.6 GAN网络的重要应用

    • 图像数据生成
    • 超分辨率重构
    • 音乐生成
    • 图像转换/翻译
    • 图像合成
    • 场景合成
    • 人脸合成
    • 文本到图像的合成
    • 分格迁移
    • 图像域的转换
    • 图像修复
    • MaskGAN
    • 去雨/去雾
    • 年龄仿真
    • 9.png

9JQ4ZCQY3M({Q$KEN%9BFQX.png