training-free clip segmentation

SCLIP、ProxyCLIP 与 GLA-CLIP:从单窗口聚合到跨窗口聚合

1. 阅读目标

本文解释三种 training-free open-vocabulary semantic segmentation(免额外训练的开放词汇语义分割)方法:

  1. SCLIP:使用 CLIP 自身的 patch 相关性改造最后一层注意力。
  2. ProxyCLIP:使用 DINO 等视觉基础模型的 patch 相似度,指导 CLIP Value 特征聚合。
  3. GLA-CLIP:将前两类方法原本局限于单个滑动窗口的聚合,扩展为跨窗口的全图聚合。

这里的 "training-free" 并不是模型从未训练过,而是:不使用目标分割数据集再次更新 CLIP、DINO 等预训练模型的参数。 推理时仍然需要给出候选类别名称,如 carroadperson


2. 为什么 CLIP 能产生 patch 特征?

以 ViT 版本的 CLIP 为例,输入图像首先被划分为若干 patch:

x 1 , x 2 , ... , x N x_1,x_2,\ldots,x_N x1,x2,...,xN

经过 Transformer 后,模型内部保留对应的 patch token:

z 1 , z 2 , ... , z N z_1,z_2,\ldots,z_N z1,z2,...,zN

CLIP 预训练监督的是整幅图像与整句文本的匹配,并没有直接要求每个 patch 对应一个文本类别。因此:

patch 特征可以与文本特征计算相似度,但 CLIP 的训练目标并不保证这种局部对应一定准确。

Training-free 分割方法所做的事情,就是尽量从 CLIP 内部提取、整理这些不够稳定的局部语义。

最终,位置 (i) 的视觉特征 (f_i) 与类别文本特征 (t_c) 比较:

s i , c = cos ⁡ ( f i , t c ) , y ^ i = arg ⁡ max ⁡ c s i , c s_{i,c}=\cos(f_i,t_c),\qquad \hat y_i=\arg\max_c s_{i,c} si,c=cos(fi,tc),y^i=argcmaxsi,c

每个 patch 得到类别后,再上采样为像素级分割图。


3. 什么是"单窗口聚合"?

3.1 为什么要使用滑动窗口?

CLIP 通常在较低、固定分辨率上预训练。面对高分辨率图像,直接缩小整图会丢失小目标和边界信息;直接增加 ViT token 数量又会显著增加计算量,并偏离预训练时的输入尺度。

常见处理方式是把原图裁成多个有重叠的窗口:

text 复制代码
高分辨率原图

┌────────┬────────┬────────┐
│ 窗口 1 │ 窗口 2 │ 窗口 3 │
├────────┼────────┼────────┤
│ 窗口 4 │ 窗口 5 │ 窗口 6 │
└────────┴────────┴────────┘

每个窗口被当成一张独立图像,分别运行模型:

python 复制代码
for window in sliding_windows(image):
    clip_features = CLIP(window)
    prediction = segment(clip_features)

3.2 单窗口聚合的数学含义

假设每个窗口包含 (N) 个 patch。处理窗口 1 时,只能得到该窗口的 Value:

V ( 1 ) = v 1 ( 1 ) , ... , v N ( 1 ) V^{(1)}=v_1\^{(1)},\\ldots,v_N\^{(1)} V(1)=v1(1),...,vN(1)

所以注意力矩阵只能描述当前窗口内部的 patch 关系:

A ( 1 ) ∈ R N × N A^{(1)}\in\mathbb R^{N\times N} A(1)∈RN×N

聚合结果为:

F ( 1 ) = A ( 1 ) V ( 1 ) F^{(1)}=A^{(1)}V^{(1)} F(1)=A(1)V(1)

窗口 2 会独立计算:

F ( 2 ) = A ( 2 ) V ( 2 ) F^{(2)}=A^{(2)}V^{(2)} F(2)=A(2)V(2)

因此窗口 1 中的 patch 不能读取窗口 2 的特征:

v i ( 1 ) ↚ v j ( 2 ) v_i^{(1)}\not\leftarrow v_j^{(2)} vi(1)←vj(2)

