ESC
输入关键词搜索文章
目录

TokenFlow

CVPR 2025 · ByteDance
双码本共享映射——首次让离散视觉 token 超越 LLaVA-1.5 13B
rFID0.63 @ 384
GenEval0.55 @ 25步
+7.2%超 LLaVA-1.5
95%+码本利用率
Part 1
为什么统一 Tokenizer 这么难?

自 GPT-4o 以来,多模态统一成了一个共识性的方向:能不能用一个模型、一套 token,同时做到"看懂图像"和"生成图像"?

这个愿景的底层依赖是一个好的 视觉 tokenizer——它需要把连续的图像像素压缩成离散 token,让 Transformer 可以像处理文本一样处理图像。但这里有一个根本性的矛盾:

核心矛盾:多模态理解需要的是高层语义信息,而图像生成需要的是底层像素细节。一个 tokenizer 很难同时服务好两个"粒度"截然不同的任务。

具体来说,理解任务(如视觉问答、场景推理)需要 tokenizer 捕捉的是"这张图里有猫、有沙发、猫在沙发上面"这种语义级的信息——颜色、纹理这些细节反而是噪声。而生成任务需要的是"猫的毛发纹理、沙发的皮革质感、光影的渐变过渡"这种像素级的精细编码。一个以重建为优化目标的 VQ tokenizer 天然偏向后者,结果是生成还可以,但用于理解时性能大幅下降。

这篇论文来自 ByteDance,发表在 CVPR 2025。它的核心贡献是提出了 TokenFlow——一个通过双码本共享映射来统一多模态理解和图像生成的新架构。它达成了几个里程碑:

  • 首次让离散视觉输入在理解 benchmark 上超越 LLaVA-1.5 13B(提升 7.2%)
  • 自回归图像生成 SOTA:GenEval 0.55,仅需 25 步采样
  • 384×384 分辨率下 rFID 0.63 的强重建质量

论文链接:TokenFlow  |  代码:GitHub

Part 2
粒度矛盾:一个实验看清问题

在提出解法之前,论文先用一组 Motivation 实验精准地定义了问题。他们在 LLaVA-1.5 框架下,对比了不同类型的视觉编码器在多模态理解任务上的表现:

类型视觉编码器MME-P↑SEEDB↑TQA↑
连续(语义)CLIP ViT-B/141460.964.153.4
离散(像素)VQGAN756.138.246.8
离散(像素)LFQ889.541.146.4
离散(语义)VQKD (CLIP蒸馏)1252.457.848.2

这张表的信息量很大。我们逐行看:

CLIP 是连续语义表征的"天花板"——MME-P 1460.9,这是理解任务的参考基准。VQGAN 是以重建为目标的像素级 tokenizer,它的 MME-P 只有 756.1,直接腰斩。这说明:一个"会画"的 tokenizer,在理解任务上几乎不可用。
关键发现:VQKD(从 CLIP 蒸馏的语义 VQ tokenizer)把理解性能从 756 提升到了 1252,但代价是重建图像时高频细节严重丢失——语义相似但像素不同的 patch 被量化到了同一个索引。

论文进一步做了一个聚类可视化实验,直观地揭示了问题的本质:

VQKD vs VQGAN vs TokenFlow 聚类可视化
图 1:不同 tokenizer 的聚类模式对比(来源:TokenFlow, Fig.4)。VQGAN 按颜色/纹理聚类(蓝色天空和蓝色布料分在一起),VQKD 有一定语义性但混杂,TokenFlow 展现出最强的语义一致性(同类物体被聚到一起)。

VQGAN 按颜色和纹理聚类——蓝色天空和蓝色布料被分到一起,完全忽略语义。VQKD 有一定的语义倾向,但聚类仍然混杂。这两种"相似性"是本质不同的,一个偏向"是什么",一个偏向"长什么样"。如果只用一个码本,就必须在两者之间做 trade-off——而这正是现有统一方法表现不佳的根本原因。

Part 3
模型结构与创新:双码本共享映射

TokenFlow 的核心 Insight 可以用一句话概括:

核心思想:不为每个任务设计一套 tokenizer,而是让两套码本共享同一个索引映射——通过"加权距离投票",让语义和像素共同决定一个 patch 的离散身份。

打个比方:想象一栋大楼,每个房间有一个门牌号。TokenFlow 不是给"语义层"和"像素层"各建一栋楼,而是在同一栋楼里,让每个门牌号同时挂两套坐标系——一套描述语义位置,一套描述像素位置。当你查一个门牌号时,可以同时获取两种信息。

或者用信号处理的视角:这很像视频编码中的分层编码(scalable coding)——base layer 编语义(低频、低分辨率),enhancement layer 编细节(高频、高分辨率)。但 TokenFlow 的做法比传统的分层编码更精妙:不是串行叠加,而是并行投票

