💡 这是论文 "RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection (CVPR 2024)" 的官方实现 [arxiv]
RealNet 是一个简单而高效的框架,包含三个关键创新:首先,我们提出了强度可控的扩散异常合成(SDAS),这是一种基于扩散过程的合成策略,能够生成具有不同异常强度的样本,模拟真实异常样本的分布。其次,我们开发了异常感知特征选择(AFS),这是一种选择具有代表性和区分性的预训练特征子集的方法,以提高异常检测性能,同时控制计算成本。第三,我们引入了重构残差选择(RRS),这是一种自适应选择区分性残差的策略,用于跨多个粒度层次全面识别异常区域。
我们使用扩散模型进行异常合成,为四个数据集(MVTec-AD、MPDD、BTAD 和 VisA)的异常检测模型训练提供了 36万 张异常图像。[下载]
扩散模型 [下载] 和指导分类器(可选)[下载],在 MVTec-AD、MPDD、BTAD 和 VisA 数据集上训练。
| 图像 AUROC | 像素 AUROC | |
|---|---|---|
| MVTec-AD | 99.6 | 99.0 |
| MPDD | 96.3 | 98.2 |
| BTAD | 96.1 | 97.9 |
| VisA | 97.8 | 98.8 |
要运行实验,首先克隆存储库并安装 requirements.txt。
$ git clone https://github.com/cnulab/RealNet.git
$ cd RealNet
$ pip install -r requirements.txt
下载以下数据集:
对于 VisA 数据集,我们进行了格式处理以确保一致性。强烈建议您从我们的链接下载。
如果使用 DTD(可选)数据集进行异常合成,请下载:
将它们解压到 data 文件夹中。请参阅 data/README。
我们加载在 ImageNet 上预训练的扩散模型权重,如下所示:
我们使用指导分类器来提高图像质量(可选):
下载它们并放置在 pretrain 文件夹中。
在 MVTec-AD 数据集上训练扩散模型:
$ python -m torch.distributed.launch --nproc_per_node=4 train_diffusion.py --dataset MVTec-AD
在 MVTec-AD 数据集上训练指导分类器:
$ python -m torch.distributed.launch --nproc_per_node=2 train_classifier.py --dataset MVTec-AD
我们使用 4*A40 GPUs,训练扩散模型需要 48 小时,使用 2*RTX3090 GPUs,训练指导分类器需要 3 小时。
我们提供以下检查点:
下载它们到 experiments 文件夹中。请参阅 experiments/README。
使用 1*RTX3090 GPU 采样异常图像:
$ python -m torch.distributed.launch --nproc_per_node=1 sample.py --dataset MVTec-AD
我们为每个类别提供了 10k 张分辨率为 256*256 的采样异常图像,可以通过以下链接下载:
使用 1*RTX3090 GPU 训练 RealNet:
$ python -m torch.distributed.launch --nproc_per_node=1 train_realnet.py --dataset MVTec-AD --class_name bottle
realnet.yaml 提供了训练期间的各种配置。
更多命令可以在 run.sh 中找到。
计算图像 AUROC、像素 AUROC 和 PRO,并生成异常定位的定性结果:
$ python evaluation_realnet.py --dataset MVTec-AD --class_name bottle
我们还为每个类别提供了一些生成的 正常 图像(在论文中将异常强度设置为0),可以通过以下链接下载:
该存储库的附加文件目录:
- [Google Drive]
- [百度云] (密码 6789)
如果这项工作对您有帮助,请引用:
@inproceedings{zhang2024realnet,
title={RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection},
author={Ximiao Zhang, Min Xu, and Xiuzhuang Zhou},
year={2024},
eprint={2403.05897},
archivePrefix={arXiv},
primaryClass={cs.CV}
}