我最早以为,视觉定位(Visual Grounding)就是把目标检测换个壳子——图像进模型,预设类别表里挑一个,框出来。这个想法被现实狠狠教育了。

目标检测的类别是固定枚举的:人、车、猫、狗、杯子。但视觉定位面对的是开放描述:"那个看起来像椅子的艺术品"、"穿红衣服站在树荫下的那个人"——这些组合在训练数据里可能一次都没出现过,模型照样得找到目标、画出边界框。
视觉定位的任务形式很简洁:输入一张图和一句自然语言描述,输出目标在图像中的边界框。论文里它通常叫 Referring Expression Comprehension(REC),中文一般译作"指代表达理解"。
就这?就这。但同一句话换个说法,难度就完全不一样了:
- "一只猫" → 找出来:跟普通检测没区别。
- "戴红帽子的猫" → 找出来:需要把文本属性绑定到视觉外观。
- "左边那只戴红帽子的猫" → 找出来:还要理解空间位置。
- "蹲在黄色沙发旁、看起来有点凶的猫" → 找出来:需要关系推理和常识。
人类处理这些描述毫不费力,因为我们自动调用了语法分析、视觉搜索、空间判断和常识。模型要把这一整套能力压缩进一次前向传播。
先把视觉定位放进任务地图里,看清它和邻近任务的分工:
| 任务 | 输入 | 输出 | 核心特点 |
|---|---|---|---|
| 图像分类 | 图片 | 类别标签 | 对整张图做判断 |
| 目标检测 | 图片 | 边界框+固定类别 | 类别表可枚举 |
| VQA | 图片+问题 | 文本答案 | 输出是语言 |
| 视觉定位 | 图片+描述 | 边界框 | 文本开放、无预设类别 |
视觉定位最大的不同在于:它要求模型理解一句从未见过的组合表达,然后精确找出对应的视觉区域。这句话和这个区域之间没有预先的标注关系,模型每次面对的都是新的组合。
为什么一句话能难倒一堆模型
难在三个地方。
语言本身是模糊的。"左边那只猫"——是你眼睛视角的左边,还是猫自己的左边?"那个大盒子"——是比旁边的盒子大,还是比一般的盒子大?人类靠常识自动化解这些歧义,模型只能从训练数据里统计出的模式中猜。
视觉信息是冗余且残缺的。一张 400×400 的图片,模型眼里是 16 万个像素点。"红帽子"这句话要落在哪一片像素上?目标可能被遮挡、模糊、和背景纠缠。对机器来说,"猫"不是一只动物,而是一团分布在不同区域上的颜色和纹理结构。
跨模态表征不互通。文本是离散符号,图像是连续矩阵。"红帽子"作为一个词向量,凭什么和图像里那一片鲜红像素产生关联?这个鸿沟就是整个领域的核心难题。
两阶段时代:先列候选名单,再逐个面试
早期思路很直觉:既然不知道目标在哪,就把所有可能的地方都提出来,再逐个匹配。
- 用目标检测器(如 Faster R-CNN)提取图上约 100 个候选区域。
- 把自然语言描述编码成一个特征向量。
- 对每个候选区域,计算它与文本特征的匹配分。
- 取分数最高的候选框作为答案。
这个路线的代表是 MAttNet(CVPR 2018)。它把指代短语拆成三个维度独立打分:外观(look)、位置(locate)、关系(relationship)。"左边那只戴红帽子的猫"被拆成:外观是"红帽子的猫",位置是"左边",关系涉及与周围物体的空间关联。三个模块的分数加权求和,取最高。
这个设计看起来优雅,但有一个致命弱点:一旦候选区域里没有正确的目标,后面再匹配也没用。检测器漏检,整个系统就崩了。而且表达式分解一旦出错,三个模块自己再准也救不回来。
我最早觉得两阶段才是正路,毕竟"先粗筛再精排"是信息检索的基本功。后来看了一阶段和 Transformer 方法的论文才意识到,两阶段最大的问题不是准确率,而是它把视觉特征提前冻结了——语言信息直到最后才参与,图像特征从头到尾没有因为这句话而改变。这就像面试官在候选人名单确定之后才出场:它只能选人,影响不了候选人是怎么被筛出来的。
绕过候选框:让语言从特征提取阶段就参与进来
一阶段方法的想法很直接:不要候选框了,直接在特征图上回归边界框。但真正让这个领域发生质变的,是把 Transformer 搬进来。
MDETR(2021)的做法值得记住:把文本和图像同时送入 Transformer 编码器,让两者从特征提取的早期就开始互相影响。
想象一个画面:文本里的每个词,和图像切出的小区域,坐在同一张会议桌上。"红帽子"这个词有权查看所有区域,它会被偏红色的区域吸引;"猫"会去关注有毛茸茸轮廓的区域。经过多层这样的交互,文本和视觉特征在高维空间被拉到彼此附近。
这就是跨模态注意力。它让语言不再只是最后阶段的打分器,而是一开始就担任视觉特征提取的引导信号。
2023 年的 Grounding DINO 把这条路又推进了一步:把 DINO(一个检测 Transformer)和 GLIP(图文对齐预训练)结合起来,在大量图文对上做对齐学习,同时处理检测和定位两类任务。在 RefCOCO 系列基准上,视觉定位的准确率已经从早期的 60% 上下追到了 90% 以上。
把"一只猫"和"左边那只戴红帽子的猫"当成同一个检测问题的两个变体,是传统检测器的思路。把它们当成两个全新的、需要重新理解的组合,才是视觉定位的思路。
视觉定位在现实中有什么用
- 机器人操作:"把那颗蓝色螺丝捡起来,放进红色盒子"——机器人得先同时定位螺丝和盒子。
- 自动驾驶:"在第二个路口右转"——系统要定位"第二个路口"对应的视觉区域。
- 交互式编辑:"把左上角那个杯子换成蓝色"——先找到杯子,才有资格谈换色。
- 智能标注:用自然语言描述生成框,人工只需确认,能大幅降低标注成本。
这些场景的共同点:目标类别无法预枚举。螺丝可能长成任何模样,路口可能出现在任何环境,杯子的形态千奇百怪。只有开放式的语言描述能承载这种灵活性。
标准考试接近满分,真实世界还在及格线挣扎
在 RefCOCO 这类标准基准的主要子集上,准确率已经逼近或超过 90%。但真实场景里还有三个硬伤。
多跳空间推理。"站在黄衣服人左后方、台阶上的第三个人"——每个修饰语都是一跳约束,模型要逐一解析再组合。这类表达在真实世界不少见,但模型表现会显著下降。
省略与歧义。"那个,你懂的"——人类靠共享语境能接住,模型没有这个能力。它只能在给定文本里找信息,不会追问,也无法脑补。
常识链断裂。"那只不听话的狗"——模型如果没见过"不听话"对应的视觉特征,就无从定位。它不会自动串联"不听话 ≈ 偏离主人路线 ≈ 单独跑开的那只"这条推理链。
被问得最多的三个问题
视觉定位和多模态大模型是什么关系?
互补。大模型负责整体理解,专门的视觉定位模型负责出精确坐标。GPT-4V 这类多模态大模型也能定位,但框的精细度和速度通常不如专门的 grounding 模型。实时交互场景里,更常见的分工是:大模型理解意图,专门模型出坐标。
为什么用边界框,不用分割掩码?
边界框虽然粗糙,但信息密度高、标注成本低、下游使用快。很多应用只需要知道"在哪里"就够了。需要精细轮廓时,按描述分割(Referring Expression Segmentation)是另一个任务,在机器人抓取、医学影像等场景里更常用。
Visual Grounding 和 Referring Expression Comprehension 是同一个东西吗?
是。Visual Grounding 是更宽泛的叫法,Referring Expression Comprehension(REC)是论文里的专业术语,中文译为"指代表达理解"。看到 Referring Expression Grounding,也是它。
我的判断是:视觉定位接下来很难再有大幅跃升——把边界框画得更准的边际收益已经很低。真正的分水岭在于模型能否理解"指代"是一种情境化的认知过程:"那个你懂的"里的共享语境,"那只不听话的"里的常识推理,"第三个路灯"里的计数与序列。这些能力靠刷现有的 benchmark 是刷不出来的。
RefCOCO 系列数据集是怎么来的?
RefCOCO 基于 MS COCO 图像构建,让两个人在线玩"指物游戏":一个人写一句指代表达,另一个人凭这句话在图中找目标,找对了就得分。RefCOCO+ 规定表达里不能出现位置词,逼模型纯靠外观理解;RefCOCOg 的表达句子更长更复杂。跑实验最常用的就是这三个数据集。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/527.html