跳到主要内容

让它给每个像素分类:删掉两块就够了(MaskCLIP)

这一章讲三件事: 「给每个像素一个答案」这件事为什么不能靠微调解决; 为什么删掉两个零件反而让分数翻倍; 以及这个只有几十行改动的东西,怎么变成了训练别的网络的免费标注机。 它在全书链条里的位置: 第 12 章处理「不知道东西在哪儿」的办法是换问法, 这一章的办法是往回看——它发现那个能力原本就在权重里,只是被最后一步平均掉了。 第 02 章第 5 节讲的那一层,就是这一章的手术台。

这也是全书「先做减法」这条线最纯粹的一次:整章的核心改动是删掉两个层,一个新参数都没加。

1. 顶层全景:一条先失败、再减法、再借力的链

想要的东西
「这张图里,哪些像素是狗、哪些是草、哪些是天空?」
—— 而这三个类的像素级标注,一张都没有

第一条路:按标准流程微调
│ 拿 CLIP 的权重初始化一个分割网络,再把文本嵌入映成分类器,一起训
✗ 学过的类 83.4,**没学过的类 3.7** —— 基本全废
│ 归因:**微调把 CLIP 原有的图文关联弄坏了**

掉头:不改任何权重,回去看最后那一层到底在算什么
✓ 发现:**每个位置的答案一直都在,只是最后被加权平均成了一个**

减法:删掉 query 和 key 两个嵌入层
✓ 8.3 → 18.5(**这一个动作就翻了一倍多**)

两个不用训练的精修:按 key 的相似度抹平、把不可能出现的类整个丢掉
✓ → 21.8

借力:拿它的输出当「标准答案」去训一个正经的分割网络

→ 23.9(同一条链);换到另一个基准上,没学过的类 3.7 → 72.8 → 86.1

图说:注意这条链的形状——**失败在前,而且失败的归因直接指出了成功的方向。**
「微调会破坏图文关联」这句话,同时是第一条路的死因和第二条路的设计原则。

这一章的主走查,从头到尾锁死同一套配置:一张「狗 + 草地 + 天空」的图, 主干是 CLIP 的 ResNet-50 版,量的是一个 59 类的场景分割数据集上的 mIoU。

做了什么分数
什么都不改,直接把最后那层里每个位置各自的那串数拿出来用
(这种「不做汇总、每个位置各留一份」的东西叫稠密特征)
8.3
删掉 query 和 key 两个嵌入层,把剩下两层改写成 1×1 卷积18.5
再加「按 key 的相似度把邻近块的预测抹平」21.0
再加「把在所有位置置信度都低于 0.5 的类整个丢掉」21.8
拿它的输出当标准答案,训一个正经的分割网络23.9

换成 ViT-B/16 版主干,同一条链是 9.0 → 21.7 → 23.9 → 25.5 → 31.11这些数全是书里的真数,那张「狗 + 草地 + 天空」的图是我们为了讲解设的场景。

⚠️ 后面第 8 节还会出现 3.7 / 72.8 / 86.1 这三个数。 它们来自另一个数据集、另一种设定,不是上面这条链的续集。 那一节会当场再说一遍。

2. 分割和分类差在哪:从一个答案变成几万个

这一节回答:为什么前面十二章那套东西不够用?

三种任务,一路加要求

任务要回答什么输出
分类(第 01–11 章)这张图是什么一个答案
检测(第 12 章)有哪些东西、各在哪个框里一串「框 + 类别」
分割(这一章)每一个像素分别属于谁一张和原图一样大的答案图

一张 512×512 的图有二十六万个像素,所以这类任务的正式叫法是稠密预测—— 稠密指的就是「答案要铺满整张图,一个位置都不能空」。

卡点摆在明面上

CLIP 训练时见到的是「整张图配一句话」,它从没见过任何像素级的标注。 书里对这一章的定位就是一句问话:这些特征里,有没有藏着足够的局部语义?2

作者的信念是「有」,理由挺有说服力3:

一句图注常常是「击球手准备挥棒,而裁判在旁边看着」这种句子。 要把这句话和正确的图配上,模型必须把图切成局部—— 「人」「球棒」「挥棒」「裁判」各自对上一块,而不是把整张图当一个整体处理只用类别标签训练是逼不出这种能力的。

