VQ-VAE-2

原文链接:Generating Diverse High-Fidelity Images with VQ-VAE-2
加载速度慢点这里:中科院镜像

由于科研需要,最近在学习图像生成相关的文献知识,VQ-VAE-2是我目前了解到的比较新的生成模型,一开始搜索到的其实是PixelCNN,然后发现它是16年的工作,然后继续搜索相关工作,在Google DeepMind找到了VQ-VAE-2,由此发现了一系列相关工作。这里就从VQ-VAE-2开始,毕竟是目前性能相对好的模型,先尽快学习看看能不能用上。(VQ-VAE-2的发展过程可以参考这里:From Autoencoder to Beta-VAE

代表样例

在这里插入图片描述
在这里插入图片描述作者在论文中表示,VQ-VAE 生成了可以媲美当前最佳 GAN 模型(BigGAN-deep)的图像,且避免了GAN的缺点,如缺乏多样性和ModeCollapse。

生成模型综述

作者将目前的生成模型分为两种类别:

  1. Likelihood based models:VAEs、基于flow的模型和自回归(autoregressive)模型;
  2. Implicit generative models:GANs

这些模型都会存在某些方面的缺陷,如样本质量、多样性、生成速度等,接下来稍做分析:

  • GAN生成的样本并不能完全捕捉真实分布中的多样性。另一方面,针对生成对抗网络的评价非常困难,目前依然缺少一个较通用的度量标准,用于在测试集中判断模型是否过拟合。

  • 基于似然的模型不存在像GAN一样的问题但是直接在像素空间最大化likelihood存在困难,首先在像素空间上NLL(negative log-likelihood,这个概念目前还不是很清楚,大概就是用来衡量样本质量,基于似然的模型的主要任务就是优化此项) 不能很好的度量样本质量,其次这些模型缺少对于全局结构的关注。目前,也存在着一些针对这些问题的优化方法,这里不做讨论。

  • 既然存在这些问题,所以 “In this paper”,作者利用了有损压缩(lossy compression)的思想。JPEG图像压缩技术已经可以做到去除80%的数据量,而对图像不造成显著影响。在VQ-VAE(一代)中,就已经提出,通过自编码器的vetor-quantizing intermediate representations(量化的向量中间百表征,这里还不清楚具体是什么,VQ就是指这个啦)将图像压缩到discreate latent space。这样产生的表征比原图小30多倍,但仍然可以使解码器重建图像,几乎无损。接下来采用PixelSnail(一种基于self-attention的SOTA的PixelCNN)对这些离散表征的先验知识建模,从这些先验知识采样最终decoder得到的图像同样高质量,而且速度也是30多倍的快,这样就可以训练高分辨率图像。这里用的编码解码器结构和VQ-VAE一样(区别就是提出了一个分层结构)

背景知识

  1. VQ-VAE

    关于VQ-VAE的详细解析以后再写,这里为了理解VQ-VAE2先介绍
    简单来说,还是一个Encoder-Coder结构。Encoder用来把图像转换为离散隐性空间的序列,Decoder从这些离散变量中重建图像。
    具体一点,输入图像 x x x,通过编码器(此时编码器作为一个非线性的mapping)生成向量 E ( x ) E(x) E(x),然后采用最近邻重构,将 E ( x ) E(x) E(x)替换为codebook的中的一个nearest prototype vector,解释一下codebook,可以理解为一个离散的编码表,举一张人脸图像为例,codebook就包括头发颜色,脸型,表情和肤色等等。因此,量化就是通过编码表,把自编码器生成的向量 E ( x ) E(x) E(x)离散化。在这里插入图片描述
    解释一下codebook,可以理解为一个离散的编码表,举一张人脸图像为例,codebook就包括头发颜色,脸型,表情和肤色等等。因此,量化就是通过编码表,把自编码器生成的向量 E ( x ) E(x) E(x)离散化。
    解码器通过另一个非线性函数重建数据,重建错误的梯度从解码器反向传播到编码器,采用straight-through gradient estimator(这里先不展开,就当这是一种方法)
    VQ-VAE还引入了codebook loss和commitment loss来align编码表codebook的向量空间和encode的输出。这里也不展开说,以后读VQ-VAE的时候再详细分析。这里先贴出公式, s g sg sg是停止梯度操作:
    在这里插入图片描述
    文中给出了VQ-VAE的implementation:
  1. PixelCNN

    先贴一段原文,下次再补充在这里插入图片描述
    具体的这篇博客讲的很详细:图片生成模型——gated pixelCNN

VQ-VAE-2框架

分为两阶段:

  1. 训练一个分层的VQ-VAE用于图像编码到前面提到的离散隐空间
    Stage1算法框图
    Stage1 流程图
    和VQ-VAE不同之处在于,这里使用了分层的VQ,作者提到其动机是把全局信息(如shape和geometry)和局部信息(如纹理)分开建模。如图所示,top level用于model全局信息,bottom level用于model局部细节(原文中还有再加middle level,实验结果表明加了middle level之后,生成的图像清晰度更高)。框图中,原图为256 * 256,通过下采样得到 64 * 64的表征,然后再量化为bottom level的latent map;另一方面,64 * 64再降为32 * 32,量化得到top level的latent map。解码器分别从两个隐层中重建图像,重建的loss即上面的公式2。

  2. 在用所有的图像数据构建的离散隐空间拟合一个PixelCNN先验
    在这里插入图片描述
    在这里插入图片描述
    经过Stage1,将图片编码为了整数矩阵,所以在Stage2用自回归模型PixelCNN,来对编码矩阵进行拟合(即建模先验分布)。通过PixelCNN得到编码分布后,就可以随机生成一个新的编码矩阵,然后通过编码表 E E E映射为浮点数矩阵,最后经过 d e o c d e r deocder deocder得到一张图片。

总结

总体来说VQ-VAE-2实现图像生成分两步走:

  1. 训练编解码器,使其能够很好的复现图像
  2. 训练PixelCNN自回归模型,使其能够拟合编码表分布,从而通过随机采样,生成图片

对于VQ-VAE-2的简单理解先到这里,后续再对PixelCNN等自回归模型进行分析。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分层VQ-VAE(Variational Autoencoder)是一种基变分自编码器的生成模型用于学习数据的潜在表示和多样化的结构。其原理下: 1. 编码器(Encoder)分层VQ-VAE包含多编码器,每个编码器将数据映射到潜在表示空间。个编码器可以看作是一个逐编码的过程,其中较低层编码器学习表示的全局特征较高层的编码则学习表示数据的部特征。 2 潜在表示空间(Latent):潜在表示空间是编码生成的数据的低维表示。通过将输入数据映射到潜在表示空,模型可以捕捉数据中的关键特征,并实现对新样本的生成。 3. 化器(Vector Quantizer):分层VQ-VAE使用量化器将连的潜在表示离散化为离散的代码本。这样做的好处是可以限制潜在表示的维度,并增加模型的稳定性。量化器将潜在表示映射到最接近的离散代码本中的向量。 4. 解码器(Decoder):解码器将离散的代码本向量映射回原始数据空间,从而实现对新样本的生成。解码器的目标是最大程度地重构输入数据,使得生成的样本与真实数据尽可能接近。 5. 损失函数(Loss Function):分层VQ-VAE使用重构损失和潜在表示损失作为训练过程中的目标函数。重构损失衡量了生成样本与真实数据之间的差异,潜在表示损失则衡量了离散代码本向量与潜在表示之间的差异。 通过编码器、量化器和解码器的组合,分层VQ-VAE可以学习数据的潜在表示并生成多样化的结构。该模型可以应用于多个领域,如图像生成、音频合成和异常检测等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值