【2020工业图像异常检测文献】PaDiM

PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization

1、Background

在单类学习(仅使用正常数据(即“单一类”)来训练模型)环境中的异常检测和定位任务方法中,要么需要深度神经网络训,要么在测试时使用K-最近邻(K-NN)算法对整个训练数据集进行操作。K-NN算法的线性复杂度随着训练数据集的大小而增加,增加了时间和空间复杂度。

基于重建的方法通常使用自动编码器(AE)、变分自动编码器(VAE)或生成对抗网络(GAN)等神经网络架构,仅训练正常类图像。因此,异常图像由于无法良好地重建而被识别为异常。常用的方法包括使用重建误差作为异常分数,虽然基于重构的方法非常直观且可解释,但由于 AE 有时也会对异常图像产生良好的重构结果,因此其性能受到限制。

基于嵌入相似度的方法利用深度神经网络提取有意义的特征向量,这些向量用于检测整个图像的异常。异常分数通常是测试图像嵌入向量与正常参考向量之间的距离。这些方法在检测精度上表现良好,但通常缺乏对异常区域的可解释性推理复杂度与数据集的规模成线性关系。这可能会阻碍该方法的工业应用。

为了解决上述问题,提出了 PaDiM(Patch Distribution Modeling) 方法,利用预训练的卷积神经网络(CNN)进行嵌入提取,并具有以下两个特性:

(1)每个补丁位置由多元高斯分布描述;

(2)PaDiM 考虑了预训练CNN不同语义层次之间的相关性。

2、Method

PaDiM 算法 利用预训练的卷积神经网络(CNN)进行补丁嵌入,并使用多元高斯分布来获得正常类的统计表示,并利用CNN不同语义层次之间的相关性来更好地定位异常。

  • 预训练的CNN用于特征提取
    • PaDiM使用预训练的CNN模型(如ResNet、Wide-ResNet或EfficientNet)来提取图像特征。这些模型已经在大规模数据集(如ImageNet)上进行了训练,能够学习到丰富的视觉特征。
    • 在训练阶段,将正常图像输入到CNN中,提取特定层的激活图(feature maps)。这些激活图包含了图像的多尺度和多语义层次的特征。
  • 补丁嵌入提取
    • 从CNN的激活图中,将图像划分为多个小块(补丁),每个补丁对应于激活图中的一个区域。
    • 每个补丁的激活向量被提取出来,这些向量包含了该补丁的视觉特征。通过从不同层次的激活图中提取特征并进行拼接,可以获得包含不同语义信息的嵌入向量。
  • 多元高斯分布建模
    • 对于训练集中的每个补丁位置,收集来自多个正常图像的嵌入向量,形成一个嵌入向量的集合。
    • 假设这些嵌入向量的集合遵循多元高斯分布。计算该分布的参数,即均值向量(µ)和协方差矩阵(Σ)。均值向量是所有嵌入向量的平均值,协方差矩阵描述了向量之间的线性关系和变异程度。
  • 正则化处理
    • 为了避免协方差矩阵不可逆的问题,引入一个小的正则化项(ϵI),其中I是单位矩阵,ϵ是一个小的常数。这确保了协方差矩阵始终是满秩的,可以进行逆运算。
  • 异常检测和定位
    • 在测试阶段,对于输入的测试图像,重复上述的补丁嵌入提取过程。
    • 使用马氏距离(Mahalanobis distance)来计算测试图像中每个补丁与学习到的多元高斯分布之间的距离。马氏距离考虑了数据的协方差结构,能够更准确地反映数据点与分布中心的相似度。
    • 根据马氏距离的大小,生成异常图(anomaly map),图中的高值区域表示可能的异常位置。

在这里插入图片描述

pseudo-code

# 伪代码:PaDiM方法实现# 从图像中提取所有补丁 extract_patches(image)
# 使用CNN提取补丁的特征嵌入 extract_embeddings(cnn, patch)
# 计算嵌入向量的均值 calculate_mean(embeddings)
# 计算嵌入向量的协方差矩阵 calculate_covariance(embeddings, mean)
# 计算马氏距离 calculate_mahalanobis_distance(embedding, mean, covariance)
# 更新异常图 update_anomaly_map(anomaly_map, position, score)
# 显示异常图 display_anomaly_map(anomaly_map)# 步骤1: 预训练CNN模型加载
pretrained_cnn = load_pretrained_cnn()# 步骤2: 训练阶段 - 正常图像特征提取
for each normal_image in normal_images_dataset:patches = extract_patches(normal_image)for patch in patches:embeddings = extract_embeddings(pretrained_cnn, patch)store_embedding(patch_position, embeddings)# 步骤3: 计算每个补丁位置的均值和协方差
for each patch_position in patch_positions:embeddings = get_embeddings_for_position(patch_position)mean = calculate_mean(embeddings)covariance = calculate_covariance(embeddings, mean)store_normal_model(patch_position, mean, covariance)# 步骤4: 测试阶段 - 异常检测和定位
for each test_image in test_images_dataset:patches = extract_patches(test_image)anomaly_map = initialize_anomaly_map(test_image)for patch in patches:embedding = extract_embeddings(pretrained_cnn, patch)for each patch_position in patch_positions:mean = get_mean_for_position(patch_position)covariance = get_covariance_for_position(patch_position)mahalanobis_distance = calculate_mahalanobis_distance(embedding, mean, covariance)anomaly_score = update_anomaly_map(anomaly_map, patch_position, mahalanobis_distance)display_anomaly_map(anomaly_map)