评分标准也得先讲,不然后面的数没法读

① 对每一个类,把「模型说是这个类的像素」和「真正是这个类的像素」两堆比一比:
交集 ÷ 并集 —— 和第 12 章那个交并比是同一个算法,只是从「框」换成了「像素」
② 每个类各得一个分,再对所有类取平均

图说:这个平均分叫 **mIoU**,越高越好,满分 100。
**参照物很要紧:同一个数据集上,拿全部标注从头训一个专门的分割网络,大约能到 40 上下;
而本章第 ① 步的 8.3 是「一张标注都不给」的起点。**
(这个「40 上下」的参照是我们从本章零样本那张表里的全监督对照读出来的,
书里没有在这张表旁边给参照物。)

3. 先讲失败:按常规做法试了一遍,全废

书里把失败写在成功前面,这在论文改写的章节里很少见,值得慢读一遍。

常规做法是什么

分割网络的标准训练流程有三步4:

① 拿一个在大图像库上预训练好的主干当起点
② 在它后面加几个专门为分割设计的模块(新加的,权重是随机的)
③ 主干和新模块一起训

图说:这套流程是这一行十年来的默认动作,几乎所有分割网络都这么来的。

把 CLIP 塞进这套流程,只需要改两处

改法很自然4:

改哪儿改成什么为什么这么改
主干的起点从「大图像库预训练的权重」换成 CLIP 图像编码器的权重想借 CLIP 的本事
最后那个分类层加一个映射器(一个小网络,把输入的一串数变成另一串数;
这里是把类名的那串数变成分类层要用的权重)
想保住「换一批类名就换一个分类器」的能力

如果这行得通,那就完美了: 换类名就能分割新类,不用重训。

结果

书里说,试了一系列不同的映射器结构,结论是同一个4:

学过的类没学过的类
这套改造过的分割网络83.43.7

学过的类分数很漂亮,没学过的类基本等于零。 (3.7 意味着几乎每个像素都判错;这两个数出自第 8 节那张表,是另一个数据集上的。)

三条归因,落点是一句话

作者给了三条原因4:

  1. 主干的结构和 CLIP 的图像编码器不完全一样——一开始就不是同一个东西了;
  2. 从 CLIP 那里拿来的权重,在微调过程中被改掉了;
  3. 那个映射器只在学过的类上训过,所以它推广不出去。

三条合起来是一句话:微调把 CLIP 原有的图文关联破坏了。

这句话是全书出现次数最多的一条经验,而且是三处互相独立的证据之一: 这一章的失败实验是第一处;第 08 章的消融(四组参数里调视觉编码器那一组最差)是第二处; 第 12 章「提升新类不牺牲旧类」的对照是第三处。第 20 章会把三处放在一起结账。

4. 掉头:那个能力原本就在,只是被平均掉了

这一节是全章的枢纽,而它的全部内容第 02 章第 5 节已经铺好了。

回忆那一层

CLIP 的 ResNet 版图像编码器,最后一层叫注意力池化。第 02 章讲过它干什么:

① 把各位置的表示求个平均,得到一个「全图平均特征」
② 拿它当 query —— 全场只有这一个 query
③ 每个位置照常出自己的 key 和 value
④ 打分、摊平、按比例把各位置的 value 加权求和
⑤ 结果再过一个线性层,输出整张图的那串数

图说:这一层的产物是「整张图一串数」——第 01 章比相似度用的就是它。

关键的一步观察

作者盯住的是第 ④、⑤ 两步的顺序5:

输出 = 线性层( Σᵢ 权重ᵢ × valueᵢ )
= Σᵢ 权重ᵢ × 线性层( valueᵢ ) ← 线性层可以挪进求和里面

图说:右边那个式子里,**「线性层(valueᵢ)」是一个只跟位置 i 有关的东西。**
也就是说:整张图的那串数,本来就是**各个位置各自的那串数的加权平均**。

书里对这件事的说法是:每个位置上算出来的那个东西, 本身就已经捕捉到了这个位置丰富的局部语义,而且和 CLIP 文本嵌入里的词对得上5

一句话:各位置的答案一直都在,只是最后被平均成了一个。 想要稠密预测,不需要学任何新东西——只需要不做那次平均。