即使两个窗口存在重叠,传统做法通常也只是在预测完成之后,对重叠区域的 logits 取平均。这属于输出融合 ,不是特征阶段的跨窗口交流


4. SCLIP:用 CLIP 自己建立 patch 关系

4.1 原始 CLIP 注意力

CLIP 的一个标准自注意力层包含:

Q = Z W Q , K = Z W K , V = Z W V Q=ZW_Q,\qquad K=ZW_K,\qquad V=ZW_V Q=ZWQ,K=ZWK,V=ZWV

A CLIP = o p e r a t o r n a m e S o f t m a x ( Q K ⊤ d ) A_{\text{CLIP}}=operatorname{Softmax}\left(\frac{QK^\top}{\sqrt d}\right) ACLIP=operatornameSoftmax(d QK⊤)

F = A CLIP V F=A_{\text{CLIP}}V F=ACLIPV

原始注意力是为了整图级图文对齐训练的,容易集中于最有判别力的区域,不一定适合完整、精细的像素级定位。

4.2 SCLIP 的核心改动

SCLIP 提出 Correlative Self-Attention(CSA),利用 CLIP 自己的同类型特征相关性,例如 (QQ^\top) 和 (KK^\top),取代原始的 (QK^\top) 关系,再用于聚合 CLIP Value。

概念上可写成:

A SCLIP ← Correlation ⁡ ( Q Q ⊤ , K K ⊤ ) A_{\text{SCLIP}} \leftarrow \operatorname{Correlation}(QQ^\top,KK^\top) ASCLIP←Correlation(QQ⊤,KK⊤)

F SCLIP = o p e r a t o r n a m e P r o j CLIP ( A SCLIP V CLIP ) F_{\text{SCLIP}} =operatorname{Proj}{\text{CLIP}} (A{\text{SCLIP}}V_{\text{CLIP}}) FSCLIP=operatornameProjCLIP(ASCLIPVCLIP)

这里使用概念式而不是把不同实现细节压缩成一个不准确的等式;精确定义应以原论文和官方代码为准。

4.3 直观理解

CLIP 自己判断哪些 patch 相似,再让相似 patch 之间共享 CLIP 的语义信息。

SCLIP 完全使用 CLIP 内部特征:

CLIP 关系图 + CLIP Value \boxed{\text{CLIP 关系图}+\text{CLIP Value}} CLIP 关系图+CLIP Value

4.4 优点与风险

优点:

  • 不需要额外视觉模型;
  • 关系特征和被传播内容都来自 CLIP,跨模型错配相对较少;
  • 方法简单,额外成本相对较低。

风险:

  • CLIP 没有接受像素级监督;
  • CLIP 自身的 patch 关系和边界定位可能不准确;
  • 改造注意力只能利用已有的弱局部语义,不能凭空产生可靠分割知识。

5. ProxyCLIP:用 DINO 关系聚合 CLIP Value

5.1 核心动机

ProxyCLIP 认为:CLIP 擅长图文语义,但局部空间一致性较弱;DINO 等视觉基础模型通常能提供更好的 patch 对应关系,但没有直接的开放词汇文本分类能力。

因此它让二者分工:

  • DINO:决定哪些 patch 应该相互传递信息;
  • CLIP:提供被传播的视觉---文本语义特征。

5.2 计算过程

先提取 DINO patch 特征:

F DINO = d 1 , d 2 , ... , d N F_{\text{DINO}}=d_1,d_2,\\ldots,d_N FDINO=d1,d2,...,dN

计算两两相似度:

S DINO = F DINO F DINO ⊤ S_{\text{DINO}}=F_{\text{DINO}}F_{\text{DINO}}^\top SDINO=FDINOFDINO⊤

经过归一化、阈值筛选和 Softmax 得到 proxy attention:

A Proxy = Softmax ⁡ ( Normalize ⁡ ( S DINO ) + M ) A_{\text{Proxy}} =\operatorname{Softmax} (\operatorname{Normalize}(S_{\text{DINO}})+M) AProxy=Softmax(Normalize(SDINO)+M)

