更快更准更简单的工业异常检测新SOTA:SimpleNet

news2024/11/15 21:24:46

来源:投稿 作者:橡皮
编辑:学姐

论文链接:https://arxiv.org/pdf/2303.15140.pdf

代码链接:https://github.com/DonaldRR/SimpleNet

0.背景:

图像异常检测和定位任务旨在识别异常图像并定位异常子区域。检测各种感兴趣的异常现象的技术在工业检测中有着广泛的应用。在工业场景中,异常检测和定位尤其困难,因为异常样本很少,异常可能从细微的变化(如薄划痕)到大的结构缺陷(如缺失零件)不等。

目前的方法主要以无监督的方式解决这个问题,即在训练过程中只使用正常样本。使用基于重建的方法、基于合成的方法和基于嵌入的方法是解决无监督异常检测问题的三个主要趋势。

基于重建的方法,假设仅用正常数据训练的深度网络不能准确地重建异常区域。将逐像素重建误差作为用于异常定位的异常分数。然而,这一假设可能并不总是成立的,有时网络可以很好地“泛化”,从而也可以很好的重建异常输入,从而导致错误检测。

基于合成的方法通过对在无异常图像上生成的合成异常进行训练来估计正常和异常之间的决策边界。然而,合成的图像不够逼真。来自合成数据的特征可能会偏离正常特征很远,使用这种负样本进行训练可能会导致有松散边界的正常特征空间,这意味着模糊的缺陷可能会被包括在分布特征空间中。

最近,基于嵌入的方法实现了最先进的性能。这些方法使用ImageNet预训练的CNN来提取广义正态特征。然后采用多元高斯分布、归一化流和内存库等统计算法嵌入正态特征分布。通过将输入特征与学习的分布或记忆的特征进行比较来检测异常。然而,工业图像通常具有与ImageNet不同的分布。直接使用这些有偏见的特征可能会导致失配问题。

1.主要贡献:

提出了一种新的异常检测和定位网络,称为 SimpleNet 。SimpleNet 利用了基于合成和基于嵌入的方式,并进行了一些改进。首先,我们建议使用特征适配器来产生面向目标的特征,而不是直接使用预训练的特征,这可以减少领域偏差。

提出通过在特征空间中对正常特征施加噪声来生成异常特征,而不是直接合成图像上的异常。通过训练一个简单的鉴别器来简化异常检测过程,该鉴别器比上述基于嵌入的方法所采用的复杂统计算法具有更高的计算效率。

SimpleNet 基于广泛使用的 WideResnet50 主干,在MVTec AD上以77帧/秒的速度运行时,实现了99.6%的AUROC,在准确性和效率方面都超过了以前发表的最佳异常检测方法。进一步将 SimpleNet 引入到一类新颖性检测任务中,以显示其通用性。这些优势使 SimpleNet 弥合了学术研究和工业应用之间的差距。

2.网络介绍:SimpleNet

SimpleNet 由一个特征提取器、一个特征适配器、一个异常特征生成器和一个鉴别器组成。异常特征生成器仅在训练期间使用,因此SimpleNet在推理时遵循单流方式。在训练阶段,将正常样本输入到预先训练的特征提取器中,以获得局部特征。然后,利用特征适配器将预先训练的特征适配到目标域中。通过将高斯噪声添加到自适应特征中来合成异常特征。自适应特征和异常特征分别用作正样本和负样本来训练最终的鉴别器。异常特征生成器在推断时被移除。

3.方法细节:

Feature Extractor 特征提取器

特征提取器用来获取局部特征,如同 [Patchcore] 方法。我们将流程重新制定如下:

Feature Adaptor 特征适配器

由于工业图像通常与骨干预训练中使用的数据集具有不同的分布,我们采用特征适配器G_\theta将训练特征转移到目标域。特征适配器G_\theta将局部特征q_{h,w}投影到自适应特征,w,作为:

特征适配器可以由简单的神经块组成,例如全连接层或多层感知器(MLP)。我们通过实验发现,单个全连接层可以产生良好的性能。

Anomalous Feature Generator 异常特征生成器

下图说明了异常特征对四类MVTec AD的影响。可以看到,沿着适应特征的每个维度的标准偏差往往是一致的。因此,当区分异常特征和正常特征时,特征空间往往是紧凑的。

Discriminator 鉴别器

Loss function and Training 损失方程和训练

一个简单的截断L1损失可推导为:

th^+th^-是防止过拟合的截断项。 默认情况下,它们设置为0.5和-0.5。训练目标是:

我们将在实验部分用广泛使用的交叉熵损失对所提出的截断L1损失函数进行实验评估。训练过程的伪代码如算法1所示:

Inference and Scoring function 推理和评价函数

异常特征生成器在推理时被丢弃。

推理过程中用于异常定位的异常图定义为:

然后对S_{AL}(x_i)进行插值,以获得输入样本的空间分辨率,并对光滑边界进行σ=4的高斯滤波。由于对于任何大小的异常区域都存在最具响应性的点,因此将异常图的最大得分作为每个图像的异常检测得分。

4.实验结果:

关注下方《学姐带你玩AI》🚀🚀🚀

回复“异常检测”获取全部论文PDF合集

码字不易,欢迎大家点赞评论收藏!

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

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

相关文章

eNSP-交换机VLAN配置

