CASPA: Graph-Structured Concept Anchors for Modality-Agnostic Adaptation in Vision-Language Models¶
会议: CVPR 2026
论文: CVF Open Access
代码: https://abhiroopchatterjee123.github.io/CASPA-CVPR-2026/ (项目页)
领域: 多模态VLM
关键词: CLIP适配, 概念锚点, 组合泛化, 跨模态一致性, 参数高效微调
一句话总结¶
CASPA 把 CLIP 的下游适配从"每个类各学一套 prompt"改成"所有类共享一组语义锚点(anchor),每个类只学一个在锚点上的软分布",再用跨模态一致性正则把文本锚点和视觉锚点对齐,在冻结 backbone、只引入 1.1M 参数(占 CLIP 0.73%)的前提下,于 Base-to-Novel、跨数据集迁移、few-shot 等四套设置、11 个数据集上达到或超过 SOTA。
研究背景与动机¶
领域现状:把 CLIP 这类视觉-语言模型迁移到下游识别任务,目前主流是三条路——prompt-tuning(CoOp / CoCoOp / MaPLe 学一组可训练 context token)、adapter 注入(CLIP-Adapter / Tip-Adapter 在冻结 backbone 后挂小融合模块)、以及直接微调。它们都能在保留 CLIP 泛化能力的同时提升任务判别力。
现有痛点:这些方法本质上都是 per-class(按类) 的——CoOp 给每个类学独立的文本 token \(p_c = g_\Phi([t_c; v_c])\),adapter 也把每个类的 prompt 当成相互独立的个体来更新。这就忽略了类与类之间天然存在的语义关联:比如"猫"和"老虎"、"汽车"和"卡车"在概念上共享大量中层视觉属性(条纹、轮子、金属外壳),但 per-class 参数化让每个类各学各的,既浪费参数,也学不到可跨类复用的"推理级"知识。
核心矛盾:适配被建模成了"按类的特化(class-specific specialization)",而不是"共享的概念结构(shared conceptual structure)"。一旦遇到 Novel 类(训练时没见过),per-class 参数无从迁移,只能退回 CLIP 零样本,泛化乏力。
本文目标:在冻结 CLIP 编码器、不引入 MLP / LoRA / backbone 微调的前提下,学到一组可跨类、跨模态复用的语义基(basis),让每个类(包括 Novel 类)都能由这组基组合出来。
切入角度:作者观察到 CLIP 的联合嵌入空间 \(\mathcal{E}\subset\mathbb{R}^d\) 已经编码了丰富的跨模态语义结构,与其给每个类新造一个方向,不如在这个空间里显式分解出若干可复用的"中层语义原语"(如对称性、曲率、层叠结构),让类去"路由"到这些原语上。论文图 1 展示了 nautilus(鹦鹉螺)和 pagoda(宝塔)通过编码"螺旋/层叠几何"的同一锚点相连——这正是 per-class 方法看不到的跨类结构。
核心 idea:用"共享锚点 + 每类一个软关联分布"替代"每类一套独立 prompt",把 few-shot 适配重新表述为组合推理(compositional reasoning)问题,并用跨模态一致性正则保证文本锚点和视觉锚点说的是同一件事。
方法详解¶
整体框架¶
CASPA(Concept-Anchored Semantic Prompt Adapter)的输入是冻结的 CLIP 文本/视觉嵌入,输出是每个类经过适配的"原型(prototype)"向量,分类时用图像特征与各类原型做余弦相似度。整个适配只动三类可训练量:两组锚点库(文本/视觉各 \(K\) 个)、每个类在锚点上的关联分布、以及每类的残差修正项;CLIP 编码器全程冻结。
它的转法是:① 先建立文本锚点库 \(A_t\) 和视觉锚点库 \(A_v\),作为两个模态的共享"概念基";② 每个类 \(c\) 学一个在锚点上的 softmax 软分布 \(\pi^{(c)}_m\),把锚点加权混合再加上冻结 CLIP 嵌入和一个可学残差,合成出该类原型 \(z^{(c)}_m\);③ 用正交正则 \(L_{div}\) 逼锚点各自指向不同语义方向、不塌缩;④ 用跨模态一致性正则 \(L_{xcr}\)(S-XCR)把同一个类的文本侧混合和视觉侧混合在余弦意义上对齐。训练时只在 Base 类上做 few-shot 监督;推理到 Novel 类时,直接用 Novel 类的 CLIP 文本嵌入与文本锚点算关联分布、组合出原型,再叠一层置信度自适应缩放校准 logits,无需任何重训。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["冻结CLIP嵌入<br/>文本 b_t / 视觉 b_v"] --> B["双锚点语义表示<br/>共享锚点库+软关联π+残差→类原型"]
B --> C["锚点多样性正交约束<br/>L_div逼锚点互不冗余"]
B --> D["语义跨模态一致性S-XCR<br/>L_xcr对齐文本/视觉同类混合"]
C --> E["类原型 z_t / z_v"]
D --> E
E -->|Base类:few-shot监督 L_CE| F["训练完成的锚点+关联"]
F -->|Novel类:零样本组合| G["置信度自适应缩放<br/>校准Novel类logits"]
G --> H["余弦分类输出"]
关键设计¶
1. 双锚点语义表示:用"共享锚点 + 每类软分布"替代每类独立 prompt
这是 CASPA 的地基,直接针对"per-class 参数化忽略类间关联"的痛点。作者定义两组模态专属锚点库 \(A_m=\{a^{(k)}_m\in\mathbb{R}^d\mid k=1,\dots,K_m\}\),\(m\in\{t,v\}\),每个锚点是 CLIP 空间里的一个潜在语义方向(可对应某个共享的视觉/语境属性)。每个类 \(c\) 不再独占一个 prompt 向量,而是学一个在锚点上的概率分布 \(\pi^{(c)}_m\in\Delta^{K_m-1}\)(softmax 保证非负且和为 1),\(\pi^{(c)}_{m,k}\) 就表示第 \(k\) 个锚点对类 \(c\) 的贡献——这就是图 1 里那张"类-锚点"二部图的权重。类原型由锚点加权混合合成:
其中 \(b^{(c)}_m\) 是冻结的 CLIP 嵌入(文本侧是 class 文本嵌入,视觉侧是该类视觉原型均值),归一化把原型压到单位超球面上,保持与 CLIP 相似度空间的几何一致。但纯凸组合把每个类困在锚点张成的子空间里、不够灵活,于是再加一个轻量的类相关残差位移(concept shift block)\(s^{(c)}_m\):
残差像是"在锚点合成的均值附近做局部纠偏",补回锚点子空间表达不了的细粒度类内差异。这样设计的好处很直接:参数量从 CoOp 的 \(O(C M_{ctx}d)\)(按类×上下文长度)降到 \(O(K_td+K_vd+C(K_t+K_v)+Cd)\)——锚点共享、每类只多一个软分布和残差,既省参数又因共享而样本高效;更关键是 Novel 类能"借用"已学好的锚点组合出来,而 per-class 方法做不到。
2. 锚点多样性正交约束:防止共享锚点塌缩成同一个方向
锚点共享带来复用,但无约束优化会让多个锚点收敛到相似语义方向(anchor redundancy),共享子空间的表达力随之退化。作者用一个基于正交性的多样性正则压制冗余:
其中 \(A_m\in\mathbb{R}^{d\times K_m}\) 是把该模态锚点按列堆叠的矩阵,\(I_{K_m}\) 是单位阵。最小化它等于逼锚点两两去相关(Gram 矩阵趋近单位阵),从而保证每个锚点编码一个独特的语义方向。没有这一项,"32–48 个锚点"很容易退化成"有效只有几个锚点",组合泛化就失去意义——所以它是双锚点表示能成立的必要保险。
3. 语义跨模态一致性 S-XCR:逼文本锚点和视觉锚点说同一件事
双锚点虽然支持双向迁移,但文本库和视觉库是各自独立学的,容易出现"语义漂移"——同一个类,文本侧混合出来的概念和视觉侧混合出来的概念对不上。S-XCR(Semantic Cross-Consistency Regularization)强制二者在每个类上余弦对齐。先定义类 \(c\) 在模态 \(m\) 的锚点混合(不含残差和归一化的纯混合)\(M^{(c)}_m=\sum_k \pi^{(c)}_{m,k}a^{(k)}_m\),把所有类堆成矩阵 \(Z_t,Z_v\in\mathbb{R}^{C\times d}\),构造跨模态相似度矩阵 \(S=Z_tZ_v^\top\)(\(s_{ij}=\cos(M^{(i)}_t,M^{(j)}_v)\)),其对角线就是"同类文本混合 vs 同类视觉混合"的相似度。损失只取对角:
它鼓励每个类的文本/视觉混合余弦相似度逼近 1,从而把两套锚点钉在同一套语义结构上,实现"推理级"的跨模态迁移。消融里这一项权重 \(\lambda_x\) 在 300 附近收益最大,说明跨模态对齐对 few-shot 下稳定适配是关键而非可有可无。
4. 置信度自适应缩放:让 Novel 类的零样本 logits 与 Base 类校准
Novel 类推理时,直接用 Novel 文本嵌入 \(b^{(new)}_t\) 与文本锚点算关联 \(\pi^{(new)}_{t,k}=\mathrm{softmax}_k(b^{(new)}_t\cdot a^{(k)}_t)\)、组合出原型 \(z^{(new)}_t\)。但 Base 类是 few-shot 训过的、Novel 类是纯零样本组合的,两者 logit 尺度天然不可比,直接拼在一起做分类会偏向 Base。作者加一个置信度自适应缩放:
其中 \(\mathrm{conf}_{base}\) 是 Base 类上的最大 softmax 置信度,\(\gamma\) 固定为 3,\(\sigma\) 是 sigmoid。推理时把 Novel 类 logit 缩放 \(\ell_c\leftarrow a_{adaptive}\cdot\ell_c\)。直觉是:当模型对 Base 类很有把握(\(\mathrm{conf}_{base}\) 高)时,说明当前样本更可能属于 Base,就调低 Novel logit;反之则放大 Novel 的话语权。这一步把"零样本组合"的输出校准到与"few-shot 训练"的输出同一量纲,是 Base-to-Novel 平衡的收尾保障。
损失函数 / 训练策略¶
总目标把分类损失和两个结构正则耦合在一起:
\(L_{CE}\) 是类别交叉熵,\(\lambda_x,\lambda_d\) 控制跨模态一致性与锚点多样性的相对强度。论文进一步用 ASAM(Adaptive Sharpness-Aware Minimization,SAM 的泛化版)做优化以增强泛化,带 ASAM 的版本记为 CASPA-G,正文主结果均为 CASPA-G。训练只在 Base 类 16-shot 上进行;锚点数 \(K\) 取 32–48 在表达力与过拟合间最平衡。
实验关键数据¶
评测覆盖四套设置(Base-to-Novel 泛化、16-shot few-shot、ImageNet 16-shot 训练后跨 10 数据集零迁移、跨 backbone)和 11 个数据集(ImageNet / Caltech / Pets / Cars / Flowers / Food / Aircraft / SUN / DTD / EuroSAT / UCF)。
主实验:Base-to-Novel 泛化(11 数据集平均,单位 %)¶
| 方法 | Base | Novel | HM(调和均值) |
|---|---|---|---|
| CLIP (ICML'21) | 69.34 | 74.22 | 71.70 |
| MaPLe (CVPR'23) | 82.28 | 75.14 | 78.55 |
| DPC (CVPR'25) | 86.10 | 74.78 | 80.04 |
| 2SFS (CVPR'25) | 85.55 | 75.48 | 80.20 |
| RAda (ICCV'25) | 84.32 | 76.25 | 80.08 |
| CASPA-G (本文) | 85.24 | 77.18 | 81.01 |
CASPA-G 在 Novel 和 HM 两个最能反映泛化的指标上都拿到最高平均值;在细粒度数据集上提升明显(Cars HM 78.81、Flowers 86.76、Food 92.21),EuroSAT HM 87.64(Novel 高达 82.06)、UCF HM 84.23(比次优 +1.02%)。代价是在 DTD(纹理)上偏弱(HM 70.78,低于 RAda 73.86)。
跨数据集迁移(ImageNet 16-shot 训练,无重训直接迁移)¶
| 方法 | 源域 ImageNet | 10 目标域平均 | 11 数据集总平均 |
|---|---|---|---|
| MaPLe | 70.72 | 66.30 | 66.70 |
| MMA | 71.00 | 66.61 | 67.00 |
| DeKgTCP | 72.33 | 66.64 | 67.13 |
| CASPA-G (本文) | 73.24 | 66.70 | 67.30 |
CASPA-G 在 6/12 个场景取得最佳,源域精度最高(73.24),总平均 67.30 超过次优 67.13,说明共享锚点带来更平滑的跨域迁移、更少源域过拟合。
效率对比¶
| 方法 | 训练时间 (ImageNet 16-shot) | 新增参数 | 占 CLIP 比例 |
|---|---|---|---|
| CoOp | ~17 小时 | — | — |
| ProGrad | ~20 小时 | — | — |
| KgCoOp | ~4 小时 | 124.32M | — |
| MaPLe | — | 3.55M | — |
| CASPA | 5.29 分钟 (A100) | 1.1M | 0.73% |
峰值显存仅 1501 MB,参数量比 MaPLe(3.55M)、KgCoOp(124.32M)小一到两个量级,训练时间从小时级降到分钟级。
消融实验(Table 4,ImageNet / Flowers / DTD 三类代表数据集)¶
| 配置 | 关键作用 | 结论 |
|---|---|---|
| Full CASPA(双锚点+双残差) | 完整模型 | t-SNE 上类簇分离最清晰 |
| 仅图像分支 / 仅文本分支 | 关掉一侧锚点 | 双侧均显著掉点,缺一不可 |
| 去掉锚点(双分支均关) | 退化基线 | 类边界模糊、注意力弥散(Grad-CAM 验证) |
| \(\lambda_x\)(S-XCR 权重)扫描 | 跨模态对齐强度 | \(\lambda_x\approx300\) 收益峰值 |
| 锚点数 \(K\) 扫描 | 共享基容量 | 32–48 平衡表达力与过拟合 |
关键发现¶
- 双锚点协同是核心,缺一侧就崩:t-SNE(EuroSAT 16-shot)显示只有文本+视觉双分支都开启时类簇才"分得开且语义连贯",关掉任一分支或去掉锚点都让边界模糊——印证组合表示而非单模态 prompt 才是泛化来源。
- 锚点可解释:Grad-CAM 显示有锚点时模型聚焦语义判别区域(摩托引擎、相机镜头),无锚点时注意力弥散;Top-6 检索图显示每个锚点对应一类可复用的中层视觉原语,跨类共享。
- Novel 类是最大受益者:CASPA-G 的优势集中在 Novel/HM 而非 Base,说明共享锚点真正解决的是"没见过的类怎么迁移"。
- 短板在纹理域:DTD 上偏弱、few-shot 设置里 SUN/EuroSAT 也有退化,说明锚点子空间对高度纹理化、缺乏清晰"中层语义原语"的数据建模不足。
亮点与洞察¶
- 把适配从"分类参数化"重构成"概念基 + 组合":最 "啊哈" 的点是用一组共享锚点 + 每类软分布替代每类独立 prompt,参数量从 \(O(CM_{ctx}d)\) 降到近似线性于类数,却换来更强的 Novel 泛化——共享即复用,复用即迁移。
- 正交正则是隐性功臣:\(L_{div}=\lVert A_m^\top A_m-I\rVert_F^2\) 这种"逼 Gram 矩阵趋近单位阵"的写法可直接迁移到任何"想让一组学习到的基彼此不冗余"的场景(如 codebook、prototype memory、mixture-of-experts 的专家去相关)。
- S-XCR 的"只取对角线"很优雅:构造 \(C\times C\) 跨模态相似度矩阵却只用 \(\mathrm{Tr}(S)\) 做损失,等价于"同类对齐"而不强加"异类排斥",比对比损失更轻、更稳,适合 few-shot。
- 置信度自适应缩放解决了一个常被忽视的工程问题:Base(训过)与 Novel(零样本组合)logit 不同量纲,用 Base 置信度反向调 Novel 增益,是个可复用的零样本校准 trick。
局限与展望¶
- 纹理/缺乏中层原语的域偏弱:DTD、部分 few-shot 场景退化,说明"可复用语义原语"假设在纹理主导、概念无法清晰分解的数据上不成立。
- 锚点数与 \(\lambda_x\) 需要扫描:\(K=32\text{–}48\)、\(\lambda_x\approx300\) 都是经验最优,跨数据集的最优值是否稳定、能否自适应未充分讨论(⚠️ 论文未给跨域统一超参的鲁棒性证据)。
- 依赖 CLIP 文本嵌入做 Novel 关联:Novel 类的 \(\pi^{(new)}_t\) 完全由 CLIP 文本编码器质量决定,若类名歧义或 CLIP 本身对该概念弱,则组合无从谈起。
- 可改进方向:把锚点从全局共享扩展到层次化/可增长(开放词表场景动态新增锚点);用视觉侧而非纯文本嵌入算 Novel 关联以缓解纹理域短板;联合学习 \(K\) 而非固定。
相关工作与启发¶
- vs CoOp / CoCoOp / MaPLe(prompt-tuning):它们学每类独立 context token,是 per-class、忽略类间关系;CASPA 用共享锚点 + 软关联建模类间结构,参数更少、Novel 泛化更强,本质区别是"特化 vs 组合"。
- vs CLIP-Adapter / Tip-Adapter / MMA(adapter/PEFT):这些在冻结 backbone 后挂小融合模块、仍按类各自精炼;CASPA 是单阶段、纯在潜在语义空间操作、不引入 MLP,把 few-shot 重述为组合推理。
- vs 2SFS(CVPR'25,两阶段解耦任务与类适配):2SFS 分两阶段,CASPA 单阶段、用锚点共享天然解耦"共享语义"与"类专属残差",更简洁且效率高一个量级。
- vs KgCoOp / DeKg(知识/梯度先验):它们注入外部先验防遗忘,CASPA 靠正交正则 + 跨模态一致性这两个结构约束保持泛化,不依赖额外知识源。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 把 VLM 适配从 per-class prompt 重构为共享概念锚点 + 组合,视角清新且自洽
- 实验充分度: ⭐⭐⭐⭐ 四套设置 11 数据集 + 效率/可解释性/t-SNE 都覆盖,但纹理域短板和超参鲁棒性披露不足
- 写作质量: ⭐⭐⭐⭐ 公式与图(类-锚点图、Grad-CAM、t-SNE)配合清晰,部分符号略密
- 价值: ⭐⭐⭐⭐⭐ 1.1M 参数、5 分钟训练换 SOTA 级 Novel 泛化,参数高效适配的实用范式