UniVAD: A Training-free Unified Model for Few-shot Visual Anomaly Detection¶
会议: CVPR 2025
arXiv: 2412.03342
代码: https://github.com/FantasticGNU/UniVAD
领域: 医学图像
关键词: 视觉异常检测, 免训练, few-shot, 跨领域统一模型, 组件分割
一句话总结¶
本文提出 UniVAD,一个免训练的统一少样本视觉异常检测方法,通过上下文组件聚类(C3)模块实现精准组件分割,结合组件感知的 patch 匹配和图增强组件建模,仅需少量正常样本即可在工业、逻辑和医学三个领域实现 SOTA 异常检测。
研究背景与动机¶
领域现状:视觉异常检测(VAD)旨在识别图像中偏离正常模式的异常样本,应用于工业缺陷检测、逻辑异常检测和医学异常检测三大领域。现有方法如 PatchCore 在工业场景表现优异,但针对不同领域需要专门设计模型架构和检测算法。
现有痛点:(1)现有 VAD 方法高度领域特化——PatchCore 在 MVTec-AD 上 1-shot AUC 达 84.0%,但在逻辑异常数据集 MVTec LOCO 上骤降至 62.0%;(2)即使在同一领域内,大多数方法采用"one-category-one-model"范式,每个类别训练独立模型,泛化能力差;(3)组件分割方法在 few-shot 场景下面临粒度控制困难,SAM 产出的分割要么过细要么过粗。
核心矛盾:不同领域的异常类型差异巨大——工业异常是局部缺陷,逻辑异常是组件的错误组合,医学异常是病理区域——用统一方法检测这些不同语义层次的异常是一个根本性挑战。
本文目标:构建一个免训练、跨领域、统一的 few-shot 异常检测模型,在测试时仅需少量正常参考样本即可检测工业、逻辑和医学领域的异常。
切入角度:作者观察到所有异常都可以分为两类:结构异常(patch 级别特征偏差)和逻辑异常(组件级别关系偏差),可以用两个互补模块分别处理,再聚合结果。
核心 idea:通过视觉基础模型(SAM、RAM)+聚类实现精确组件分割,然后在组件内做 patch 匹配检测结构异常、在组件间做图建模检测逻辑异常,两路结果融合实现统一检测。
方法详解¶
整体框架¶
UniVAD 的输入是查询图像和 \(K\) 张正常参考图像。首先用 C3 模块对所有图像进行组件分割得到组件 mask,然后提取 patch 级特征和组件级特征。patch 特征送入 CAPM 模块检测结构异常,组件特征送入 GECM 模块检测逻辑异常,最终将两类异常分数加权融合得到统一异常检测结果。
关键设计¶
-
上下文组件聚类模块(Contextual Component Clustering, C3):
- 功能:在 few-shot 条件下实现精确的组件分割
- 核心思路:先用 Recognize Anything Model(RAM)识别图像中的物体标签,再用 Grounded SAM 生成初始 mask。如果只有一个 mask 且覆盖面积超过 \(\gamma\%\),视为纹理表面,输出全图 mask;如果有多个 mask,则用 K-means 聚类正常图像的特征得到 \(N\) 个聚类中心,生成聚类 mask \(M_{\text{cluster}}\),过滤背景后得到 \(N'\) 个有效 mask。最后用 IoU 将 SAM 的细粒度 mask 映射到聚类 mask 上,合并同一聚类标签的 SAM mask 作为最终输出。
- 设计动机:单独使用 SAM 会产生粒度不一致的问题(过细或过粗),聚类可以提供正确的语义粒度;单独聚类在 few-shot 下需要大量样本。两者结合既利用了 SAM 的精确边界,又通过聚类控制了分割粒度。
-
组件感知 Patch 匹配模块(Component-Aware Patch Matching, CAPM):
- 功能:检测结构异常(局部缺陷、纹理变化、病理区域)
- 核心思路:使用预训练的 CLIP 和 DINOv2 编码器提取 patch 特征 \(P_q\) 和 \(P_n\)。在标准 patch 匹配基础上(计算查询 patch 到所有正常 patch 的最小余弦距离),增加两个改进:(a)组件感知匹配——利用 C3 的组件 mask 将 patch 分组,只在同一组件内进行匹配 \(Score_{\text{aware}}(P_{qi}^j) = \min(\text{distance}(P_{qi}^j, P_{ni}))\),避免跨组件的误匹配;(b)图文匹配——用 CLIP 文本编码器编码"正常"和"异常"描述,计算 patch 与文本的相似度 \(Score_{\text{vl}}\)。三项分数等权加权得到结构异常图。
- 设计动机:标准 patch 匹配无法区分前景/背景,也无法区分不同组件——颜色相似的不同组件区域容易被误匹配导致漏检。组件约束把匹配限制在语义相同的区域内,大幅降低误匹配。
-
图增强组件建模模块(Graph-Enhanced Component Modeling, GECM):
- 功能:检测逻辑异常(组件缺失、多余、位置错误)
- 核心思路:对组件级特征建图——每个组件是一个节点,组件间余弦相似度为边权重,构建邻接矩阵 \(A\),通过图注意力操作聚合上下文信息得到增强的组件嵌入 \(E_q = G(A_q, F_{qc})\)。然后计算深层异常分数 \(Score_{\text{deep}}(E_q^i) = \min(\text{distance}(E_q^i, E_n))\)。同时提取几何特征(面积、颜色、位置)计算几何异常分数 \(Score_{\text{geo}}\)。两者加权融合得到逻辑异常分数。
- 设计动机:patch 匹配无法检测"内容正确但组合错误"的逻辑异常——图建模可以捕捉组件之间的关系模式,发现组件的增减或位移。
损失函数 / 训练策略¶
UniVAD 是免训练方法,不需要损失函数和训练过程。使用 CLIP-L/14@336px 和 DINOv2-G/14 作为冻结的特征提取器。所有超参数(\(\alpha, \beta, \gamma\) 各 1/3,\(\phi, \psi\) 各 0.5,\(\delta, \eta\) 各 0.5)在所有数据集上统一设置。图像统一缩放到 448×448。
实验关键数据¶
主实验¶
1-shot 设置下跨领域异常检测(Image-level AUC):
| 数据集 | PatchCore | AnomalyGPT | WinCLIP | UniVAD | 提升 |
|---|---|---|---|---|---|
| MVTec-AD | 84.0 | 94.1 | 93.1 | 97.8 | +3.7 |
| VisA | 74.8 | 87.4 | 83.8 | 93.5 | +6.1 |
| MVTec LOCO | 62.0 | 60.4 | 58.0 | 71.0 | +8.8 |
| BrainMRI | 73.2 | 73.1 | 55.4 | 80.2 | +7.0 |
| LiverCT | 44.9 | 60.3 | 60.3 | 70.0 | +9.7 |
| RESC | 56.3 | 82.4 | 72.9 | 85.5 | +3.1 |
4-abnormal-shot 设置下与专用医学方法对比:
| 数据集 | DRA | BGAD | MVFA | UniVAD |
|---|---|---|---|---|
| BrainMRI | 80.6 | 83.6 | 92.4 | 94.1 |
| LiverCT | 59.6 | 72.5 | 81.2 | 87.5 |
| RESC | 90.9 | 86.2 | 96.2 | 97.3 |
消融实验¶
C3 模块不同实现方式对比(Image AUC, Pixel AUC):
| 配置 | MVTec-AD | VisA | MVTec LOCO | BrainMRI |
|---|---|---|---|---|
| 仅聚类 | (97.3, 96.1) | (92.5, 98.0) | (67.5, 70.9) | (73.9, 96.7) |
| 仅 Grounded-SAM | (97.5, 96.1) | (92.1, 97.7) | (67.8, 74.9) | (74.5, 94.9) |
| C3(聚类+SAM) | (97.8, 96.5) | (93.5, 98.0) | (71.0, 75.1) | (80.2, 96.8) |
关键发现¶
- UniVAD 在所有 9 个数据集上均超越了各领域的专用方法,尤其在逻辑异常(MVTec LOCO +8.8%)和医学异常(LiverCT +9.7%)上提升显著
- C3 模块的聚类+SAM 组合明显优于单独使用任一方法,尤其在 BrainMRI(+6.3%/+1.9%)和 MVTec LOCO(+3.5%/+0.2%)上
- 作为免训练方法,UniVAD 甚至在 4-abnormal-shot 设置下超越了需要训练的 MVFA
- 图增强组件建模对逻辑异常检测贡献最大,组件感知 patch 匹配对工业和医学异常贡献最大
亮点与洞察¶
- "结构+逻辑"双路检测范式:将异常检测分解为两个语义层次,各用最适合的方法处理,巧妙地统一了不同领域的异常类型
- 免训练的跨领域泛化:不需要在目标领域做任何训练,所有超参数统一设置,证明视觉基础模型的预训练特征已经足够丰富
- C3 模块的"粗+细"组合策略:聚类控制粒度、SAM 确保边界精度,这种互补设计思路可迁移到其他需要层次化分割的任务
局限与展望¶
- 依赖 RAM、SAM、CLIP、DINOv2 等多个大模型,推理开销较高
- 对极少组件的简单物体(如螺丝),GECM 模块的图建模可能无法充分发挥作用
- 超参数虽然统一但可能不是每个场景的最优解
- 未来可以引入自适应权重融合来替代固定的分数加权
相关工作与启发¶
- vs PatchCore:PatchCore 是纯 patch 匹配方法,无法处理逻辑异常;UniVAD 添加组件级建模,覆盖了更高语义层次
- vs ComAD:ComAD 也基于组件但需要大量样本做聚类分割;UniVAD 通过 SAM 实现 few-shot 下的精确分割
- vs AnomalyGPT:AnomalyGPT 利用 LLM 推理但在逻辑异常上表现较差(60.4%);UniVAD 的图建模更适合捕捉组件关系
- 免训练+模块化设计的思路可以作为构建通用异常检测系统的蓝图
评分¶
- 新颖性: 7/10 — 各模块单独来看不算全新,但统一框架的设计和跨领域免训练的定位很有价值
- 实验充分度: 9/10 — 9 个数据集涵盖三大领域,1-shot 和 4-shot 两种设置,消融全面
- 写作质量: 8/10 — 结构清晰,图示直观,伪代码详尽
- 价值: 8/10 — 首个免训练统一跨领域 VAD 方法,为异常检测领域的标准化做出重要贡献