SubspaceAD少样本异常检测开源项目分享

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. 代码与使用
-
核心脚本:
-
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导出方法,输入输出参考:

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



所有评论(0)