简介:多模态模型为何数不清密集目标、框不准物体?本文从分词器中的几何类特殊token切入,剖析“感知鸿沟”与“指代鸿沟”的成因,对比『图像思考』与『视觉原语』两条技术路线的取舍,并给出可复现的能力评估方法与Agent工程化配置建议,帮助开发者科学选型、稳健落地。
判断一个多模态模型在图像理解上走了哪条技术路线,有一个常被忽视但极为有效的观察窗口:分词器的配置文件(如 tokenizer.json)中的特殊 token 列表。如果一个模型的词表中出现了成对出现的几何描述 token,例如:
{"added_tokens": [{ "content": "<|box|>", "special": true },{ "content": "<|/box|>", "special": true },{ "content": "<|point|>", "special": true },{ "content": "<|/point|>", "special": true },{ "content": "<|polygon|>", "special": true },{ "content": "<|/polygon|>", "special": true }]}
这几乎直接说明了设计意图:模型被设计为可以在输出序列中以结构化方式指称“框”“点”“多边形”这三类最基本的视觉对象。换句话说,它至少具备以坐标为载体的定位能力,而不仅仅依赖自然语言去“描述”它看到了什么。对工程团队而言,词表检查是一种零成本、可自动化的能力侦察手段——比阅读宣传文案可靠得多。
讨论路线选择之前,需要先厘清多模态识别的两层瓶颈。
第一层是感知鸿沟:图像进入模型前要经历缩放、切块、压缩为视觉 token 的流水线,分辨率与 token 预算之间的折中会导致小目标、密集目标的细节丢失。这是“看不清”的问题,业界普遍通过更高分辨率的编码器、动态切图等方式缓解,属于相对成熟的优化方向。
第二层是指代鸿沟,它更隐蔽也更致命:即便模型“看得清”,它在推理时仍习惯用自然语言复述图像内容。“左起第五个人”“画面中间偏上的那辆车”这类描述对人类读者勉强够用,但对需要精确计数、精确定位、精确比对的下游逻辑而言是灾难性的。密集计数要求可索引、无歧义的指针,而自然语言天然不提供这种指针。模型“数出 27 个人”这类错误的根源往往就在这里:计数结论依赖中间描述的完备性,而中间描述会跳步、合并、重复,误差随目标密度放大。
针对上述瓶颈,业界目前主要有两条路线,且各有明确的能力边界。
路线 A:图像思考。把“看”从单次前向变成多轮过程:模型可以主动裁剪、放大、标注图像区域,再基于新的观察继续推理,形成“观察→行动→再观察”的循环,形态上更接近 Agent 调用工具的范式。它的优势是能显著缓解分辨率问题,适合需要在图上“探索”的任务,例如迷宫导航、读仪表、找细节;代价是链路长、延迟高,并且强依赖外部 harness 对工具的编排能力。
路线 B:视觉原语。在连续视觉空间中引入“无歧义指针”:用成对的特殊 token 把坐标、框、多边形等几何信息直接编入生成序列,让“指称”本身结构化。它的优势是单次推理即可输出可解析的定位结果,天然适合密集计数、版面分析、OCR 版面还原等任务;代价是需要专门的训练数据与输出约定,对开放场景的泛化能力取决于数据覆盖。
值得强调的是,两条路线并不互斥。词表中出现几何 token,说明设计者为路线 B 预留了接口;而 Agent 侧是否真的会调用裁剪、缩放工具,则反映路线 A 的装配情况。工程上真正需要警惕的,是“宣称具备”与“实际装配”之间的错位。
实践中经常出现这样的情况:论文中的演示任务,到了线上服务表现明显漂移。原因通常有四类:
因此,评估不应基于一两次“体感”,而应设计可复现的探针:
import re, statisticsPATTERN = re.compile(r"<\|point\|>\(([\d.]+),\s*([\d.]+)\)<\|/point\|>")def count_points(response: str) -> int:return len(PATTERN.findall(response))results = [count_points(infer(image, prompt)) for _ in range(10)]print(statistics.mean(results), statistics.pstdev(results))
这类探针的意义在于:把“模型行不行”转译为“在多大概率、什么分辨率、哪类目标密度下可行”,这才是能指导选型的结论。
一个常见的翻车场景值得所有团队引以为鉴:新模型能力发布后,官方渠道宣传了用法,却没交代 CLI 工具需要先通过包管理器升级、再切换到特定 profile 才能生效,导致用户按直觉操作全部失败;而对外文档反而详细写了“第三方接入”如何设置模型名。这个插曲抽象出来,是 AI 工程中普遍存在的配置可发现性问题:
--profile 切换的到底是端点、模型还是提示词模板,应提供 config show 类命令让用户确认生效配置;
# 升级全局 CLI 工具(包管理器命令按实际环境替换)<package-manager> update -g <cli-tool># 查看当前生效配置,确认模型与端点<cli-tool> config show# 切换到目标 profile 后再发起请求<cli-tool> --profile <profile-name> run task.txt
结合上述分析,给出三条可操作的工程建议:
在基础设施层面,可以借助云平台的通用能力搭建评估与部署流水线:用对象存储托管测试图像与结果、用模型服务统一推理入口、用日志服务与监控告警追踪指标漂移。在百度智能云等平台上,这些均以通用服务类目提供,可按需组合,不与特定模型绑定,便于在路线迭代时保持评估体系稳定。
多模态模型的竞争焦点,正在从“看得见”转向“指得准”。词表中的几何 token 是一扇小窗,透过它能看到模型在感知与指代之间的设计取舍;而论文与线上表现的落差则提醒我们:能力的验证必须回到可复现的探针与工程化的 harness 上。对开发者而言,理解两条路线的适用边界,比追逐某次版本发布本身更有长期价值。