多模态模型的定位能力:GPT-4V 能准确指出图中猫的位置吗——用边界框评测

我让 GPT-4V 圈出照片里那只猫,它给我框了一个几乎覆盖整张图的矩形,还理直气壮地说:“这就是那只猫。”那一刻我意识到,多模态模型或许真的“看见了”,但它的手指头不太好使。

AI technology illustration

这个结果让我很困惑,因为我明明记得它能把“这只猫是什么品种”回答得头头是道。可一旦让它用坐标把猫的位置标出来,它就变得像是喝醉了酒。为了弄清它到底行不行,我开始用边界框评测去系统地测它,这才把问题真正看明白。

边界框评测:给模型一张图,让它画框

边界框评测的标准玩法是:给定一张图片和一个目标类别(比如“猫”),模型需要输出一个矩形框,用四个数字表示——左上角 x、左上角 y、框的宽、框的高。评测时把模型输出的框和人工标注的“真值框”放在一起,计算交并比 IoU。IoU 大于 0.5 算一次命中,这是物体检测领域最常见的评价方式。

听起来简单,但这个任务对模型的实际要求并不低。模型得先识别出目标,再推断出目标在图像中的空间范围,最后还要把范围翻译成精确的数字。任何一个环节出错,框都会歪。

标准评测流程通常有几步:

  1. 准备带目标边界框标注的数据集(如 COCO、RefCOCO);
  2. 用统一提示词让模型输出指定目标的坐标;
  3. 把模型输出的文本解析成数值,并归一化到图像尺寸;
  4. 与真值框计算 IoU,统计不同阈值下的平均精度。

我的实测:从惊喜到失望

我的测试方法很简单:从相册里翻出一些带猫带狗的照片,用提示词要求 GPT-4V 输出每个动物左上角和右下角的坐标,然后写了个脚本算 IoU。第一轮,我给它一张背景干净的猫头像,它输出的框居然和真值框有不错的重叠。我当时还挺惊喜,心想多模态模型什么时候这么会定位了?

但接下来的测试就露馅了。只要画面里出现第二只猫,或者猫被抱在主人怀里,它就会犯两种错:要么把整只猫连带着旁边的人全部框进去,要么只框住猫头,把身体扔在框外。更离谱的是,有一次我让它圈出“那只戴红色项圈的猫”,它却把狗给框出来了。

这种表现不是个例,社区里很多做视觉任务的人都有类似吐槽。为什么一个能写出大段分析文字的多模态模型,连画个框都画不准?答案藏在它的工作方式里。

问题出在“用嘴说坐标”这件事上

GPT-4V 本质上是一个自回归语言模型。它把图像切成 patch,转换成视觉 token,再和文本 token 一起喂进 Transformer。当你要求它输出边界框时,它并不是在“画”框,而是在“写”坐标——像写作文一样,一个 token 一个 token 地生成那串数字。

这个机制有两个致命问题。

第一,坐标必须被离散化。GPT-4V 的输出词汇表是有限的,浮点数坐标必须先被量化成固定网格上的整数。假设图像被缩放到 1000×1000 的网格,那么 x=123.4 和 x=123.7 可能都会落在一个 token 上,模型无法表达更细的位置差异。也就是说,无论它的内部视觉表征有多精确,最后出口的精度都被这个量化步长锁死了。

第二,优化目标不匹配。语言模型在训练时,被要求预测的是“下一个 token 的概率”,而不是“框的 IoU 最大”。就算它心里大概知道猫在图片的哪个区域,要把这个感知翻译成一组精确的数字序列,并不是它擅长的路径。这就像让一个擅长写散文的作家去报出一串经纬度——他能描述“猫在沙滩的左前方”,但你要他精确到小数点后两位,他只能猜。

坐标在模型里是怎么变成 token 的?

一种常见做法是把坐标范围映射到 0 到 999 的整数,然后用分隔符把 x1、y1、x2、y2 拼成一个序列,比如“<box> 123 234 567 890”。每个数字都当成一个 token 参与生成。数字越多,需要生成的 token 就越长,模型越容易在中间“手滑”。

