16 视觉词表详解:图像如何被转换成 Visual Token?
在前面介绍 BEiT 时,我们提到了一个非常关键的概念:visual token,视觉 token。
BEiT 的思想很像 BERT。BERT 会遮住文本中的一部分词,然后让模型预测被遮住的词;BEiT 则遮住图像中的一部分 patch,然后让模型预测这些位置对应的 visual token。BEiT 原论文明确指出,一张图像在预训练中有两种视图:一种是输入 Transformer 的 image patches,另一种是作为预测目标的 discrete visual tokens。模型的预训练目标就是根据被破坏的图像 patch 恢复原始 visual tokens。
但是,这里会引出一个关键问题:
文本天然由词组成,所以可以有词表;图像只是连续像素矩阵,它的“词表”从哪里来?
这就是本章要重点解释的问题。
一、先区分几个容易混淆的概念
在 ViT 和自监督预训练中,经常会出现 token、patch token、visual token、tokenizer、codebook 这些词。它们看起来很像,但含义并不一样。
| 概念 | 是否离散 | 来源 | 作用 |
|---|---|---|---|
| patch token | 否 | 图像 patch 经过线性投影得到 | 输入 ViT 的连续向量 |
| visual token | 是 | 图像 tokenizer 输出的离散编号 | BEiT 等方法中的预测目标 |
| visual vocabulary / codebook | 是 | tokenizer 学到的离散编码集合 | 相当于图像领域的“词表” |
| mask token | 否 | 模型中可学习的向量 | 替代被遮挡的输入位置 |
| class token | 否 | 模型中可学习的向量 | 聚合全局图像信息 |
所以要先明确一句话:patch token 是 ViT 输入端的连续表示,visual token 是视觉 tokenizer 输出的离散编号。二者不是同一个东西。这也是很多读者第一次读 BEiT 时最容易混淆的地方。
二、视觉词表到底是什么?
在文本模型中,词表可以理解为一个离散符号集合。例如:dog, cat, tree, road, car。
每个词会被映射成一个 token ID。
而在视觉模型中,词表不是由人工定义的“狗、猫、树、路”这些语义词组成,而通常是模型通过训练自动学出来的一组视觉原型。例如某些 code 可能更偏向边缘、纹理、颜色块、局部结构,也可能在更强的语义 tokenizer 中对应某些局部语义模式。
因此,视觉词表可以简单理解为:
把连续图像压缩成离散编号时所使用的一组可选视觉编码。
一个典型过程如下:
原始图像 ↓ Encoder 提取连续视觉特征 ↓ Quantization / Tokenization ↓ 离散 visual token ID ↓ Decoder 尝试重建图像
如果一张图像被转换成:[102, 351, 88, 765, ...]
那么这些数字就是 visual token ID,而这些 ID 所对应的全集就是 visual vocabulary,也叫 codebook。
第一类:VQ-VAE 视觉词表
最经典的视觉词表来自 VQ-VAE。
VQ-VAE 的全称是 Vector Quantised-Variational AutoEncoder。它的核心思想是:普通 VAE 使用连续潜变量,而 VQ-VAE 使用离散 latent code。也就是说,encoder 不再输出一个连续向量作为最终表示,而是把连续特征映射到一个离散 codebook 中。VQ-VAE 原论文强调,它通过 vector quantization 学习离散表示,并且可以用于图像、视频、语音等生成任务。
VQ-VAE 的生成流程可以理解为:
图像 x
↓
Encoder 得到连续特征 z_e(x)
↓
在 codebook 中寻找最近的 code
↓
得到离散 token ID
↓
Decoder 根据 token ID 重建图像
它的视觉词表是怎么来的?简单来说,就是训练过程中学出来的。模型会维护一个 codebook,例如:
codebook = {e1, e2, e3, ..., eK}
其中每个 ei 是一个可学习的向量。对于 encoder 输出的某个连续特征,模型会在 codebook 中找最近的向量,然后用这个向量的编号作为 visual token ID。
例如:
连续特征 z 最接近 codebook 中的 e351
那么该位置的 visual token ID = 351
| 特点 | 说明 |
|---|---|
| 词表来源 | 通过重建图像训练得到 |
| token 含义 | 多偏向局部视觉模式 |
| 优点 | 能把图像变成离散 token,适合后续 Transformer 建模 |
| 缺点 | token 不一定有强语义,可能更偏纹理和低层结构 |
| 常见用途 | 图像生成、图像压缩、离散视觉表示学习 |
可以这样总结:
VQ-VAE 视觉词表的核心目标是“能重建图像”,因此它学到的 token 首先要保留图像细节,而不一定天然具备高级语义。
第二类:dVAE / DALL-E 视觉词表
BEiT 中使用的 visual tokenizer 与 DALL-E 的 dVAE 思路密切相关。
OpenAI 在 DALL-E 中使用了离散 VAE 将图像转换成离散 token。官方说明中提到,DALL-E 将 256×256 图像压缩成 32×32 的离散 latent code 网格,也就是 1024 个 image tokens,视觉词表大小为 8192。
这个设定很像文本中的词表:
文本:一句话 → 若干 token ID → 文本词表
图像:一张图 → 32×32 token ID → 视觉词表
对于 DALL-E 这类图文生成模型来说,这样做有一个直接好处:文本和图像都可以变成离散 token 序列,后续可以交给 Transformer 统一建模。DALL-E / dVAE 视觉词表的特点是:
| 特点 | 说明 |
|---|---|
| 词表大小 | DALL-E 中图像词表大小为 8192 |
| token 网格 | 256×256 图像可压缩为 32×32 token 网格 |
| 训练目标 | 根据离散 token 重建原图 |
| 优点 | 便于将图像转成类似文本的离散序列 |
| 缺点 | token 仍然可能更偏局部重建,不一定足够语义化 |
| 代表方法 | DALL-E、BEiT 中的 tokenizer 思路 |
BEiT 借鉴这类视觉 tokenizer 的目的不是生成图像,而是构造自监督预训练目标。它输入的是被 mask 的 image patches,预测的是 tokenizer 产生的 visual tokens。
所以 BEiT 的关键不是“把 visual token 输入 ViT”,而是:
输入:masked image patches
目标:原图经过 tokenizer 得到的 visual token ID
任务:根据可见 patch 预测被 mask 位置的 token ID
第三类:VQGAN 视觉词表
VQ-VAE 能产生离散视觉 token,但它的重建结果可能偏模糊。后来 VQGAN 在这个方向上进一步改进。
VQGAN 的代表论文是 Taming Transformers for High-Resolution Image Synthesis。论文提出用 CNN 学习一种 context-rich vocabulary of image constituents,也就是更有上下文信息的图像组成词表,然后再用 Transformer 建模这些 token 的组合关系。
VQGAN 的整体流程仍然是:
图像 ↓ Encoder ↓ Codebook quantization ↓ 离散 token ↓ Decoder 重建图像
但它相比 VQ-VAE 加入了更强的视觉质量约束,例如感知损失和对抗训练。这样得到的 token 更适合高质量图像生成。
VQGAN 视觉词表的特点是:
| 特点 | 说明 |
|---|---|
| 词表来源 | encoder-decoder + codebook + 感知/对抗损失共同训练 |
| token 含义 | 更偏向可感知的局部图像组成单元 |
| 优点 | 重建质量更好,适合高分辨率图像生成 |
| 缺点 | 训练更复杂,可能受到 GAN 训练稳定性的影响 |
| 常见用途 | 图像生成、图像编辑、图像补全、masked generative modeling |
| 代表方法 | VQGAN、MaskGIT 等 |
例如 MaskGIT 就属于基于离散图像 token 的生成模型。它训练时随机 mask 一部分 token,让模型预测被 mask 的图像 token;推理时从全 mask 状态开始并行预测,再逐步迭代细化。
这里可以看出,VQGAN 类视觉词表和 BEiT 类视觉词表的目标不同:
| 方法方向 | visual token 的作用 |
|---|---|
| BEiT | 作为自监督预训练的预测目标 |
| VQGAN / MaskGIT | 作为图像生成模型的建模单位 |
第四类:PeCo 感知视觉词表
前面几类 tokenizer 大多依赖图像重建目标。问题是:重建得好,不代表 token 一定有语义。
例如两个局部 patch 在像素上差异很小,但语义可能不同;或者两个 patch 在颜色纹理上差异较大,但在人类感知上可能属于同一个物体区域。
PeCo 就是针对这个问题提出的。PeCo 的全称是 Perceptual Codebook for BERT Pre-training of Vision Transformers。它认为当前的一些预测目标与人类感知并不完全一致,因此提出学习一个 perceptual prediction target。PeCo 在 dVAE 训练中加入感知相似性约束,并使用自监督 Transformer 提取深层特征来计算感知相似性,从而让 visual tokens 具有更好的语义含义。
PeCo 的词表生成方式可以概括为:
图像
↓
dVAE tokenizer
↓
加入 perceptual similarity 约束
↓
学习更符合感知相似性的 codebook
↓
生成 perceptual visual tokens
PeCo 视觉词表的特点是:
| 特点 | 说明 |
|---|---|
| 词表来源 | dVAE + 感知相似性约束 |
| token 含义 | 比普通 dVAE token 更偏语义和感知一致性 |
| 优点 | 更适合作为 ViT 自监督预训练目标 |
| 缺点 | 训练流程更复杂,需要额外感知特征 |
| 常见用途 | BERT-style ViT 预训练 |
| 代表方法 | PeCo |
第五类:BEiT v2 语义视觉词表
BEiT v2 进一步把视觉词表从低层图像重建推向高层语义表示。
BEiT v2 论文指出,很多 masked image modeling 方法仍然在低层像素上操作,这会限制模型利用高层语义。为此,BEiT v2 使用 semantic-rich visual tokenizer 作为 masked prediction 的重建目标,并通过 vector-quantized knowledge distillation 训练 tokenizer,将连续语义空间离散化为紧凑 code。
BEiT v2 的词表生成方式可以概括为:
图像
↓
强语义 teacher 提取连续语义特征
↓
Vector-quantized knowledge distillation
↓
将连续语义空间离散化
↓
得到 semantic visual tokens
它和普通 dVAE 的区别在于:
| 对比维度 | dVAE / VQ-VAE | BEiT v2 |
|---|---|---|
| 主要目标 | 重建图像像素 | 离散化语义特征 |
| token 偏向 | 低层视觉细节 | 高层语义信息 |
| 训练方式 | reconstruction-based | knowledge distillation + vector quantization |
| 适合任务 | 图像生成、重建 | 表示学习、分类、分割 |
| 代表作用 | 图像离散化 | 语义级 MIM 目标 |
所以 BEiT v2 的核心思想可以概括为:视觉词表不应该只描述图像长什么样,还应该描述图像区域表达了什么语义。这对 ViT 自监督预训练很重要。因为下游分类、检测、分割任务更关心语义,而不是每个像素的精确恢复。
第六类:iBOT 在线视觉词表
前面几种方法通常需要先训练或借用一个 tokenizer,然后再训练 ViT。这样会形成两阶段流程:
第一阶段:训练 visual tokenizer
第二阶段:用 tokenizer 产生目标,训练 ViT
iBOT 试图简化这个过程。
iBOT 的全称是 Image BERT Pre-Training with Online Tokenizer。它使用 teacher network 作为 online tokenizer,通过对 masked patch tokens 做 self-distillation 来学习表示。论文强调,这种 online tokenizer 可以和 MIM 目标联合学习,不需要提前单独预训练 tokenizer。
iBOT 的流程可以理解为:
原图不同增强视图
↓
Teacher network 产生 patch-level 目标分布
↓
Student network 输入 masked image
↓
Student 预测 teacher 给出的 patch-level 目标
↓
Teacher 由 student 的 EMA 更新
这里的“词表”不一定是传统意义上的固定 codebook,而更像是 teacher 网络在线产生的视觉伪标签或原型分布。iBOT 视觉词表的特点是:
| 特点 | 说明 |
|---|---|
| 词表来源 | teacher network 在线产生 |
| 是否需要预训练 tokenizer | 不需要 |
| token 含义 | 来自自蒸馏的 patch-level 语义目标 |
| 优点 | 端到端、语义更强、避免两阶段 tokenizer 训练 |
| 缺点 | 机制更复杂,不如固定 codebook 直观 |
| 代表方法 | iBOT |
可以这样理解:
BEiT 是“先有词表,再训练模型”;iBOT 是“模型训练过程中自己产生词表式目标”。
第七类:FSQ / Lookup-free Quantization 这类简化词表
传统 VQ 方法需要维护一个显式 codebook,也容易出现 codebook collapse,也就是很多 code 长期不用。
FSQ,即 Finite Scalar Quantization,提出用更简单的有限标量量化替代传统向量量化。它将 latent 投影到较低维度,每个维度只允许取有限个固定值,多个维度取值的组合形成一个隐式 codebook。论文强调,FSQ 不需要复杂的 commitment loss、codebook reseeding、code splitting 或 entropy penalty,也不容易出现传统 VQ 中的 codebook collapse 问题。
FSQ 的生成方式可以理解为:
连续 latent feature
↓
投影到少数几个维度
↓
每个维度量化到有限取值
↓
多个维度组合成离散 token
它不是像 VQ-VAE 那样维护:
codebook = {e1, e2, ..., eK}
而是通过多个离散标量组合形成隐式词表:
token = (level_1, level_2, ..., level_d)
FSQ 类视觉词表的特点是:
| 特点 | 说明 |
|---|---|
| 词表形式 | 隐式 codebook |
| 生成方式 | 有限标量组合 |
| 优点 | 简单、稳定、避免部分 code 不使用 |
| 缺点 | 表达能力取决于量化维度和每维取值设计 |
| 常见用途 | 图像生成、masked generation、dense prediction |
| 代表方法 | FSQ |
这类方法说明,视觉词表不一定非要是一个显式学习出来的 codebook,也可以通过结构化量化规则得到。
第八类:MAGVIT-v2 图像/视频统一词表
当视觉词表进入生成模型阶段,一个重要趋势是:不仅要处理图像,还要处理视频。
MAGVIT-v2 论文标题就非常直接:Tokenizer is Key to Visual Generation。它指出,如果希望语言模型式架构有效处理视觉生成任务,一个关键组件就是 visual tokenizer,因为 tokenizer 负责把像素空间输入映射成适合语言模型学习的离散 token。MAGVIT-v2 提出一种视频 tokenizer,可以为图像和视频生成简洁且有表达力的 token,并使用共同的 token vocabulary。
MAGVIT-v2 的词表生成逻辑可以概括为:
图像 / 视频
↓
视觉 tokenizer
↓
空间或时空 latent representation
↓
离散化
↓
统一图像-视频 visual vocabulary
| 特点 | 说明 |
|---|---|
| 词表对象 | 图像和视频 |
| token 结构 | 可包含空间和时间信息 |
| 优点 | 支持图像/视频统一建模 |
| 缺点 | tokenizer 设计难度更高 |
| 常见用途 | 图像生成、视频生成、视觉压缩 |
| 代表方法 | MAGVIT、MAGVIT-v2 |
这类方法说明,视觉词表已经不只是 ViT 自监督预训练中的辅助目标,而是逐渐成为视觉生成模型的基础组件。
第九类:TiTok 这类紧凑视觉词表
传统 VQGAN 或 DALL-E 类 tokenizer 通常把图像压缩成二维 token 网格。例如 256×256 图像可能被压缩成 16×16 或 32×32 个 token。
但图像中存在大量冗余,相邻区域可能非常相似。TiTok 提出一种 1D image tokenizer,希望用更少 token 表示图像。论文指出,TiTok 可以将 256×256×3 图像压缩为仅 32 个离散 token,相比常规 2D tokenization 中的 256 或 1024 个 token 更紧凑。
TiTok 的词表生成逻辑可以理解为:
图像
↓
Transformer-based tokenizer
↓
1D latent sequence
↓
离散 token
↓
用于重建或生成
TiTok 这类方法的核心问题不是“如何构造语义更强的词表”,而是:
能不能用更少的 visual token 表示一张图像?
| 特点 | 说明 |
|---|---|
| token 结构 | 1D token 序列 |
| 主要目标 | 高压缩率、减少生成计算成本 |
| 优点 | token 数量少,生成效率高 |
| 缺点 | 高压缩率下可能损失细节,需要强 tokenizer |
| 常见用途 | 高效图像生成、紧凑图像表示 |
| 代表方法 | TiTok |
这类方法对后续视觉大模型很重要,因为视觉 token 数量直接决定 Transformer 的计算成本。
常用视觉词表方法总表
| 类型 | 代表方法 | 词表怎么生成 | token 更偏向 | 优点 | 局限 |
|---|---|---|---|---|---|
| VQ-VAE 词表 | VQ-VAE | encoder 输出连续特征,再映射到可学习 codebook | 局部结构、低层视觉 | 经典、清晰、易理解 | token 语义可能较弱 |
| dVAE 词表 | DALL-E、BEiT | 离散 VAE 将图像压缩成 token 网格 | 图像局部模式 | 适合 Transformer 建模 | 偏重重建,不一定语义强 |
| VQGAN 词表 | VQGAN、MaskGIT | codebook + 感知损失 + 对抗损失 | 可感知图像组成单元 | 重建质量好,适合生成 | 训练复杂 |
| 感知词表 | PeCo | dVAE 中加入 perceptual similarity | 感知一致的视觉模式 | 比普通 dVAE 更语义化 | 需要额外感知特征 |
| 语义词表 | BEiT v2 | vector-quantized knowledge distillation | 高层语义特征 | 适合表示学习 | 依赖 teacher 质量 |
| 在线词表 | iBOT | teacher network 在线产生 patch-level 目标 | 自蒸馏语义目标 | 不需要单独 tokenizer | 不如固定 codebook 直观 |
| 标量量化词表 | FSQ | 多个有限标量组合成隐式 codebook | 结构化离散表示 | 简单稳定,避免 codebook collapse | 设计依赖量化维度 |
| 图像/视频统一词表 | MAGVIT-v2 | tokenizer 对图像和视频生成统一离散 token | 空间-时间视觉模式 | 支持图像视频统一生成 | 设计难度高 |
| 紧凑词表 | TiTok | 1D tokenizer 生成少量 token | 高压缩视觉表示 | token 少,效率高 | 高压缩可能损失细节 |
结论
这一章最后可以这样总结:
视觉词表的本质,是把连续图像转换成离散 visual token。它让图像可以像文本一样被 Transformer 或语言模型式结构处理。
不同视觉词表的区别,主要体现在三个方面:
第一,词表是怎么生成的。
有些来自 VQ-VAE 或 dVAE 的重建训练,有些来自 VQGAN 的感知/对抗训练,有些来自 BEiT v2 的语义蒸馏,有些来自 iBOT 的在线 teacher 网络。
第二,token 表达什么信息。
有些 token 更偏颜色、纹理、边缘等低层信息;有些 token 更偏人类感知一致性;有些 token 更偏高层语义。
第三,服务什么任务。
图像生成更重视重建质量和压缩率;ViT 自监督预训练更重视语义质量;多模态大模型更重视 token 是否适合统一序列建模。
因此,理解视觉词表时,不能只问:这个 tokenizer 能不能把图像变成 token?
更应该问:它生成的 token 到底代表什么?它更适合重建、生成,还是表示学习?它的词表是低层视觉词表,还是语义视觉词表?
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)