eNSP-交换机VLAN配置 文章目录 eNSP-交换机VLAN配置一、题目要求二、拓扑结构三、基础配置四、测试验证五、知识点详解1.VLAN2.VLAN的端口成员模式3.不同端口成员模式对报文的处理 一、题目要求 1.PC1可以访问PC2,PC4,但是不能访问PC3 2.PC2可以访问PC1&#xff0…

Python实现PSO粒子群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

openGauss学习笔记-03 openGauss极简版单节点安装

文章目录 openGauss学习笔记-03 openGauss极简版单节点安装3.1 获取安装包3.1.1 下载对应平台的安装包3.1.2 解压安装包3.1.3 查看目录结构 3.2 准备软硬件安装环境3.2.1 硬件环境要求3.2.2 软件环境要求3.2.3 软件依赖要求 3.3 单节点安装3.3.1 安装前准备3.3.2 安装openGauss…

硬件电路设计--运算放大器(四)应用三比较器

文章目录 前言电压比较器一、过零比较器二、单门比较器三、滞回比较器(施密特触发器)四、窗口比较器五、未使用的比较器的处理六、推挽式输出或漏极开路输出开漏输出推挽输出 七、比较器的应用7.1 3V转5V7.2 双极性转单极性7.3 光敏电阻模数转换 八、比较…

互联网协议(Internet Protocol Suite)

文章目录: 一:从系统角度(解释互联网是如何构成的,协议的设计思想) 二:从用户的角度(解释结构是如何发挥作用,完成网络数据交换的) 参考:阮一峰 一&#x…

过滤器与拦截器的区别

1.运行顺序不同 过滤器是在客户端请求到达服务器,但还未到Servlet时运行的,而拦截器是在到达Servelt后,调用适配器(HandlerAdapter)前运行的。 2.配置方式不同 过滤器是在web.xml中配置,而拦截器是在Spring中的配置文件中配置&a…

mysql练习----单表查询

环境: 目录 第一题 第二题 第三题 第一题 --创建如下学生表 create table student( id int, name varchar(20), gender varchar(20), chinese int, math int, english int ); insert into student values (1,张明,男,89,78,90), (2,李进,男,67,53,95), (3,王…

Liunx下线程互斥与同步

文章目录 前言1.线程相关问题2.加锁操作1.相关接口2.加锁原理 3.线程安全4.线程同步 前言 本文主要围绕Linux下线程互斥问题进行相关讲解,同时也会线程同步相关问题。 1.线程相关问题 我们知道进程地址空间很多资源是被线程共享的。线程在并发访问这些共享资源的时…

代码随想录day11

20. 有效的括号 思路:这里用模拟栈的方法会更好理解,也就是我们每次遇到朝左方向的三种类型的时候,就加入相反方向的右括号到result栈中。由于栈是一个先进后出的方式,所以我们会有一个判断stack当前为不为空,和stack[…

4G理论概述

文章目录 LTE网络基础架构UMTS(通用移动通信系统,Universal Mobile Telecommunications System)UTRAN(UMTS陆地无线接入网,UMTS Terrestrial Radio Access Network)RNC(无线网络控制器&#xff…

Vue的响应式实现思路及源码分析

Vue # 思路 new Vue() 首先执行初始化,对 data 执行响应化处理,这个过程发生在 Observer 中同时对模板执行编译,找到其中动态绑定的数据,从 data 中获取并初始化视图,这个过程发生在 compile 中同时定义一个 更新函数 和 Watcher,将来对应数据变化时 Watcher 会调用 更新…

python编程——字符串讲解

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 前言 本文将介绍python字符串是什么?以及它的几…

C++11(一)(列表初始化,变量类型推导(auto,decltype),nullptr,范围for循环等)

目录 C11简介 列表初始化 C98中,{}的初始化问题 内置类型的列表初始化 自定义类型的列表初始化 变量类型推导 auto decltype nullptr 范围for循环 final和override 默认成员函数的控制 显式缺省函数 删除默认函数 C11简介 在2003年C标准委员会曾经提交了一份技…

STM32F767-0-HAL库主从定时器产生固定数量的PWM

STM32F767-0-主从定时器产生固定数量的PWM 前言一、配置STM32F767主从定时器的详细步骤1.1 选择主定时器和从定时器:1.2 配置主定时器(主从模式):1.2.1 设置主定时器的时钟源:1.2.2 配置主定时器的分频系数&#xff1a…

不同路径(力扣)动态规划 JAVA

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1&a…

JWT的简单说明与使用

简要 JWT是"JSON Web Token"的缩写,是一种用于在不同系统之间传输信息的开放标准。它通过将信息进行加密后生成一个安全的令牌,以便在网络请求中进行身份验证和授权。 具体来说,JWT可以用于以下几个方面: 身份验证&…

CMakeLists.txt 语法介绍

CMake编译原理 CMake是一种跨平台编译工具,主要编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库.因此CMake的编译基本就两个步骤:cmake && make cm…

MySQL基础练习

Ⅰ Ⅱ 3.1 3.2 3.3 3.4 -- 单表查询练习 /* 素材 CREATE TABLE emp ( empno int(4) NOT NULL, ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, …

细数那些Compose新手容易犯的错误

作者:晴天小庭 笔者作为一个日常Jetpack Compose开发者,对Compose的理解也在逐渐加深中,最近回顾当初学习和实践的过程中,犯了不少错误和踩了很多坑,本篇文章作为小总结分享给大家,同时文章会持续更新&…