具体来说,对于一张输入图像的每个 patch:

  1. 语义编码器提取语义特征,计算到语义码本中每个条目的距离
  2. 像素编码器提取像素特征,计算到像素码本中每个条目的距离
  3. 将两种距离加权求和,选择距离最小的索引作为这个 patch 的"共同身份"

这个设计的精妙之处在于:统一的是索引,而不是特征。语义特征和像素特征可以各自保持自己的表征空间,它们不需要被强行压缩到同一个向量里。但通过共享索引,下游任务只需要处理一种 token——查语义码本得到语义嵌入,查像素码本得到像素嵌入。

设计哲学

已有方法在"单流统一"与"双系统并联"之间摇摆。TokenFlow 提出了第三条路:多流提特征,单索引做统一。统一的对象不是连续特征流,而是离散索引语义。

架构详解

TokenFlow 的整体架构可以用五层来概括:双编码器 → 双码本共享映射 → 多尺度 VQ → 双解码器 → 统一 token 输出

TokenFlow 整体架构图
图 2:TokenFlow 整体架构(来源:TokenFlow, Fig.3)。双编码器分别提取语义和像素特征,通过共享映射机制联合量化为统一索引,双解码器分别负责语义重建和像素重建。同一组离散 token 可直接用于多模态理解与自回归生成。

双编码器

输入图像 $x$ 同时进入两个编码器:

  • Semantic Encoder $E_{\text{sem}}$:从 CLIP / SigLIP 等预训练文本对齐视觉编码器初始化。论文发现 保持 unfrozen 很关键——冻结会限制语义码本获取足够强的语义先验。
  • Pixel Encoder $E_{\text{pix}}$:标准的卷积/注意力编码器,专注于提取颜色、纹理、局部结构等低层视觉特征。

得到两组连续表示:$\hat{z}_{\text{sem}} = E_{\text{sem}}(x)$$\hat{z}_{\text{pix}} = E_{\text{pix}}(x)$

双码本 + 共享映射

这是 TokenFlow 最核心的创新。论文配置了两个码本:

码本配置

  • Semantic Codebook $Z_{\text{sem}} \in \mathbb{R}^{K \times d_{\text{sem}}}$,其中 $K = 32768$$d_{\text{sem}} = 32$
  • Pixel Codebook $Z_{\text{pix}} \in \mathbb{R}^{K \times d_{\text{pix}}}$,其中 $K = 32768$$d_{\text{pix}} = 8$

两个码本的索引集合大小相同(都是 $K$ 个 entries),但嵌入维度不同——语义需要更高维的表征空间,像素在共享索引前提下用更低维即可承载。

量化过程的核心公式:

$$i^* = \arg\min_{i} \left( d_{\text{sem},i} + w_{\text{dis}} \cdot d_{\text{pix},i} \right)$$

其中 $d_{\text{sem},i} = \|\hat{z}_{\text{sem}} - z_{\text{sem},i}\|_2^2$$d_{\text{pix},i} = \|\hat{z}_{\text{pix}} - z_{\text{pix},i}\|_2^2$,距离在计算前经过 $l_2$ 归一化。权重 $w_{\text{dis}} = 1.0$(论文附录 B.2 提到有自动平衡机制)。

直觉:每个 patch 的离散索引不是由单一标准决定的,而是语义和像素两种相似性"投票"选出的。如果两种相似性指向同一个码本条目,那这个索引自然就是最好的"共同代表"。

多尺度向量量化(MSVQ)

在单尺度量化之上,TokenFlow 引入了多尺度结构(类似 VAR 的 residual levels),将图像表示为多个尺度上的离散结构。不同模型的尺度设置:

模型输入分辨率尺度设置
TokenFlow-B224[1, 2, 4, 6, 8, 10, 12, 14]
TokenFlow-L256[1, 2, 3, 4, 6, 8, 10, 12, 14, 16]
TokenFlow-XL384[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 17, 22, 27]

MSVQ 的作用有两层:一是增强码本的表征能力(多尺度残差),二是天然适配下游的 next-scale prediction 生成范式——从最粗的 1×1 token 开始,逐尺度生成越来越精细的图像结构。

双解码器

  • Semantic Decoder $D_{\text{sem}}$:重建教师模型的语义特征,与 teacher 提取的目标特征计算 $l_2$ 距离作为语义损失 $L_{\text{sem}}$
  • Pixel Decoder $D_{\text{pix}}$:重建原始图像,损失函数为:
$$L_{\text{pix}} = \ell_2(x, \hat{x}) + L_P(x, \hat{x}) + \lambda_G \cdot L_G(\hat{x})$$

其中 $L_P$ 是 LPIPS 感知损失,$L_G$ 是对抗损失,$\lambda_G = 0.5$

训练目标