然后聚合 CLIP 最后一层的 Value:

F ProxyCLIP = Proj ⁡ CLIP ( A Proxy V CLIP ) F_{\text{ProxyCLIP}} =\operatorname{Proj}{\text{CLIP}} (A{\text{Proxy}}V_{\text{CLIP}}) FProxyCLIP=ProjCLIP(AProxyVCLIP)

注意:这里不是直接把 DINO 特征与文本比较,也不是直接搬用 DINO Transformer 的原生注意力矩阵,而是用 DINO patch 特征构造亲和矩阵,再用它加权 CLIP Value。

ProxyCLIP 可以概括为:

DINO 亲和图 + CLIP Value \boxed{\text{DINO 亲和图}+\text{CLIP Value}} DINO 亲和图+CLIP Value

5.3 直观例子

如果 DINO 判断两个车身 patch 很相似:

A 12 = 0.8 A_{12}=0.8 A12=0.8

那么位置 1 的新 CLIP 特征可能为:

v ~ 1 = 0.6 v 1 + 0.3 v 2 + 0.1 v 3 \tilde v_1=0.6v_1+0.3v_2+0.1v_3 v~1=0.6v1+0.3v2+0.1v3

位置 2 的 CLIP 语义被传播到位置 1,从而使同一区域的预测更一致。

5.4 优点与风险

优点:

  • DINO 通常具有比 CLIP 更好的局部结构和区域一致性;
  • 可以减少碎片化预测,使物体区域更连续;
  • 不需要重新训练 CLIP 或 DINO。

风险:

  • DINO 相似不等于真实语义类别相同;
  • DINO 与 CLIP 没有联合训练;
  • DINO 的关系未必适合传播 CLIP Value;
  • 错误亲和关系会造成跨类别特征污染;
  • 需要额外运行 DINO,增加计算量和显存占用。

从保守角度看,ProxyCLIP 更像是:

以 DINO 亲和矩阵为平滑核,对 CLIP 局部语义特征进行加权平滑。


6. GLA-CLIP:从单窗口扩展到全图窗口

6.1 它发现的问题

SCLIP 和 ProxyCLIP 在滑窗推理中通常分别处理每个窗口。若一个物体跨越多个窗口,不同窗口可能产生不同判断,造成:

  • 同一物体跨窗口类别不一致;
  • 窗口边界出现断裂;
  • 形成规则的网格状伪影。

GLA-CLIP 的主要创新不是重新发明 training-free 分割,而是处理这种跨窗口语义割裂

6.2 全局 Key-Value 扩展

首先分别从所有窗口提取特征:

( K ( 1 ) , V ( 1 ) ) , ... , ( K ( L ) , V ( L ) ) (K^{(1)},V^{(1)}),\ldots,(K^{(L)},V^{(L)}) (K(1),V(1)),...,(K(L),V(L))

然后把所有窗口的 Key 和 Value 拼接:

K global = K ( 1 ) ; K ( 2 ) ; ... ; K ( L ) K_{\text{global}} =K\^{(1)};K\^{(2)};\\ldots;K\^{(L)} Kglobal=K(1);K(2);...;K(L)

V global = V ( 1 ) ; V ( 2 ) ; ... ; V ( L ) V_{\text{global}} =V\^{(1)};V\^{(2)};\\ldots;V\^{(L)} Vglobal=V(1);V(2);...;V(L)

当前窗口的 Query 可以检索所有窗口:

A GLA = Q local K global ⊤ ∈ R N × L N A_{\text{GLA}} =Q_{\text{local}}K_{\text{global}}^\top \in\mathbb R^{N\times LN} AGLA=QlocalKglobal⊤∈RN×LN

F GLA = Proj ⁡ ( A GLA V global ) F_{\text{GLA}} =\operatorname{Proj} (A_{\text{GLA}}V_{\text{global}}) FGLA=Proj(AGLAVglobal)

传统方法的注意力矩阵是 (N\times N),GLA-CLIP 扩展为 (N\times LN)。这才使窗口 1 的 patch 能在特征阶段读取窗口 2、3、......中的信息。

