【2023工业图像异常检测代码复现】DDAD: 基于条件去噪扩散模型的异常检测方法
Paper:Anomaly Detection with Conditioned Denoising Diffusion Models
Code:https://github.com/arimousa/DDAD?tab=readme-ov-file
文献解读:【2023工业图像异常检测文献】DDAD: 基于条件去噪扩散模型的异常检测方法
1、Introduction
DDAD方法的核心在于 利用条件去噪过程来生成高质量的重构图像,这些图像在结构和模式上与输入图像非常相似,但去除了异常 。这种方法的创新之处在于它不仅能够检测异常,还能够精确地定位异常区域。通过结合像素级和特征级比较,DDAD能够捕捉到不同类型的异常,包括那些在像素层面上不易察觉的异常,如凹陷或凸起。此外, 通过域适应技术,DDAD能够调整预训练的特征提取器,使其更好地适应特定的异常检测任务,同时避免在适应过程中丢失预训练模型的泛化能力 。这种结合了生成模型、条件去噪和域适应的方法,使得DDAD在异常检测任务中表现出色。
2、Framework
项目结构与文件说明:
- images/: 存储图像文件的目录,可能用于可视化或示例。
- config.yaml: 配置文件,定义了模型训练和评估的各种参数。
- dataset.py: 数据集加载和处理的相关代码。
- ddad.py: 核心模块,实现了DDAD框架的主要逻辑。
- feature_extractor.py: 特征提取器的定义和实现。
- loss.py: 定义了损失函数,用于训练过程中的误差计算。
- main.py: 项目入口文件,定义了如何运行整个程序。
- metrics.py: 包含了评估指标的实现,用于量化模型性能。
- reconstruction.py: 重建模块,可能包括生成图像的代码。
- requirements.txt: 列出了项目运行所需要的Python库及其版本要求。
- resnet.py: 定义了ResNet模型的实现,可能用于作为特征提取器的一部分。
- train.py: 用于训练模型的脚本,通常会定义训练流程、参数设置等。
- unet.py: U-Net模型的实现,用于图像重建。
- visualize.py: 用于生成模型训练、测试结果可视化的脚本。
3、Environments
PyTorch 2.0.0
Python 3.8(ubuntu20.04)
Cuda 11.8
(扩散模型对硬件要求较高,建议使用4090以上显卡)
4、Datasets
数据集使用的是MVTecAD (MVTEC ANOMALY DETECTION DATASET)
数据来源https://www.mvtec.com/company/research/datasets/mvtec-ad,将其放在某个位置datapath。确保其遵循以下数据树结构:
mvtec
|-- bottle
|-----|----- ground_truth
|-----|----- test
|-----|--------|------ good
|-----|--------|------ broken_large
|-----|--------|------ ...
|-----|----- train
|-----|--------|------ good
|-- cable
|-- ...
总共有15个子数据集:bottle(瓶子),cable(电缆),capsule(胶囊),carpet(地毯),grid(网格),hazelnut(危险螺母), leather(皮革),metal_nut(金属螺母),pill(药丸 ),screw(螺丝 ),tile(瓷砖),toothbrush(牙刷 ),transistor(变压器),wood(木材),zipper(拉链)。
5、Requirements
对 requirements.txt 文件稍作修改,修改好的文件如下:
安装依赖,执行:pip install -r requirements.txt
所需的依赖没有完全提及。。。运行时,出现报错需要安装指定包,pip install 包名 ,就可解决了。。。
6、Train and Evaluation of the Model
1)从 Github 中下载 Checkpoints 模型
2)训练降噪 UNet 网络,运行:python main.py --train True
3)修改 config.yaml 文件中的设置,以在不同类别上训练模型
4)微调特征提取器,运行命令:python main.py --domain_adaptation True
5)评估和测试模型,运行:python main.py --detection True
7、Results
没运行完。。。