三项损失分别约束语义对齐、码本学习和像素重建,各司其职又通过共享索引耦合在一起(训练细节见下一 Part):

$$L_{\text{total}} = L_{\text{sem}} + L_{\text{VQ}} + L_{\text{pix}}$$
Part 4
训练方法

了解了模型架构,接下来看 TokenFlow 是如何训练的。训练分为三个阶段:Tokenizer 训练、视觉生成训练、多模态理解训练。每个阶段的训练目标、数据和策略都不同。

Tokenizer 训练

配置TokenFlow-BTokenFlow-LTokenFlow-XL
输入分辨率224256384
码本大小32,76832,76832,768
Semantic teacherCLIP ViT-B/14-224ViTamin-XL-256SigLIP-SO400M-patch14-384
语义码本维度323232
像素码本维度888
训练步数1,000,000500,000500,000
训练数据:LAION + COYO-700M。为增强人脸生成质量,含人脸图像采样比例提升 2 倍。 优化器:学习率 1e-4,batch size 256,max gradient norm 1.0。 损失函数:使用 straight-through gradient estimator 传递梯度通过量化操作:
$$z = \text{sg}[z - \hat{z}] + \hat{z}$$

VQ 码本学习损失(含 commitment loss,$\beta = 0.25$):

$$L_{\text{VQ}} = \|\text{sg}[\hat{z}] - z\|_2^2 + \beta \|\hat{z} - \text{sg}[z]\|_2^2$$

损失权重:$w_{\text{dis}} = 1.0$(距离平衡),$\beta = 0.25$(commitment),$\lambda_G = 0.5$(对抗损失)。

CLIP 初始化的关键

Semantic Encoder 从 CLIP/SigLIP 预训练权重初始化,且训练期间保持 unfrozen。消融实验表明这一设计对理解性能至关重要:加入 CLIP 初始化后 MME-P 从 1210 飙升到 1312(+102 分)。冻结语义编码器会严重限制码本获取足够的语义先验。

视觉生成训练

模型:基于预训练 LLM(Llama-2-7b),扩展词表加入视觉 token。图像 token 经 MLP 投影后与文本 token 拼接,交叉熵损失仅计算图像 token 部分。 训练数据:6000 万张高质量图像,caption 由 Qwen-VL 生成。训练 2 epochs,以 0.2 概率随机截断 caption 到第一句,增强短提示生成能力。 推理:classifier-free guidance scale = 7.5(训练时以 $p_{\text{drop}} = 0.1$ 概率将条件文本替换为空串)。单张 A100 生成一张 256×256 图像仅需 2.7 秒

多模态理解训练

训练流程:TokenFlow-B/L 使用 LLaVA-Pretrain558K 进行 adapter 预训练,再使用 LLaVA-v1.5-mix-665K 进行指令微调。TokenFlow-XL 使用 Cambrian-Alignment 预训练和 Cambrian-10M 指令微调(因 SigLIP-SO400M 在大数据上收益显著)。 语言 backbone:Vicuna-v1.5-13B 或 Qwen-2.5-14B。
训练效率:使用 LLaVA 1.5 数据,在 8×A100 上训练 不到 24 小时 即可达到 SOTA。这说明 tokenizer 设计得当可以大幅降低下游多模态训练的门槛。

增强解码器微调

为进一步提升细粒度生成能力,论文将 Pixel Decoder 的残差层数和通道维度均翻倍,仅微调增强后的 decoder 层(冻结其他组件),在保持感知能力的同时提升重建保真度。

Part 5
实验验证:三个维度全面开花

图像重建

模型分辨率压缩比残差层数rFID↓PSNR↑SSIM↑
VQ-GAN2561614.9820.000.629
LlamaGen2561612.1920.790.675
VAR25616101.0022.630.755
TokenFlow2561691.3721.410.687
VAR38416132.0922.730.774
TokenFlow38414.2150.6322.770.731

在 384×384 分辨率下,TokenFlow 取得了 rFID 0.63 的强性能。256 分辨率下 rFID 1.37,虽然低于 VAR 的 1.00,但需要记住的是 TokenFlow 的首要目标不是纯重建——它同时要服务理解任务,这是 VAR 不需要承担的约束。

多模态理解(里程碑性结果)

方法参数分辨率平均分
LLaVA-1.5(连续)Vicuna-13B33662.9
EMU3(离散)8B51260.9
TokenFlow-XL(离散)Vicuna-13B38464.0
TokenFlow-XL(离散)Qwen-2.5-14B38467.4

这是本文最引人注目的结果:首次证明了离散视觉输入可以超越连续输入(LLaVA-1.5 + CLIP)。在相同语言 backbone(Vicuna-13B)下,TokenFlow-XL 超过 LLaVA-1.5 达 1.7%;换用 Qwen-2.5-14B 后提升到 7.2%

