UniAD:实现多类别异常检测的统一模型
来源:投稿 作者:Mr.Eraser
编辑:学姐
论文标题:用于多类异常检测的统一模型
论文链接:https://arxiv.org/abs/2206.03687
论文贡献:
-
提出UniAD,它以一个统一框架完成了多个类别的异常检测。
-
提出分层的查询解码器来帮助建立多类分布的模型。
-
采用邻居屏蔽的注意力模块,以进一步避免从输入特征到重构输出特征的信息泄漏。
-
提出一种特征抖动策略,即使在有噪声输入的情况下也能敦促模型恢复正确的信息
1.引言
异常检测在制造业缺陷检测、医学图像分析和视频监控中得到了越来越广泛的应用。考虑到高度多样化的异常类型,一个常见的解决方案是对正常样本的分布进行建模,然后通过寻找离群值来识别异常样本。因此,学习正常数据的紧凑边界至关重要,如图a所示。
当涉及到多类情况时,我们希望模型能同时捕捉到所有类别的分布,这样它们就能像图b那样共享同一个边界。但是如果我们专注于某一特定类别,比如说图b中的绿色类别,那么其他类别的所有样本都应该被视为异常,无论它们本身是正常的(即蓝圆圈)还是异常的(即蓝三角形)。从这个角度来看,如何准确地对多类分布进行建模变得至关重要。
综上所述,本文摆脱了传统的为每一类训练一个模型的范式(图c ),并设法用一个统一的框架(图d)完成对各种类的异常检测。
2.相关工作分析
MLP, CNN, Transformer和提出的UniAD在MVTec-AD数据集上的比较:图a表示训练损失(蓝色), 异常检测(绿色)和定位(红色)的测试AUROC。在MLP, CNN和Transformer的训练过程中,正常样本的重建误差不断变小,但在异常情况下的性能在达到峰值后却严重下降。这是由于模型学习了一个 “相同的捷径”,它倾向于直接复制输入作为输出,不管它是正常的还是异常的。图b“捷径”的视觉解释,异常样本可以被很好地恢复,因此变得很难从正常样本中检测出来。
相比之下,UniAD克服了上述问题,并设法将异常样本重建为正常样本。值得注意的是,所有的模型都是为特征重建而学习的,并且采用了一个单独的解码器来渲染来自特征的图像。这个解码器只用于可视化。
3.UniAD 方法概览
UniAD 的框架如下,由一个Neighbor Masked Encoder (NME)和一个Layer-wise Query Decoder (LQD)组成。LQD的每一层都采用了可学习的查询嵌入来帮助建立复杂的训练数据分布模型。Transformer中的全部注意力被邻居屏蔽的注意力所取代,以避免信息从输入到输出的泄漏。特征抖动策略鼓励模型在嘈杂的输入中恢复正确的信息。所有这三项改进都有助于模型避免学习 “相同的捷径“。
3.1Neighbor masked attention
我们怀疑原始Transformer中的full- attention对 “相同的捷径 ”有所贡献。在full- attention中,一个token被允许看到自己,所以它将很容易通过简单的复制来进行重建。
此外,考虑到特征tokens是由CNN骨干提取的,相邻的tokens一定有很多相似之处。
因此,提出在计算注意力图时对相邻token进行屏蔽,即Neighbor Masked Attention (NMA)。请注意,邻居区域是在二维空间定义的,如图4所示。
3.2 Neighbor masked encoder & Layer-wise query decoder
Neighbor masked encoder:
编码器遵循原始Transformer中的标准架构。每层由一个注意力模块和一个前馈网络(FFN)组成。然而,full-attention被提出的NMA取代,以防止信息泄露。
Layer-wise query decoder:
查询嵌入可以帮助防止重建异常,但原始Transformer中只有一个查询嵌入。因此,我们设计了一个分层查询解码器(LQD)来加强查询嵌入的使用,如图3所示。具体来说,在LQD的每一层,可学习的查询嵌入首先与编码器嵌入融合,然后与前一层的输出融合(第一层的自我融合)。特征融合是由NMA实现的。在原始Transformer之后,一个2层的FFN被应用于处理这些融合的tokens,并且利用残余连接来促进训练。LQD的最终输出作为重构的特征。
3.2 Layer-wise query decoder 选择策略
层级查询解码器(LQD)的各种设计选择,其中每层使用两个注意力模块。为了简单起见,省略了残差连接、层规范化和前馈网络。
对分层查询解码器(LQD)的设计选择进行消融研究。每个设计的概念可以在上图中找到。分别报告了异常检测/定位方面的表现。
3.3 Feature jittering
受去噪自动编码器(DAE)的启发,我们向特征tokens添加扰动,引导模型通过去噪任务学习正常样本的知识。具体来说,对于一个特征token,,我们从高斯分布中对干扰D进行采样:
其中,α是控制噪声程度的抖动尺度。同时,采样干扰以固定的抖动概率p添加到中。
3.4 实施细节
特征提取:
我们采用在ImageNet上预训练的固定的EfficientNet-b4作为特征提取器。从阶段1到阶段4的特征被选中。这里的阶段指的是具有相同大小的特征图块的组合。然后,这些特征被调整为相同的大小,并沿通道维度串联起来,形成一个特征图,之后,这个特征图被标记为具有
通道的H×W特征tokens。
特征重建:
首先对这些特征标记进行线性投影,将减少到一个较小的通道,即C,然后这些标记被NME和LQD处理。可学习的位置嵌入被添加到注意力模块中,以告知空间信息。之后,另一个线性投影被用来恢复从C到
的通道。经过重塑,最终得到重建的特征图,
。
目标函数:
我们的模型是用MSE损失来训练的:
异常定位的推理:
异常定位的结果是一个异常得分图,它为每个像素分配一个异常得分。具体来说,异常得分图s,被计算为重建差异的L2准则,即:
然后用双线性插值将s向上采样到图像大小,得到定位结果。
异常检测的推理:
异常检测的目的是检测图像是否包含异常区域。
通过取平均汇集的s的最大值,将异常得分图s转化为图像的异常得分。
4.实验效果 & 结果
在MVTec-AD上使用AUROC指标的异常检测结果。所有的方法都在统一建模/单独建模的情况下进行评估。在统一建模的情况下,学习到的模型被应用于检测所有类别的异常情况,而不需要进行微调。
在MVTec-AD上使用AUROC指标的异常定位结果。所有的方法都在统一建模/单独建模的情况下进行评估。在统一建模的情况下,学习到的模型被应用于检测所有类别的异常情况,而不需要进行微调。
关注下方《学姐带你玩AI》🚀🚀🚀
回复“500”获取AI必读论文合集
码字不易,欢迎大家点赞评论收藏!
相关文章:

UniAD:实现多类别异常检测的统一模型
来源:投稿 作者:Mr.Eraser 编辑:学姐 论文标题:用于多类异常检测的统一模型 论文链接:https://arxiv.org/abs/2206.03687 论文贡献: 提出UniAD,它以一个统一框架完成了多个类别的异常检测。 …...
Java 面试 | tcp ip http https(2023版)
文章目录 HTTP&HTTPS1、Http和Https的区别?2、什么是对称加密与非对称加密3、客户端不断进行请求链接会怎样?DDos(Distributed Denial of Service)攻击?4、GET 与 POST 的区别?5、什么是 HTTP 协议无状态协议?怎么解决Http协议无状态协议?6、Session、Cookie 与 Appl…...

全志V3S嵌入式驱动开发(音频输出和音频录制)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前在芯片公司的时候,基本没有看过音频这一块,只知道有个alsa框架这么个知识点。要驱动音频,需要两部分&#…...

使用RP2040自制的树莓派pico—— [2/100] HelloWorld! 和 点亮LED
使用RP2040自制的树莓派pico—— [2/100] HelloWorld! 和 点亮LED 开发环境HelloWorld!闪烁 LED 灯代码 由于比较简单就放在一起写了 开发环境 软件:Thonny HelloWorld! 要想使串口打印HelloWorld! 只需要一行代码 print("HelloWorld!")保…...

康耐视In-Sight2800相机的使用
In-Sight2800相机注册分类程序 一、登录相机 二、图像导入 IS相机支持拍摄图像和从文件中导入图像 如选择从文件中导入图像,文件夹选择位置在页面左下方,如下图 三、注册分类器 在检查模块注册分类器,注册图像需要一张一张去学习&#x…...

