我第一次看到视觉定位的 benchmark 表时,脑子里冒出的念头特别蠢:RefCOCO 和 RefCOCO+,大概就像 ImageNet 和 ImageNet-A——一个标准版,一个升级版。直到我翻出 2014 年那篇 EMNLP 论文,才发现这个类比错得离谱。

视觉定位(Referring Expression Grounding)的任务定义很简单:给你一张图加一句话,比如"左边穿格子衬衫的男人",模型要把目标物体框出来。RefCOCO、RefCOCO+ 和 ReferItGame 是这个任务使用频率最高的三个数据集,几乎每篇视觉-语言论文的实验表里都有它们。但它们之间的差别,远不止一个加号。
三个数据集,出自同一篇论文、同一个游戏
ReferItGame 是最早的那个。Kazemzadeh 等人在 2014 年的论文里,把 ESP Game 的思路搬到了图片上:两个玩家在线配对,一个人写一句话描述图中的某个物体,另一个人根据这句话点出目标。点对了,双方得分,然后角色互换再验证一轮。整个流程跑完,拿到约 13 万条自然指代表达式,图像来自一个基于 ImageNet 的自然场景图像集(论文中称为 SAIAPR-12)。
因为是游戏,玩家的表达方式完全不受学术规范约束。我最初整理这个数据集时,以为表达式都是"红色的沙发"这类干净描述,结果看到大量"看起来有点奇怪的那个东西"。这些句子很自然,但也充满了上下文依赖和无关信息——因为玩家面对的是真人对手,而不是模型。作为测试集这很真实,但作为训练集,这些噪音也会被模型照单全收。
RefCOCO 和 RefCOCO+ 的差别,不是“加强版”这么简单
同一年,同一篇论文里,作者把游戏挪到了 MSCOCO 图像上,生成了两个数据集:RefCOCO 和 RefCOCO+。两者的图像几乎完全重合(一个 19,994 张,一个 19,992 张),表达式数量也几乎一样。唯一的实质差异是一条标注规则:RefCOCO+ 禁止玩家使用位置词。只要输入 left、right、middle、top、bottom 这类词,系统就拒绝接受。就这一条。
说实话,我第一次读到这个规则时觉得没什么大不了的。后来把两个数据集的表达一对比,才明白这个限制有多狠。在 RefCOCO 里,"左边的人""中间戴帽子的人"这类空间词极其常见——位置是视觉定位最廉价的线索。把位置词禁掉后,玩家只能描述外观:颜色、衣服、发型、姿态、相对大小。表达式从"空间关系 + 物体类别"变成了"纯外观属性组合"。
这意味着什么?意味着同一个模型在 RefCOCO 上学到的第一优先策略——先找位置词,再按位置缩小搜索范围——在 RefCOCO+ 上直接失灵。所以它的分数通常会掉 2 到 3 个点。我以前以为这种差距是图像变难了,后来才想明白:模型不是被难住了,是被夺走了捷径。
另外要注意,RefCOCO 系数据集的测试集按目标类型切成了两半:testA 是各种"人",testB 是各种"物"。因为 COCO 里人的实例特别多,模型在 testA 上的分数天然偏高。看到论文里"testA 92 / testB 84"这种断崖式的差距,先别急着感叹模型理解人类很厉害——它很可能只是学会了"person"这个词的类别先验。
RefCOCOg 是另一个物种:从抢答变成写作文
2017 年,RefCOCOg 出场。这次不是游戏,而是 Amazon Mechanical Turk 众包。Nagiskar 等人在论文里换了采集方式,表达式的风格立刻就不一样了。游戏里搭档等得焦躁,只写最短能区分目标的话;众包里没有人在催,标注者把句子越写越长。结果 RefCOCOg 的表达式平均接近九个词,而 RefCOCO 系平均只有三四个词。
九个词意味着什么?表达式不再是"标签",而是真正的"短句"。"穿红衣服的女人"会被扩展成"站在黄车旁边、戴着草帽、手里拿着相机的女人",模型要同时处理多个名词短语、关系从句和物体间的空间关联。RefCOCOg 还提供了两套划分:umd 和 google,train/val/test 的构成完全不同——谷歌版本的划分由 Mao 等人提出。有的论文用 umd,有的用 google,两边的绝对分数直接放在一起比较没有意义。
同一张表上的分数,其实来自四套不同的规则
到这里,你应该能理解 benchmark 表上的数字为什么不能瞎比了。我把四个数据集的关键差异整理成一张表:
| 数据集 | 图像来源 | 采集方式 | 表达式特点 | 规模(约) | 测试集划分 |
|---|---|---|---|---|---|
| ReferItGame | ImageNet 子集(SAIAPR-12) | 双人猜词游戏 | 口语化,含大量语境废话 | 13 万条 | 按图像随机划分 |
| RefCOCO | MSCOCO | 双人猜词游戏 | 高频使用位置词 | 14.2 万条 | val / testA(人)/ testB(物) |
| RefCOCO+ | MSCOCO | 双人游戏,禁用位置词 | 纯外观属性描述 | 14.1 万条 | val / testA / testB |
| RefCOCOg | MSCOCO | AMT 众包 | 平均约 9 个词,含关系从句 | 10.4 万条 | umd 和 google 两套划分 |
除了表格里的差异,评估指标本身也有讲究。三个数据集统一用 top-1 accuracy:预测框和真值框的 IoU 大于 0.5 就算正确。这个阈值不算苛刻,所以看到 90+ 的分数时,要意识到那是"半对半错也算对"的标准。更隐蔽的坑是视觉 backbone:ResNet-101 时代刷到 86 的方法,换到 Swin-L 上可能直接 90+。backbone 换代带来的涨幅,有时比算法本身还大。
跨数据集泛化是另一个被低估的话题。直接用 RefCOCO 训练、然后测 RefCOCOg,分数会掉得很难看——模型没见过那么长的句子,也不适应叙述式的表达风格。反过来也不行:用 RefCOCOg 训练再测 RefCOCO,模型又可能因为处理长句的能力过强,反而在短句上过度纠结。所以看到"预训练 + 微调"的报告时,留个心眼:它的预训练数据是不是已经包含了与测试集同分布的内容。
所以,选哪个?
四个数据集其实在考察模型不同的能力:
- RefCOCO:空间关系推理 + 类别先验。适合做基础 benchmark,也适合验证模型能否学会空间捷径。
- RefCOCO+:外观属性理解。没有位置词可用,模型必须依赖颜色、衣物、姿态等视觉证据。
- RefCOCOg:长句理解与关系建模。语言侧难度最高,对视觉 backbone 的要求也最高。
- ReferItGame:真实口语噪声。目标类别无约束、表达随意,适合测鲁棒性而不是刷分数。
如果你只想要一个好看的分数,RefCOCO 最友好。但如果你想真正理解模型的推理过程,我建议把 RefCOCO+ 和 RefCOCOg 一起跑——一个堵住空间捷径,一个拉长句子,两个方向刚好覆盖视觉定位最核心的两个挑战。ReferItGame 更像试金石,用来检验模型面对真实人类表达时的抗噪能力。
这几个数据集都是 2014 到 2017 年间的产物,图像分辨率不高、标注风格各有偏向,远谈不上完美。但它们定义了视觉定位领域最基本的评测协议。理解了它们之间的区别,你才真正读得懂 benchmark 表上的每一个数字——而不是复制粘贴别人的结论。
附:数据获取与评测细节
三个数据集都可以从 官方仓库 下载。使用时的几个注意事项:ReferItGame 建议遵循论文自带的 train/val/test 划分;RefCOCO 和 RefCOCO+ 使用 unc 划分;RefCOCOg 的 umd 划分和 google 划分不要混用。评估统一切到 IoU 0.5 阈值下的 top-1 accuracy。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/581.html