SubspaceAD 是一种无需训练的少样本异常检测方法,专为工业视觉缺陷检测设计。其核心思想是:利用少量正常样本,通过子空间建模来刻画正常外观的分布,从而检测出偏离该分布的异常区域。

1. 背景与动机

传统异常检测方法(如基于重构或记忆库)常需大量正常样本或复杂的训练过程。而在实际工业场景中,每个类别往往只能提供少量(如1~10张)正常图像。SubspaceAD 直接利用预训练的 DINOv2 特征提取器,无需任何训练或微调,仅通过少量正常样本拟合一个线性子空间(PCA),即可实现高精度异常检测。

2. 核心方法(两阶段)

  • 特征提取:使用冻结的 DINOv2(带寄存器 tokens)提取图像块(patch)级别的特征。特征提取时支持多层级聚合(如 concat、mean)和中心裁剪预处理。

  • 子空间建模:将所有正常样本的 patch 特征拼接后,通过主成分分析(PCA)估计一个低维子空间,该子空间能够高效地重构正常特征,而对异常特征则产生较大的重构误差。

3. 推理阶段

对于测试图像,同样提取 patch 特征,计算每个 patch 的重建误差(通常为平方误差),得到像素级异常分数图。后处理包括上采样、高斯模糊和 min-max 归一化,最终输出异常热力图。

4. 优势

  • 无需训练:不更新任何模型参数,完全基于预训练特征和线性投影。

  • 少样本高效:1-shot 即可达到接近全量训练的性能。

  • 简单可解释:异常分数具有明确的几何意义(投影到子空间的残差)。

  • 轻量部署:可导出为 ONNX 模型,便于工业落地。

5. 主要结果(1-shot)

数据集 Image AUROC Pixel AUROC
MVTec-AD 98.0% 97.6%
VisA 93.3% 98.3%

在 2-shot、4-shot 下性能进一步提升,优于同期方法(如 PromptAD、AnomalyDINO)。

6. 代码与使用

  • GitHubhttps://github.com/CLendering/SubspaceAD

  • 核心脚本

    • main.py:训练(拟合PCA)和评估

  • 环境:Python 3.10,依赖 PyTorch、transformers、sklearn 等

  • 一键运行示例

    bash

    python main.py --dataset_name mvtec_ad --dataset_path datasets/mvtec-ad --categories bottle --model_ckpt facebook/dinov2-with-registers-small --image_res 672 --k_shot 1 --pca_ev 0.95

7. 适用场景

  • 工业缺陷检测(MVTec-AD、VisA 等)

  • 医疗影像异常发现

  • 任何需要快速适应新类别的异常检测任务

SubspaceAD 以其简洁高效的特点,成为少样本异常检测领域的重要基线。如需深入实践,可参考其官方仓库及论文《SubspaceAD: Training-Free Few-Shot Anomaly Detection via Subspace Modeling》(CVPR 2026)。

8.实际运用效果(1-Shot)

模型输出异常图,根据异常图计算图像级异常分数,设定一个合适阈值,即可判定目标是否异常

9.说明

开源项目中作者没有提供模型导出onnx的方法,如果需要导出onnx方便在C#或者C++项目中部署的话,需要自行研究onnx导出方法,输入输出参考:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