计算机视觉异常检测——PatchCore面向全召回率的工业异常检测

1. 概述

异常检测问题在工业图像数据分析中扮演着至关重要的角色,其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于,正常数据的样本相对容易获取,而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题,研究者们开发了多种方法,其中一种备受关注的方法是PatchCore模型。
PatchCore模型是一种先进的工业异常检测方法,它在MVTec数据集上取得了最先进的性能(State of the Art,简称SOTA。这个数据集是工业领域内公认的用于评估异常检测算法的标准数据集,包含了多种不同类别的工业产品图像,既有正常样本也有异常样本。
PatchCore的关键优势在于它的特征提取机制。传统的异常检测方法通常需要大量的标注数据来训练模型,以学习正常和异常图像之间的差异。然而,PatchCore采用了一种不同的策略,它利用了预训练模型(如WideResNet50)来提取图像特征。这种方法的优势在于,预训练模型已经在大型数据集(如ImageNet)上学习了丰富的视觉特征,因此可以直接应用于新的任务,而无需进行额外的特征提取训练。

源码地址:https://github.com/amazon-science/patchcore-inspection
论文地址:https://arxiv.org/abs/2106.08265

在这里插入图片描述

2. 算法实现

2.1 整体模型

PatchCore模型在工业异常检测领域中的一项重要创新是其能够评估图像中每个像素的异常程度。这种细致的异常评分机制不仅使得模型能够判断整个图像是否异常,还能够精确地定位到异常发生的具体区域。

在PatchCore模型中,首先会构建一个内存库(Memory Bank),该内存库包含了正常图像的特征向量。这些特征向量是通过预训练的神经网络模型从正常图像中提取出来的,它们有效地捕捉了正常样本的视觉特征。在模型训练阶段,PatchCore仅使用正常图像来构建这个内存库,不涉及任何异常样本。

当有新的测试图像进入模型时,PatchCore会从这些图像中提取特征向量,并与内存库中存储的正常特征向量进行比较。通过计算测试图像特征向量与内存库中最接近的特征向量之间的距离,模型可以评估测试图像的异常程度。这个距离越小,表明测试图像与正常样本越相似,越可能是正常图像;反之,距离越大,表明测试图像与正常样本的差异越显著,越可能是异常图像。

上图的左侧(蓝色虚线框)显示的是学习,右侧(绿色虚线框)显示的是推理流程。

在训练过程中,首先将正常图像通过一个预训练的卷积神经网络(CNN)模型,这个模型负责提取每个斑块的特征向量。这里的CNN模型可以是如WideResNet50这类在大型数据集上预训练过的网络,它们已经具备了强大的特征提取能力。接着,从这些特征向量中进行采样,选择最具代表性的一部分特征向量,将它们存储在记忆库中。

推理(Inference)阶段是PatchCore模型进行异常检测的关键时期。在这一阶段,新的测试图像同样通过训练有素的CNN模型来提取每个斑块的特征向量。这些特征向量代表了测试图像中每个斑块的视觉内容。

随后,模型会计算测试图像中每个斑块的特征向量与记忆库中存储的正常特征向量之间的距离。这个距离可以被视为异常程度的度量:距离越大,表明测试图像中的斑块与正常样本的差异越大,因此越可能是异常的。通过这种方式,模型能够评估整个图像的异常情况,并且能够对每个像素进行异常评分,从而精确地定位到异常区域。

2.2 局部感知

在PatchCore模型中,局部感知的补丁特征是通过从图像中提取逐个补丁的特征向量来实现的。这一过程首先利用了一个已经在ImageNet数据集上完成训练的卷积神经网络(CNN)模型。该模型在此任务中的作用是提取图像特征,而不是进行进一步的训练或调整。

随后,从预训练的CNN模型中得到的特征向量会经过自适应平均池化处理,这一步骤确保了不同尺寸的输入图像能够产生具有一致维度的特征向量,为后续的异常检测工作奠定了基础。
在这里插入图片描述
在选择合适的CNN模型层级来提取特征向量时,最后一层虽然提供了高度聚合和高抽象度的特征向量,但存在两个主要问题。首先,深层特征由于经过多次卷积和池化操作,分辨率较低,可能导致局部细节特征的丢失。其次,最后一层的特征向量可能受到原始训练任务——如ImageNet分类问题——的影响,从而在不同领域的异常检测任务中表现出偏差。

鉴于这些问题,本文提出了使用模型中间层的特征向量进行异常检测的方法。这样做可以在保持较高抽象水平的同时,减少预训练任务对特征向量的影响。实验结果表明,使用中间层特征向量的方法在异常检测任务中取得了很好的效果。

根据实验数据,特征向量的提取层级与异常检测任务的准确性之间存在一定的关系。图表显示,当使用模型的第二层(横轴表示层级编号,数字越小代表层级越浅)时,检测准确率非常高。这一结果证实了PatchCore模型确实从第二和第三层(即2+3)提取了特征向量【3】,这表明在保持特征的局部细节和减少预训练任务影响之间找到了一个平衡点。

2.3 补丁特征记忆库

其次是补丁特征记忆库(Coreset-reduced patch-feature memory bank),这部分是将得到的特征向量存储在Memory Bank中。随着训练数据数量的增加,更多的数据需要存储在记忆库中,这增加了评估测试数据所需的推理时间,并增加了存储的内存容量。因此,本文提出使用Coreset Sampling对得到的特征向量进行采样,并将其存储在Memory Bank中。

采样方法表示如下:其中M是采样前的特征向量集,MC是采样后的特征向量集。


上述公式意味着,进行抽样时,要使预抽样的特征向量(m)和后抽样的特征向量中的最大最小距离最小。

然而,这个优化问题是NP-hard,需要大量的计算时间来获得最优解。因此,在本文中,采用了以下两种创新方法,以更快地获得一个接近最优的解决方案。

  1. 贪婪法的逼近:以前的研究中使用的方法已经被采纳。
  2. 通过随机投影降低维度:降低特征向量的维度可以降低上述优化问题的计算复杂度,其依据是Johnson-Lindenstrauss补码,即降维可以实现良好的准确性。

下图将Coreset Sampling应用于虚拟数据,并将结果可视化。

下表比较了随机抽样和Coreset抽样在两个虚拟数据集(a)和(b)上的结果,其中Coverage代表从原始抽样数据中减少的百分比。可以看出,上面的Coreset采样比下面的随机采样更有效率。

下图还显示了每种维度压缩方法在异常检测任务中的还原率(横轴)和准确性(纵轴)之间的关系。

上图显示,在随机的情况下,当减少率达到约10-2时,准确率明显下降,而在Coreset(抽样)的情况下,准确率并没有下降那么多。因此,可以说Coreset Sampling是一种有效的抽样方法,可以减少数据的数量,同时保留异常检测所需的特征。

最后,到目前为止描述的存储库的整个算法显示如下:

2.4 用PatchCore进行异常检测。

第三种是用PatchCore进行异常检测,它使用获得的记忆库来计算要判别的图像(测试数据)的异常程度。最初,和训练时一样,测试数据图像通过训练好的CNN模型来获得每个补丁的特征向量。根据以下公式,异常情况是由每块测试数据的特征向量(mtest)和存储在记忆库中的特征向量(m)计算出来的。

3.实验

3.1 实验装置

本文在三个不同的数据集上测试了所提方法的有效性。
第一个是MVTec数据集。它被广泛用作基准,有15个类别,包括瓶子、电缆和电网。这个数据集是本研究的主要重点。
第二个是磁砖缺陷(MTD)数据集。其任务是检测瓷片图像中的裂纹和划痕。
第三个是迷你上海科技园区(mSTC)数据集[4],它由12个不同场景的行人视频组成,任务是检测异常行为,如打架或骑自行车。

3.2 估值指数

接收者操作曲线下的面积(AUROC)被用来作为区分正常和异常图像的性能指标。按像素计算的AUROC(pixelwise AUROC)和PRO被用作检测适当异常的性能指标,其中PRO对异常的大小不太敏感。

3.3 结果

我们从MVTec数据集的结果开始。
下表显示了在AUROC中与传统方法的比较结果。

此外,下表显示了按像素计算的AUROC的结果。

对于PatchCore,分别以25%、10%和1%来改变存储库的子采样,结果显示PatchCore对于AUROC和像素AUROC都更准确。还可以看出,当存储库中的子采样百分比降低时,准确度并没有下降很多。

mSTC和MTD的结果显示在下表中。这些数据集的结果也超过了传统方法的准确性。

3.4 推理时间

下表显示了每种方法在MVTec数据集上的准确性(AUROC、像素AUROC和PRO)和推理时间。

从PatchCore的结果,可以看出,推理时间因Coreset Sampling的百分比不同而有很大差异。特别是在1%的情况下,推理时间与100%的推理时间相差不大,这表明在保持比传统方法更高的精度的同时实现了快速推理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

裸机开发之汇编、寄存器

一、什么是汇编?为什么学汇编? 在之前写控制代码的时候就在想:底层是怎么控制的?后来经过学习知道之前所编写的代码都是应用层代码,顾名思义就是在系统写好的底层之上调用系统函数。原以为底层是指写系统写好的底层函数…

苹果电脑(Mac)怎么清理 itunes 备份?

苹果电脑用户广泛利用 iTunes 应用程序对 iPhone 或 iPad进行定期备份,以确保珍贵的数据安全无虞。然而,随着备份历史的增长,它们会在磁盘上积累大量空间,尤其当您频繁为多台设备备份时,存储资源可能会迅速消耗殆尽。为…

3D Web轻量化引擎HOOPS Commuicator如何从整体装配中创建破碎的装配零件和XML?

前言 虽然可以从某些本机CAD格式(其子组件驻留在单独的文件中,例如CATIA V5、Creo - Pro/E、NX或SolidWorks)创建破碎装配,但无法从整体装配文件(例如IFC、Revit)创建或3DXML。 本文介绍了一个示例&#…

学习Rust的第一天:基础知识

Introduction 介绍 I am Shafin Murani is a software development student and I am documenting every single day of my progress in learning rust. This is the first article of the series. Shafin Muranishi 是一名软件开发专业的学生,这是他在30天内记录学…

无影云电脑不能连接到本机的调试串口的解决方案

目录 概述 解决方案 云端电脑中的操作 本地USBDK驱动程序的更新 概述 我从1月份开始使用阿里的无影云电脑进行嵌入式开发板的测试,主要的原因有两个:一是平时使用的笔记本资源过于紧张,二是方便移动办公,这样我只要平时拿着开…

UDP简单总结

UDP:用户数据报协议 特点: 无连接、不可靠通信 不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据(限制在64KB内) 发送方不管对方是否在线,数据在中间丢失也不管,…

备考分享丨云计算HCIE实验考试需要注意什么

去年九月底我在朋友的推荐下报考了誉天的云计算方向,在此期间我非常感谢田sir、苗苗老师和凡凡老师,每次我遇见问题找他们都能给我完完全全的解决,给我这个非科班出身的学员很大的鼓励与帮助。 我是经济学专业,毕业之后没有考研&…

java数据结构与算法刷题-----LeetCode785. 判断二分图

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 深度优先广度优先 二分图:将所有结点分成两个集合&am…

​如何使用 ArcGIS Pro 制作带贴图建筑

对于用GIS软件制作三维建筑,很多时候都是制作的建筑体块,这里为大家介绍一下怎么使用 ArcGIS Pro 制作带贴图的建筑,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的建筑数据,除了建筑数据,常见…

Simple_SSTI_2

Simple_SSTI_2 破解思路 1、启动场景2、用kali的tplmap扫一下 1、启动场景 http://114.67.175.224:18040/ 然后机会发现 页面啥也不是,查看源码后,看了好像又没看 2、用kali的tplmap扫一下 安装tplmap【已安装,可略过】:在kali终端安装git…

GitHub 仓库 (repository) Branch - SSH clone URL - Clone in Desktop - Download ZIP

GitHub 仓库 [repository] Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支,查看其他分支的文件。 2. SSH clo…

A Learning-Based Approach for IP Geolocation

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Abstract 定位IP主机地理位置的能力对于在线广告和网络攻击诊断等应用程序是非常吸引力的。虽然先前的方…

CSS-浮动文字环绕布局、隐藏属性display、overflow、三角形制作、鼠标样式

文字环绕布局 CSS文字环绕布局是指在网页中让文字环绕在图片或其他元素周围的布局方式。这通常通过CSS中的float属性来实现。你可以将图片设置为float: left;或float: right;,然后在文本元素中使用clear属性来清除浮动,以确保文字不会覆盖图片。另外&am…

React路由快速入门:Class组件和函数式组件的使用

1. 介绍 在开始学习React路由之前,先了解一下什么是React路由。React Router是一个为React应用程序提供声明式路由的库。它可以帮助您在应用程序中管理不同的URL,并在这些URL上呈现相应的组件。 2. 安装 要在React应用程序中使用React路由,…

使用pytorch构建控制生成GAN(Controllable GAN)网络模型

本文为此系列的第四篇Controllable GAN,上一篇为Conditional GAN。文中使用训练好的模型和优化噪声向量来操纵生成图像的特定属性,若有不懂的无监督知识点可以看本系列第一篇。 原理 本文主要讲什么是控制生成,以及如何做到控制生成。 什么是…

设计模式学习笔记 - 设计模式与范式 -行为型:7.责任链模式(下):框架中常用的过滤器、拦截器是如何实现的?

概述 上篇文章《6.责任链模式(上):原理与实现》,学习了职责链模式的原理与实现,并且通过一个敏感词过滤框架的例子,展示了职责链模式的设计意图。本质上来说,它跟大部分设计模式一样&#xff0…

Lvs+keepalived+nginx搭建高可用负载均衡集群,爱了爱了

检查 最后启动nginx服务 135配置虚拟网卡 检查 最后启动nginx服务 Nginx.conf配置如下 关闭132的keepalived服务后 浏览器能正常访问 132在keepalived配置中加入脚本 脚本内容 132清除ipvsadm中的规则,vip不见 133收到vip 自我介绍一下,小编13年上海交大毕业&…

React ant 点击导航条闪烁

问题 : 点击当前位置会出现闪一下的效果 另一种点击方式 , 不会闪 原因 : 没有传递具体的参数给点击事件 , 导致在函数内部无法准确判断要展示哪个子菜单,可能导致页面状态的短暂变化,出现闪烁效果 代码 : // 左侧子菜单弹出const showSonMenu routeK…

【前端】学习路线

1、基础 1.1 HTML 菜鸟教程-主页:https://www.runoob.com/ 可以学习:HTML、CSS、Bootstrap等 1.2 CSS 《通用 CSS 笔记、建议与指导》 1.3 JavaScript 1)入门:JavaScript 的基本语法 2)进阶:现代 …

hive管理之ctl方式

hive管理之ctl方式 hivehive --service clictl命令行的命令 #清屏 Ctrl L #或者 ! clear #查看数据仓库中的表 show tabls; #查看数据仓库中的内置函数 show functions;#查看表的结构 desc表名 #查看hdfs上的文件 dfs -ls 目录 #执行操作系统的命令 !命令…