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。腾讯云…...
接口测试常用测试点
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 测试的策略: 接口测试也是属于功…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
