极市导读
本文主要介绍AutoEncoder在图像生成(主要是自回归图像生成)以及多模态大模型中的应用。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
VAE
《Auto-Encoding Variational Bayes》
https://arxiv.org/pdf/1312.6114更多数学推导可以参见博客
-
VAE-1 (https://mbernste.github.io/posts/vae/) -
VAE-2 (https://lilianweng.github.io/posts/2018-08-12-vae/#vae-variational-autoencoder) -
VAE-3 (https://jaan.io/what-is-variational-autoencoder-vae-tutorial/) -
VAE-4 (https://liambai.com/variational-autoencoder/) -
VAE-5 (https://www.jeremyjordan.me/variational-autoencoders/)
VQ-VAE
《Neural Discrete Representation Learning》示NeurIPS 2017的一篇文章。
https://arxiv.org/abs/1711.00937
https://avdnoord.github.io/homepage/vqvae/ 理解VQ-VAE就看下面这张图。
首先是有一个隐特征空间 , 输入 经过一个encoder得到特征编码 , 通过look-up的方式从隐特征空间找对应关系,
而输入 可以用隐特征空间的特征向量来表达,
训练的时候,目标函数为,
目标函数有三个组成部分, 用于训练VQ-VAE的不同部分。第一项是重建损失, 它优化了解码器和编码器。由于从 到 的映射采用直接通过梯度估计, 嵌入向量 不会从重建损失 中接收到梯度。因此, 为了学习嵌入空间, 使用了最简单的字典学习算法之一, 向量量化(VQ)。 目标使用 误差将嵌入向量 向编码器输出 移动, 如Fig 4 的方程的第二项所示。由于这个损失项仅用于更新字典, 也可以选择将字典项作为 的移动平均函数来更新, 即如下图公式所示:
是每一个MiniBatch中被量化到 的样本数量。
VQ-VAE-2
《Generating Diverse High-Fidelity Images with VQ-VAE-2》是Google Deepmind在Neurips 2019发表的一个工作,对VQ-VAE做了改进,比如增加了层次化的向量量化。
https://arxiv.org/abs/1906.00446
模型的结构如图Fig 1所示,
模型的训练如图Fig 2所示,分为两个步骤:第一阶段训练 层次化的VQ-VAE,第二阶段是自回归先验模型PixelCNN的训练。
VQ-GAN
《Taming Transformers for High-Resolution Image Synthesis》是海德堡大学发表在CVPR 2021的一个工作,提出了VQ-VAE的另外一种改进,主要是亮点改进:一是生成图片的时候引入了Transformer以按照自回归的时候生成每一个特征向量的id,这些id可以从codebook里面索引对应的特征向量,然后再经过Decoder得到生成的图片,二是采用了GAN的训练方法和损失,让判别器Discriminater对生成的图片进行Patch级别的判别。
https://arxiv.org/abs/2012.09841
https://compvis.github.io/taming-transformers/
https://github.com/CompVis/taming-transformers
模型的结构如图Fig 1所示。
和VQ-VAE一样,VQ-GAN也会学习一个CNN Encoder 、Codebook 和CNN Decoder 。
输入图片 经过Encoder 之后得到特征 , 经过离散的codebook 的量化之后得到 ,
重建图片为 .
损失函数为
VQ-GAN的改进之一把上述的项 换成了perceptual loss ,同时引入了patch-based的discriminator D,对应的损失项为
最后的优化目标
为了引入Transformer做自回归式建模, 文中将Encoder提取的特征矩阵用量化向量在Codebook 里面的index来 表示, 即 。这些index可以通过 Codebook映射到对应的特征向量 , 进而恢复图片 。
自回归建模为
生成图片的时候Transformer会按照一定大小的窗口计算滑动attention,按照自回归的方式生成下一个patch的code id。
ViT-VQ-GAN
《Vector-Quantized Image Modeling With Improved VQ-GAN》是Google DeepMind在ICLR 2022提出来的一个工作,对VQ-GAN作了进一步的改进,主要包括两个地方,第一个是直接用ViT提取图像特征,第二是为了缓解VQ-VAE训练时的一些codebook里面的code使用率过低导致的学习不充分,在做特征量化的会将特征进行降维,在低维度进行量化。
https://arxiv.org/abs/2110.04627
模型的结构如图Fig 1所示,训练包含两个步骤。
Stage 1: Image Quantization 输入图片分辨率为 , ViT提取特征得到 的特征矩阵,量化的时候会通过线性层进行降维,在低维度量化之后,再用线性层升维,最后作为Decoder的输入生成重建图片。Codebook的大小为8192。
Stage 2: Vector-quantized Image Modeling 用Transformer按照自回归的方式按照rasterized的顺序预测 个image token,在条件图像生成中,会将类别的token添加到image token序列的前面。
DALL-E
《Zero-Shot Text-to-Image Generation》是OpenAI发表在ICLM 2021的一个工作。
https://arxiv.org/abs/2102.12092
https://github.com/openai/DALL-E
https://github.com/lucidrains/DALLE-pytorch/tree/main
和VQ-GAN和ViT-VQ-GAN一样,DALL-E也是自回归生成图片的一种结构 。
第一阶段训练d-VAE对图片特征进行tokenization, 输入的图片分辨率为 , 得到的token数为 , 每一个token可能取值为 8192 。
第二个阶段则是基于Transformer按照自回归的方式对图片的token进行预测, 同时用d-VAE的 Decoder生成图片, 其中对文本用BPE进行tokenization得到256个token, 和 个图像 token连接在一起, 通过Transformer按照自回归方式进行概率建模。
文中提到了对图像 、文本caption 和图片对应的token 的联合分布概率进行建模
模型训练的目标为为最大化该分布的置信下界 ,即
其中 和 分别对应的 VQ-VAE的Encoder和Decoder, 为自回归的Transformer。
生成的图片和文本都会通过训练好的CLIP,计算两者的匹配得分,以选择最合适生成图片。
SPAE
《SPAE: Semantic Pyramid AutoEncoder for Multimodal Generation with Frozen LLMs》是CMU和Google发表在NeurIPS 2023的一个工作,也是对VQ-GAN的一个扩展,不过和VQ-GAN不一样的是,SPAE的codebook用的是预训练的LLM的codebook,这样图像特征量化之后的每一个token都对应一个word,存在一定的解释性,而且按照FPN的思想对图像特征进行多尺度的量化,如图Fig 1所示。
https://arxiv.org/abs/2306.17842
HQ-VAE
《Locally Hierarchical Auto-Regressive Modeling for Image Generation》是Korea 首尔国立大学发表在NeurIPS 2022的一个工作,也是对图片进行层次化的量化,top层的code捕捉高层级的结构化信息,bottom层code捕捉low-level的细节,同时通过层次化量化的Transformer对图片通过自回归的方式进行建模,如图Fig 1所示。
https://openreview.net/pdf?id=NYF6jNTAui
https://github.com/kakaobrain/hqtransformer?tab=readme-ov-file
UniCode
《UniCode : Learning a Unified Codebook for Multimodal Large Language Models》是智源和北大挂在 Arxiv 的一个工作,针对于多模态大语言模型学习了一个文本-图像统一的Codebook,已对图像和文本进行编码量化。
https://arxiv.org/pdf/2403.09072.pdf
在多模态大模型里面,对图像和文本的编码一般有两种方式,如图Fig 1所示。第一种是文本用text tokenizer进行token化,同时通过text codebook得到对应的文本embedding,而图像则是直接用Visual Encoder提取特征并通过align layer(Q-Former或者MLP)和文本embedding对齐特征维度,然后文本和图像embedding连接起来作为LLM的输入。第二种是文本和图像各有自己的codebook,其中图像的codebook的一般为VQ-VAE。文本则是提出了一种可以对文本和图像进行tokenization的统一的codebook。
对图像进行tokenization一般用VQ-VAE, VQ-VAE包含一个视觉Encoder E、decoder D和codebook 和 是code和code对应的embedding。输入图片 通过Encoder 之后得到特征图 , 量化之后得到code map 和量化后的特征向量 。
文中用到了层次化的量化方式,即通过 层的codebook对图像特征进行量化 , 最后图像量化之后的特征是各层级量化结果的融合 是融合函数, 比如连接或者累积和。
在对unified codebook进行学习的时候,文中考虑了三种方式:Frozen LLM Codebook、Dual Alternative Training和Language-driven Iterative Training,如图Fig 2所示。
在第一种方式中,visual tokenizer的codebook用LLM的codebook进行初始化;在第二种方式中对visual tokenizer和text tokenizer进行交替训练,不过codebook都是用的同一个;在第三种方式中,用到了语言驱动的迭代式训练方法,具体来说就是用到了指数移动平均的方法更新visual codebook,
其中 是输入图片的特征, 表示 对 的code的使用, 且每隔一定的间隙便用text codebook更新image codebook
文中还用到了In-Context Image Decompression以缓解使用LLM时和word embedding的对齐问题。具体来说就是基于融合之后的图像量化特征 , 通过自回归的方式预测每一层的code map , 如图Fig 所示。
基于unified codebook的多模态大模型的训练包含两个步骤,第一个步骤通过图像重建任务对visual tokenizer进行训练,第二个步骤则是多模态指令微调。
Language-Quantized AutoEncoder LQAE
《Language Quantized AutoEncoders: Towards Unsupervised Text-Image Alignment》是伯克利发表在NeurIPS 2023的一个工作,也是对VQ-VAE的一个改进,类似于SPAE,LQAE也是将VQ-VAE里面的Codebook换成了预训练的LLM(RoBERTa)的codebook,而且预训练任务换成了masked image modeling的方式,而不再是自回归的方式,如图Fig 1所示。
https://arxiv.org/pdf/2302.00902.pdf
https://github.com/lhao499/language-quantized-autoencoders
训练VQ-VAE的目标函数为:
由于Codebook换成了预训练的LLM的codebook,而且权重固定,损失函数变成下面的格式:
RQ-VAE
《Autoregressive Image Generation using Residual Quantization》是韩国Kakao发表在CVPR 2022的一个工作,和HQ-VAE是比较类似的工作,不过RQ-VAE提出的日期更早。RQ-VAE也是用残差量化的方式只用一个codebook对图片特征进行多尺度量化,同时也通过Transformer以自回归的方式对图片量化的code进行建模,如图Fig 1所示。
https://arxiv.org/abs/2203.01941
https://github.com/kakaobrain/rq-vae-transformer
Make-A-Scene
《Make-A-Scene- Scene-Based Text-to-ImageGeneration with Human Priors》是Meta发表在ECCV 2022的一个工作,也是对图片进行离散量化,通过自回归Transformer进行图像生成,也把各种条件进行编码作为自回归Transformer的输入,以控制图像的生成,如图Fig 1所示。
https://arxiv.org/abs/2203.13131
https://github.com/CasualGANPapers/Make-A-Scene
MaskGIT
《MaskGIT- Masked Generative Image Transformer》是Google发表在CVPR 2022的一个工作,和VQ-GAN一样也会对图片按照codebook进行离散量化,即Tokenization,不同的是在生成图片的时候,图片的每一个token不再是按照自回归的方式生成,而是以一种迭代的方式、masked modeling的方式来生成,图片生成的速度相比于自回归来说也会更快,如图Fig 1所示。
https://github.com/google-research/maskgit
https://github.com/valeoai/MaskGIT-pytorch/
模型的结构如图Fig 1所示。
输入图片经过VQ-VAE的Encoder得到离散的tokens , 二值的mask为 , 在训练的时候如果 , 则将对应位置的token用特殊的token [MASK]来替换, 如果 则对应的 token保持不变, mask之后的token序列记为 , 损失函数为:
其中概率 用类似于BERT的双向Transformer来进行建模。
Muse
《Muse- Text-To-Image Generation via Masked Generative Transformers》是Google 2023提出来的一个工作,也是和MaskGIT一样,采用Masked Modeling的方式预测token,再采用Decoder生成图片。
https://arxiv.org/abs/2301.00704
https://github.com/lucidrains/muse-maskgit-pytorch
https://muse-model.github.io/
Muse训练了VQ-GAN, 一个用于生成低分辨率的token , 对应于分辨率为 图片,一个则是用于生成高分辨率的token , 对应于分辨率为 的图片,如图Fig 1所示。
先训练低分辨率的VQ Tokenizer以及对应的BaseTransformer,之后再训练高分辨率的VQ Tokenizer和SuperRes Transformer,如图Fig 2所示。
最后也会对VQ-GAN的Decoder进行微调,这个时候会固定住VQ-GAN Encoder、Codebook和Transformer的权重,只优化Decoder的参数。
Parti
《Parti-Scaling Autoregressive Models for Content-Rich Text-to-Image Generation》是Google Research 2022年提出来的一个工作,和我Make-A-Scene一样,也是对图片进行离散的Tokenization,再基于Transformer通过自回归的方式得到生成图片的token,然后通过Codebook得到生成图片的特征,再通过VQ-GAN的Decoder得到生成图片。
https://arxiv.org/abs/2206.10789
https://github.com/google-research/parti
模型结构如图Fig 1所示。
VAR
《Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction》是北大和字节在2024年提出来的一个工作,也是通过自回归的方式生成图片,不过预测的目标不是下一个token,而是下一个更高分辨率的图片对应的token。如图Fig 1所示。
https://arxiv.org/abs/2404.02905
https://github.com/FoundationVision/VAR
模型的训练也包括两个步骤,第一个步骤示多尺度VQ-VAE的训练,对图片特征进行多尺度的离散量化如图Fig 3所示,第二个步骤则是对自回归Transformer(Decoder-Only Transformer)的训练。整个流程如图Fig 2所示。

公众号后台回复“数据集”获取100+深度学习各方向资源整理
极市干货

点击阅读原文进入CV社区
收获更多技术干货

