跳转至

MRAD: Zero-Shot Anomaly Detection with Memory-Driven Retrieval

会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=TQkFiW3AEX
代码: https://github.com/CROVO1026/MRAD
领域: 异常检测 / 零样本 / 视觉-语言模型
关键词: Zero-Shot Anomaly Detection, Memory Bank, Feature Retrieval, CLIP, Prompt Learning

一句话总结

MRAD 用「特征-标签记忆库的相似度检索」直接替代主流 ZSAD 的参数化拟合 \(p(y|x)\),免训练版本就能打过 WinCLIP,再叠两层线性微调与区域先验注入的动态提示,便在 16 个工业/医疗数据集上刷到 SOTA。

研究背景与动机

领域现状:零样本异常检测(ZSAD)要在没有目标域监督的情况下,仅靠 CLIP 等预训练 VLM 把通用特征对齐到「正常/异常」语义。主流路线分两类——靠手工模板的 prompt-ensemble(WinCLIP、CLIP-AD),以及靠可学习向量做域适应的 prompt-optimization(AnomalyCLIP、AdaCLIP、FAPrompt)。

现有痛点:这些方法本质都是只用一个新训练的组件去拟合条件分布 \(p(y|x)\),由此带来三个问题——(1) prompt 学习、特征工程、视觉分支微调堆高了架构复杂度,反而削弱泛化、抬升算力;(2) 单靠辅助学习器拟合分布会丢失原始数据中的信息;(3) 动态提示对「动态信息从哪来」高度敏感,直接影响像素级分割与图文对齐。

核心矛盾:参数化拟合是一种有损压缩——它把训练数据的经验分布压进模型权重里,subtle 的正常/异常变化在拟合过程中被抹平;而 ZSAD 恰恰需要保留这些细微差异来跨域判别。

本文目标:不再「拟合」分布,而是直接访问辅助数据的经验分布做异常判别,同时保持低训练/推理成本与跨域稳定性。

核心 idea:作者的跨数据集分析发现——拿 a 数据集的 patch 特征当 query、b 数据集的特征当 key,冻结 CLIP 下的相似度始终满足 \(\text{NqNk} > \text{AqNk}\)\(\text{AqAk} > \text{NqAk}\)(正常 query 更像正常 key、异常 query 更像异常 key),说明对正常/异常特征集合的相似度本身就是稳定的判别信号。据此,用相似度检索替代参数化拟合:把特征-标签对显式存进记忆库当 key/value,推理时直接检索得异常分数。

方法详解

整体框架

MRAD 是一个从「免训练」到「轻量微调」再到「提示增强」的渐进式框架:MRAD-TF 冻结 CLIP,从辅助数据建一个图像级+像素级的双层特征-标签记忆库,推理时纯靠相似度检索出异常分数与异常图;MRAD-FT 在检索度量里插两层线性层做轻量微调,拉大正常/异常 margin;MRAD-CLIP 再把 MRAD-FT 产出的区域先验注入 CLIP 可学习文本提示当动态偏置,强化对未见类别的泛化与定位。

flowchart LR
    A[辅助数据] -->|冻结CLIP<br/>cls+patch token| B[双层记忆库<br/>Kcls:Vcls / Kpat:Vpat]
    Q[Query图像] -->|冻结CLIP| C[Query特征<br/>Qcls/Qpat]
    B --> D[Cross-Atten<br/>相似度检索]
    C --> D
    D -->|TF: 直接检索| E[异常分数+异常图]
    D -->|FT: +两层线性微调| E
    E -->|区域先验 bn/ba| F[CLIP动态文本提示<br/>MRAD-CLIP]
    F --> G[SOTA 异常图]

关键设计

1. 双层特征-标签记忆库:把"分类器"换成"可检索的原始分布"。MRAD 把冻结的 CLIP 图像编码器拆成全局分支 \(\phi_{cls}\)(出 class token)和局部分支 \(\phi_{vv}\)(V-V 注意力出 patch token),二者共享预训练权重。对辅助集每张图:图像级记忆直接存全局特征 \(k_i^{cls}\) 配 one-hot 标签 \(e_{norm}/e_{anom}\);像素级记忆则把异常区内/外的 patch 特征各自平均成两个区域原型 \(\mu_i^{anom}\)(mask=1 的 patch)和 \(\mu_i^{norm}\)(mask=0 的 patch)再配标签存入。所有特征做 \(\ell_2\) 归一化以稳定检索,最终堆成 \(K_{cls}\in\mathbb{R}^{N_c\times d}\)\(K_{pat}\in\mathbb{R}^{N_p\times d}\) 及对应值矩阵。这一步的精髓是用区域原型而非整图特征作为像素级 key,既压缩了存储(VisA 仅 2162/3093 条),又让正常/异常的局部语义显式可查。

