BiomedCCPL: Causal Conditional Prompt Learning for Biomedical Vision-Language Models¶
会议: CVPR 2026
论文: CVF Open Access
代码: https://github.com/burgers0708/BiomedCCPL
领域: 多模态VLM
关键词: 提示学习, 因果推理, 生物医学VLM, 未见类泛化, front-door 调整
一句话总结¶
针对生物医学 VLM 在「同一数据集内未见类」上泛化差的问题,BiomedCCPL 用 VGAP 模块从多尺度自适应视觉原型动态生成图像条件提示、再用 SCD 模块按 front-door 准则把提示拆成因果/非因果双通路做去混淆,在 11 个数据集 9 种模态上把 Base-to-Novel 的平均 HM 从 73.53% 提到 79.98%(+6.45%)。
研究背景与动机¶
领域现状:CLIP 这类视觉-语言模型在自然图像上零样本能力很强,于是 CoOp、CoCoOp、MMA、MMRL 等提示/适配器方法纷纷被搬到医学领域,靠在冻结的编码器外面挂可学习组件来做少样本适配。生物医学侧也有 BiomedCLIP(在 PMC-15M 上预训练、文本端换成 BERT)作为专用 backbone。
现有痛点:作者在 Fig.1 里指出这些方法在医学数据上各有各的崩法——CoOp/KgCoOp/MMRL 在 16-shot 适配后过拟合,未见类精度甚至跌破零样本 BiomedCLIP;CoCoOp/ProGrad 缓解了过拟合却牺牲已见类;MMA 不掉泛化但未见类的增益远小于已见类。
核心矛盾:根因是「适配 vs 泛化」的 trade-off,而医学场景把它放大了。一方面大多数方法学的是图像无关的静态提示(每个已见类一个固定文本模板),它对不上未见类的视觉特征;另一方面少数生成图像条件动态提示的方法(如 CoCoOp)虽然动态,却容易学到捷径——提示和那些只在已见类里有区分度的非诊断特征(设备水印、成像伪影)相关,换到未见类就失效。作者借因果推断把「提示↔底层诊断视觉特征(病灶形态、组织纹理、异常密度区)」之间、在已见/未见类间共享且可迁移的关联定义为「因果知识」,其余为非因果知识。
本文目标:让模型动态生成对齐底层诊断特征、且这些特征在已见与未见类间共享的图像条件提示。
切入角度:用结构因果模型(SCM)显式建模「seen→unseen 泛化」过程,把非诊断特征当作未观测混淆变量 \(C\),从而用因果干预的语言解释「为什么会学到捷径」并给出消除方案。
核心 idea:VGAP 把提示「接地」到多尺度局部诊断特征解决静态提示的对齐问题,SCD 用 front-door 调整把提示解耦成因果/非因果双通路、抑制虚假关联,两者协同得到既准又能泛化的因果条件提示。
方法详解¶
整体框架¶
BiomedCCPL 建在 BiomedCLIP 上,编码器全程冻结,只学提示相关的轻量组件。流程是:输入医学图像 + 可学习上下文向量 → VGAP 从浅/中/深三个尺度抽自适应视觉原型,用 cross-attention 把这些原型「注入」文本 [CLS] token,生成图像条件提示 → 同一套机制产出因果提示与非因果提示两条 → SCD 用三个协同损失把因果信息和非因果信息分到两条通路里(front-door 调整的实践化)→ 训练时四个损失联合优化、测试时只用因果通路算类别相似度做预测。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["医学图像 + 可学习上下文向量"] --> B["VGAP<br/>多尺度自适应原型"]
B --> C["因果提示 + 非因果提示"]
C --> D["SCD<br/>协同因果解耦"]
D -->|"测试仅走因果通路"| E["类别相似度预测"]
D -.训练.-> F["协同学习目标<br/>CE + NEM + Ort + SAR"]
提示学习的基础打分沿用 CLIP 形式:第 \(c\) 类的连续提示 \(T_c\) 由共享上下文向量拼类名嵌入构成,图像 \(I_j\) 属于第 \(c\) 类的概率 \(p(y_j=c\mid F_I^j)=\dfrac{\exp(\cos(F_T^c,F_I^j)/\tau)}{\sum_{i=1}^{C}\exp(\cos(F_T^i,F_I^j)/\tau)}\),少样本适配时只更新上下文向量。VGAP 和 SCD 都是在「怎么得到更好的 \(F_T^c\)」上做文章。
关键设计¶
1. VGAP:用多尺度自适应原型把文本提示接地到诊断细节
针对静态提示对不上未见类、以及 CoCoOp 用单个全局 token 生成动态提示导致「局部诊断特征(如一个小肺结节)被平均糊掉、还容易被水印/背景伪影主导」这两个痛点,VGAP 不用全局特征,而是从图像的多个尺度抽自适应视觉原型再去调制提示。具体地,对第 \(l\) 层的 \(M\) 个 patch token \(\mathcal{V}_{j,l}\),先用一个轻量网络算贡献矩阵 \(\mathbf{A}\in\mathbb{R}^{M\times N}\):
\(A_{ij}\) 表示第 \(i\) 个 patch 对第 \(j\) 个原型的贡献,原型由 patch token 的加权聚合得到 \(\mathbf{P}_l=\mathbf{A}^\top \mathcal{V}_{j,l}\)(\(N\ll M\),论文取 \(N=14=\sqrt{196}\))。和传统纯按视觉相似度聚类、与下游任务无关的原型不同,这里的 \(\mathbf{W}_1,\mathbf{W}_2\) 是端到端反传训练的,所以原型对分类目标自适应、是任务相关而非纯几何的表示。随后文本编码器第 \(l\) 层的 [CLS] token \(t^{i,l}_{cls}\) 作 query 去 cross-attention 这些原型(\(q=t^{i,l}_{cls}\mathbf{W}_q,\ \mathbf{K}=\mathbf{P}_l\mathbf{W}_k,\ \mathbf{V}=\mathbf{P}_l\mathbf{W}_v\)),得到视觉接地表示 \(z^{i,l}=\mathrm{SoftMax}(q\mathbf{K}^\top/\sqrt{d_k})\mathbf{V}\),再用动量方式平滑融回去:
\(\alpha\) 控制视觉信息注入的强度。VGAP 在编码器的浅/中/深三个尺度各做一次,层索引取 \(l\in\{3,7,11\}\)(消融选定),让最终文本表示同时锚在「粗解剖结构→细病理纹理」的各级诊断细节上。原型本身还起到「语义聚合器 + 噪声过滤器」的作用,避免模型过拟合到图像里过细、含噪的因素。
2. SCD:按 front-door 准则把提示拆成因果/非因果双通路做去混淆
动态提示虽比静态强,仍可能被设备标记、成像伪影这类非诊断特征带偏。作者用 SCM(Fig.3)把 seen→unseen 泛化形式化:记图文对齐语义为 \(X\),混淆变量 \(C\) 是已见类里的非诊断视觉特征,它同时影响 \(X\)(\(C\to X\))和预测 \(\hat Y\)(\(C\to\hat Y\)),打开后门路径 \(X\leftarrow C\to\hat Y\) 注入虚假关联。由于 \(C\) 不可观测,无法直接做 back-door 调整,于是引入中介变量「图文对齐因果语义 \(S\)」(捕捉提示与底层诊断特征间、跨已见/未见类共享的关联),改用 front-door 准则估计因果效应:
实践中 \(S\) 由 VGAP 和 SCD 协同估计,\(S\) 导出的相似度作为可微 logits 算 \(P(c\mid S)\)。SCD 把每类的提示显式拆成两套:因果提示 \(T^i_c=\{x^1_c,\dots,x^g_c,[\text{CLASS}]_i,\text{‘.’}\}\) 和非因果提示 \(T^i_{nc}\),编码出因果/非因果文本特征 \(F_{T_c},F_{T_{nc}}\)。这种「中介变量 + 双通路」就是把抽象的 front-door 公式落成可训练结构:因果通路被逼着只承载可迁移的诊断语义,非因果通路则被「吸走」那些只在已见类里好使的捷径信号,测试时直接丢掉非因果通路,泛化自然变好。
3. 协同学习目标:四个损失各司其职把因果信息逼进因果通路
SCD 的解耦不是靠结构本身,而是靠三个协同损失 + 一个稳定化损失合力实现。交叉熵 \(\mathcal{L}_{\text{CE}}\):因果通路按 \(\mathbf{Q}_c=\mathrm{SoftMax}(F_I F_{T_c}^\top/\tau)\) 做标准分类,逼它在受约束的空间里学到判别性诊断信息。非因果熵最大化 \(\mathcal{L}_{\text{NEM}}\):把非因果通路的预测 \(\mathbf{Q}_{nc}\) 往均匀分布 \(\mathcal{U}\) 推,\(\mathcal{L}_{\text{NEM}}=D_{\text{KL}}(\mathbf{Q}_{nc}\|\mathcal{U})\),最大化其预测熵、让非因果通路不产生确定性判别信号(即不许它偷偷做分类)。正交约束 \(\mathcal{L}_{\text{Ort}}\):在类内强制两通路正交 \(\mathcal{L}_{\text{Ort}}=\frac1C\|\mathrm{diag}(F_{T_c}F_{T_{nc}}^\top)\|_2^2\),把两个子空间分开、同时抑制因果通路里残留的非因果特征。语义锚正则 \(\mathcal{L}_{\text{SAR}}\):用手写模板(如 "a photo of a [CLASS]")的编码特征 \(T_h\) 当语义锚 \(\mathcal{L}_{\text{SAR}}=1-\frac1C\mathrm{Tr}(F_{T_c}F_{T_h}^\top)\),稳住训练别跑飞。总目标为
三个目标缺一不可:单靠分类,非因果通路会和因果通路抢判别信号;有了 NEM 让它「装哑」、有了 Ort 让两路不重叠,因果通路才被干净地导向诊断特征。
损失函数 / 训练策略¶
ViT-B/16 backbone(BiomedCLIP),训练 50 epoch;上下文用 "a photo of a" 初始化,原型数 \(N=14\);SGD,学习率 0.0025,batch size 1;\(\lambda_1,\lambda_2,\alpha\) 在验证集上调;3 个随机种子取平均,单卡 RTX 4090。测试只用因果通路出预测。
实验关键数据¶
在 11 个生物医学数据集、9 种模态、10 个器官上评估,对比 7 个方法(CoOp/CoCoOp/KgCoOp/ProGrad/MMRL/BiomedCoOp 提示类 + MMA 适配器类),统一 BiomedCLIP backbone。
主实验¶
Base-to-Novel 泛化(在 base 类 16-shot 训练,分别测 base/novel,10 数据集平均;HM 为调和平均):
| 方法 | Base | Novel | HM |
|---|---|---|---|
| BiomedCLIP(零样本 backbone) | 47.87 | 65.42 | 55.28 |
| CoOp | 73.85 | 64.72 | 68.98 |
| CoCoOp | 72.26 | 67.02 | 69.54 |
| ProGrad | 71.16 | 67.38 | 69.22 |
| MMA(次优) | 79.75 | 68.22 | 73.53 |
| BiomedCoOp | 76.10 | 70.46 | 73.17 |
| BiomedCCPL(本文) | 80.78 | 79.20 | 79.98 |
HM 比次优 MMA(73.53)高 6.45%;尤其 novel 类比 BiomedCoOp(70.46)涨 8.74%,且 base 类也拿到最佳——说明它学到的是 base/novel 共享的因果知识,而非 base 类专属的虚假关联。少样本侧的数据效率也突出:1-shot 就有 62.17%,超过 BiomedCoOp 的 2-shot(58.55%);8-shot(77.22%)超过 MMA 的 16-shot(75.24%)。
消融实验¶
组件消融(SAR / VGAP / SCD,11 数据集平均;Few-shot 列为 16-shot 精度):
| 配置 | B2N Base | B2N Novel | B2N HM | Few-shot(16) |
|---|---|---|---|---|
| 基线 CoOp(✗✗✗) | 73.85 | 64.72 | 68.98 | 69.72 |
| +SAR | 75.78 | 65.68 | 70.37 | 68.64 |
| +VGAP | 79.08 | 73.26 | 76.06 | 79.95 |
| +SCD | 75.56 | 75.69 | 75.62 | 71.30 |
| +VGAP+SCD | 80.83 | 77.88 | 79.33 | 77.48 |
| Full(✓✓✓) | 80.78 | 79.20 | 79.98 | 82.25 |
关键发现¶
- SCD 主攻泛化、VGAP 主攻少样本:B2N 任务里单加 SCD 把 novel 从 64.72→75.69(最猛的泛化提升);Few-shot 任务里去掉 VGAP 让 16-shot 从 82.25 暴跌到 71.13,证明自适应视觉接地是榨干少量监督的关键。SAR 主要稳训练(单独加只小涨)。
- 三模块互补:任两两组合都优于单模块,VGAP+SCD 已达 HM 79.33,再加 SAR 把 novel 顶到 79.20、16-shot 顶到 82.25。注意 Full 的 base(80.78)比 VGAP+SCD(80.83)略低,但 novel 明显更高——SAR 是在用一点 base 精度换更稳的泛化。
- 原型机制有效:去掉 VGAP 里的原型,B2N 和 Few-shot 全面下降,原型同时充当语义聚合器和噪声过滤器,防止过拟合到图像里的细碎噪声。
- 可解释性:用 ScoreCAM 看显著图,因果通路能精准定位病灶,增强临床可接受度。
亮点与洞察¶
- 把 front-door 调整真正「结构化」了:很多因果论文停在 SCM 画图层面,本文把中介变量 \(S\) 落成「因果/非因果双提示通路 + 三损失」,front-door 公式里的 \(P(s\mid I,T)\) 和 \(P(c\mid s)\) 分别由 VGAP 接地、因果通路分类承担,机制可训练、测试可裁剪,思路很值得迁移到其他「学到捷径」的提示学习场景。
- 「让非因果通路装哑」是巧点:用熵最大化把 \(\mathbf{Q}_{nc}\) 推向均匀分布,等于显式禁止非因果通路做判别,再用正交约束保证它确实「吸走」而非「共享」捷径信号——这套组合拳比单纯加正则更有针对性。
- 多尺度原型对医学图像特别对症:医学诊断既看粗解剖也看细纹理,VGAP 在 \(\{3,7,11\}\) 层各接地一次的分层设计,正好覆盖「粗→细」的诊断语义,比 CoCoOp 单全局 token 自然更抗伪影。
局限与展望¶
- VGAP 的层索引 \(\{3,7,11\}\)、原型数 \(N=14\)、\(\alpha/\lambda_1/\lambda_2\) 都靠验证集调,跨数据集是否稳健、有没有更自适应的选法未在正文展开(细节都进了补充材料)。
- 「因果知识」的定义依赖作者对诊断特征的先验描述,SCM 里把全部非诊断特征塞进单一混淆变量 \(C\) 是简化假设;当伪影本身和病理共变(如某设备只拍某类病)时,front-door 是否仍成立值得追问。⚠️ 这是笔者推断,原文未讨论。
- 评测集中在 base-to-novel 和 few-shot 分类,未涉及检测/分割等更细粒度任务;batch size=1 的训练设置在更大规模数据上的可扩展性也未验证。
相关工作与启发¶
- vs CoCoOp:两者都做图像条件提示,但 CoCoOp 用全局图像特征生成、局部诊断细节被平均糊掉且易被伪影主导;BiomedCCPL 用多尺度局部原型接地,并额外做因果解耦,故 novel 类泛化大幅领先(HM 79.98 vs 69.54)。
- vs BiomedCoOp / XCoOp:这些医学提示方法靠注入领域先验知识适配;BiomedCCPL 不需要外部知识,纯端到端学因果表示,novel 精度比 BiomedCoOp 高 8.74。
- vs CDC(front-door 因果干预):CDC 用不同数据增广得到的多个全局图像特征来解耦语义;本文改用多尺度局部特征 + 协同学习做解耦,更贴合医学图像的细粒度诊断需求。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把 front-door 调整落成可训练的因果/非因果双提示通路,结合多尺度自适应原型,组合扎实且对症医学场景。
- 实验充分度: ⭐⭐⭐⭐ 11 数据集 9 模态、7 个强基线、组件/原型双消融 + 显著图可解释性,覆盖面广(部分超参分析在补充材料)。
- 写作质量: ⭐⭐⭐⭐ SCM→front-door→双通路的逻辑链清晰,公式与动机对应得上。
- 价值: ⭐⭐⭐⭐ 数据稀缺的医学 VLM 里把「适配 vs 泛化」trade-off 显著缓解,实用性强。