VQGAN

(图 A->z)->z’ (离散化)-> 图 A’,随机图片

什么是 VQGAN ?

  • GAN 一般来说是从特定分布中采样随机数,然后生成样本,利用生成器 - 判别器的博弈训练模型,VQGAN 的 GAN 却借鉴 VAE 的过程,将生成器分为 Encoder-Decoder 两个阶段,并利用 codebook 机制学习离散的中间隐变量。模型训练好后,利用离散的中间隐变量 + 自回归的 transformer 预测高质量的图片
  • VQGAN 可以用于图片转换,包括超高像素风景图片、图像补全、深度图引导、语义引导、人体姿态引导和类别引导生成

VQGAN 的训练过程?

  • 训练生成器、判别器:通过自监督学习训练 CNN Encoder,CNN Decoder,和 Codebook,输入图片 H×W×3H\times W\times 3 ,CNN Encoder 输出 z^=h×w×nz\hat z=h\times w\times n_z,如果是普通的 AutoEncoder,则会将 z^\hat z 直接送入解码器中进行图像重建。而在 VQVAE/VQGAN 中,会将 z^\hat z 进一步离散化编码成 z^q=h×w×nz\hat z_q=h\times w\times n_z。这一步是自监督过程,损失包括生成器损失和判别器损

LVQ(E,G,Z)=xx^2+sg[E(x)]zq2+sg(zq)E(x)2LGAN({E,G,Z},D)=logD(x)+log(1D(x^))\begin{array}{ll} \mathcal{L}_{VQ}(E,G,Z)=||x-\hat{x}||^2+||sg[E(x)]-z_q||^2+||sg(z_q)-E(x)||^2 \\ \mathcal{L}_{GAN}(\{E,G,\mathcal{Z}\},D)=logD(x)+log(1-D(\hat{x})) \end{array}

  • 训练 Transformer:使用了自回归生成模型生成图像,图片 H×W×3H\times W\times 3 ->CNN Encoder z^=h×w×nz\hat z=h\times w\times n_z ->codebook z^q=h×w×nz\hat z_q=h\times w\times n_z ->Transformers (hw×z2hw\times z_2 -> hw×z2hw\times z_2),其中 transformer 之前的模块已经训练好,训练 Transformers 时,通过随机加入特征,驱动模型训练,也即是利用已知区域预测遮住的区域,其损失是交叉

Ltransformer=Exp(x)[logp(s)]\mathcal{L}_{transformer}=\mathbb{E}_{x\sim p(x)}[-logp(s)]

VQGAN 的生成过程?

  • 在 VQGAN 无条件生成图片的过程中,没有任何先验条件,CNN Encoder 直接被弃用。我们需要得到一组排列好的 code,送进 CNN Decoder 中来实现图像生成
  • 那么这组 code 怎么来的?这就是 Transformer 发挥作用的地方了,这里使用了 GPT-2。其原本是被用来做自然语言处理的,可以理解为语言生成模型中,由前文推测出下一次词,再一步步推测后面的词或句子。那么迁移到 VQGAN 中,即可理解为先预测一个 code,再一步步地通过已经预测好的 code 去推断下一个 code。(这里地 code 都是从训练好的 codebook 中寻找)

GAN、VQVAE、VQGAN 的区别?

  • GAN 一般来说是从特定分布中采样随机数,然后生成样本,利用生成器 - 判别器的博弈训练模型
  • VQGAN 和 VQ-VAE 的流程完全一致 —— 先学习 codebook、再学习 prior. 学习 codebook 的部分与 VQ-VAE 大同小异,不同之处在于:加了一个 Patch Discriminator 做对抗训练,以及把重构损失的 L2 loss 换成了 perceptual loss
  • VQ-VAE 使用 PixelCNN 学习 latent prior,能力比较弱,而 VQGAN 采用了 Transformer (GPT-2 架构),依旧用自回归的方式训练和推断

参考:

  1. VQGAN 理论加代码一对一详解,小白向解析 - CSDN 博客
  2. VQGAN(Vector Quantized Generative Adversarial Network)模型简介_才能我浪费的博客 - CSDN 博客
  3. 详解 VQGAN(一)| 结合离散化编码与 Transformer 的百万像素图像生成 - 知乎
  4. Vector-Quantized VAE / GAN / Diffusion - 知乎