CoPS: Conditional Prompt Synthesis for Zero-Shot Anomaly Detection¶
会议: CVPR 2026 Findings
arXiv: 2508.03447
代码: https://github.com/cqylunlun/CoPS
领域: 目标检测
关键词: 零样本异常检测, 条件提示合成, CLIP, 视觉语言模型, 工业缺陷
一句话总结¶
本文提出 CoPS 框架,通过显式状态token合成(ESTS)和隐式类别token采样(ICTS)两种视觉条件化机制动态生成提示,配合空间感知对齐(SAGA),在13个工业和医学数据集上实现零样本异常检测SOTA。
研究背景与动机¶
- 领域现状:大规模预训练视觉-语言模型在零样本异常检测(ZSAD)中展现出良好的跨类别泛化能力。现有方法通过在单个辅助数据集上微调来实现跨类别异常检测。
- 现有痛点:(i)静态可学习token难以捕捉正常和异常状态的连续多样模式,限制了对未见类别的泛化;(ii)固定文本标签提供的类别信息过于稀疏,模型容易过拟合到特定语义子空间。
- 核心矛盾:提示学习消除了人工设计提示的需求,但其静态性和稀疏性成为泛化的瓶颈——正常/异常状态是连续多变的,而类别标签空间本身就是高度稀疏的。
- 本文目标:设计一种基于视觉特征条件化的动态提示合成框架,使提示能够自适应地建模输入图像的状态和类别信息。
- 切入角度:将提示分解为上下文词、状态词、类别词三部分,前者可共享,后两者需根据视觉特征动态生成。
- 核心idea:通过从局部特征提取正常/异常原型注入状态词(显式),通过VAE从全局特征采样注入类别词(隐式),实现视觉条件化的动态提示合成。
方法详解¶
整体框架¶
CoPS 的出发点是:现有提示学习把提示写死成「上下文词 + 静态状态词 + 固定类别标签」,状态词和类别词都不随输入图像变化,于是既抓不住连续多变的正常/异常模式,又被稀疏的类别标签束缚。CoPS 把这条提示拆成三段——上下文词全类共享,状态词和类别词则按当前图像的视觉特征现场合成。具体地,输入图像先过冻结的 CLIP 视觉编码器,得到全局特征 \(\mathbf{g}\) 和局部特征 \(\mathbf{F}\);ESTS 从局部特征 \(\mathbf{F}\) 里抽正常/异常原型来填状态词(显式路径),ICTS 用 VAE 从全局特征 \(\mathbf{g}\) 里采样来填类别词(隐式路径),两路合成的动态提示送进可学习文本编码器,再由 SAGA 把文本和图像在全局、像素两个层面对齐,最终输出图像级异常分数 \(s_{\text{cls}}\) 和像素级异常图 \(\mathcal{S}_{\text{seg}}\)。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入图像 X"] --> B["冻结 CLIP 视觉编码器<br/>→ 全局特征 g + 局部特征 F"]
B -->|局部特征 F| C["显式状态token合成 ESTS<br/>原型提取器取正常/异常原型 → 动态状态词"]
B -->|全局特征 g| D["隐式类别token采样 ICTS<br/>VAE 采样 R 组 → 动态类别词"]
C --> E["拼接共享上下文词 → 动态双提示<br/>(正常 / 异常)"]
D --> E
E --> F["可学习文本编码器 → 文本嵌入 e_n, e_a"]
F --> G["空间感知全局-局部对齐 SAGA<br/>距离感知空间注意力 + glocal 交互"]
B -.->|全局 g / 局部 F| G
G --> H["图像级异常分数 s_cls + 像素级异常图 S_seg"]
关键设计¶
1. 显式状态token合成(ESTS):让状态词跟着图像真实的正常/异常模式走
像 "good"/"damaged" 这样写死的状态词只能表达离散的两极,没法刻画工业/医学图像里那种连续渐变的缺陷形态,换到未见类别上更是失效。ESTS 不再用静态可学习 token 去硬记状态,而是从当前图像的局部特征里现场提原型:先用一致性自注意力(V-V attention)从冻结视觉编码器里取出细粒度局部特征 \(\mathbf{F}\)(V-V 注意力让特征保持位置一致、不引入额外适配模块),再经原型提取器 \(\mathcal{P}_\theta\) 在中心约束下生成 \(M\) 个正常原型 \(\mathbf{P}_n\) 和 \(M\) 个异常原型 \(\mathbf{P}_a\),把这些原型组装成动态状态 token 顶替掉原来的静态 token。由于原型直接来自这张图自己的局部响应,状态词就能自适应贴合当前图像的实际状态,泛化到训练时没见过的类别。
2. 隐式类别token采样(ICTS):用 VAE 采样把稀疏的类别标签撑成多样语义
固定的文本类别标签信息太薄——一个词代表整个类,模型很容易过拟合到这个词所在的狭窄语义子空间。ICTS 改走隐式路径:用变分自编码器 \(\mathcal{E}_\psi\) 对全局特征 \(\mathbf{g}\) 的潜在分布做参数化,再从这个分布里解码采样出 \(R\) 个样本 \(\mathbf{S} \in \mathbb{R}^{R \times C}\) 当作密集的类别 token,于是每张输入图都生成 \(R\) 组完整的正常/异常提示。采样的随机性天然扩增了类别表示的多样性,相当于在语义空间里围绕真实类别撒一圈点,逼着模型别死守单一子空间,跨域(工业→医学)时尤其受益。
3. 空间感知全局-局部对齐(SAGA):把「离最近原型多远」变成像素级对齐的依据
标准的全局对齐只看整图相似度,丢掉了局部空间信息,而异常检测本质上要精确定位缺陷长在哪。SAGA 的关键观察是:一个查询特征离它最近的(正常)原型越远,就越可能是异常,因此用这个距离来近似异常状态,并据此构造距离感知的空间注意力去细化像素级的文本-图像对齐;同时再叠一层全局-局部(glocal)相似性交互来加强图像级对齐。两个层面分别产出像素级异常图 \(\mathcal{S}_{\text{seg}}\) 和图像级异常分数 \(s_{\text{cls}}\)。
损失函数 / 训练策略¶
图像级分类用二元焦点损失,像素级分割用 Dice 损失加二元交叉熵损失联合监督。整套模型只在单个辅助训练集(如 MVTec AD)上微调,测试时直接迁到未见类别,不做任何目标域适配。
实验关键数据¶
主实验¶
| 数据集 | 指标 | CoPS | 之前SOTA | 提升 |
|---|---|---|---|---|
| 13个数据集平均 | Cls AUROC | SOTA | - | +1.4% |
| 13个数据集平均 | Seg AUROC | SOTA | - | +1.9% |
| MVTec AD | Cls AUROC | 最优 | AnomalyCLIP等 | 显著提升 |
| VisA | Seg AUROC | 最优 | - | 明显优势 |
消融实验¶
| 配置 | 关键指标 | 说明 |
|---|---|---|
| Full CoPS | 最优 | 完整模型 |
| w/o ESTS | 下降 | 去掉显式状态合成影响最大 |
| w/o ICTS | 下降 | 去掉隐式类别采样也有明显影响 |
| w/o SAGA | 下降 | 空间感知对齐对分割尤为重要 |
| 静态提示 baseline | 显著低于CoPS | 验证动态提示的必要性 |
关键发现¶
- ESTS贡献最大,说明自适应的状态建模是零样本异常检测的核心挑战。
- ICTS的VAE采样能有效缓解类别标签稀疏问题,尤其在跨域场景(工业→医学)中作用显著。
- 距离感知空间注意力对像素级分割质量提升明显,但对图像级分类影响较小。
亮点与洞察¶
- 提示分解的设计哲学巧妙:上下文词共享+状态词显式注入+类别词隐式采样,各司其职。
- VAE隐式扩增是一个优雅的trick:用采样替代固定标签,自然地增加了类别表示的多样性。
- 一致性自注意力(V-V)的使用避免了额外适配模块的引入,保持了CLIP特征的原始语义。
局限与展望¶
- 依赖CLIP的预训练特征空间,对CLIP未覆盖的视觉域(如特殊工业场景)可能效果有限。
- 原型数量M和采样数量R需要手动调参。
- 未来可探索自适应确定原型数量,或引入更强的视觉基础模型替换CLIP。
相关工作与启发¶
- vs AnomalyCLIP: AnomalyCLIP使用静态可学习token,缺乏视觉条件化,本文通过显式/隐式注入克服了这一限制。
- vs AdaCLIP: AdaCLIP依赖手工设计的模板集,本文通过端到端学习消除了人工设计的需求。
- vs VCP-CLIP: VCP-CLIP直接将图像特征嵌入类别词,本文通过VAE采样提供了更丰富的语义多样性。
评分¶
- 新颖性: ⭐⭐⭐⭐ 显式+隐式双路径动态提示合成是新颖的组合
- 实验充分度: ⭐⭐⭐⭐⭐ 13个数据集全面验证,消融完整
- 写作质量: ⭐⭐⭐⭐ 结构清晰,方法讲解到位
- 价值: ⭐⭐⭐⭐ 零样本异常检测领域的实用进展