一个细节:TokenFlow 在理解任务上仅使用 final-scale 特征效果最佳。虽然 MSVQ 在训练时利用了多尺度结构,但对理解来说,最高语义相关性的最后尺度才最适合作为视觉提示,额外尺度或残差特征反而引入噪声。

视觉生成(自回归 SOTA)

模型范式分辨率步数GenEvalDPG-Bench
SDXL扩散1024400.5574.65
DALL-E 3扩散10240.67†83.50
EMU3自回归51240960.54 / 0.66†80.60
VAR自回归256280.5371.08
TokenFlow自回归256250.55 / 0.63†73.38

GenEval 0.55 在自回归范式中达到 SOTA,与扩散模型 SDXL 持平,但仅需 25 步采样——对比 EMU3 的 4096 步和 LlamaGen 的 1024 步,这是数量级的效率提升。使用 prompt rewriting(GPT-4V)后达到 0.63,接近 DALL-E 3。

论文提出了一个 multi-step sampling 策略:首轮以较大 top-k(k=1200, p=0.8)采样保持多样性,然后在同一尺度内以缩小参数(k=100, p=0.8)进行第二轮精炼。这种"由粗到精"的采样策略在保持创造性的同时增强了局部一致性。

单张 A100 生成一张 256×256 图像仅需 2.7 秒

消融实验

Shared MappingMSVQCLIP InitrFID↓MME-P↑SEEDB↑TQA↑
8.071252.3857.8449.16
3.961212.5155.9747.42
2.181209.9056.0847.40
2.161312.0958.9949.29

三个关键组件各有分工:

  • Shared Mapping 是重建的主力——引入后 rFID 从 8.07 骤降至 3.96(-4.11),代价是理解指标轻微下降
  • MSVQ 进一步将 rFID 降至 2.18,同时为 next-scale prediction 提供基础
  • CLIP Initialization(保持 unfrozen)是理解性能突破的关键——MME-P 从 1210 飙升到 1312(+102 分)

码本利用率的惊喜

传统 VQ tokenizer 在大码本下面临严重的"码本坍缩"问题——大量条目从未被激活。TokenFlow 在 8K 到 130K 条目的码本规模下始终维持 95%+ 的利用率。这说明 shared mapping 不仅解决了粒度矛盾,还顺带解决了码本利用率的老大难问题。

Part 6
TokenFlow 在地图上的位置

与已有方法的根本区别

方法核心思路统一方式理解生成
Chameleon/EMU3/Show-o单一 VQ tokenizer单码本
Janus独立 tokenizer(理解+生成)双系统
VILA-U单一流约束高低层表征单码本
VAR多尺度 next-scale单码本多尺度
TokenFlow双码本共享映射索引统一、表征分工

VAR 的关系值得特别说明:TokenFlow 的 MSVQ 和生成头明显借鉴了 VAR 的多尺度 / next-scale prediction 思路,因此生成效率很高。但 VAR 只负责生成,不承担理解任务。TokenFlow 在 VAR 式多尺度生成能力之上,注入了语义分支与共享映射,把 tokenizer 从"好生成"扩展为"可统一"。

Janus 的对比也很能说明问题:Janus 为理解和生成分别使用独立 tokenizer,本质上是"两套系统并联",没有解决"同一视觉 token 能否兼容两种任务"的根本问题。TokenFlow 的做法是在索引层实现真正共享——同一个 token index 同时承载语义和像素两套嵌入

局限性

  • 生成质量仍有天花板:GenEval 0.55 虽为自回归 SOTA,但距离 DALL-E 3(0.67)和 SDXL 的 1024 分辨率仍有差距
  • 理解未充分利用多尺度:MSVQ 训练了多尺度信息,但理解只用了 final-scale,是否有更优的融合方式值得探索
  • 语义教师的上限锁死:性能受限于 CLIP/SigLIP teacher 的能力(TokenFlow-XL 达到教师的 97.1%)
  • 分辨率受限:实验最高 384×384,更高分辨率未验证

个人启发

为什么这篇论文值得关注

TokenFlow 证明了一个重要的观点:离散视觉表征不仅能匹配连续表征,还能在某些场景下超越。这为下一代统一多模态模型提供了新的方向——离散 token + LLM 的 next-token prediction 框架,可能是比扩散模型更优雅的统一方案。

从方法论角度,"多流提特征,单索引做统一"这个设计哲学具有很强的可迁移性。它不仅适用于视觉 tokenizer,任何需要在异构表征之间建立桥接的场景,都可以考虑"共享索引"的思路。

更值得注意的是,双码本的维度非对称设计(语义 32 维 vs 像素 8 维)暗示了一个有趣的事实:在共享索引的前提下,两种信息的表征复杂度可以不同——语义需要更丰富的表征空间,而像素可以用更紧凑的编码承载。