【论文复现】PaDiM-Paddle:基于分布建模的异常检测与定位方法
PaDiM-Paddle:基于分布建模的异常检测与定位方法
1.1 简介
本项目基于paddlepaddle 复现了论文:
padim: a patch distribution modeling framework for anomaly detection and localization
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

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项目参考:
anomalibPaDiM-Anomaly-Detection-Localization-master1.2 复现精度
本文基于PaddlePaddle复现PaDiM算法,通过CNN提取图像面片嵌入并建模高斯分布,用马氏距离检测异常。在MvTec数据集上,Image-Level AUC平均0.925,Pixel-Level AUC平均0.966,接近或优于PyTorch版本,还介绍了数据集及训练、验证等操作。
Image-Level AUC
Pixel-Level AUC
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。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集。
数据集包含不同领域中的五种纹理以及十种物体,且训练集中只包含正常样本,测试集中包含正常样本与缺陷样本,因此需要使用无监督方法学习正常样本的特征表示,并用其检测缺陷样本。这是符合现实的做法,因为异常情况不可预知并无法归纳。下图分别展示了几类图片的正常样本与缺陷样本,以及缺陷样本中的缺陷特写:

快速开始
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.webp --category carpet --model_path=./output/carpet/best.pdparams --save_picture=True --save_path=./output --seed 7登录后复制
可以在output/carpet/找到如下的类似结果:
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.webp --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/AutoLogcd AutoLog/pip3 install -r requirements.txtpython3 setup.py bdist_wheelpip3 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'登录后复制
相关攻略
常见报错解析:“Access Not Configured”故障排除指南 许多开发者和团队成员在使用OpenClaw集成飞书时,都曾遭遇过一个典型的中断提示:“access not configured”(访问未配置)。该提示会明确显示您的飞书账户ID及一组唯一的配对验证码,并指出需要联系机器人所有
OpenClaw 常用指令大全与使用详解 openclaw status:此命令是查看OpenClaw系统整体健康状态的核心指令,执行后即获取服务运行状况的全面报告,是日常运维的首要诊断工具。 openclaw gateway restart:在修改网关配置后,必须运行此指令以重启网关服务,使配置文
如何通过 OpenClaw 实现 Chrome 浏览器自动化操控 在软件开发与自动化测试领域,持续学习是常态。本文旨在详细介绍如何利用 OpenClaw 连接并控制一个已开启的 Chrome 浏览器实例,实现点击、文本输入、文件上传、页面滚动、屏幕截图以及执行 JavaScript 等自动化操作。整
项目概述 你是否希望将强大的 AI 助手带入日常聊天?本教程将指导你完成搭建流程,让你能在 QQ 上直接调用 OpenClaw 智能助手,实现无门槛的 AI 对话体验。 架构说明 ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ QQ 用户 │ ─
一 下载并安装Node js,全程保持默认设置 首先,请前往Node js官方网站的下载中心:https: nodejs org zh-cn download。根据您的操作系统(Windows Mac Linux)下载对应的安装程序。运行安装向导时,整个过程非常简单,您只需连续点击“下一步”按钮
热门专题
热门推荐
速览攻略:世界圣羽翼王核心打法与全面解析 本攻略将为你完整呈现《洛克王国》世界圣羽翼王的通关秘籍,深度剖析两种高效实战打法:追求极致速度的“燃薪虫四回合速通”与稳定输出的“酷拉无限连击流”。文章将进一步解析这位翼系精灵王的技能机制、属性克制关系及其在PVE与PVP中的实战定位,帮助你彻底掌握应对其隐
速览:工程系统核心机制解析 在《异种航员2》中,工程系统是整个抵抗力量赖以运转的“战略后勤中枢”。无论是研发新武器、生产重型装甲还是制造先进飞行器,所有实体装备的产出都依赖于此。简言之,该系统的核心运作围绕着两大关键:工程师人力的高效配置与全球稀缺资源的精细化调度。工程师的数量直接决定了每个项目的建
核心速览 在《洛克王国世界》中,治愈兔是一位兼具功能性任务角色与实战辅助能力的精灵。它的价值不仅在剧情推进中体现,更在于对战里出色的治疗与防护表现。本文将为你全面解析治愈兔的精准获取位置、种族属性特点以及实战技能搭配,助你顺利捕捉并最大化其在队伍中的作用。所有关键信息将通过清晰的图文内容详细展示,确
速览 在《红色沙漠》中,挑战传说之狼这一强大的任务BOSS,需要玩家进行充分的准备并遵循完整的任务流程。整个过程环环相扣,你必须首先参与塞莱斯特家族的势力任务,通过完成任务将家族声望提升至指定等级,才能解锁【传说之狼】的专属讨伐任务,最终直面这个传说中的强大生物。 红色沙漠传说之狼怎么打 归根结底,
【宝可梦Pokopia】舒适度全解析:快速提升环境等级的核心秘诀 你是否正在探索《宝可梦Pokopia》世界,并希望有效提升宝可梦栖息地的舒适度?舒适度不仅是衡量宝可梦快乐程度的晴雨表,更是解锁游戏核心内容、加速发展的关键驱动指标。本攻略将系统性地为你揭示提升舒适度的核心途径,涵盖从装饰栖息地、建造