6.3 Proxy Anchor

仅扩大 Key、Value 范围后,局部 Query 仍可能偏向本窗口。作者从所有窗口中选择与当前 Query 高相似的 token:

P i ( 0 ) = { j ∣ Q i ( 0 ) K global , j > ρ } P_i^{(0)} =\{j\mid Q_i^{(0)}K_{\text{global},j}>\rho\} Pi(0)={j∣Qi(0)Kglobal,j>ρ}

再对这些 token 求均值并迭代更新:

Q i ( t ) = 1 ∣ P i ( t − 1 ) ∣ ∑ j ∈ P i ( t − 1 ) K global , j Q_i^{(t)} =\frac{1}{|P_i^{(t-1)}|} \sum_{j\in P_i^{(t-1)}}K_{\text{global},j} Qi(t)=∣Pi(t−1)∣1j∈Pi(t−1)∑Kglobal,j

最终使用全局 Proxy Anchor 代替原始局部 Query,希望减少窗口来源造成的偏置。

6.4 动态归一化

全局 token 数量增加后,无关信息也会增加。作者根据窗口数 (L) 和高置信 token 数量 (|P_i|) 调整注意力:

u = 1 + λ 1 log ⁡ ( 1 + L ) u=1+\lambda_1\log(1+L) u=1+λ1log(1+L)

w i = 1 + λ 2 ∣ P i ∣ w_i=1+\frac{\lambda_2}{|P_i|} wi=1+∣Pi∣λ2

作者将 (|P_i|) 视为物体尺度的代理:高置信 token 较少时,认为可能是小物体,从而强化少量高相似响应。

这是启发式设计,因为"高相似 token 少"也可能来自遮挡、低置信、纹理变化或模型表征失败。

6.5 直观例子

假设一辆公交车横跨两个窗口:

text 复制代码
窗口 1:车头
窗口 2:车身与车尾

传统 SCLIP/ProxyCLIP 分别处理,窗口 1 可能把车头识别成普通汽车。GLA-CLIP 允许窗口 1 的车头 patch 读取窗口 2 的相关特征,希望利用完整车身信息,使两个窗口都预测为 bus

6.6 优点与风险

优点:

  • 直接处理滑窗之间缺乏交流的问题;
  • 有助于减少窗口边界断裂和网格伪影;
  • 可以作为模块接入 SCLIP、ProxyCLIP 等基线。

风险:

  • 全局传播既能传播正确信息,也会远距离传播错误;
  • 重叠窗口会产生重复 token,可能改变部分区域的有效权重;
  • 注意力规模随窗口数量增长,增加计算和显存开销;
  • Proxy Anchor 可能使错误关系变得更稳定;
  • 动态归一化的物体尺度解释缺乏严格保证。

7. 三种方法的核心区别

方法 谁建立 patch 关系? 聚合什么? 聚合范围 外部模型 核心目的
SCLIP CLIP 自身的相关性 CLIP Value 当前窗口 改善 CLIP 的局部稠密表示
ProxyCLIP DINO/VFM patch 亲和度 CLIP Value 当前窗口 需要 DINO/VFM 用更好的空间关系指导 CLIP
GLA-CLIP CLIP 或 DINO/VFM,取决于所接基线 所有窗口的 CLIP Value 全部窗口 取决于基线 减少跨窗口语义不一致

最简化的流程为:

text 复制代码
SCLIP
CLIP 判断 patch 关系
→ 聚合当前窗口的 CLIP Value
→ 与类别文本比较

ProxyCLIP
DINO 判断 patch 关系
→ 聚合当前窗口的 CLIP Value
→ 与类别文本比较

GLA-CLIP
收集所有窗口的 Key 和 Value
→ 当前窗口跨窗口聚合
→ Proxy Anchor 减少窗口偏置
→ 动态归一化抑制噪声
→ 与类别文本比较

8. 如何正确评价它们?

三种方法都不是从零学习一个分割器,而是在利用预训练模型内部已经形成但不完善的局部结构。