5. 减法:删掉两个层,分数翻倍

这一节是主走查第 ② 步,也是全书最能说明「先做减法」的一处。

具体删了什么

改动只有两条6:

改动一:**删掉 query 和 key 两个嵌入层**
—— 不再算「哪个位置该占多大权重」,因为根本不做加权求和了

改动二:把 value 那一层和最后的线性层,**改写成两个 1×1 卷积**
(1×1 卷积 = 对每个位置各做一次同样的线性变换,位置之间互不影响。
这不是换算法,只是换一种写法,好让它输出一张和特征图一样大的结果)

没改的:**文本编码器一个字都没动。**
每个类名过一遍文本编码器得到的那串数,直接当这一层的分类器权重用。

图说:整套改动**没有新增一个可训练的参数,也没有做一次训练**。
这就是它被叫做「零样本」的理由——第 01 章那种零样本,只是从整张图变成了每个像素。

结果

同一个主干、同一份权重,分数从 8.3 变 18.51

8.3 是什么: 是「什么都不改、直接把最后那层的稠密特征拿出来用」。 对照物摆在这儿才看得出分量:一个删除动作,把分数抬了一倍多。

为什么不改就不行

有一个很自然的反问:注意力本来就是自注意力,不改它照样能出每个位置的特征,何必删?

书里的回答很硬7:

因为预训练时全场只训过那一个 query(那个全图平均特征)。 别的位置从来没当过 query,所以拿它们当 query 算出来的注意力是没有意义的。

这正是那个 8.3 的来历——它就是「不删、直接用」的做法。

ViT 版也能做同一台手术

第 02 章说过,ViT 那一层和注意力池化只差两点:全局 query 来自 [CLS] 而不是平均值, 以及多一条把输入直接加到输出上的连线。所以换掉这两点,同一套删法照样成立7

6. 两个不花钱的精修

这一节是主走查第 ③、④ 步。两个办法都不需要训练,加上去就有。

精修一:按 key 的相似度把预测抹平

上一节把 key 删掉了,但 key 本身是训练过的、有信息的。书里把它捡回来用8:

想法:key 可以看成「这一块长什么样」的描述。
**长得像的两块,答案也该像。**

做法:算所有位置两两之间 key 的余弦相似度,
按这个相似度把每个位置的预测和别的位置的预测混一混

例:狗身上有一块被判成了「牛」,
但它周围几块的 key 和它很像、都判成「狗」→ 混完之后它也变成「狗」

图说:书里管这叫**键平滑**。18.5 → 21.0。
(那个「被判成牛的块」是我们为了说明设的例子。)

精修二:把根本不可能出现的类整个丢掉

问题很实在:数据集有 59 个类,而一张图里通常只出现三五个。 剩下那五十多个类全是干扰项8

做法:先扫一遍全图。**如果某个类在所有位置上的置信度都低于 0.5,
就把这个类整个从候选里删掉**,再重新判一次。

例:这张图里「飞机」在每个位置的置信度都不到 0.5 → 删掉「飞机」这个候选
→ 原本有几块因为「飞机」抢了分而判错的,现在判对了

图说:书里管这叫**提示去噪**。18.5 → 19.0;两个精修一起用 → **21.8**。

书里对两者的性格做了对照: 键平滑更激进——输出干净得多,但会被少数几个类主导9这是一条很诚实的观察:它不是纯赚的。

7. 借力:把它当免费的标注机

这一节是主走查第 ⑤ 步,也是这个方法真正被用起来的方式。

它自己的天花板在哪儿

问题不在方法,在架构:它必须用 CLIP 的图像编码器,而那是为分类设计的10分割这一行有更合适的网络结构,但那些结构用不了 CLIP 的权重。

绕法:让它去教别人

① 同一张图,同时喂给两个网络:
MaskCLIP(冻住不动) 和 一个正经的分割网络(要训的)
② MaskCLIP 吐出的那张答案图,**直接当成标准答案**
—— 这种「机器自己造出来的标准答案」叫**伪标签**
③ 拿它去训那个正经的分割网络
④ 把目标网络的分类器也换成 MaskCLIP 那个(类名嵌入当权重),
**这样它照样保得住「换一批类名就能分新类」的能力**

