TTL: Test-time Textual Learning for OOD Detection with Pretrained Vision-Language Models¶
会议: CVPR 2026
arXiv: 2604.15756
代码: https://github.com/figec/TTL (有)
领域: 多模态VLM / OOD检测 / 测试时适应
关键词: OOD检测, CLIP, 测试时适应, 提示学习, 伪标签净化
一句话总结¶
针对现有 CLIP OOD 检测依赖"固定外部 OOD 标签"无法覆盖开放世界的痛点,TTL 在测试流上只更新一组可学习的 OOD 文本提示,用伪标签放大 OOD 相似度、用净化损失剔除 ID 边界样本噪声、再用一个文本知识库做跨批次分数校准,在两大基准九个 OOD 数据集上把平均 FPR95 降了 12.67%、AUROC 提了 3.94%。
研究背景与动机¶
领域现状:CLIP 这类视觉-语言模型靠图文对齐天然适合 OOD 检测——给定 ID 类名模板("a photo of a {class}")编码成文本特征,用图文余弦相似度算 OOD 分数(MCM 等)。为提升性能,一类方法引入外部 OOD 知识:从大规模语料挖潜在 OOD 标签(Neglabel、CSP)、学负提示(CLIPN);另一类做测试时适应(TTA),让模型在线适配真实 OOD 分布。
现有痛点:外部 OOD 标签是有限且固定的,而真实世界的 OOD 语义空间是开放、无限、不断演化的,固定标签无法表征测试流里多样且漂移的 OOD 语义。当前最强的 TTA 方法 AdaNeg 虽然引入了文本模态,但它做的是"把固定外部标签去和实际测试分布对齐"——一旦测试样本落在这些预定义语义范围之外(如 Figure 1c 所示),就无能为力。而更朴素的在线更新参数的方法(AdaND 等)又容易灾难性遗忘、检测性能不稳。
核心矛盾:固定的文本语义空间 ↔ 开放无限的真实 OOD 分布。现有方法都在"固定文本空间里调视觉特征",文本侧的适应潜力没被真正挖掘。
本文目标:能不能直接从测试流里学 OOD 文本语义(而不是把已有标签往 OOD 分布上凑),从而摆脱对外部 OOD 标签的依赖?
切入角度:受提示学习(CoOp)启发——微调提示能让文本特征更好地贴合实际数据分布。作者把这个思路第一次搬到测试时 OOD 检测:为每个 ID 类配一个可学习的 OOD 提示,在线学出"贴近真实 OOD、且和 ID 拉开距离"的文本表征。
核心 idea:用一组在测试流上动态学习并净化的 OOD 文本提示,替代固定外部 OOD 标签,实现无需预定义 OOD 类别的测试时 OOD 检测。
方法详解¶
整体框架¶
TTL 输入是无标注的测试图像流,输出是每个样本的 ID/OOD 判定分数;CLIP 的图像/文本编码器、ID 提示、OOD 提示里的类名部分全部冻结,唯一被更新的是 N 个可学习 OOD 提示的前缀("a photo of a"那部分),每个 ID 类对应一个 OOD 提示。
整条流程分两个阶段。适应阶段:基础检测器(MCM)先给每个测试样本打分并按自适应阈值产出 ID/OOD 伪标签;OOD 知识学习用这些伪标签优化 OOD 提示,把带 OOD 伪标签的图像往 OOD 提示上拉;但伪标签必有噪声,OOD 知识净化进一步把"被误判成 OOD 的 ID 边界样本"和"可靠 OOD 样本"区分开,压住前者、强化后者;学好的高质量 OOD 文本特征被收进OOD 文本知识库做跨批次积累。推理阶段:知识库被用来对基础检测器的分数做校准,得到最终 OOD 分数。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["测试图像流<br/>(无标注)"] --> B["基础检测器 MCM<br/>+ 自适应阈值 → 伪标签"]
B --> C["OOD 知识学习<br/>L_OMB 拉近 OOD 伪标样本↔OOD 提示"]
C --> D["OOD 知识净化<br/>L_OKP 压 ID 边界样本、强化可靠 OOD"]
D -->|更新前缀| E["可学习 OOD 提示<br/>(每 ID 类一个,仅前缀可学)"]
E --> F["OOD 文本知识库<br/>按 S_in 留 K 个最判别特征"]
F -->|推理时校准| G["S_final = S_base + β·S_cal<br/>→ ID/OOD 判定"]
关键设计¶
1. 可学习 OOD 提示 + OMB 损失:让文本侧自己长出 OOD 语义
针对"固定外部标签覆盖不了开放 OOD"的痛点,TTL 为每个 ID 类 \(c\) 引入一个可学习 OOD 提示 \(u^{ood}_i\),用和 ID 提示相同的手工模板初始化(继承 CLIP 的先验语义),但只放开前缀、冻住类名和编码器,从而在保留泛化能力的同时把文本特征往真实 OOD 分布上挪。给定测试样本 \(x\),OOD 概率定义为 OOD 提示相似度占 ID+OOD 总相似度的比例:
优化用OOD-focused minority-balanced 损失 \(L_{OMB}\):对伪标签为 ID 的样本压低 \(p(x)\)、为 OOD 的样本抬高 \(p(x)\),并用伪标签里 ID/OOD 的比例 \(\pi^+,\pi^-\) 做归一化,缓解测试流中 ID/OOD 数量失衡:
这一步的本质是放大"带 OOD 伪标签的图像特征"和"可学习 OOD 提示文本特征"之间的余弦相似度,让 OOD 提示在线吸收测试流里涌现的 OOD 知识——这是 TTL 区别于所有"在固定文本空间里调视觉"方法的根本点。
2. OOD 知识净化(OKP):把混进来的 ID 边界样本踢出去
伪标签必然有噪声,被误判成 OOD 的其实是ID 边界样本,它们会把 OOD 提示往 ID 语义上带偏,而且随着批次累积、这种偏置会被逐步放大;现有 TTA 方法直接拿基础检测器结果更新、根本没处理这种噪声。OKP 的做法是:在每个批次内先收集伪标签 OOD 集合,再用它们的 OOD 概率 \(p(x)\) 作为分数、套用同一套最小化类内方差的自适应阈值 \(\theta\),把集合切成高置信子集 \(S_h=\{i\mid p(x_i)>\theta\}\) 和低置信子集 \(S_\ell=\{j\mid p(x_j)\le\theta\}\)(后者就是 ID 边界样本)。净化损失同时拉高 \(S_h\)、压低 \(S_\ell\) 的 OOD 概率:
效果是 ID 边界样本和 OOD 提示的相似度被拉低、高置信 OOD 样本的相似度被进一步拉高,OOD 提示因此学到"更干净"的 OOD 知识。总目标为 \(L = L_{OMB} + \alpha\cdot L_{OKP}\),\(\alpha\) 平衡"学新 OOD 语义"和"抑制噪声"。消融里它带来约 +1.03% 平均 AUROC,是稳健性的关键。
3. OOD 文本知识库(OKB)+ 分数校准:跨批次稳住检测
单批次优化出的提示只抓到局部语义,对后续批次的分布漂移不稳。OKB 用一个固定容量 \(K\) 的库累积跨批次的高质量 OOD 文本特征,既防遗忘又扩大语义覆盖。库的更新靠一个"潜在 OOD 分数"——某个 OOD 文本特征到所有 ID 提示文本特征的最小距离:
库满时只保留分数最高的 \(K\) 个,即留下"离 ID 最远、最判别"的 OOD 提示。推理时,对图像特征 \(z\) 用库内特征算校准分 \(S_{cal}(x) = -\max_{j\in\{1..K\}}\cos(z, t^{ood}_j)\),再融进基础检测器:
\(\beta\) 很小(ImageNet 0.0005、CIFAR 0.006),因为校准分和基础分量级不同。校准后 OOD 样本的最终分被有效压低,ID/OOD 分布的重叠率从 24.67% 降到 2.76%(Figure 3)。
损失函数 / 训练策略¶
- 总损失 \(L = L_{OMB} + \alpha L_{OKP}\),\(\alpha=0.5\)。
- 骨干 CLIP ViT-B/16,基础检测器 MCM;只优化 OOD 提示前缀,AdamW,学习率 0.005。
- OKB 容量 \(K=2048\),批大小 \(B=64\),融合系数 \(\beta\):ImageNet 0.0005 / CIFAR-100 0.006。
实验关键数据¶
主实验¶
ImageNet-1k 基准(ID=ImageNet,OOD=iNaturalist/SUN/Places/Texture),平均结果:
| 方法 | 类型 | FPR95↓ | AUROC↑ |
|---|---|---|---|
| MCM | post-hoc | 42.77 | 90.76 |
| CSP(用外部标签) | post-hoc | 17.51 | 95.76 |
| MoFE | 训练型(最强) | 20.02 | 94.89 |
| OODD | TTA | 23.64 | 94.09 |
| AdaNeg(用外部标签) | TTA | 19.22 | 96.17 |
| TTL(本文) | TTA | 12.46 | 97.29 |
不用任何外部 OOD 标签的情况下,TTL 平均 FPR95=12.46、AUROC=97.29,比次优 AdaNeg 还低 6.76% FPR95,比最强训练型 MoFE 低 7.56% FPR95。
CIFAR-100 基准(六个 OOD 数据集)平均:
| 方法 | FPR95↓ | AUROC↑ |
|---|---|---|
| AdaND | 20.95 | 92.50 |
| AdaNeg | 40.52 | 88.97 |
| FA | 36.11 | 92.43 |
| TTL(本文) | 2.36 | 99.26 |
在其它 TTA 方法集体失效的 Places365 上,TTL 的 AUROC 比它们高约 19.9%。
消融实验¶
三组件逐项叠加(左 ImageNet-1k / 右 CIFAR-100,FPR95 / AUROC):
| L_OMB | L_OKP | OKB | ImageNet FPR95 | ImageNet AUROC | CIFAR FPR95 | CIFAR AUROC |
|---|---|---|---|---|---|---|
| ✗ | ✗ | ✗ | 42.77 | 90.76 | 73.09 | 81.40 |
| ✓ | ✗ | ✗ | 30.56 | 92.54 | 14.40 | 96.25 |
| ✓ | ✓ | ✗ | 24.59 | 93.95 | 4.14 | 98.71 |
| ✓ | ✗ | ✓ | 18.40 | 95.63 | 5.23 | 98.86 |
| ✓ | ✓ | ✓ | 12.46 | 97.29 | 2.36 | 99.26 |
OKB 更新策略对比(本文 vs 随机/FIFO/全存):
| 策略 | ImageNet FPR95 | ImageNet AUROC | CIFAR FPR95 | CIFAR AUROC |
|---|---|---|---|---|
| RAND | 27.29 | 93.07 | 29.06 | 87.07 |
| FIFO | 14.69 | 96.40 | 8.15 | 98.78 |
| SA(全存) | 23.19 | 94.27 | 27.33 | 88.04 |
| 本文(留最判别 K 个) | 12.46 | 97.29 | 2.36 | 99.26 |
关键发现¶
- 三组件缺一不可,且互补:只有 \(L_{OMB}\) 时 ImageNet 已从 42.77→30.56 FPR95;加 OKB 或加 OKP 各自再降一截;三者全开才到 12.46。OKP 单独贡献约 +1.03% 平均 AUROC,说明显式处理伪标签噪声对稳健性是关键。
- OKB 更新策略很重要:按"离 ID 文本最远"的判别度留 K 个,明显优于随机替换、FIFO、无限全存——后两者会把噪声/冗余 OOD 特征也留下来。
- 对基础检测器不敏感:换 GL-MCM/Neglabel/LoCoOp/FA 当 base 都能涨,配 FA 时达 5.88% FPR95 / 98.76% AUROC。
- 初始化用类名+手工模板最好:用 ID 类名初始化 OOD 提示的冻结部分,能引导探索"贴近 ID 语义边界"的 OOD 知识;CIFAR 上从随机初始化的 45.23 FPR95 直接降到 2.36。
- 对 \(K\in[2^8,2^{14}]\)、\(\beta\)、\(\alpha\in[0.2,1.0]\)、\(B\in[2^3,2^9]\) 都不敏感,全程超过最强基线。
亮点与洞察¶
- 把适应从"视觉侧"搬到"文本侧":以往 TTA 都在固定文本空间里调视觉特征或存视觉库,TTL 反过来——冻住视觉、在线学文本提示,第一次把测试时提示学习用到 OOD 检测,这是一个干净的范式切换。
- 只放开提示前缀、冻住类名:这个小设计让 OOD 提示既能继承 CLIP 先验、又被约束在"每个 ID 类附近"探索,避免漫无目的地学,是性能稳定的隐形功臣。
- 用同一套自适应阈值做两件事:既给基础检测器分伪标签、又在 OKP 里给伪 OOD 集合切高/低置信,复用最小类内方差阈值,工程上很省。
- OKB 的留存准则可迁移:"到 ID 文本最小距离"作为判别度筛记忆库,这套"留最远/最判别"的思路可搬到其它需要维护 OOD/负样本记忆的在线任务。
局限与展望¶
- 依赖基础检测器的伪标签质量:整条流程的起点是 MCM 给的伪标签,虽然 OKP 能净化噪声,但若 base 在某分布上系统性失效,起点偏差会限制上限。
- 测试流的批次与分布假设:方法在批大小 64、相对成块的测试流上验证;极小批、单样本流式或 ID/OOD 比例极端时的稳健性未充分讨论。
- 每个 ID 类一个 OOD 提示:类别数极大时 N 个可学习提示 + OKB 的开销会上升,对开放词表/海量类场景的扩展性待验证。
- 校准是分数线性融合:\(S_{final}=S_{base}+\beta S_{cal}\) 用一个全局 \(\beta\),对量级差异敏感、需按数据集调,自适应融合或许更鲁棒。
相关工作与启发¶
- vs AdaNeg:都用文本模态,但 AdaNeg 是拿固定外部 OOD 标签去对齐测试分布,落在标签语义范围外就失效;TTL 直接从测试流学OOD 文本提示、无需任何外部标签,ImageNet 上 FPR95 从 19.22 降到 12.46。
- vs OODD:OODD 只存视觉特征做校准;TTL 存的是文本特征并主动学习 OOD 语义,文本侧适应被证明更有效。
- vs Neglabel / CSP / CLIPN:这些靠外部语料挖 OOD 标签/学负提示,受真实 OOD 无限多样性所限不实用;TTL 把"OOD 知识"从离线挖掘变成在线学习。
- vs CoOp 等提示学习:CoOp 在训练时用有标注 ID 数据学提示;TTL 是首个把提示学习用到测试时无标注OOD 检测、动态对齐真实 OOD 分布的工作。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首个测试时文本提示学习做 OOD 检测,范式从"调视觉"转向"学文本",且摆脱外部 OOD 标签。
- 实验充分度: ⭐⭐⭐⭐⭐ 两基准九数据集、三组件消融、四种更新策略、对 base/超参的敏感性都覆盖到了。
- 写作质量: ⭐⭐⭐⭐ 动机—方法—校准链条清晰,公式完整;个别符号(OMB 损失的 \(\pi\) 归一)需结合上下文理解。
- 价值: ⭐⭐⭐⭐⭐ 平均 FPR95 −12.67%、AUROC +3.94%,无需外部标签即超过用标签的强基线,实用性强。