驱动开发:内核封装WFP防火墙入门
WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案,其默认被设计为分层结构,该框架分别提供了用户态与内核态相同的AIP函数,在两种模式下均可以开发防火墙产品,以下代码我实现了一个简单的驱动过滤防火墙。 WFP 框架分…...

python+vue校园快递代取系统的设计与实现3i0v9
开发语言:Python 框架:django/flask Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 本系统名为“基于vue快递代取系统”,系统主要适用于毕业设计,不…...

C 语言详细教程
目录 第一章 C语言基础知识 第二章 数据类型、运算符和表达式 第三章 结构化程序设计 第四章 数组 第五章 函数 第六章 指针 第七章 结构体类型和自定义类型 第八章 编译预处理 第九章 文件 说明:本教程中的代码除一二三个之外,都在https://ligh…...

函数重载与缺省参数
目录 一 缺省参数 缺省参数分半缺省和全缺省。 2,半缺省参数 3,全缺省参数 4.缺省参数的注意事项 二 函数重载 2 .函数重载参数类型不同强调 三 函数名修饰规则 一 缺省参数 1.缺省参数特性(备胎) 缺省参数是指我们定义函数时有给缺省值的参数…...
线程引入的开销
单线程程序既不存在线程调度,也不存在同步开销,而且不需要使用锁来保证数据结构的一致性。在多个线程的调度和协调过程中都需要一定的性能开销:对于为了提升性能而引入的线程来说,并行带来的性能提升必须超过并发导致的开销。 上下…...

学生成绩管理系统
基于springboot vue实现的学生成绩管理系统 主要模块: 1)学生模块:我的成绩、成绩统计、申述管理、修改密码 2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3)管理员模块&…...

什么是关系模型? 关系模型的基本概念
关系模型由IBM公司研究员Edgar Frank Codd于1970年发表的论文中提出,经过多年的发展,已经成为目前最常用、最重要的模型之一。 在关系模型中有一些基本的概念,具体如下。 (1)关系(Relation)。关系一词与数学领域有关,它是集合基…...

shell编程-02-变量作用域
作用域 局部变量:变量只能在函数内部使用 全局变量:变量可以在当前 Shell 进程中使用 环境变量:变量还可以在子进程中使用 局部变量 函数中定义的变量默认是全局变量,在定义时加上local命令,此时该变量就成了局部变…...

C++服务器框架开发6——日志系统LogFormatter/size_t学习
该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) 上一篇:C服务器框架开发5——日志系统LogAppender/IO类“3种stream”/双感叹号 C服务器框架开发6——日志系统logFormatter/size_t学…...
MYSQL实战45讲笔记--深入浅出索引
深入浅出索引 索引的常见模型 索引模型:是哈希表、有序数组和搜索树。 区别: 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思…...

SpringCloudAlibaba:分布式事务之Seata学习
目录 一、分布式事务基础 (一)事务 (二)本地事务 (三)分布式事务 二、Seata概述 1.Seata 的架构包含: 2.其工作原理为: 3.如果需要在 Spring Boot 应用中使用 Seata 进行分布式事务管理,主要步骤为…...

【MySQL数据库 | 第四篇】SQL通用语法及分类
目录 🤔SQL通用语法: 😊语句: 😊注释: 🤔SQL语句分类: 😊1.DDL语句: 😊2.DML语句: 😊3.DQL语言: &…...
Liskov替换原则:用了继承,子类就设计对了吗?
前言 上一篇,我们讲了开放封闭原则,想要让系统符合开放封闭原则,最重要的就是我们要构建起相应的扩展模型,所以,我们要面向接口编程。 而大部分的面向接口编程要依赖于继承实现,继承的重要性不如封装和多…...
腾讯云服务器SA3实例AMD处理器CPU网络带宽性能详解
腾讯云AMD服务器SA3实例CPU采用2.55GHz主频的AMD EPYCTM Milan处理器,睿频3.5GHz,搭载最新一代八通道DDR4,内存计算性能稳定,默认网络优化,最高内网收发能力达1900万pps,最高内网带宽可支持100Gbps。腾讯云…...
接口测试常用测试点
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 测试的策略: 接口测试也是属于功…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...