Generating Diverse High-Fidelity Images with VQ-VAE-2
摘要
本文主要研究VQ-VAE在大尺度图像生成器上的应用,我们改进了自回归的先验来生成比以前更加优秀的图片,本文使用的是简单的编码和解码器,他们的速度比较快,VQ-VAE需要一个在潜在空间自回归的模型,他的速度要快于像素空间回归,
多层次结构的VQ-VAE能够产生强大的先验,这样会使生成图片的质量在多脸图像中要优于其他的,并且不会产生模型塌陷,多样性缺失的问题。
文中使用,有损压缩的方式,将生成模型从非必要的信息中解放出来,首先将图片压缩到一个离散的编码空间中,这样的话使得信息的表示少了30倍,并且能够使得解码器从这个空间中重新构成图片,压缩图片模型可以使用PixelSnail的算法,使用的是带有Attention的pixelCNN实现的。经过采样,图像的重构依然能够保持很好的质量。同时这类模型的训练和采样的速度也是基于像素模型的30倍。本文中的改进能够很好的保留原始VQ-VAE快速简单的特点。
VQ-VAE
- VQ-VAE就是使用encoder将图像编码,然后使用decoder将图像解码,其中encoder和decoder共享一个code book,编码器将图像x编码成E(x),之后这个向量根据它和标准的向量之间的距离进行量化,然后就是讲E(x)转化成距离它最近的标准编码,并且将这种标准编码给decoder
- VQ-VAE接近对齐编码空间与codebook的标准向量还有两个附加步骤
- codebook-loss 应用到标准变量中,选择出和E(x)匹配的标准向量e。
- commitment-loss 之应用到encoder的权重,主要是为了在选择标准向量的时候,避免出现太多的抖动,
其中sg表示终止梯度运算的算子
- 使用平滑指数的方法来代替codebook loss
其中ni 表示E(X) mini_batch中使用ei标准码的数量,gamma是参数在0,1之间,
- 一般来说,PixelCNN是用概率模型来表示。
算法
文中的方法是两级方法,首先训练一个VQ-VAE来编辑头像到一个潜在空间,人后训练一个,然后在根据先验的潜在空间,训练一个PixelCNN
训VQ-VAE编码器解码器
生成图像
从理解上来看,训练分成两步,第一步训练VQ-VAE,第二部训练先验。
训练VQ-VAE包含训练两个编码器,将两个编码器的编码结果共同输入生成器用来生成图像。
具体算法
- 这一部分使用的是分级算法,首先由一个Ebottom获得全局特征的latent map然后又有一个 Etop获取局部特征。其中会有一个残差链接。这样的分层结构能够使编码器提取到更多的图片特征,并且能够减少重构时候的错误。
- 对于256的图片有两层encoder,第一层生成的latent map是64,第二层生成的latent map是32。
根据latent code学习先验
- 为了进一步的压缩图像,并且能够从第一步的训练模型中采样,使用神经网络训练先验分布,本文从latent code中学习一个先验模型,训练先验模型能够显著的提升编码器的表现。
这种方式能够减少边缘部位与先验的差别。从训练好的先验分布中采样,有点类似于解码器在训练中探索一样,能够得出更加好的输出。训练先验的目的就是训练出这个分布。从而实现类似于图片的损失较小的压缩, 真实在的熵与训练熵的差别越小,那么解码器生成的图片就越真实。
在VQ-VAE框架中,先验是由PixelCNN产生的,在训练的第二步中,top latent map的先验代表着图像的整体结构,本文将残差项应用于它,这样的话就能够捕捉到,与整体相互背离的局部特性,但是在bottom latent map中,使用残差项并不能起到很好的作用,但是我们发现使用来自上曾分布的条件栈,会有很好的表现。
在训练的时候,训练top-level的先验,加入了attention机制,但是在训练bottom-level的时候没有用到这个机制。
总体结构
- 第一训练一个编码器,然后让编码器解码器能够和好的复现图像。
- 第二部是推理过程使用自回归的方式到latent map的空间中,然后到空间中随机采样,能够生成图片。