先把它记成一个非常简单的框架:
OVS 性能瓶颈 = Region Classification + Mask Proposal + Train/Test Labeling Mismatch
作者通过一系列 Oracle 实验,把这几个问题一个一个拆开来看。论文观察到,近年来 OVS 性能已经出现明显的平台期,而且 COCO 上训练、ADE20K 上测试的 open-vocabulary 方法,和直接在 ADE20K 上监督训练的模型仍然有接近 20 个点的差距。
1. 论文想回答什么?
我们之前一直在讨论一个问题:
为什么 image-level VLM 很强, 但到了 dense / pixel-level prediction 就变差?
MaskCLIP、DenseCLIP、CAT-Seg 等工作更多是在想:
怎么把 CLIP 的语义能力更好地下沉到 pixel / region
而这篇论文换了一个角度:
假如把 OVS 系统里的某一个组件直接换成"完美组件",性能到底能提高多少?
这样就可以判断真正卡在哪里。
作者主要研究的是 mask-based OVS,具体选了:FC-CLIP、 MAFT+
它们都是:CLIP + Mask Transformer
核心把任务拆成:Mask Localization + Mask Recognition
即先产生 mask,再判断这个 mask 是什么类别。
这点其实和 OpenSeg 的思路非常接近:region/mask proposal → region feature → text matching
2. 研究的标准 pipeline
大致可以记成:
Mask Decoder 会产生很多候选 mask,同时每个 mask 有自己的 embedding:
另一方面:
然后 判断这个 mask 属于哪个类别。
除此之外,还有一个特殊类别:no-object
如果一个 query 被判断为 no-object:,它就不会进入最终 segmentation。论文特别指出,这个 no-object embedding 是在训练集上学出来的,这为后面的问题埋下了伏笔。
所以先记住:250 个左右 candidate masks → 选择/过滤 → 分类 → 最终 segmentation
3. 第一组实验:如果 Mask 完全正确,CLIP 能不能认对?
这就是 Segmentation Oracle。
直接把模型产生的 mask 换成 Ground Truth Mask,完全不考虑 segmentation boundary 的问题。
对于每个 GT mask:
用 mask pooling :
然后与所有类别的 CLIP text embedding 比较:
给出完美的区域我,看 CLIP 能不能认出是什么?
结果:仍然不够好。
最好的 ConvNeXt-Large 即使使用 perfect segmentation,也只有 41.8 PQ,仍然比对应的 in-domain supervised model 低接近 8 个点。作者因此得到:
Finding 1: CLIP 的 region-level classification 本身就是瓶颈
不是说只要 segmentation mask 准确,CLIP 的强大语义能力就一定能正确识别这个区域。
这和前面学习 MaskCLIP / CAT-Seg 的问题正好对应上:
CLIP 知道:整张图片 dog
并不代表:任意一个准确 dog region dog 都能稳定成立。
4. 第二组实验:如果 Classification 完全正确呢?
作者反过来做 Classification Oracle。
这一次保留模型自己的 mask:
但是,只要一个 mask 和 GT overlap 足够:
作者就直接把它的类别改成正确答案。
也就是:Mask 还是模型自己的,Category 直接给正确答案
结果 FC-CLIP:26.8 → 39.8
MAFT+:26.9 → 39.2
提升非常明显,尤其 unseen class 提升更大。说明 classification 确实是大问题。
但问题来了:即使分类完全正确,性能还是明显低于 in-domain model
说明剩下的问题就在:Mask Proposal
所以现在已经得到两个瓶颈:Classification 不够好 + Proposal 不够好
5. 最有意思的实验:模型是真的"没有产生正确 mask"吗?
这里是我觉得这篇论文最值得你关注的一部分。
Mask decoder 实际上不是只输出最终那几个 mask,而是先生成很多候选:
论文中最多:N=250
于是作者问:
有没有可能正确 mask 其实已经在这 250 个里面,只是最后被选错、过滤掉了?
于是做 **Mask Selection Oracle:**利用 GT,从全部 candidate masks 中挑出最匹配 GT 的那些 mask。
理论上:Oracle Selection 应该性能提升。
结果第一次居然:性能下降,FC-CLIP:26.8 → 21.9
6. 为什么"选对 mask"反而变差?------no-object
虽然 Oracle 已经把正确 candidate mask 找出来了:
但 classifier 可能说: → no-object,于是直接 discard
因此:正确的 mask 其实已经生成了, 但被 no-object filtering 干掉了
作者于是直接删除 no-object logit,不允许这些 oracle-selected masks 被扔掉。
结果 FC-CLIP:26.8 → 36.7,MAFT+:26.9 → 33.7
unseen class 的提升尤其明显。
所以得到非常重要的 Finding 3:很多 valid mask 不是"没找到", 而是"找到后被错删了"。
真正的问题变成:Proposal Generation → Proposal Selection
7. 那为什么 unseen object 特别容易被当成 no-object?
这里就进入这篇论文第二个非常重要的观点: Training supervision Test objective
举论文里的例子:painting。
ADE20K 认为墙上的画应该是一个独立 object:
wall + painting
但在 COCO 中,这个 painting 往往:unlabeled,或者直接:merged into wall
那么模型训练的时候,如果它产生:
训练 supervision 反而可能告诉它:
于是模型学会:
看到墙上的 painting mask → 不应该输出。
但是 ADE20K 中 painting 又是 evaluation 想要的类别。类似地还有 pillow。
所以问题已经不只是:COCO 没见过 ADE20K 的 class name,而是更严重的:
COCO 教模型"不应该把这个区域单独分出来",但 ADE20K 却要求:"把这个区域单独分出来"
论文把它称作 labeling policy conflict / shift。
这也是Finding 5:训练 annotation policy 和测试 annotation policy 冲突
8. 所以这篇论文最后真正得出的结论是什么?
如果把整篇论文压缩成一张逻辑图,我认为就是:Open-Vocabulary Segmentation
现在有三层问题:
1.VLM region recognition 不够好
2.Mask proposal / selection 不够好
3.taxonomy 与 test taxonomy 的定义方式冲突
尤其第三点很容易被忽视。
以前我们可能自然认为:Open Vocabulary = 没见过 dog → 测试靠 CLIP 认识 dog
但这篇论文提醒我们,更困难的情况其实是:
训练阶段不仅没要求你预测它, 甚至明确训练你"不要预测它"
这时候再强的 text classifier 也没用,因为:正确 mask → no-object → discard
CLIP 根本没有机会分类它。
9. 作者认为未来应该怎么做?
作者最后给出的方向主要有三类。
1、benchmark / taxonomy 本身要处理好:train taxonomy → test taxonomy,不能存在大量互相矛盾的 annotation policy。
2、也是非常有意思的一点:Vocabulary-aware Proposal Generator
现在的 proposal generator 基本是:
无论测试 vocabulary 是:dog, cat 还是:dog head, dog body, tail,它产生的 proposals 基本一样。作者认为未来应该变成类似:
即:
想分什么,会影响如何产生 mask。
3、引入更丰富的 annotation guidance,如 few-shot segmentation examples 或 natural language annotation guidelines,让模型知道某个类别到底应该怎么划边界、什么算独立对象。
10. 和之前看的论文放到一起理解
到这里其实可以把你最近学的东西串起来了。
MaskCLIP / DenseCLIP 主要在问:CLIP 里到底有没有 dense semantic information?
CAT-Seg 在问:粗糙的 pixel-text similarity 怎样通过 cost aggregation 变好?
OpenSeg / SAN 这类 mask-based 方法更多是在解决:怎样得到 region,再用 VLM 做 open-vocabulary recognition?
而这篇论文是在这些工作之后问:组件都已经做了这么多改进, 为什么 OVS 还是上不去?
它给出的答案是:不是一个组件的问题
而是 dense VLM representation 还不够好,同时 mask proposal / selection 也有问题,而且更底层还有 training supervision 本身可能和 open-vocabulary evaluation 冲突。
你现阶段读这篇论文,我觉得最值得真正记住的不是具体 PQ 数字,而是下面这条逻辑链:
Perfect Mask → Classification 仍然不好,Perfect Classification → Segmentation 仍然不好
继续往下追:很多 good masks 其实已经生成 → 被 no-object 丢弃
最终追到:COCO supervision ADE20K evaluation policy
所以这篇论文真正的核心不是"提出了一个更强 OVS",而是告诉你:
OVS 的问题不仅是如何学到更好的 dense feature, 还包括模型到底应该生成什么 region, 以及训练数据有没有告诉它正确的 segmentation policy。
1、
CLIP 强大的 image-level semantics 强大的 region-level semantics
CLIP 可能认识 dog, 但不一定能从一个局部 dense region representation 中, 稳定、精确地区分 dog 与所有其他类别。
论文自己最终概括为:当前 VLM 缺少足够好的 dense representation / region-level classification ability。
2、mask proposal 为什么会成为 bottleneck?
mask proposal bottleneck 实际上包括两层:Proposal Generation + Proposal Selection
即 "有没有生成正确 region" 和 "生成以后有没有留下来"都有问题。
4、当前方法到底主要卡在 semantics,还是 spatial localization?
|-------------------------------------------------------------------------------------------|
| 两者都是独立 bottleneck;但 annotation-policy shift 导致的很多严重错误首先表现为 proposal / spatial failure |
最值得记住的是最后这一层:
OVS 并不是简单的 "先做好 class-agnostic segmentation,再让 CLIP 分类"就可以解决。
因为所谓的:class-agnostic mask 其实并没有真正脱离 vocabulary。
**你认为哪些区域值得成为一个独立 mask,本身就受到训练 taxonomy / annotation policy 的影响。**这其实也是这篇论文对前面 OpenSeg、SAN 这类「proposal + VLM classification」路线最重要的反思