2. MRAD-TF 的检索式判别:softmax 注意力即分类器。给定 query 的全局/patch 特征 \(Q_{cls},Q_{pat}\),分类与分割 logits 都用同一套检索公式得到:\(Y_{cls}^{n/a}=[\text{softmax}(Q_{cls}K_{cls}^\top/\tau)V_{cls}]_{n/a}\)\(Y_{seg}^{n/a}=[\text{softmax}(Q_{pat}K_{pat}^\top/\tau)V_{pat}]_{n/a}\)。其中异常通道 \(Y_{seg}^a\) 正是动机里那个稳定的异常相似度信号 \(s_{anom}(q)\),上采样后即异常图 \(\hat{M}\)。图像级最终分数把全局检索与高置信区域聚合相加:\(S(I)=Y_{cls}^a+\text{TopKMean}(\hat{M})\),用 top-k 均值突出高置信异常区、压制背景噪声。整个过程零训练、零拟合,纯查表。

3. MRAD-FT 的轻量度量微调 + 相似度 dropout:TF 下正常/异常的 margin 偏小,于是只插两个线性映射 \(W_q,W_k\in\mathbb{R}^{d\times d}\),把 \(QK^\top\) 换成 \((QW_q)(KW_k)^\top\) 来校准检索度量。关键巧思是训练时加一个相似度 dropout \(M_\rho(\cdot)\)——把每个 query 相似度最高的 top-\(\rho\%\) logits 置 \(-\infty\)(推理时全保留),这能避免单数据集下的平凡自匹配,逼模型在不那么像的特征上学会鲁棒判别。损失为分类+分割联合:\(\mathcal{L}=\text{BCE}(Y_{cls},y)+\text{Dice}(Y_{seg},M)+\text{Focal}(Y_{seg},M)\),仅训 1 个 epoch。

4. MRAD-CLIP 的区域先验动态提示:让"动态"来源更可靠。在 "good object"/"damaged object" 模板前接 \(E\) 个可学习上下文 token 构成类无关静态提示后,对 query 图用 MRAD-FT 的异常图阈值切出正常/异常区,各区 patch 特征平均成原型,经轻量线性层投影成偏置 \(b_n/b_a\),加到每个上下文 token 上得到图像专属动态提示 \(P_{dyn}^{n/a}\)。文本编码后做 prompt-conditioned 余弦分类 \(Y_{seg}^{n/a}=\text{softmax}(\frac{1}{\tau}[\cos(t_{norm},Q_{pat}),\cos(t_{anom},Q_{pat})])\),只训文本侧、冻结视觉与记忆库。相比 CoCoOp 用全局 class token 当动态源,MRAD-CLIP 用显式的区域先验当偏置,消融证明这是定位精度与未见类泛化的关键。

实验关键数据

主实验表格(16 数据集平均,A/B 分别为 P-AUROC/PRO 与 I-AUROC/I-AP)

