【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法

P粉084495128
发布: 2025-07-17 09:22:15
原创
482人浏览过
本文基于PaddlePaddle复现PaDiM算法,通过CNN提取图像面片嵌入并建模高斯分布,用马氏距离检测异常。在MvTec数据集上,Image-Level AUC平均0.925,Pixel-Level AUC平均0.966,接近或优于PyTorch版本,还介绍了数据集及训练、验证等操作。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

【论文复现】padim-paddle:基于分布建模的异常检测与定位方法 - php中文网

PaDiM-Paddle:基于分布建模的异常检测与定位方法

1.1 简介

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

【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法 - php中文网

PaDiM是一种基于图像Patch的算法。它依赖于预先训练好的CNN功能提取器。 将图像分解为多个面片,并使用不同的特征提取层从每个面片中提取嵌入。 将不同层次的激活向量串联起来,得到包含不同语义层次和分辨率信息的嵌入向量。这有助于对细粒度和全局上下文进行编码。 然而,由于生成的嵌入向量可能携带冗余信息,因此使用随机选择来降低维数。 在整个训练批次中,为每个面片嵌入生成一个多元高斯分布。因此,对于训练图像集的每个面片,我们有不同的多元高斯分布。这些高斯分布表示为高斯参数矩阵。 在推理过程中,使用马氏距离对测试图像的每个面片位置进行评分。它使用训练期间为面片计算的协方差矩阵的逆矩阵。 马氏距离矩阵形成了异常图,分数越高表示异常区域。

本项目基于PaddlePaddle框架复现了PaDiM,并在MvTec数据集上进行了实验。

论文:

  • [1] Simonjan, Jennifer and Unluturk, Bige D. and Akyildiz, Ian F. PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization

项目参考:

  • anomalib
  • PaDiM-Anomaly-Detection-Localization-master

1.2 复现精度

在MvTec数据集的测试效果对比如下表。

Image-Level AUC


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

Pixel-Level AUC


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)。

1.3 数据集

数据集网站:MvTec数据集

AiStudio上的数据集:MVTec-AD

MVTec AD是MVtec公司提出的一个用于异常检测的数据集。与之前的异常检测数据集不同,该数据集模仿了工业实际生产场景,并且主要用于unsupervised anomaly detection。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集。

数据集包含不同领域中的五种纹理以及十种物体,且训练集中只包含正常样本,测试集中包含正常样本与缺陷样本,因此需要使用无监督方法学习正常样本的特征表示,并用其检测缺陷样本。这是符合现实的做法,因为异常情况不可预知并无法归纳。下图分别展示了几类图片的正常样本与缺陷样本,以及缺陷样本中的缺陷特写:

瞬映
瞬映

AI 快速创作数字人视频,一站式视频创作平台,让视频创作更简单。

瞬映 57
查看详情 瞬映

【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法 - php中文网

快速开始

In [ ]
%cd /home/aistudio/data/
!tar xvf data116034/mvtec_anomaly_detection.tar.xz
登录后复制

2.1 依赖安装

In [ ]
!pip install scikit-image
登录后复制

2.2 训练

一共有15个类别,这里需要对15个类别分别训练,最后取平均值作为验证指标. 随机数种子7

预训练模型:挂载数据集[140122] (https://aistudio.baidu.com/aistudio/datasetdetail/140122)

放在output下面,后面就可以直接评估

In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category carpet  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category grid  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category leather  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category tile  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category wood  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category bottle  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category cable  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category capsule  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category hazelnut  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category metal_nut  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category pill  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category screw  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category toothbrush  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category transistor  --val=True --save_path=./output --seed 7
登录后复制
In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python train.py --data_path=/home/aistudio/data/ --category zipper  --val=True --save_path=./output --seed 7
登录后复制

2.3 验证

下面验证仅以carpet为例子,其他类别修改category即可。

In [ ]
%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
登录后复制

2.4 预测

In [ ]
%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/找到如下的类似结果:【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法 - php中文网

2.5 导出

In [ ]
%cd /home/aistudio/PaDiM-Paddle/
!python export_model.py --depth 18 --img_size=224 --model_path=./output/carpet/best.pdparams --save_dir=./output
登录后复制

2.6 推理

需要开启infer的380行。

        # postprocess(args, test_imgs, args.category, results, distribution) # 可视化
登录后复制
In [ ]
%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
登录后复制

2.7 TIPC

注意:本部分为论文复现赛内容,只是为了验证整个项目的训练推理的正确性。学习目的可以不进行这部分的运行,即这部分非项目必要部分。

因为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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号