本文基于PaddlePaddle复现PaDiM算法,通过CNN提取图像面片嵌入并建模高斯分布,用马氏距离检测异常。在MvTec数据集上,Image-Level AUC平均0.925,Pixel-Level AUC平均0.966,接近或优于PyTorch版本,还介绍了数据集及训练、验证等操作。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

本项目基于PaddlePaddle 复现了论文:
PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization

PaDiM是一种基于图像Patch的算法。它依赖于预先训练好的CNN功能提取器。 将图像分解为多个面片,并使用不同的特征提取层从每个面片中提取嵌入。 将不同层次的激活向量串联起来,得到包含不同语义层次和分辨率信息的嵌入向量。这有助于对细粒度和全局上下文进行编码。 然而,由于生成的嵌入向量可能携带冗余信息,因此使用随机选择来降低维数。 在整个训练批次中,为每个面片嵌入生成一个多元高斯分布。因此,对于训练图像集的每个面片,我们有不同的多元高斯分布。这些高斯分布表示为高斯参数矩阵。 在推理过程中,使用马氏距离对测试图像的每个面片位置进行评分。它使用训练期间为面片计算的协方差矩阵的逆矩阵。 马氏距离矩阵形成了异常图,分数越高表示异常区域。
本项目基于PaddlePaddle框架复现了PaDiM,并在MvTec数据集上进行了实验。
论文:
项目参考:
在MvTec数据集的测试效果对比如下表。
| Avg | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal Nut | Pill | Screw | Toothbrush | Transistor | Zipper | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| anomalib(Pytorch) | 0.891 | 0.945 | 0.857 | 0.982 | 0.950 | 0.976 | 0.994 | 0.844 | 0.901 | 0.750 | 0.961 | 0.863 | 0.759 | 0.889 | 0.920 | 0.780 |
| Paddle | 0.925 | 1.000 | 0.907 | 1.000 | 0.981 | 0.994 | 0.998 | 0.833 | 0.863 | 0.870 | 0.970 | 0.885 | 0.729 | 0.992 | 0.947 | 0.907 |
| Avg | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal Nut | Pill | Screw | Toothbrush | Transistor | Zipper | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| anomalib(Pytorch) | 0.968 | 0.984 | 0.918 | 0.994 | 0.934 | 0.947 | 0.983 | 0.965 | 0.984 | 0.978 | 0.970 | 0.957 | 0.978 | 0.988 | 0.968 | 0.979 |
| Paddle | 0.966 | 0.989 | 0.926 | 0.991 | 0.925 | 0.938 | 0.979 | 0.951 | 0.982 | 0.979 | 0.966 | 0.955 | 0.973 | 0.986 | 0.970 | 0.983 |
image-level auc的Mean为0.922。
pixel-level auc的Mean为0.966(966.2, 0.18% gap)。
数据集网站:MvTec数据集
AiStudio上的数据集:MVTec-AD
MVTec AD是MVtec公司提出的一个用于异常检测的数据集。与之前的异常检测数据集不同,该数据集模仿了工业实际生产场景,并且主要用于unsupervised anomaly detection。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集。
数据集包含不同领域中的五种纹理以及十种物体,且训练集中只包含正常样本,测试集中包含正常样本与缺陷样本,因此需要使用无监督方法学习正常样本的特征表示,并用其检测缺陷样本。这是符合现实的做法,因为异常情况不可预知并无法归纳。下图分别展示了几类图片的正常样本与缺陷样本,以及缺陷样本中的缺陷特写:

%cd /home/aistudio/data/ !tar xvf data116034/mvtec_anomaly_detection.tar.xz
!pip install scikit-image
一共有15个类别,这里需要对15个类别分别训练,最后取平均值作为验证指标. 随机数种子7
预训练模型:挂载数据集[140122] (https://aistudio.baidu.com/aistudio/datasetdetail/140122)
放在output下面,后面就可以直接评估
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category carpet --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category grid --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category leather --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category tile --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category wood --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category bottle --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category cable --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category capsule --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category hazelnut --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category metal_nut --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category pill --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category screw --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category toothbrush --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category transistor --val=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python train.py --data_path=/home/aistudio/data/ --category zipper --val=True --save_path=./output --seed 7
下面验证仅以carpet为例子,其他类别修改category即可。
%cd /home/aistudio/PaDiM-Paddle/ !python val.py --data_path=/home/aistudio/data/ --category carpet --model_path=./output/carpet/best.pdparams --save_picture=True --save_path=./output --seed 7
%cd /home/aistudio/PaDiM-Paddle/ !python predict.py --picture_path=/home/aistudio/data/carpet/test/color/000.png --category carpet --model_path=./output/carpet/best.pdparams --save_picture=True --save_path=./output --seed 7
可以在output/carpet/找到如下的类似结果:
%cd /home/aistudio/PaDiM-Paddle/ !python export_model.py --depth 18 --img_size=224 --model_path=./output/carpet/best.pdparams --save_dir=./output
需要开启infer的380行。
# postprocess(args, test_imgs, args.category, results, distribution) # 可视化
%cd /home/aistudio/PaDiM-Paddle/ !python infer.py --use_gpu=True --model_file=output/model.pdmodel --input_file=/home/aistudio/data/carpet/test/color/000.png --params_file=output/model.pdiparams --category=carpet --distribution=./output/distribution --save_path=./output --seed 7
注意:本部分为论文复现赛内容,只是为了验证整个项目的训练推理的正确性。学习目的可以不进行这部分的运行,即这部分非项目必要部分。
因为test_tipc 不支持后处理的可视化环境,此时没有图像保存结果输出
首先安装auto_log,需要进行安装,安装方式如下: auto_log的详细介绍参考https://github.com/LDOUBLEV/AutoLog。
git clone https://github.com/LDOUBLEV/AutoLog cd AutoLog/ pip3 install -r requirements.txt python3 setup.py bdist_wheel pip3 install ./dist/auto_log-1.2.0-py3-none-any.whl
进行TIPC:
bash test_tipc/prepare.sh test_tipc/configs/PaDiM/train_infer_python.txt 'lite_train_lite_infer'bash test_tipc/test_train_inference_python.sh test_tipc/configs/PaDiM/train_infer_python.txt 'lite_train_lite_infer'
以上就是【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号