图说:注意这里没有一张人工标注。**整条流水线的监督信号,
全部来自一个不需要训练的模型的输出。**

训到一定程度会到顶。 书里说大约在标准训练轮次的十分之一处就已经到了上限 (训练轮次:训一个网络之前会先定好「把训练数据整个过多少遍」,这个预定的量就叫它)—— 因为到那时候学生已经比老师强了11

接下来换成让学生给自己出题: 拿目标网络自己的预测当伪标签继续训。 这个做法叫自训练。

为什么用伪标签而不是让它去学 CLIP 的特征

书里专门解释了这个选择12:

目标网络的结构和 CLIP 的图像编码器差得太远,逼它去对齐特征多半是次优的; 而且已有工作报告过,那种特征级的引导会在学过的类和没学过的类之间造成冲突用伪标签则观察不到学过的类掉分。

8. 效果:三组数,而且必须分清是哪一组

这一节最容易读岔,所以先把三组数摆开。

哪一组什么设定数长什么样
A. 主走查那条链一张标注都没有,59 个类全部没学过8.3 → 18.5 → 21.8 → 23.9(ResNet-50)
B. 零样本分割一部分类有标注,另一部分只有像素没标签没学过的类比此前最好的方法高 50.5 / 24.4 / 46.0
C. B 的消融表同上,只看其中一个数据集3.7 → 72.8 → 86.1

A 组:一张标注都不给

见第 1 节那张表。主干换成 ViT-B/16 之后全线更好(9.0 → 21.7 → 25.5 → 31.1), 书里给的理由在第 9 节。

B 组:比此前最好的方法高出四五十分

这一组的设定不一样: 一部分类有像素级标注,另一部分类的像素在训练时能看到、但没有标签 (这种设定业内叫直推式)。这时候只需要给没标签的那些像素配上伪标签13

没学过的类的分数,在三个数据集上分别比此前最好的方法高 50.5、24.4、46.0—— 满分是 100。 更值得记的一条:总分已经和全监督对照基本持平 (全监督:每一个像素都有人工标注,拿这些标注从头把网络训一遍——这是这一行的上限参照)。

C 组:那张最能说明问题的消融表

这就是第 3 节那个 3.7 的出处14:

做法学过的类没学过的类
常规微调改造出来的分割网络83.43.7
+ 用 MaskCLIP 的输出当伪标签89.572.8
+ 再自训练一轮88.8(掉了 0.7)86.1

三条读法:

  1. 3.7 → 72.8 是这本书里单个改动带来的最大跳变,而这个改动只是「换一个监督信号」;
  2. 自训练还能再抬 13 分多,代价是学过的类掉 0.7—— 作者把这归因于模型漂移(学生自己给自己出题,错误会慢慢累积);
  3. 学过的类不但没掉,还从 83.4 涨到了 89.5—— 这一条呼应第 7 节那个「用伪标签不会伤到学过的类」的判断。

9. 主干怎么选:一个很实际的结论

书里给了两条互相独立的理由,都指向 ViT 版。

① 下采样倍数。 ResNet 版把图缩小 32 倍才输出,ViT-B/16 只缩小 16 倍—— 输出的答案图分辨率差一倍,对稠密预测明显不利。 (下采样倍数:网络内部会一步步把图变小以省算力; 「缩小 32 倍」意思是 512×512 的图最后只剩 16×16 个位置,每个位置要负责原图上 32×32 个像素。)

② 抗损伤能力差得多。 书里在原图上加了各种常见的画质损伤,分五档严重程度15:

损伤ResNet-50ViT-B/16
不加(基准)18.521.7
高斯噪声,最轻一档13.719.6
高斯噪声,最重一档2.16.8

最重那一档 ResNet 版是 2.1——比什么都不做的 8.3 还低得多,等于全废。 ViT 版也掉得厉害,但还剩 6.8。

判断(我们的,不是书里的): 这张表比它在书里的位置(一个稳健性小节)重要得多。 它说明这一整套方法的下限,取决于主干在画质变差时还剩多少东西—— 而真实场景里的图,画质恰恰是不可控的。 如果错,会错在: 这些损伤是人工合成的标准损伤集, 和真实世界的模糊、压缩、低光可能不是一回事; 书里也没有测「训练时见过类似损伤」的情况。