3、Experiments

good…

在这里插入图片描述

4、Conclusion

提出了一个新的单类学习环境中的异常检测和定位的补丁分布建模框架 PaDiM 。

[REFERENCE]
精读:PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 安装minikube,并拉取k8s镜像

虚拟机是vmware17, 系统是ubuntu20.4, minikube是1.23.1, docker是24.0.7, 为什么要装minikube,通常k8s集群是要3台机子以上,而通过minikube,可以在一台机子上搭建出k8s集群,minikube采用的是D…

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵进程,这些进程使用流言协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。 文章目录 〇、…

【环境踩坑系列】centos7安装python3.10.X

前言 虽然centOS8已经发布了相当一段时间了,但是基于稳定性、成熟的社区等原因,大家在选择centOS作为服务器操作系统的时候仍然会选择centOS7作为首选。但是centOS7自带的是python2.7.5,当前大量的python程序要用到的又是python3&#xff0c…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

RocketMQ实战与集群架构详解

目录 一、MQ简介 MQ的作用主要有以下三个方面 二、RocketMQ产品特点 1、RocketMQ介绍 2、RocketMQ特点 三、RocketMQ实战 1、快速搭建RocketMQ服务 2、快速实现消息收发 1. 命令行快速实现消息收发 2. 搭建Maven客户端项目 3、搭建RocketMQ可视化管理服务 4、升级分…

ubuntu安装libtorch

Ubuntu20.04安装libtorch 〇、前期准备1、查看NVIDIA显卡算力和CUDA版本支持的算力2、查看CUDA与显卡驱动的版本对应 一、NVIDIA显卡驱动安装1、下载显卡驱动2、安装驱动A. 安装依赖B. 禁用nouveau驱动C. 显卡驱动安装 3、参考 二、CUDA安装1、下载安装CUDA2、测试CUDA是否安装…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

双向链表的基本结构及功能实现

1.基本结构: 双向链表是一种链表数据结构,它由一系列节点组成,每个节点包含三个部分: (1).数据域:存储节点的数据 (2).前驱指针:指向前一个节点 (3).后驱指针:指向下一个节点 2.基本特性: 双向链接: 与单向链表…

连锁多门店收银系统源码

近年来,越来越多的零售行业从业者意识到,线下线上全渠道整合将成为国内消费市场的大趋势,其中,线下门店能够赋予品牌发展的价值依然不可小觑。 1. 线下连锁门店发展方向,多种经营模式 新零售时代,基于品牌…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中,excel导出图片经常会用到,但奈何HSSFWorkbook导出数据数量有限制问题,所以企业里大多都用SXSSFWorkbook格式,很少用HSSFWorkbook。所以今天以这两种格式分别记录下,图片的导出过程。 2 HSSFWork…

Reddit账号太多?一文教你轻松管理

想要在Reddit上扩大品牌影响力,但不知道如何管理多个账号?面对复杂的社区规则,你是否在担心账号安全?渴望提升参与度,却对内容策略一筹莫展?本文将为你揭秘如何高效管理你的Reddit账号,让你在这…

PR快速片段分割教程

方法一: 方法二yyds: ctrla全选,拽过来ME导出即可。

周文强:我感受到了海口经济学院创新创业的热情

日前,由中国志愿服务基金会、中国志愿服务基金会汇成百年专项基金以及共青团海口市委员会主办,共青团海口经济学院委员会承办的“2024 首届青领杯大学生创新创业大赛”海口站线下培训在海口经济学院开展。汇成百年专项基金发起人周文强作为本次大赛的创业…

ReadWriteLock读写锁

读写锁基本概念 ReadWriteLock是Java并发包中的一个接口,它定义了两种锁:读锁(Read Lock)和写锁(Write Lock),真正的实现类是ReentrantReadWriteLock。读锁允许多个线程同时读取共享资源&#…

基于单片机的家用安防报警系统设计

本设计基于STM32F103单片机作为主控,通过DS18B20温度传感器和MQ烟雾传感器对家庭环境的温度和烟雾浓度进行检测实现火灾预警的设计要求,当检测数据异常时激发报警提示。系统采用红外传感器对家庭环境中是否有盗贼进入实现检测,当出现异常情况…

机器学习的应用领域

机器学习在许多领域有广泛的应用,下面列出了一些主要的应用领域及其典型应用: 1. 图像识别 人脸识别:用于解锁手机、自动标记照片、监控安全系统。物体识别:应用于自动驾驶汽车、机器人、医疗影像分析中,帮助机器理解…

面试经典 150 题:力扣88. 合并两个有序数组

每周一道算法题启动 题目 【题目链接】 【解法一】合并后排序 排序后的数组自动省略0的数字&#xff0c;又学到了 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {//合并两个数组后排序for(int i0; i<…

计算机网络详解:发展史、TCP/IP协议、网络通信与应用开发全流程

文章目录 1. 计算机网络的发展史1.1 初期阶段&#xff1a;网络的萌芽&#xff08;1960年代&#xff09;1.2 第二阶段&#xff1a;TCP/IP协议的引入&#xff08;1970-1980年代&#xff09;1.3 第三阶段&#xff1a;互联网的普及与商业化&#xff08;1990年代&#xff09;1.4 现代…

线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)

1、ADRC线性跟踪微分器 ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和源代码,包括在SMART PLC和H5U平台上的实现。文章提供了ST和SCL语言的详细代码,并讨论了跟踪微分器在自动控制中的作用…

基于python+django+vue的电影数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…