我最早以为,只要模型内部有了视觉特征,定位能力就是水到渠成的事。直到后来自己微调开源多模态模型,才发现坐标 token 的粒度、起始符的写法、损失函数里坐标项的权重,都会直接影响最后的框质量。模型不是没有能力,而是它的训练过程压根没把精确定位当作核心目标。它只是在模仿人类标注者的文字格式,而不是在学会“指得准”。

专用检测器为何完胜

反观传统目标检测模型,比如 YOLO、Faster R-CNN,它们的输出头直接回归边界框的数值,训练时用 IoU 作为损失。每一步更新都在逼着网络把框调得更准。所以它们在固定类别上的定位精度远超 GPT-4V,而且速度快得不是一星半点。

能力 GPT-4V 这类多模态 LLM YOLO 这类专用检测器
输出机制 生成离散文本 token 连续坐标回归
优化目标 最大化文本序列概率 最大化 IoU
定位精度 受量化误差限制 可达亚像素级
语义理解 强,能理解复杂指代 弱,通常只认固定类别
推理速度 秒级 毫秒级

但你也别急着给 GPT-4V 判死刑。在真实的对话场景里,你需要的不只是坐标,而是“理解”。比如你说“帮我看看冰箱里还剩什么”,YOLO 只会给你一堆“人”“瓶子”“冰箱”的框,但 GPT-4V 能告诉你“牛奶快没了,周末该去超市了”。定位只是它所有能力中的一小块肌肉,而且这块肌肉目前还没练好。

评测不公平,但用户不会听你解释

谈到边界框评测,很多研究者会反驳:这不公平,GPT-4V 本来就不是目标检测器。从学术逻辑上讲,确实如此。它被训练用来生成自然语言,边界框只是 user 需求催生出来的副产品。

但普通用户不关心这些。当你把一个模型包装成“能看图的 AI 助手”,用户就会自然地期望它能像人一样用手指点出目标。更严重的是,在机器人操控、自动驾驶、医疗影像这些领域,边界框精度是硬指标。你说“病灶大概在这一片”,哪个医生敢给你签字?这也是为什么即使存在公平性和通用性的争论,评估 GPT-4V 的定位能力依然很有现实意义。

已经有论文尝试在标准指代定位基准(比如 RefCOCO)上对比 GPT-4V 和专用模型。结论大体一致:GPT-4V 的零样本能力强,能理解“左边第二只戴帽子的猫”这种复杂描述,但输出的框在空间精度上仍然落后于专门训练的模型。它知道目标是谁,却说不清目标在哪。

这条路还能怎么走

现状不算悲观。多模态模型正在补课:有些团队把边界框坐标作为特殊 token,在指令微调阶段加入大量检测数据,让模型学会“说坐标”。像 LLaVA 系列、Shikra 都做了类似的尝试。结果呢?定位能力确实提升了,但依然达不到专用检测器的水准,因为坐标 token 的离散化本质没变。

更看好的方向是混合架构:让一个专用检测器负责出框,让语言模型负责语义理解和交互,两者通过接口打通。这有点像人的眼睛和手:眼睛负责看,手负责精确指点。虽然工程复杂度高,但“各司其职”的思路比硬让语言模型学会所有事要靠谱得多。

回到最初的问题:GPT-4V 能准确指出图中猫的位置吗?我的答案是:不能,至少现在不能。它能分辨出猫和狗,能告诉你猫正在睡觉,但如果你要的是一组像素级精确的坐标,它会让你失望。

它是那种能告诉你“猫在沙发左边”的朋友,而不是能在射击游戏里帮你瞄准镜的队友。但换个角度想,这个“朋友”正在飞速进化。也许一年后回看这篇文章,我的结论就又过时了。那反而是好事。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/671.html

(0)
上一篇 10小时前
下一篇 10小时前

相关推荐