10. 作者的判断与证据

书里给了证据的:

说法证据
常规微调在没学过的类上失败试了一系列映射器结构,结论一致;消融表里 3.7
删掉 query 和 key 有效8.3 → 18.5(ResNet)、9.0 → 21.7(ViT)
不删直接用不行那个 8.3 本身就是「不删」的分数
两个精修有效18.5 → 21.0(键平滑)、→ 19.0(提示去噪)、→ 21.8(一起)
键平滑更激进定性对比图:输出更干净但被少数类主导
当伪标签用能突破架构限制三个数据集上大幅领先,总分与全监督持平
用伪标签不伤学过的类83.4 → 89.5
自训练还能再抬,但有代价72.8 → 86.1,学过的类 89.5 → 88.8
ViT 版更适合稠密预测全线更好 + 抗损伤表

属于作者的推断:

  • 「CLIP 的特征里藏着局部语义」——书里用的措辞是「我们相信」, 这是一个先信了再去试的假设,后来被结果支持,但不是先验证再做的;
  • 微调失败的三条归因——书里用的是「我们假设主要是因为」,三条都没有被单独拆开验证;
  • 自训练掉 0.7 是模型漂移造成的——原文用的是「部分归因于」。

11. 边界与局限

① 它受制于 CLIP 的图像编码器。 这是书里自己承认的:方法本身没有架构自由度, 所以才需要第 7 节那套借力10

② ResNet 版在画质变差时基本全废(2.1)。见第 9 节。

③ 自训练会让学过的类轻微掉分(0.7)。书里照实写了,并给了归因。

④ 那两个精修没有单独的失败分析。 键平滑「会被少数几个类主导」这句是定性观察, 书里没有量化它在什么情况下会帮倒忙。

⑤ 三组数的设定各不相同,而书里没有在正文里明确警告这一点。 A 组是「全部类都没学过」,C 组是「一半类有标注」—— 3.7 和 8.3 都是「起点」,但它们不是同一条链上的起点。 这一条是我们读出来的,不是书里的提醒。

12. 可带走的

  1. 分割 = 每个像素都要一个答案,这类任务的正式叫法是稠密预测;
  2. 评分标准是 mIoU:每类算「交集 ÷ 并集」,再对所有类平均;
  3. 常规微调会失败,而且失败得很彻底:学过的类 83.4,没学过的类 3.7;
  4. 失败的归因是一句话:微调破坏了 CLIP 原有的图文关联—— 这是全书三处互相独立的证据之一;
  5. 成功的一招是纯减法:删掉 query 和 key 两个嵌入层,把剩下两层改写成 1×1 卷积;
  6. 理由是一步代数:整张图的答案本来就是各位置答案的加权平均, 所以各位置的答案一直都在,只是被平均掉了;
  7. 一个删除动作把 8.3 变成 18.5,没有新增一个参数、没有做一次训练;
  8. 不删直接用不行,因为预训练时全场只训过那一个 query;
  9. 两个免训练的精修:按 key 的相似度抹平(键平滑)、把不可能出现的类丢掉(提示去噪),到 21.8;
  10. 键平滑不是纯赚的:输出更干净,但会被少数几个类主导;
  11. 它的天花板是架构,绕法是当免费标注机:输出当伪标签去训一个正经的分割网络;
  12. 训到标准轮次的十分之一就到顶,之后换成自训练;
  13. 用伪标签而不是特征对齐,因为两个网络结构差太远,而且特征对齐会伤到学过的类;
  14. 主干选 ViT 而不是 ResNet:下采样 16 倍对 32 倍,而且画质变差时 ResNet 版基本全废(2.1)。

13. 原文地图

