1. 这篇论文到底想解决什么问题?
MaskCLIP 最值得掌握的不是某个具体分割结构,而是它提出并验证了一个非常重要的问题:
一个主要为 image-level recognition 训练的 VLM,内部到底已经包含多少 local / spatial semantics?
传统上我们看到 CLIP 的能力是:
因此很容易认为 CLIP 只知道"这张图片是什么",而不知道"某个东西具体在哪里"。MaskCLIP 的核心观点却是:CLIP 在 image-text contrastive learning 的过程中,其内部其实已经隐式学习了相当丰富的局部语义,只是这些信息最后被 global pooling 汇聚起来,没有直接暴露成 dense prediction。 论文的目的就是在尽量不改变 CLIP、也不使用 segmentation annotation 的情况下,把这些潜在的 local semantics 提取出来。
因此整篇论文最核心的思想可以先记成:
MaskCLIP 更像是在 extraction CLIP 已有的 spatial semantics,而不是从零教 CLIP 学 segmentation。
2. 为什么 image-level CLIP 内部会存在 local semantics?
CLIP 虽然训练目标是 image-text alignment,但它训练时看到的文本通常不是单一类别标签,而是自然语言 caption。例如一句描述可能包含:
为了把整张图片和这样复杂的 caption 对齐,模型不能完全把图片看成一个不可分割的整体,而必须在特征内部某种程度地区分不同局部区域及其语义。论文举例说明,为了正确匹配一句复杂描述,CLIP 必须把图像语义分解到局部区域,并与 man、bat、swing 等概念建立对应关系。
因此作者的判断可以概括为:
image-text alignment 在训练 global semantics 的同时,也隐式产生了 local semantic organization。
但这里要注意:这并不意味着 CLIP 已经具有完整的 pixel-perfect segmentation 能力,更准确地说是它内部已经存在一定程度的 region / patch-level semantic localization。
3. 原始 CLIP 为什么没有直接表现出这种 local semantics?
以 CLIP-ResNet 最后的 global attention pooling 为例,输入 feature map 中每个 spatial location 都有一个特征:
每个位置分别产生 key 和 value:。所有空间位置先平均得到全局特征
,再产生一个 global query:
。这个唯一的 global query 与所有位置计算 attention weight:
最后把各个位置的 feature 加权汇聚:
其中 是 CLIP 原本 attention pooling 中最后的 linear projection,并不是 MaskCLIP 新增加的网络。论文指出,每个位置实际上都已经存在
,而最终的 global representation 只是把这些局部特征进一步汇聚。
所以原始 CLIP 可以简单理解为:
也就是说,局部信息并不是完全不存在,而是在最终输出阶段被压缩成了一个 global image representation。
4. MaskCLIP 的核心操作:不再把 local semantics 汇聚掉
这是整篇论文技术上最重要、也最容易理解的一步。作者发现:在进行 global pooling 之前,每个位置的 已经包含比较丰富的 local semantics,而且仍然保持 CLIP 原有的 vision-language correspondence。
因此作者的想法非常直接:既然每个 已经有语义,那就不要再把它们全部汇聚成一个 global vector。
于是原本:
被改成直接保留:
由于这些特征仍然对应原来的 spatial locations,把它们重新排列以后就形成:
也就是一张 dense semantic feature map。
实际实现中,MaskCLIP 去掉了 query 和 key embedding 对最终 dense prediction 的作用,并把 value embedding 和最后的 linear projection 改写成对应的
convolution,从而直接保留每个 spatial location 的输出。重要的是,这些权重来自原本已经训练好的 CLIP,并不是重新训练一个新的 segmentation feature extractor。
因此这一部分最适合记成一句话:
CLIP 原来把 local semantic features 聚合掉了;MaskCLIP 只是选择在聚合之前把它们取出来。
5. 有了 dense semantic feature,怎么得到 segmentation?
假设现在每个位置的视觉特征为:
同时给定需要分割的类别,例如 dog、cat、grass、sky,将这些文本送进原始 CLIP Text Encoder 得到:
之后不需要额外训练 classifier,而是直接使用 CLIP 原有的 vision-language alignment,对每个位置和每个类别做相似度:
于是每一个 spatial location 都可以判断自己最接近哪个文本类别。整个过程可以概括为:
因此 MaskCLIP 的本质并不是重新学习一个 segmentation classifier,而是把 原来 image-text similarity 的思想,从整张图扩展到了每一个 spatial location。作者强调,它没有增加额外的映射参数,而是直接保留原始 CLIP 的 visual-language association。
6. 为什么作者不直接 fine-tune CLIP 做 segmentation?
作者最开始其实尝试过一个非常自然的方案:
然后使用 segmentation data 正常 fine-tune。这个方法在 seen classes 上可以取得不错结果,但 unseen classes 的性能明显下降。作者认为,一个关键原因是这种 fine-tuning 破坏了 CLIP 原本已经建立好的 vision-language association:backbone 结构发生变化、CLIP image encoder 的参数被更新,同时又加入了只在 seen classes 上训练的 mapper,因此模型逐渐变成一个针对训练类别优化的 closed-set segmentation model,而失去了原本的 open-vocabulary generalization。
所以论文并不是简单得出:fine-tuning不好,而是发现了一个更重要的 trade-off:
针对 seen segmentation classes 优化 spatial prediction,可能会牺牲 CLIP 原有的 open-vocabulary semantics。
这也是为什么 MaskCLIP 采取完全相反的思路:
不要急着重新教 CLIP segmentation,先看看 CLIP 已经会什么。
7. MaskCLIP+:如果 CLIP spatial precision 不够怎么办?
MaskCLIP 虽然可以直接产生 segmentation,但它本质上仍然是一个为了 image classification 设计的 CLIP image encoder,因此它的 spatial resolution、boundary precision 和 dense modeling 能力都有限。
作者没有继续大幅 fine-tune CLIP,而是把两个能力拆开:
CLIP负责 semantic / open-vocabulary knowledge segmentation network负责 precise spatial prediction
具体做法是让 frozen MaskCLIP 先生成 pseudo labels:
然后用这些 pseudo labels 去训练 DeepLab 等专门的 segmentation network:
这就是 MaskCLIP+。
因此它实际上给出了一个非常漂亮的能力分工:
CLIP提供"what / roughly where",segmentation network学习"exactly which pixels"。
这也给出了关于"保留原有能力与微调之间界限"的一个很实用的原则:尽量不要直接破坏负责 open-vocabulary generalization 的 CLIP representation space,而把新的 spatial capability 放在独立模块或独立网络中学习。 论文并没有给出诸如"冻结多少层"或"learning rate 应该小于多少"这样的明确数值界限,它给的是这种结构层面的设计原则。
8. 两个额外 refinement:Key Smoothing 与 Prompt Denoising
MaskCLIP 本身的 dense prediction 比较 noisy,所以作者还提出了两个不需要训练的 refinement。
Key Smoothing 利用了最后 attention layer 中原本就存在的 key feature 。作者认为,如果两个位置的 key feature 很相似,它们的 prediction 也应该比较接近,因此利用不同位置之间的 key similarity 对预测进行 smoothing。这相当于利用 patch 之间的视觉相似性增强 spatial consistency。
Prompt Denoising 针对的是 open-vocabulary 分类时的 distractor 问题。例如给模型很多候选类别,但一张图片里实际上只有少数类别存在。如果某个文本类别在所有 spatial locations 上的 confidence 都很低,就把该 prompt 去掉,从而减少无关类别对 dense prediction 的干扰。
这两个模块不是论文最核心的创新,理解到"一个增强 spatial consistency,一个去掉不可能存在的类别"即可。
9. 实验真正证明了什么?
首先,在完全没有 segmentation annotation 的 annotation-free setting 下,MaskCLIP 就已经能直接做 segmentation。例如 PASCAL Context 上,ViT-B/16 的普通 dense CLIP baseline 是 9.0 mIoU,MaskCLIP 提升到 21.7,加 Key Smoothing 和 Prompt Denoising 后达到 25.5,而 MaskCLIP+ 达到 31.1。COCO-Stuff 上也表现出类似趋势。
这说明:
CLIP 内部的 local semantics 不只是可视化上的现象,而是真的可以被用于 dense prediction。
其次,在 transductive zero-shot segmentation 中,MaskCLIP+ 对 unseen classes 的提升非常明显:PASCAL VOC 的 unseen mIoU 从此前 35.6 提升到 86.1,PASCAL Context 从 20.7 提升到 66.7,COCO-Stuff 从 30.3 提升到 54.7。
作者还在 web images 上测试了 red car、yellow car、Batman、Joker 等 fine-grained 或 novel concepts,说明这种 dense semantics 继承了 CLIP 的 open-vocabulary property。
更有意义的是 fine-tuning 对比:单纯 adapted DeepLabv2 在 PASCAL VOC unseen classes 上只有 3.7 mIoU,而加入 MaskCLIP-guided learning 后达到 72.8,再加入 self-training 后达到 86.1。
所以这组实验不是单纯证明"MaskCLIP 比某个 baseline 好",而是在说明:
CLIP 原本的 open-vocabulary semantics 非常有价值,关键问题是如何把它转换成 dense prediction,而不要在转换过程中把它破坏掉。
10. 这篇论文对 VLM + Segmentation 最重要的启发
从研究角度看,我觉得这篇论文最应该留下的是下面这个能力分解:
MaskCLIP 表明,CLIP 的情况大致是:
semantic understanding:很强
rough spatial grounding:已经隐式存在不少
precise boundary / dense spatial modeling:明显不足
所以问题不能简单理解为:
"VLM 不会 segmentation,因此要给它学习一种全新的 segmentation 能力。"
更值得问的是:
VLM 已经知道多少 spatial information?
以及:
我们增加的新能力到底是 semantic knowledge,还是把已有 semantic knowledge 更好地 extraction / grounding 到空间中?
MaskCLIP 给出的答案更接近:
semantic localization 在很大程度上已经存在,我们需要做的是 expose / extract / preserve / refine。
但它同时也表明:
粗粒度 semantic localization 精确 pixel grounding
因此更合理的研究问题可能不是重新教 VLM "什么是 dog",而是研究:
如何把 VLM 已经拥有的 semantic knowledge 更完整、更稳定地映射到 region / pixel space。
最后用一条主线记住 MaskCLIP
整篇论文其实可以压缩成:
CLIP 中已经存在 local semantics→ 原本被 global pooling 隐藏 → MaskCLIP 在 pooling 前把 提取出来 → 与 text embedding 做 dense similarity → 直接得到 open-vocabulary segmentation
而 MaskCLIP+ 再进一步:
CLIP 保留 semantic generalization → 生成 pseudo labels → segmentation network 学习更精确的 spatial prediction
如果只记一句话,可以记:
CLIP 并不是完全不知道"dog 在哪里",而是它原本只需要最终告诉你"这张图有 dog";MaskCLIP 做的,就是在这些局部语义被压成 global representation 之前,把它们拿出来。
***重要***
不微调因为会破坏其原有的open vocabulary能力,而是增加能精确分割的能力