UniAD:实现多类别异常检测的统一模型

news2024/11/25 16:22:50

来源:投稿 作者: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,f_{tok}\in\mathbb{R}^C,我们从高斯分布中对干扰D进行采样:

其中,α是控制噪声程度的抖动尺度。同时,采样干扰以固定的抖动概率p添加到f_{tok}中。

3.4 实施细节

特征提取:

我们采用在ImageNet上预训练的固定的EfficientNet-b4作为特征提取器。从阶段1到阶段4的特征被选中。这里的阶段指的是具有相同大小的特征图块的组合。然后,这些特征被调整为相同的大小,并沿通道维度串联起来,形成一个特征图,之后,这个特征图被标记为具有C_{org}通道的H×W特征tokens。

 

特征重建:

首先对这些特征标记进行线性投影,将C_{org}减少到一个较小的通道,即C,然后这些标记被NME和LQD处理。可学习的位置嵌入被添加到注意力模块中,以告知空间信息。之后,另一个线性投影被用来恢复从C到C_{org}的通道。经过重塑,最终得到重建的特征图,

目标函数:

我们的模型是用MSE损失来训练的:

异常定位的推理:

异常定位的结果是一个异常得分图,它为每个像素分配一个异常得分。具体来说,异常得分图s,被计算为重建差异的L2准则,即:

然后用双线性插值将s向上采样到图像大小,得到定位结果。

异常检测的推理:

异常检测的目的是检测图像是否包含异常区域。

通过取平均汇集的s的最大值,将异常得分图s转化为图像的异常得分。

4.实验效果 & 结果

在MVTec-AD上使用AUROC指标的异常检测结果。所有的方法都在统一建模/单独建模的情况下进行评估。在统一建模的情况下,学习到的模型被应用于检测所有类别的异常情况,而不需要进行微调。

在MVTec-AD上使用AUROC指标的异常定位结果。所有的方法都在统一建模/单独建模的情况下进行评估。在统一建模的情况下,学习到的模型被应用于检测所有类别的异常情况,而不需要进行微调。

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

回复“500”获取AI必读论文合集

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

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

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

相关文章

Jetson 硬件 安装SSD固态作为启动盘以及安装CUDA等

Jetson硬件的自带闪存一般较小,只能安装jetpack等基本的环境,所以需要额外增加SSD固态或SD卡作为存储空间,很明显SSD的读取速度远远大于SD卡,所以为更好发挥出Jetson 的计算性能,我们选择使用SSD固态作为存储 1. 安装…

随机森林原理和性能分析

文章目录 随机森林入门构造随机森林随机森林性能随机森林特点 随机森林入门 决策树入门、sklearn实现、原理解读和算法分析中针对决策树进行了详细的描述,但是其只考虑了一颗决策树的情况。俗话说,三个臭皮匠,顶个诸葛亮。本文将研究如何通过…

C++:深入理解多态,多态实现原理及拓展

文章目录 1. 理解虚表1.1 虚表1.2 验证1.3 子类虚表1.4 相同类不同对象的虚表 2. 静态绑定和动态绑定2.1 静态绑定2.2 动态绑定 3. 多态的实现原理3.1 向上转型3.2 多继承3.3 原理 4. 拓展4.1 构造函数能不能是虚函数4.2 父类和子类的析构函数在底层的命名问题4.3 对象之间无法…