方法 设定 像素级 (P-AUROC/PRO) 图像级 (I-AUROC/I-AP)
WinCLIP (CVPR'23) train-free 73.0 / 42.9 75.1 / 73.2
MRAD-TF (Ours) train-free 85.5 / 64.6 81.0 / 83.2
AdaCLIP (ECCV'24) train-based 85.6 / 26.2 87.8 / 86.3
AnomalyCLIP (ICLR'24) train-based 91.0 / 75.7 90.1 / 88.9
FAPrompt (ICCV'25) train-based 90.7 / 75.6 91.3 / 91.2
MRAD-FT (Ours) train-based 91.9 / 78.3 92.0 / 91.9
MRAD-CLIP (Ours) train-based 92.7 / 80.1 92.7 / 92.5

注:医疗域图像级因 PDF 表格不全只取了部分平均,趋势一致。

消融实验表格(动态提示偏置来源,节选 4 数据集)

偏置来源 (bn/a) MVTec 像素 MVTec 图像 Kvasir 像素 HeadCT 图像
static(=AnomalyCLIP 基线) 91.5/82.9 92.0/96.3 83.5/49.5 96.1/97.0
+ class token(似 CoCoOp) 86.2/54.9 89.6/95.1 79.0/45.2 90.4/90.8
+ cross-patch 92.5/85.7 93.0/96.9 83.0/50.0 97.4/97.6
+ anomaly prior 92.8/85.2 93.6/97.3 83.7/51.8 96.5/96.7
+ dual prior(最终) 93.0/86.8 94.0/97.4 84.3/52.7 97.1/97.6

关键发现

  • 免训练就够强:MRAD-TF 在像素级把 WinCLIP 从 73.0/42.9 拉到 85.5/64.6,证明「直接访问经验分布」比拟合更有效,甚至逼近部分训练型方法。
  • 每个组件单调递增:TF→FT→CLIP 在六个工业数据集雷达图上全轴外扩,FT 主要提判别力、CLIP 主要提像素级定位,互补无 trade-off。
  • 全局特征是反例:用 class token 当动态偏置反而把 MVTec 像素从 91.5 砸到 86.2,说明 ZSAD 必须用局部区域先验而非全局特征。
  • 记忆库极省且鲁棒:patch 记忆从 Full 砍到 \(n=100\),pixel-AUROC 仅掉零点几,MRAD-CLIP 在小记忆下更稳。
  • 极低成本:CLIP ViT-L/14-336 全程冻结,MRAD-FT 仅训 1 epoch、MRAD-CLIP 5 epoch,单张 RTX 3090 即可。

亮点与洞察

  • 范式转换:把 ZSAD 从「拟合 \(p(y|x)\)」重构成「检索经验分布」,思想上接近 Tip-Adapter 的缓存检索,但把它从闭集分类扩到了开集异常检测,这是非平凡的迁移。
  • 动机有实证支撑:先用跨数据集相似度统计(\(\text{AqAk}>\text{NqAk}\) 的稳定序)把「检索可判别」这件事量化证明出来,再设计方法,论证链条扎实。
  • 统一框架的可扩展性:TF/FT/CLIP 三档让用户按算力预算自选,从纯查表到 SOTA 平滑过渡,工程友好。
  • 相似度 dropout 是个轻巧又关键的训练 trick,专治单辅助集下的平凡自匹配。

局限与展望

  • 检索质量依赖辅助数据集的覆盖度与多样性,跨域差异极大时单一辅助集的经验分布可能不够;论文也坦承未来要扩到更大数据集与在线/增量设定。
  • 记忆库虽小但仍需存原始特征,随辅助数据规模增长检索成本与存储会线性上升,缺对超大规模库的近似检索(如 ANN)讨论。
  • MRAD-CLIP 的区域先验来自 MRAD-FT 的异常图,存在误差级联——若 FT 异常图定位偏了,动态提示也会被带偏。
  • 全部基于 CLIP ViT-L/14,未验证更小 backbone 或非 CLIP VLM 上范式是否同样成立。

相关工作与启发

  • 谱系定位:上承 CLIP/CoOp/CoCoOp 的提示适配与 Tip-Adapter 的缓存检索,平行于 AnomalyCLIP/AdaCLIP/FAPrompt/Bayes-PFL 的动态提示路线,但用「免训练检索」另辟蹊径。
  • 启发:在监督稀缺、需跨域稳定的任务里,「保留并检索原始经验分布」可能比「把分布压进参数」更省更稳——这一思路可迁移到 few-shot 分割、开集识别等场景。
  • 可借鉴的组合拳:用免训练强基线打底、再用极轻量微调拉 margin、最后用先验注入做提示增强,是一套低成本逼近 SOTA 的通用配方。

评分

  • 新颖性: ⭐⭐⭐⭐ — 把 ZSAD 从参数拟合重构为记忆检索,并用跨数据集相似度统计给出实证动机,范式上有清晰创新;检索思想本身借鉴 Tip-Adapter,故非满分。
  • 实验充分度: ⭐⭐⭐⭐⭐ — 16 个工业+医疗数据集、像素/图像四指标、TF/FT/CLIP 全消融 + 偏置来源消融 + 记忆库规模消融,覆盖全面且有可视化。
  • 写作质量: ⭐⭐⭐⭐ — 动机—方法—实验逻辑顺畅,公式与图清晰;但记忆库构建与 cross-atten 细节略密集,初读需对照图反复理解。
  • 价值: ⭐⭐⭐⭐ — 免训练即超强基线 + 单卡可复现 + 代码开源,对工业/医疗落地实用,且为「检索式异常检测」提供了可扩展的新基线。