多模态模型如何平衡图像分辨率和 Token 预算?
简化版
图像分辨率越高,越能保留小字和小目标,但视觉 Token 通常按面积增长,并进一步放大注意力计算、首 Token 延迟和显存占用。工程上应按任务难度动态分配预算:低分辨率先看全局,检测到文档、小目标或不确定区域后再切块放大,而不是所有图片固定用最高分辨率。
详细版
若视觉编码器的 patch 为 14×14,输入从 224×224 提升到 448×448,Token 数会从 16×16=256 增至 32×32=1024,即边长翻倍、Token 四倍。视觉编码器自注意力的理论计算会由 N² 主导,送入 LLM 后也会挤占上下文并增加 prefill 成本。
设计时先用业务集绘制“分辨率—准确率—延迟—成本”曲线,再选择固定缩放、动态分辨率、缩略图加局部 crop、Token 压缩或早期剪枝。需要保留原始长宽比和坐标映射,按小字、图表、自然图像分别切片评估,并给 Token 上限、超限降级与线上监控。
| 策略 | 优点 | 代价 |
|---|---|---|
| 固定低分辨率 | 快且稳定 | 小目标丢失 |
| 固定高分辨率 | 细节充分 | 成本浪费 |
| 全局图 + 局部切块 | 兼顾语境与细节 | 重叠和坐标处理复杂 |
| 动态预算 | 平均成本低 | 路由错误会伤质量 |
完整版教学
一、分辨率为什么会变成 Token
多数 VLM 不会把整张图片作为一个向量直接交给语言模型,而是先按 patch 切分并编码。对高为 H、宽为 W、patch 边长为 P 的规则网格,未压缩视觉 Token 数近似为:
N_visual = ceil(H / P) × ceil(W / P)
因此成本随像素面积而不是边长增长。336×336 图像配 14×14 patch 得到 24×24=576 个位置;若放大到 672×672,便是 48×48=2304 个位置。实际模型可能再通过 projector、resampler 或 pooling 压缩,但“更高清通常意味着更多视觉证据和更大预算”的矛盾不变。
二、高分辨率到底换来了什么
高分辨率主要改善小字、密集表格、远处目标、细粒度属性和空间定位。它对“这是一只猫吗”这类全局分类帮助可能很小,对“发票税率是多少”却可能决定字符是否仍可辨认。若原图中的字符缩放后只有 3 像素高,后续模型容量再大也无法恢复已被采样丢掉的信息。
收益并非单调无限增长:超过传感器有效清晰度后,放大只是在插值;图片模糊、压缩严重时,多给 Token 只会编码噪声。因此要按任务切片画质量曲线,而不是把“像素更多”直接等价为“信息更多”。
记忆钩子:先问细节是否在缩放时消失,再问模型能否理解;输入阶段丢掉的字和小目标,靠更长推理补不回来。
三、成本不止视觉编码器
视觉侧若采用全局自注意力,计算量近似随 N_visual² 增长;即便使用局部注意力,激活与显存仍通常随 Token 数上升。视觉 Token 投影进 LLM 后,会加入文本前缀,增加 prefill 的矩阵计算并占用上下文窗口。多轮对话若重复传图,还可能重复支付编码成本。
例如 1024 个视觉 Token 与 512 个文本 Token 合并后,前缀长 1536;压缩到 256 个视觉 Token 后只有 768。在线系统除了平均延迟,还要观察 P95 首 Token 延迟、并发吞吐、KV Cache 容量和每请求计费。优化应确认瓶颈位于视觉编码、跨模态 projector 还是 LLM prefill。
四、常用预算策略如何选择
固定缩放实现最简单,适合图片形态稳定的业务。动态分辨率保留长宽比并把图像切成若干 tile,适合文档和长图;全局缩略图提供页面语境,局部 tile 保留细节。查询感知 crop 则先根据问题找候选区域,只对相关位置精看,平均成本更低但依赖路由准确性。
原图
├─> 低清全局图 ──────────────┐
└─> 小字/目标检测 -> 2 个局部块 ├─> 合并视觉 Token -> LLM
┘
切块要设置重叠,否则跨边界的表格单元格或文字会被截断;重叠又会造成重复 Token。还要带上 tile 的页内坐标,使模型知道局部块来自哪里,而不是把每块误认为独立图片。
五、动态路由需要可解释信号
动态预算可依据原图尺寸、OCR 字体高度、目标检测框面积、图片熵、问题类型或低清模型的不确定度。比如先以 448 像素边长推理,若 OCR 置信度低于 0.75 或问题包含“右下角小字”,再开启 2 倍局部放大。预算决策要输出原因,便于定位是路由还是主模型失败。
硬上限同样重要:规定最多 8 个 tile、最多 4096 个视觉 Token,超限时优先保留与查询相关区域,并明确提示无法覆盖全部细节。没有上限的动态方案会被超长截图或恶意巨图拖垮。线上应记录原尺寸、tile 数、视觉 Token 数、路由信号与最终质量反馈。
六、如何做公平实验
建立包含自然图、小目标、扫描文档、图表和超长截图的测试集,并按目标像素面积、字符高度与长宽比分桶。每种策略用相同模型权重、Prompt、解码参数和硬件,测任务准确率、视觉 Token、峰值显存、P50/P95 延迟及吞吐。只比较准确率,会把不可上线的昂贵方案误判为最优。
假设 1000 张图的实验结果如下:
| 方案 | 准确率 | 平均视觉 Token | P95 延迟 |
|---|---|---|---|
| 448 固定 | 78.0% | 1024 | 1.2s |
| 896 固定 | 82.5% | 4096 | 3.8s |
| 448 + 动态局部 | 82.1% | 1540 | 1.9s |
若业务允许 2 秒 P95,第三种更接近 Pareto 最优。还应检查动态策略的小目标召回,避免平均成本下降来自它跳过了困难样本。
七、预处理与位置映射的边界
直接拉伸到正方形会改变物体形状;等比缩放加 padding 则需要记录有效区域。EXIF 旋转、服务端压缩和前端截图缩放也会影响文字与坐标。若模型还输出定位框,所有 crop、resize、pad 都必须保留可逆变换矩阵,最终坐标才能正确回到原图。
训练与推理的分辨率分布也应匹配。模型只在固定 336 分辨率训练,却在推理时突然输入大量超高分辨率 tile,可能出现位置编码外推或分块语义混乱。选择更大预算前,应确认模型原生支持方式,而不是仅看接口接受图片。
八、常见误区与追问
- 误区:输入边长翻倍,成本只翻倍。 网格 Token 通常按面积增长,边长翻倍往往带来约四倍 Token。
- 误区:最高分辨率一定最准确。 模糊图像放大不会创造信息,重复 tile 还可能干扰模型。
- 误区:只限制图片文件大小就控制了推理成本。 JPEG 字节数与解码后的分辨率、视觉 Token 数并不等价。
- 追问:如何保护小目标? 用全局图加带重叠的局部 crop,并在评测中单列面积小于 1% 的目标。
- 追问:动态路由失败怎么办? 设置保守阈值、预算上限和低置信度升级路径,并记录路由原因以便回放。
- 追问:如何选线上默认档位? 在质量、P95 延迟与单次成本的 Pareto 前沿上按业务 SLA 选择,而不是追逐最高单项分数。
九、加强记忆
分辨率预算可记成“面积增 Token、细节换成本、全局配局部、动态有上限”。回答时先用 patch 公式说明边长翻倍为何可能产生四倍 Token,再拆解视觉编码与 LLM prefill 成本,最后给出动态切块、坐标回映和分桶实验。这样既解释了原理,也能落到可测量、可降级的生产方案。