拖一下分辨率滑杆,看一张图吃掉多少上下文——「图贵文贱」是多模态数据工程的第一性事实

一张图进入多模态 LLM 之前,要被切成多少个「视觉 token」?这个数字直接决定上下文预算、推理成本, 以及 第 9 章 里 packing 的难度——视觉 token 数量随分辨率剧烈变化,是 batch 内序列长度失控的主因。

① 图像尺寸

px
px
原图 1280×960
→
28px 网格 46×34

② 模型策略

视觉 token 数
1,564
(46 × 34) = 1564 token,每 28×28 像素 1 token(patch 14 × 2×2 合并)

上下文预算占比

8K 上下文1,564 / 8,192(19.1%)
视觉
剩余文本预算 81%
32K 上下文1,564 / 32,768(4.8%)
剩余文本预算 95%

batch 内 8 张图的 token 差异

同一 batch 的 8 张图尺寸各异 → 视觉 token 数差异悬殊 → 序列长度参差不齐。 文本 packing(第 9 章)只需按 token 数装箱;多模态 packing 还要保证整张图不被拆到两条序列——这是纯文本世界不存在的新失效模式。

483
640×576
1,102
800×1063
1,295
1024×970
2,760
1280×1683
2,451
1600×1202
6,900
1920×2808
8,918
2560×2735
16,348
3840×4211
本批最大/最小比:33.8×——差距越大,padding 浪费越严重、装箱越难。
🗜️ 压缩的代价

pixel shuffle(InternVL,约 4×~16× 压缩)、Perceiver Resampler(Flamingo,固定 64 query)、 Q-Former(BLIP-2,固定 32 token)都能把视觉 token 砍掉一个数量级, 但细粒度 OCR 任务上损失明显——小字、表格线、密集文字在压缩后最先「糊掉」。

📐 动态分辨率由来

anyres 思路:与其把大图粗暴 resize 到 224(细节全毁),不如切块保留原生分辨率—— LLaVA-1.6 的 grid 切分、InternVL 的动态 tiling、Qwen2.5-VL 的原生动态分辨率都是这条路线, 代价就是 token 数不再固定。

🖼️ 视觉 token 远超文本

一张 1280×960 图按 Qwen2.5-VL 算约 1,564 token, 而一段 50 token 的文字描述可能就够了——「图贵文贱」是所有多模态训练数据配比(第 26 章)必须面对的第一性事实。

内容参考 《AI 数据全书》第 26 章「多模态数据」(视觉 token 经济学)与 第 9 章「Tokenization 与序列 Packing」(§9.6 多模态特化)。三种策略的公式在浏览器内实算,实现细节差异已在对应位置标注。