它们能够产生效果的经验基础是:

  1. CLIP 的 patch/Value 特征保留一定的文本语义;
  2. CLIP 或 DINO 的 patch 相似度包含一定的区域信息;
  3. 对同类区域进行特征传播,平均而言可能增强类别信号。

但这些方法都不具备严格保证:

特征相似 ⇏ 类别必然相同 \text{特征相似}\not\Rightarrow\text{类别必然相同} 特征相似⇒类别必然相同

预测更一致 ⇏ 预测一定更正确 \text{预测更一致}\not\Rightarrow\text{预测一定更正确} 预测更一致⇒预测一定更正确

因此合理定位是:

  • 可用于研究预训练模型的隐式局部能力;
  • 可作为低成本、无需额外训练的分割基线;
  • 可用于粗分割或辅助生成伪标签;
  • 不应仅凭平均 mIoU 提升,就认为模型获得了可靠的像素级语义理解;
  • 在自动驾驶、医疗等高可靠场景中,仍需要充分监督、独立验证和失败分析。

9. 参考论文与代码

9.1 SCLIP

  • Feng Wang, Jieru Mei, Alan Yuille. SCLIP: Rethinking Self-Attention for Dense Vision-Language Inference. ECCV 2024.
  • 论文:arXiv:2312.01597
  • 官方代码:wangf3014/SCLIP

9.2 ProxyCLIP

  • Mengcheng Lan, Chaofeng Chen, Yiping Ke, Xinjiang Wang, Litong Feng, Wayne Zhang. ProxyCLIP: Proxy Attention Improves CLIP for Open-Vocabulary Segmentation. ECCV 2024.
  • 论文:arXiv:2408.04883
  • ECCV 论文 PDF:ECVA Open Access
  • 官方代码:mc-lan/ProxyCLIP

9.3 GLA-CLIP

  • ByeongCheol Lee, Hyun Seok Seong, Sangeek Hyun, Gilhan Park, WonJun Moon, Jae-Pil Heo. Looking Beyond the Window: Global-Local Aligned CLIP for Training-free Open-Vocabulary Semantic Segmentation. CVPR 2026.
  • 论文:arXiv:2603.23030
  • 官方代码:2btlFe/GLA-CLIP
  • 本文同时依据你提供的 CVPR 2026 论文 PDF 整理。

9.4 基础模型

  • Alec Radford et al. Learning Transferable Visual Models From Natural Language Supervision (CLIP). ICML 2021. arXiv:2103.00020
  • Mathilde Caron et al. Emerging Properties in Self-Supervised Vision Transformers (DINO). ICCV 2021. arXiv:2104.14294

10. 一句话总结

SCLIP 用 CLIP 自己的 patch 关系聚合当前窗口的 CLIP Value;ProxyCLIP 改用 DINO 的 patch 关系聚合当前窗口的 CLIP Value;GLA-CLIP 再把这种特征聚合从单个窗口扩展到整张图像的所有窗口。

相关推荐
weixin_4402132918 天前
CLIP vs SigLIP
clip·siglip
山顶夕景2 个月前
【VR】 A CLIP-Hitchhiker’s Guide to Long Video Retrieval
vr·多模态·图片·clip·视频检索
qq_419203233 个月前
多模态模型:CLIP、SigLip
clip·siglip
bryant_meng3 个月前
【Hugging Face】The GitHub of Open-Source AI Models
人工智能·github·qwen·hugging face·clip
这是谁的博客?4 个月前
多模态大模型技术深度解析:从 CLIP 到 LLaVA 的视觉语言融合原理
ai·transformer·多模态·clip·视觉语言模型·vit·llava
五点钟科技5 个月前
LLaVA 论文精读以及源码网络结构完整分析
人工智能·多模态·clip·llava
这张生成的图像能检测吗5 个月前
(论文速读)MoECLIP:零射异常检测补丁专家
人工智能·深度学习·计算机视觉·异常检测·clip·zero-shot方法
10100%%6 个月前
【无标题】
clip
何如千泷9 个月前
【论文阅读】MediCLIP: Adapting CLIP for Few-shot Medical Image Anomaly Detection
论文阅读·异常检测·clip