Chapter 6: 视觉 Grounding 与指代表达理解 (RefCOCO 系列)
1. 开篇:连接视觉与语言的“手指”
在 Chapter 2 和 Chapter 3 中,模型主要是在“看图说话”或回答问题。然而,在机器人抓取、自动驾驶行人分析、以及精确的图像编辑(如“把左边那个人P掉”)中,我们需要模型具备一根“手指”——能够精准地指出语言描述的是图像中的哪一块区域。
这就是 Visual Grounding(视觉定位) 的核心使命。
本章将聚焦于 Referring Expression Comprehension (REC),即“指代表达理解”。这不仅要求模型能识别物体,更要求模型理解物体之间的空间关系(spatial relations)、属性对比(attribute comparison)以及复杂的句法结构。
本章学习目标
- 任务全景:区分 REC, REG, RES 以及 Phrase Grounding。
- 基准细究:彻底搞懂 RefCOCO, RefCOCO+, RefCOCOg 的区别(这是阅读论文的门槛)。
- 技术范式:理解从“两阶段检测”到“LLM Token 生成”的技术演变。
- 实战技巧:掌握 IoU 计算、坐标归一化陷阱以及数据增强策略。
2. 任务谱系与核心定义
在进入数据集之前,必须厘清几个容易混淆的任务术语。
2.1 核心任务矩阵
| 缩写 | 全称 | 输入 (Input) | 输出 (Output) | 核心挑战 |
| 缩写 | 全称 | 输入 (Input) | 输出 (Output) | 核心挑战 |
|---|---|---|---|---|
| REC | Referring Expression Comprehension | 图像 + 一句特定描述 | 一个边界框 (BBox) | 消除歧义,唯一精准定位 |
| REG | Referring Expression Generation | 图像 + 一个目标框 | 一句区分性描述 | 生成独特的特征(不仅是"猫",是"左边那只睡着的猫") |
| RES | Referring Expression Segmentation | 图像 + 描述 | 像素级掩码 (Mask) | 需要极细粒度的边缘分割能力 |
| Phrase Grounding | (e.g., Flickr30k Entities) | 图像 + 一句长描述 | 多个 BBox | 句子里的每个名词短语 (NP) 都要找到对应的物体 |
ASCII 示意图:REC 流程
Input Image (H x W) Input Text
+-----------------------+ "The woman in the white
| [Person A] | dress standing behind
| [Person B] [Person C] | <------- the chair."
+-----------------------+
|
v
Multimodal Model
|
v
Output BBox
+-----------------------+
| [x1, y1, x2, y2] | ---> 对应 [Person C] 的坐标
+-----------------------+
2.2 技术流派:怎么做到的?
理解 benchmark 之前,需要知道模型是怎么解题的,这有助于理解为什么某些 benchmark 会针对性地“攻击”模型的弱点。
-
两阶段法 (Two-Stage / Detection-based): * 先用检测器(如 Faster R-CNN)把图里所有的物体框都切出来。 * 然后用一个多模态匹配模型,算每个框和文本的相似度得分。 * 缺点:如果第一步检测器没把你想要的人框出来,第二步就彻底没戏了(瓶颈在 Recall)。
-
单阶段法 (One-Stage / End-to-End): * 类似 YOLO 或 DETR,直接输入整图和文本,一步输出最终坐标。
-
LLM 生成法 (The Modern Way): * 将坐标视为特殊的文本 token(例如
<box>255, 300, 500, 600</box>)。 * 像 GPT-4o、Qwen-VL、Kosmos-2 都是这类。 * 优势:可以利用 LLM 强大的常识推理能力(例如理解“可以用来切菜的东西”是指“刀”)。
3. Benchmark 详解:RefCOCO 家族与朋友们
这是本章的重点。RefCOCO 系列均基于 MS COCO 图像,但采集协议完全不同,测试的能力维度也截然不同。
3.1 RefCOCO & RefCOCO+ (UNC Data)
这两者源自同一个双人游戏(ReferItGame)。玩家A看图描述,玩家B猜。
- RefCOCO:
- 特征:允许使用任何词汇。
- 数据分布:充满了绝对空间词汇(Left, Right, Top, Bottom, Middle)。
- 适用场景:测试模型对空间位置的敏感度。
-
Example: "The guy on the left", "Bottom right corner".
-
RefCOCO+:
- 特征:严禁使用空间方位词。玩家被迫描述外观属性。
- 数据分布:充满了颜色、纹理、形状、动作等视觉属性。
- 适用场景:测试模型对细粒度视觉特征的区分能力。
- Example: "Man in striped shirt", "The dark chair nearest to the table".
3.2 RefCOCOg (Google Data)
- 特征:非交互式采集,通过 Amazon Mechanical Turk 直接让工人写描述。
- 数据分布:句子显著更长,包含复杂的人物/物体关系。
- 适用场景:测试模型的语言理解深度和关系推理。
- Example: "A zebra looking towards the camera while grazing on grass."
Rule-of-Thumb (选型指南):
- 你的应用场景如果是“监控探头找人”(视角固定),优先看 RefCOCO(方位很重要)。
- 你的应用场景如果是“时尚电商搜索”(衣服很多样),优先看 RefCOCO+(外观区分度)。
- 你的应用场景如果是“通用强人工智能”,RefCOCOg 的权重最高。
3.3 Phrase Grounding: Flickr30k Entities
- 区别:RefCOCO 是一句话找一个目标。Flickr30k 是一句话里有 5 个名词,要找出 5 个框。
- 挑战:需要处理复数("three dogs" -> 一个包含三只狗的大框,或者三个小框?通常是一个并集框)和指代不清的情况。
4. 评价指标与协议
4.1 IoU (Intersection over Union)
这是计算机视觉的黄金标准。
4.2 Accuracy @ 0.5
Grounding 任务通常不关注框得有多么“完美”(例如 IoU 0.9),而是关注有没有指对人。
- 若 ,记为 Correct (1)。
- 若 ,记为 Incorrect (0)。
- 最终指标是全测试集的平均准确率。
4.3 为什么不用 Mean IoU?
Mean IoU 会掩盖错误。例如:
- Case A: 预测框完全不重叠 (IoU=0)。
- Case B: 预测框完美重叠 (IoU=1.0)。
- Mean IoU = 0.5。但这和两个 IoU=0.5 的情况在业务上意义完全不同。Acc@0.5 更能反映“可用性”。
5. 训练数据配方与构建策略
如果你要训练一个 Grounding 模型,光靠下载 RefCOCO 是不够的。
5.1 数据增强:坐标抖动与负样本
- 坐标抖动 (Jittering): 在训练时,不要总是把 GT 框喂给模型,可以稍微放大或缩小框,让模型学习到鲁棒性。
- 硬负样本 (Hard Negatives):
- Construct: 如果目标是“左边的狗”,不仅要让模型预测这个框,还要随机采样“右边的狗”作为负样本,训练模型区分(通过 Contrastive Loss)。
5.2 格式统一:坐标归一化
大模型(如 LLaVA/Qwen)通常将坐标归一化到 [0, 1000] 的整数区间。
- 公式:
- 陷阱:图像预处理时的
Resize和Padding会改变坐标体系。如果不记录 Padding 的大小,坐标还原回去就会发生偏移。
5.3 伪标注 (Pseudo-Labeling)
RefCOCO 数据量较小(几万张图)。为了提升性能,业界常用策略:
- 拿 Object Detection 数据集(如 Object365, OpenImages)。
- 用简单的模板("A photo of a [CLASS]")构造文本。
- 或者用 Caption 模型生成描述,再用强力的 Grounding 教师模型去验证。
6. 练习题(实战演练)
基础题 (帮助熟悉概念)
Q1: IoU 临界值计算 假设 GT 框是 (面积 10000)。 预测框也是 的正方形,但是向右平移了 个单位。 请问 等于多少时,IoU 恰好等于 0.5?(这有助于理解为什么 Acc@0.5 是一个比较宽松但合理的指标)。
点击展开答案
答案: 解析: 设平移量为 。 交集宽为 ,高为 。交集面积 。 并集面积 。 。 。 直观理解:只要偏移量小于边长的 1/3,就能算“对”。
Q2: 数据集区分 判断下列 Prompt 最可能属于哪个数据集(RefCOCO, RefCOCO+, RefCOCOg)?
- "Blue shirt guy"
- "The man sitting on the bench feeding pigeons"
- "Left person"
点击展开答案
答案:
- RefCOCO+ (强调外观属性,Blue shirt)。
- RefCOCOg (长句,包含动作关系 feeding pigeons)。
- RefCOCO (极短,强调方位 Left)。
Q3: 任务边界 如果用户上传一张图问:“把图中所有的苹果都标出来”。这是 REC 任务吗?
点击展开答案
答案: 不完全是。 解析:标准的 REC (RefCOCO style) 假设是 Single Object Grounding(指代特定单一物体)。 “找出所有苹果”属于 Open-Vocabulary Object Detection (开放词汇目标检测) 或 Phrase Grounding (Flickr30k style)。虽然技术栈通用,但在评测时,REC 指标只算 Top-1 box,不适合评估“所有目标”。
Q4: 坐标还原
模型输出归一化坐标 token 为 [250, 250, 750, 750] (范围 0-1000)。
原图尺寸 。
请计算还原后的真实像素坐标 。
点击展开答案
答案: 解析: 。 。
挑战题 (深度思考)
Q5: 宽高比陷阱 (Aspect Ratio Gotcha)
接 Q4。现在的 VLM 通常将图像预处理为 的正方形输入。
如果 的图被直接强制拉伸 (Resize without keep ratio) 成 ,模型输出了正中心框 [500, 500]。
但在实际部署中,你的预处理逻辑改成了 Letterbox Padding(保持比例缩放,上下补黑边)。
如果你不重新微调模型,直接用这个模型推理,会发生什么现象?为什么?
点击展开答案
答案: 现象: 轴坐标会严重偏离,预测框会“漂”到图像中间压缩的内容部分,导致 IoU 暴跌。 解析:
- 强制拉伸模型学到的是:图像内容充满了整个 画布。
- Padding 输入:图像内容被压扁在中间,上下是黑边。
- 模型不知道黑边是无意义的,它可能会把坐标输出到黑边里,或者按照它记忆中的“拉伸感”去定位。
- 结论:预处理逻辑必须与训练时严格一致。这是 VLM 部署中最常见的 Bug 来源。
Q6: 文本依赖性测试 (Blind Test) 有一种调试方法叫 "Blind Grounding":把图像设为全黑,只给文本,让模型预测框。 如果模型在 RefCOCO 上 Blind Grounding 的 Acc@0.5 达到了 20% 甚至更高,这说明了什么?这是好事还是坏事?
点击展开答案
答案: 说明:数据集存在严重的 Center Bias (中心偏差) 或位置分布规律。 解析:
- 摄影师拍照习惯把主角放在中间。
- 既然是 Blind (看不见图),模型全靠猜。如果猜得准,说明模型学到的不是“视觉理解”,而是“统计概率”(比如不管你说什么,我都猜中间)。
- 坏事:这意味着基准测试的分数虚高,模型并没有看上去那么聪明。
Q7: 多义性与拒答 (Ambiguity & Rejection) 在 RefCOCOg 中,如果有这样一条数据: 图:两只一模一样的斑马。 文本:"The zebra." Ground Truth 标注了左边那只。 这是一个好的训练数据吗?如果模型微调时遇到了这种数据,会产生什么负面影响?
点击展开答案
答案: 不是好数据,这是“脏数据”或“歧义数据”。 负面影响:
- 这会导致模型产生 Hallucination (幻觉)。
- 因为视觉上无法区分,模型会被迫学习文本中不存在的特征(比如认为"zebra"这个词本身就暗示左边),或者学习去拟合标注员的随机噪声。
- 对策:在数据清洗阶段,计算指代文本与图中所有对象的 CLIP 相似度,如果 Top-1 和 Top-2 差异过小,应剔除该样本。
Q8: 链式思考 (CoT) 在 Grounding 中的应用
相比于直接输出 <box>..., 让模型先输出一段 "Rationalization" (例如:I see two dogs. The user asks for the left one. So I should focus on the black dog on the left side...) 再输出坐标,有什么优缺点?
点击展开答案
答案: 优点:
- 可解释性:知道模型为什么选这个。
-
纠错:CoT 可以帮助模型分步推理(先找大物体,再找相对位置),在复杂场景(RefCOCOg)通常能提升准确率。 缺点:
-
推理延迟:输出那么多废话,实时性(FPS)会大幅下降。
- 幻觉风险:有时候模型解释得头头是道,最后框画歪了,这种“一本正经胡说八道”对用户体验伤害更大。
7. 常见陷阱与错误 (Gotchas)
-
Split 的诅咒 (The Split Confusion): * RefCOCO: 有
testA(People focus) 和testB(Object focus)。论文必须汇报这两个的平均值或分别汇报。 * RefCOCOg: 最坑的一个。有googlesplit (标准划分) 和umdsplit (University of Maryland 划分)。这两个的验证集和测试集完全不同。 * 陷阱:如果你用google的训练集训练,去跑umd的测试集,这叫数据泄漏(因为有重叠)。一定要看清楚论文比的是val-g还是val-u。 -
XYXY vs XYWH: * COCO 标注格式默认是
[x_topleft, y_topleft, width, height]。 * 许多模型(如 CLIP 预处理、DETR)需要[x_center, y_center, w, h]或[x_min, y_min, x_max, y_max]。 * 调试:IoU 算出来极低 (0.0x) 时,99% 是坐标格式搞反了。 -
大模型的“多嘴”毛病: * 微调 LLaVA/Qwen 做 Grounding 时,如果不加特殊的 token 约束,模型可能会在输出坐标后继续喋喋不休地描述物体,导致输出解析失败。 * Rule-of-Thumb:在 System Prompt 中强制约束“Output only the bounding box coordinates.”。
-
可视化验证的必要性: * 不要只看 IoU 数字。一定要把预测框画在图上看看。 * 你可能会发现:模型虽然 IoU 很高,但总是把框画得比物体大一圈(包含背景),或者总是切掉物体的脚。这能指导你调整 Loss Function(比如加入 GIoU loss)。