主题原书章原文位置
这一章要问什么:稠密特征里有没有局部语义11. Unlocking CLIP for Zero-Shot Dense Segmentationtext/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:39(搜「sufficient local and object-level semantics」)
为什么相信有:一句图注逼出局部对齐同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:75(搜「the man at bat readies to swing」)
常规流程三步,以及两处 CLIP 化改动同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:79(搜「de facto pipeline」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:81(搜「a mapper」)
失败与三条归因同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:91(搜「visual-language association of CLIP features has been broken」)
注意力池化的展开式与那步关键观察同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:95(搜「global attention pooling layer」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:103(搜「already captures a rich response of local semantics」)
两条改动:删 query/key、改写成 1×1 卷积同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:107(搜「removing the query and key embedding layers」)
为什么不改不行:只训过一个 query;ViT 版怎么改同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:109(搜「the only query trained during the CLIP pre-training」)
键平滑与提示去噪同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:115(搜「key smoothing and prompt denoising」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:121(搜「less than a threshold」)
键平滑更激进(定性)同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:161(搜「KS is more aggressive」)
架构受限,所以当伪标签生成器同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:125(搜「its network architecture is rigid」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:129(搜「pseudo-ground-truth labels」)
为什么用伪标签而不是特征蒸馏同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:133(搜「structurally distinct from the image encoder」)
训到 1/10 到顶,之后自训练同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:137(搜「1/10 of the standard training schedule」)
主表:8.3 / 18.5 / 21.8 / 23.9 与 ViT 版同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:183(搜「8.3」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:197(搜「18.5」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:253(搜「31.1」)
抗损伤表同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:289(搜「2.1」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:371(搜「various corruptions used in ImageNet-C」)
零样本设定与三个数据集的领先幅度同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:379(搜「inductive」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:385(搜「50.5, 24.4, and 46.0」)
消融表:3.7 / 72.8 / 86.1 与模型漂移同上text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:637(搜「from 3.7 to 72.8」) · text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:653(搜「3.7」)

Footnotes

  1. 出处:「11. Unlocking CLIP for Zero-Shot Dense Segmentation」表 11.1a 所在各段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:183,搜「8.3」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:197,搜「18.5」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:215,搜「21.8」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:247,搜「23.9」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:253,搜「31.1」)。表里两个数据集各一列,本章主走查用的是场景分割那一列;另一列(另一个更大的数据集)对应的四个数是 4.6 → 10.2 → 12.8 → 13.6(ResNet-50)与 4.3 → 12.5 → 14.6 → 18.0(ViT-B/16)。表注写明:表里的「基线」指的是不做任何改动、直接取 CLIP 图像编码器的稠密特征;两个精修不用在最后那一行上。 2

  2. 出处:同上第 39 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:39,搜「sufficient local and object-level semantics」)。原文:此前工作把 CLIP 特征用在图像级的全局任务上,这一章要查的是这些特征有没有编码足够的局部与物体级语义来支撑稠密预测;并列了三条它认为 CLIP 相对于纯图像标签训练的优势——局部语义、开放词表概念、上下文知识(物体共现关系与空间先验)。

  3. 出处:同上第 75 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:75,搜「the man at bat readies to swing」)。原文:要正确地把图像与这样一句描述对上,CLIP 必须把图像语义切成局部片段,并与「man」「bat」「swing」「man at bat」这些单独提到的概念对齐,而不是把图像当成一个整体处理;这种独特性是只用图像标签训练所不具备的。原文这句的措辞是「我们相信(We believe)」,是一个假设。

  4. 出处:同上第 79 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:79,搜「de facto pipeline」)、第 81 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:81,搜「a mapper」)与第 91 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:91,搜「visual-language association of CLIP features has been broken」)。原文:标准流程是「预训练权重初始化主干 → 加随机初始化的分割模块 → 一起微调」;两处 CLIP 化改动是换权重、加映射器把文本嵌入映成最后那个 1×1 卷积分类器的权重;试过一系列映射器结构,虽然在学过的类上表现不错,但全都无法令人满意地分割没学过的类;三条归因分别是主干结构不同、初始化权重被微调改掉、映射器只在学过的类上训过。原文措辞是「我们假设这主要是因为」。 83.4 / 3.7 这两个数出自表 11.3(见脚注 14),是另一个数据集上的零样本设定 2 3 4

  5. 出处:同上第 95 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:95,搜「global attention pooling layer」)与第 103 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:103,搜「already captures a rich response of local semantics」)。原文把注意力池化写成公式并做了一步变形:线性层可以挪到求和号里面,于是输出等于「各位置的 value 各自过线性层」的加权和;作者据此认为每个位置上那一项本身已经捕捉到该位置丰富的局部语义,并且与 CLIP 文本嵌入里的词对应得很好 2

  6. 出处:同上第 107 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:107,搜「removing the query and key embedding layers」)。原文:改动是(1)去掉 query 与 key 的嵌入层;(2)把 value 嵌入层与最后那个线性层分别改写成两个 1×1 卷积;文本编码器保持不变,每个类的文本嵌入直接当分类器;得到的模型输出的是像素级掩码而不是全图级预测,不需要任何微调与标注

  7. 出处:同上第 109 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:109,搜「the only query trained during the CLIP pre-training」)。原文回应了「既然是自注意力,不改也能出稠密特征」这个反问:因为预训练期间训练过的 query 只有那一个全局 query,这种朴素做法会失败;实验里把它当基线。同一段还写明 ViT 层与注意力池化只差两点(全局 query 来自 [CLS];多一条残差连接),换掉就能用。 2

  8. 出处:同上第 115 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:115,搜「key smoothing and prompt denoising」)与第 121 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:121,搜「less than a threshold」)。原文:key 在预训练时也训过,而原版把它丢掉了;key 可以视为对应图块的描述符,key 相似的图块应当给出相似的预测,于是按 key 的余弦相似度平滑预测;另外由于一张图里只出现少数类,其余类是干扰项,把在所有空间位置置信度都低于 0.5 的类整个移除 2

  9. 出处:同上第 161 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:161,搜「KS is more aggressive」)。图 11.3 的说明:提示去噪能看到一些干扰类被移除;键平滑更激进——输出噪声少得多,但会被少数几个类主导;最后那一档结果最好。

  10. 出处:同上第 125 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:125,搜「its network architecture is rigid」)。原文:MaskCLIP 虽然不需要训练,但它采用 CLIP 的图像编码器,网络结构是僵硬的;为了摆脱这个限制、用上专为分割设计的更先进架构,才有了把它当伪标签生成器的版本。 2

  11. 出处:同上第 137 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:137,搜「1/10 of the standard training schedule」)。原文:训练一定步数之后,被引导的目标网络会超过引导者,后者继续引导就成了次优;经验上这个上界大约出现在标准训练轮次的十分之一处;之后换成让目标模型给自己产伪标签,即自训练。

  12. 出处:同上第 133 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:133,搜「structurally distinct from the image encoder」)。原文:有些针对检测的工作是在 CLIP 的图像级特征与目标模型特征之间做知识蒸馏;这里改用伪标签,因为目标网络的分割专用结构与 CLIP 图像编码器差别很大,特征匹配式的蒸馏可能是次优的;而且已有工作报告特征级引导会在学过与没学过的类之间造成性能冲突,用伪标签则观察不到学过的类掉分

  13. 出处:同上第 379 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:379,搜「inductive」)与第 385 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:385,搜「50.5, 24.4, and 46.0」)。原文:零样本分割按「没标签的像素训练时是否可见」分成两种设定,本章属于可见的那一种;在三个数据集上,没学过的类的 mIoU 比此前最好的方法分别高 50.5、24.4、46.0(满分 100);总 mIoU 与全监督基线相当。

  14. 出处:同上第 637 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:637,搜「from 3.7 to 72.8」)与表 11.3 各行(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:653,搜「3.7」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:663,搜「72.8」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:673,搜「86.1」)。这张表的设定是另一个数据集上的零样本分割,不是主走查那条链。 原文:相比只换了分类器的那个改造版分割网络,用 MaskCLIP 引导把没学过的类的 mIoU 从 3.7 提到 72.8,自训练再提到 86.1;学过的类在自训练时轻微下降(89.5 → 88.8),部分归因于模型漂移。

  15. 出处:同上第 371 段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:371,搜「various corruptions used in ImageNet-C」)与表 11.1b 各段(text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:289,搜「2.1」;text/41-ch11-11-unlocking-clip-for-zero-shot-dense-segmentati.txt:291,搜「6.8」)。原文:在图像上施加一套标准的人工损伤,分不同严重档;表里高斯噪声最重一档,ResNet-50 版从 18.5 掉到 2.1,ViT-B/16 版从 21.7 掉到 6.8。这套损伤集是研究界的通用基准,不是真实世界采集的。