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

news2024/11/16 3:50:13

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.coloradmin.cn/o/2155764.html

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

相关文章

结合HashMap与Java 8的Function和Optional消除ifelse判断

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 在文章的开头我们先从这些场景进入本期的问题: 业务代码中各种if-else有遇到过吗,有什么好的优化方式;java8出来这么…

鸿蒙开发(NEXT/API 12)【跨设备互通特性简介】协同服务

跨设备互通提供跨设备的相机、扫描、图库访问能力,平板或2in1设备可以调用手机的相机、扫描、图库等功能。 说明 本章节以拍照为例展开介绍,扫描、图库功能的使用与拍照类似。 用户在平板或2in1设备上使用富文本类编辑应用(如:…

学习 git 命令行的简单操作, 能够将代码上传到 Gitee 上

首先登录自己的gitee并创建好仓库 将仓库与Linux终端做链接 比如说我这里已经创建好了一个我的Linux学习仓库 点开克隆/下载: 在你的终端中粘贴上图中1中的指令 此时他会让你输入你的用户名和密码,用户名就是上图中3中Username for ....中后面你的一个…

预付费计量系统实体模型

1. 预付费计量系统实体模型 A generic entity model for electricity payment metering systems is shown in Figure 2. Although it provides a limited perspective, it does serve to convey certain essential concepts. 关于电子式预付费电表系统的实体模型见图 2…

李宏毅结构化学习 03

文章目录 一、Sequence Labeling 问题概述二、Hidden Markov Model(HMM)三、Conditional Random Field(CRF)四、Structured Perceptron/SVM五、Towards Deep Learning 一、Sequence Labeling 问题概述 二、Hidden Markov Model(HMM) 上图 training data 中的黑色字为x&#xff…

如何备份SqlServer数据库

第一步:登录你要备份的服务器数据库ssms 第二步:选择你要备份的数据库 此处已PZ-SJCS 数据库为例 右键该数据库-->任务-->备份 第三步:选择你备份的类型备份组件等,目标磁盘 ,点击添加选择将你备份的文件备份那…

全面详尽的 PHP 环境搭建教程

目录 目录 PHP 环境搭建概述 在 Windows 上搭建 PHP 环境 使用集成环境 XAMPP 安装步骤 配置和测试 常用配置 手动安装 Apache、PHP 和 MySQL 安装 Apache 安装 PHP 安装 MySQL 配置 PHP 连接 MySQL 在 Linux 上搭建 PHP 环境 使用 LAMP 方案 安装 Apache 安装 …

【25.6】C++智能交友系统

常见错误总结 const-1 如下代码会报错 原因如下: man是一个const修饰的对象,即man不能修改任何内容,但是man所调用的play函数只是一个普通的函数,所以出现了报错。我们需要在play函数中加上const修饰,或者删除man对…

《论分布式存储系统架构设计》写作框架,软考高级系统架构设计师

论文真题 分布式存储系统(Distributed Storage System)通常将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满…

FreeRTOS-时间片调度

FreeRTOS-时间片调度 一、时间片调度简介二、时间片调度实验 一、时间片调度简介 同等优先级任务轮流的享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期,所以说时间片大小取决于滴答定时器中断…

windows安装Anaconda教程

一、简介 Anaconda 是一个开源的 Python 和 R 语言的分发平台,专为科学计算和数据分析设计。它包含了包管理器 Conda,可以方便地安装和管理库、环境和依赖项。此外,Anaconda 还附带了许多数据科学工具和库,如 Jupyter Notebook 和…

【HTTPS】中间人攻击和证书的验证

中间人攻击 服务器可以创建出一堆公钥和私钥,黑客也可以按照同样的方式,创建一对公钥和私钥,冒充自己是服务器(搅屎棍) 黑客自己也能生成一对公钥和私钥。生成公钥和私钥的算法是开放的,服务器能生产&…

iOS17找不到developer mode

iOS17找不到开发者模式 developer mode 下载过app之后、弹窗Developer Mode Required之后,这个菜单就出现了(之前死活找不到)。 背景:用蒲公英分发测试app,有个同事买了新机(iphone 15 pro max),添加了白名…

双虚拟机部署php项目

前言 经过前面的学习,我们对分布式部署有了一定的了解,这次我们尝试做些东西 准备 我打算用虚拟机部署一个外联网盘 一台虚拟机安装php另一台安装MySQL,但是之前已经安装过 MariaDB 了,就不打算改了。 通常MariaDB与MySQL兼容性很好,可以作为替代使用。彩虹外链网盘项目…

OpenAI的O1模型达到AGI二级,类人推理能力被提示危险,细思极恐!

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 今天让我们一起来聊聊最近科技圈的大新闻—…

Java笔试面试题AI答之设计模式(4)

文章目录 16. 简述什么是观察者模式?基本概念主要特点实现方式应用场景优缺点 17. 请列举观察者模式应用场景 ?18. 请用Java代码实现观察者模式的案例 ?19. 什么是装饰模式?定义与特点结构与角色工作原理优点应用场景示例 20. 请用…

队列的各种接口的实现(C)

队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 队列的实…

【GlobalMapper精品教程】088:按点线面空间位置选择案例

按点线面空间位置选择的原则为:点线面的排列组合。 文章目录 一、选择线要素附近的点二、选择相交或触碰所选线的区和线三、选择包含点的区要素四、选择选定区域内的点要素一、选择线要素附近的点 启动该工具之前,首先要选择线,例如,选择某一段铁路5km范围之内的县城驻地。…

nacos适配人大金仓的数据库

前言 在微服务架构中,服务发现和配置管理是关键组件。Nacos作为一个动态服务发现和配置管理平台,支持多种数据库作为其后端存储。本文将探讨如何在Nacos中适配人大金仓数据库,以及在此过程中的最佳实践。 Nacos简介 Nacos(Nami…

安装 depot_tools 和 Windows 10 SDK 为在Windows下构建基于 chromium 的浏览器(103.0.5060.68 之二)

本文已首发于: 秋码记录 为何要安装depot_tools 虽然我们在上一篇 Windows构建基于 Chromium 的浏览器之环境准备篇安装 Visual Studio(103.0.5060.68 之一) ,已经在Windows系统安装好了Visual Studio 2019 Community版本。 然…