[论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

SpringMVC第十一阶段:SpringMVC 拦截器执行源码解析

SpringMVC 拦截器执行源码解析: 1、执行doDispatcher做请求分发处理 1.1、调用getHandler()获取请求处理器,处理器中包含请求的方法和拦截器信息 getHandlerInternal() 根据请求地址获取对应的目标方法getHandlerExecutionChain() 获取请求地址对…

(转载)基于鱼群算法的函数寻优算法(matlab实现)

1 理论基础 1.1 人工鱼群算法概述 人工鱼群算法是李晓磊等人于2002年提出的一类基于动物行为的群体智能优化算法。该算法是通过模拟鱼类的觅食、聚群、追尾、随机等行为在搜索域中进行寻优,是集群体智能思想的一个具体应用。生物的视觉是极其复杂的,它…

Java006——对第一个Java程序HelloWorld的简单介绍

一、HelloWorld.java程序整体认识 public class HelloWorld { //创建一个名字叫HelloWorld的类(Java中的类叫class)public static void main(String[] args) {//主程序入口,类似C语言main函数System.out.println("He…

python之scipy.signal重采样

前言 在复现LiftingNet过程中,了解到作者对于不同转速设备的机械信号进行重采样来矫正转速,也就是固定长度的样本包含了相同旋转周期的设备信息,而非相同时间长度。po一下原文: 这里其实用到了阶次分析的原理,该样本…

【vue】生命周期,组件,插槽,依赖注入,实现分页器组件,异步组件,keep-alive

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 生命周期总结组件例子轮播图组件 在组件中使用v-modelMixin插槽具名插槽实现一个分页器 依赖注入…

【软件测试】软件测试总结笔记(1)

软件测试理论总结 1.Introduction1.1 What is Software Bug1.2 Tester的职责和目标其他概念软件测试的分类 2.软件开发生命周期Software Development ProcessSoftware Development Lifecycle ModelsTDD - Test-Driven Development测试驱动开发(一种敏捷开发&#x…

城市微博签到数据分享地址解码与纠偏教程

收录于合集 #开源4个 #GIS34个 #社交媒体2个 #大数据4个 哈喽大家好,我又来啦!最近一直有小伙伴私戳问我要 签到数据,本着 开源共享的精神,我这次给大家分享中国多个城市2022年9月的匿名签到数据,欢迎大家点击在看…

用Python做兼职,轻松赚取零花钱,分享Python兼职经验

文章目录 前言一、技术方案二、接单流程三、注意事项四、总结 前言 某家电商公司需要从竞争对手的网站上获取商品信息,以便更好地了解市场情况和竞争对手的策略。由于该公司没有专门的技术团队,因此他们需要找一家专业的爬虫服务公司来帮助他们完成这项…

冈萨雷斯DIP第4章知识点

文章目录 4.1 背景4.3 取样和取样函数的傅里叶变换4.5 二变量函数的傅里叶变换4.6 二维 DFT 和 IDFT 的一些性质4.6.6 二维离散卷积定理 4.7 频率域滤波基础4.7.3 频率域滤波步骤小结4.7.4 空间域和频率域滤波之间的对应关系 4.8 使用低通频率域滤波器平滑图像4.9 使用高通滤波…

Nacos作为服务注册中心简单示例

一、服务注册与发现场景 主要包含两个服务: zhshl-order服务: 作为服务消费者zhsl-stock服务: 作为服务提供者 当我们启用服务发现的时候,需要进行的操作主要有三步 0、前置条件,需要先搭建好一个nacas服务,可以是一个集群或者是单个nacos服务。可以…

MySQL 数据定义语言 DDL

文章目录 数据定义语言 DDL表的设计范式第一范式(1NF)第二范式(2NF)第三范式(3NF) 创建表修改表删除表截断表 数据定义语言 DDL 前面我们学习的 DML 语言,主要实现对数据的增、删、改等基本操作…

零基础入门网络安全必看的5本书籍(附书单pdf)

作为一个Java转行网络安全的过来人,我深知自学时的种种不易,同时也经常有粉丝朋友问我:刚入门应该怎么学、有哪些书籍推荐等问题,今天我就把我自己的学习书单分享给大家,希望对大家有帮助! 一、5本必读书籍…

JVM垃圾回收——对象进入老年代

目录 1、什么是大对象以及大对象对垃圾回收的影响 2、什么情况下对象会进入老年代 2.1 当创建对象的大小超过-XX:PretenureSizeThreshold的设定值 2.2 长期存活的对象将进入老年代 2.3 动态年龄判定 2.4 空间担保分配 什么是空间分配担保? 为什么要…

uploads靶场通关(1-11关)

Pass-01(JS校验) 看题目我们准备好我们的php脚本文件,命名为1.php 上传该php文件,发现上传失败 方法一:将浏览器的JavaScript禁用 然后就能上传了 方法二: 查看源码,发现只能上传以下形式的文…

【Docker】LXC所实现的隔离性、Linux Namespace等讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

域名解析异常有哪些办法?如何实现动态域名解析?

什么是域名解析? 域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,只要这个IP地址对应相关域名,这就叫域名解析。 工作中常会遇到域名解析故障,比如访问站点对应的…