深度学习论文: DMAD: Dual Memory Bank for Real-World Anomaly Detection

深度学习论文: DMAD: Dual Memory Bank for Real-World Anomaly Detection
DMAD: Dual Memory Bank for Real-World Anomaly Detection
PDF: https://arxiv.org/pdf/2403.12362
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks

1 概述

文章介绍了一种名为DMAD的新框架,用于图像异常检测。传统方法为每个对象训练一个独特的模型,但随着对象类别数量增加,这种方法导致了存储消耗的增加。UniAD采用多类设置,训练统一模型以节省存储。但无监督学习在异常检测中存在边界定义不准确的问题。利用现实世界中少量异常数据的半监督方法可提高性能。因此,作者提出DMAD框架,适用于统一半监督设置,通过双内存库处理两种情况,利用补丁特征编码器和多层感知器学习特征表示与异常分数映射,以更准确地检测异常。实验结果表明,DMAD在MVTec-AD和VisA数据集上的表现显著优于当前最先进的方法。
在这里插入图片描述
DMAD适用于半监督设置,也适用于没有标注异常的多类设置,适合现实世界中异常可能不易获取的情况。DMAD使用补丁特征编码器提取特征,并通过正常和异常Dual Memory bank建立统一决策边界。在无监督情况下,使用正常和异常特征融合生成的伪异常特征集作为abnormal memory bank。在半监督情况下,采用异常中心采样策略来扩充abnormal memory bank,以缓解数据不平衡问题。Dual Memory bank计算补丁特征与记忆银行中最近特征的距离和交叉注意力,形成正常和异常数据的知识库。最后,使用多层感知器(MLP)学习增强表示和异常分数之间的映射。

2 DMAD

本文介绍了一种名为DMAD的新框架,旨在应对现实世界的异常检测问题。在实际工业应用中,采用统一模型进行训练因其高度的兼容性和存储效率而备受青睐。DMAD框架针对两种情况进行了优化:一是适用于一般情况的统一设置,二是利用少量已标注异常数据的统一半监督设置,这取决于异常数据的可用性。
在这里插入图片描述
为了达成这一目标,DMAD框架包含了三个核心组件:补丁特征编码器、基于双内存库的知识增强模块以及异常分数映射器。该框架的目标是训练一个统一的神经网络,使其能够准确地区分正常与异常实例,并为异常分配更高的异常分数。通过有效结合正常数据和可访问的异常数据,DMAD在应对现实世界中的异常检测挑战时取得了显著的进展。

2-1 Patch Feature Encoder

补丁特征编码器由两部分组成:特征提取器 F Φ F_{Φ} FΦ 和可选的特征过滤操作 Filter。特征提取器用于从图像中提取特征,包括预训练的骨干网络和聚合操作。对于正常图像,直接提取其补丁特征。
在这里插入图片描述
随着系统运行,可将一些标注的异常数据用于训练 DMAD。对于异常图像,使用 Filter 操作从提取的特征中分离出异常部分,因为图像缺陷通常只占图像的小部分。通过双线性插值匹配特征分辨率,然后过滤异常部分,得到异常补丁特征。
在这里插入图片描述
这些特征之后会通过双重记忆银行进行增强。

2-2 Dual Memory Bank-based Knowledge Enhancement

在这里插入图片描述
Dual Memory Bank的构建,其中包括正常内存库 M n M_{n} Mn和异常内存库 M a M_{a} Ma。正常内存库存储正常模式,而异常内存库存储潜在的缺陷模式。对于一般统一设置,使用coreset采样算法从所有正常数据中提取补丁特征来构建 M n M_{n} Mn。对于 M a M_{a} Ma,如果没有可用的已标注异常,从DTD数据集中随机采样异常数据构建 M a M_{a} Ma。当可用的已标注异常变得可访问时,将观察到的已标注异常的过滤异常补丁特征集 M a s M_{a_{s}} Mas加入到 M a M_{a} Ma中。为了提取额外的知识,对于每个补丁正常特征,从 M n M_{n} Mn M a M_{a} Ma中识别最近邻特征,并计算特征与最近邻特征的距离和注意力矩阵。最后,将特征本身和两部分知识结合起来形成增强表示。这种方法有助于在异常检测中更有效地利用所有可用的信息,提高模型的性能。

2-3 Anomaly Score Mapper

异常分数映射器负责将增强的特征表示o映射到相应的异常分数S。为了实现这一映射,采用了多层感知器(MLP)Ψ来学习其中的映射关系,并利用铰链损失函数来优化网络结构。在一般统一(多类别)的场景中,采取特征增强策略来生成伪负样本,以丰富模型的训练数据。而当有已标注的异常样本可用时,引入一个包含三部分的铰链损失函数来进一步优化模型,其中λ1和λ2为可调节的超参数。这一工作有效地建立了增强表示与异常分数之间的关联模型,从而显著提升了异常检测的性能。
在这里插入图片描述
在一般统一设置中, λ1 = 1, λ2 = 0,而在统一半监督设置中,λ1 = 0.5, λ2 = 15。

2-4 Anomaly Detection and Localization

为了对测试图像进行精确的异常检测和定位,采用了经过训练的DMAD模型。首先,模型会为图像的每个补丁生成异常分数,并选择分数最高的前5个补丁,计算它们的平均分数作为整幅图像的异常级别评分。接着,为了得到更精细的像素级异常分数,采用双线性插值技术结合高斯平滑方法,对初步得出的分数进行优化和细化。这种方法不仅确保了异常定位的精确性,还能为异常提供更为准确的评分,从而极大地提高了异常检测的准确性和可靠性。

3 Experiments

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

如何快速找到并处理jar依赖冲突问题

处理jar文件的依赖冲突一般有以下几种方法: 1、使用Maven的dependency:tree命令 Maven的dependency:tree命令可以帮助你快速找到项目的所有依赖的树状图。你可以在命令行运行以下命令: mvn dependency:tree你也可以使用-Dincludes参数来过滤某些特定的…

数智先锋 | 多场景数据治理案例,释放数据要素生产力

数据作为第五大生产要素,成为释放新质生产力的关键基础。 当前各个行业数字化建设如火如荼,全力挖掘数据价值以驱动行业高质量应用发展。数据治理成为数据要素价值发挥的重要基础和前提。 数据治理不单是技术问题,不是依赖工具就能解决的&a…

JVM之内存分配的详细解析

内存分配 两种方式 不分配内存的对象无法进行其他操作,JVM 为对象分配内存的过程:首先计算对象占用空间大小,接着在堆中划分一块内存给新对象 如果内存规整,使用指针碰撞(Bump The Pointer)。所有用过的内…

首屏优化-图片懒加载的代码实践(可直接运行)

实现图片懒加载时&#xff0c;可以使用 JavaScript 监听滚动事件&#xff0c;并根据图片是否进入可视区域来延迟加载图片。 方案一 <!DOCTYPE html> <html><head><style>.placeholder {width: 300px;height: 200px;background-color: #ccc;}.image {…

一文搞定文件的读写操作

文件的操作 C C语言中&#xff0c;文件的读取操作流程如下&#xff1a; 定义一个文件的指针将指针指向需要打开的文件&#xff0c;并且赋予该指针权限&#xff08;读&#xff0c;写&#xff0c;追加&#xff09;然后开始向文件写/读数据 打开文件 定义文件指针&#xff1a;F…

Android面试必考题1-15

目录 Service 和 主进程区别 一、性能优化 2.什么情况下会导致内存泄露 3.如何避免 OOM 异常

链式队列基本操作

链式队列的基本概念 链式队列是一种常见的数据结构&#xff0c;它使用链表作为其底层数据存储结构。链式队列的特点是动态的内存分配&#xff0c;可以有效地处理队列的入队和出队操作。下面&#xff0c;我将介绍链式队列的实现方法&#xff0c;并提供相应的C语言代码示例。 链…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

Linux PXE高效批量网络装机

系统初始化 systemctl disable --now firewalld.service setenforce 0 vim /etc/selinux/config 安装软件 yum install -y tftp-server xinetd dhcp vsftpd syslinux 复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录 [rootlocalhost ~]# cd /mnt/…

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年&#xff0c;每当我遇到那些错综复杂的业务逻辑和系统交互&#xff0c;总有一个模式像一位忠诚的骑士&#xff0c;默默守护着我的代码城堡&#xff0c;那就是——业务代表模式&#xff08;Business Delegate Pattern&#xff09;。它不是最耀眼的明星…

C++ 如何进阶?

一、C基础&#xff08;3个月&#xff09; 1、面向对象的三大特性&#xff1a;封装、继承、多态 2、类的访问权限&#xff1a;private、protected、public 3、类的构造函数、析构函数、赋值函数、拷贝函数 4、移动构造函数与接贝构造函数对比 5、深接贝与浅贝的区别 6、空…

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数&#xff1a;1. 构造函数概念特性做了什么&#xff1f;易错注意&#xff1a;显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项&#xff1a; 3.拷贝构造函数概念特征做了什么&#xff1f;注意事项&#xff1a; 4.赋值运算符重载…

MySQL基础_4.排序与分页

文章目录 一、排序二、分页 一、排序 使用 ORDER BY 子句排序&#xff1a; ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 二、分页 MySQL中使用 LIMIT 实现分页&#xff0c;格式&#xff1a; LIMIT [位置偏移量,] 行数第一个“位置偏…

Linux程序库文件调试测试方法

Linux编译后的.so文件是需要进行上机测试的&#xff0c;对于已经量产的硬件平台来说一般是通过具有相同功能的样机测试新版本的功能&#xff0c;具体如下。 Linux的量产固件由于已经经过裁剪系统内部的usr lib etc等目录是只读的权限不可以修改因此不能将测试库直接放到其下进行…

JavaScript异步编程——01-单线程和异步任务

单线程 JS 是单线程的 JavaScript 语言的执行是单线程的。即同一时间&#xff0c;只能处理一个任务。 具体来说&#xff0c;所谓单线程&#xff0c;是指 JS 引擎中负责解释和执行 JavaScript 代码的线程只有一个&#xff0c;即同一时间&#xff0c;只能处理一个任务。这个任…

CellMarker | 人骨骼肌组织细胞Marker大全!~(强烈建议火速收藏!)

1写在前面 分享一下最近看到的2篇paper关于骨骼肌组织的细胞Marker&#xff0c;绝对的Atlas级好东西。&#x1f44d; 希望做单细胞的小伙伴觉得有用哦。&#x1f60f; 2常用marker&#xff08;一&#xff09; general_mrkrs <- c( MYH7, TNNT1, TNNT3, MYH1, MYH2, "C…

ComfyUI 基础教程(十三):ComfyUI-Impact-Pack 面部修复

SD的WebUI 中的面部修复神器 ADetailer,无法在ComfyUI 中使用。那么如何在ComfyUI中进行面部处理呢?ComfyUI 中也有几个面部修复功能,比如ComfyUI Impact Pack(FaceDetailer),以及换脸插件Reactor和IPAdapter。 ComfyUI-Impact-Pack 是一个功能强大的插件,专为 ComfyUI …

GDB的常用命令

GDB&#xff08;GNU Debugger&#xff09;是Linux和其他类Unix系统中常用的调试工具&#xff0c;用于调试C、C等编程语言编写的程序。以下是一些GDB常用的命令&#xff1a; 启动和基本操作 gdb [executable-file]&#xff1a;启动GDB并加载指定的可执行文件。 run [arguments]…

淘宝扭蛋机小程序开发:开启你的惊喜之旅

一、扭出新世界&#xff0c;惊喜不断 在这个充满无限可能的数字时代&#xff0c;淘宝扭蛋机小程序为你带来了一种全新的购物与娱乐体验。扭蛋机&#xff0c;这个充满童趣和惊喜的玩具&#xff0c;如今在我们的小程序中焕发出新的活力&#xff0c;为你带来一波又一波的惊喜与快…

【CTF Web】XCTF GFSJ0485 simple_php Writeup(代码审计+GET请求+PHP弱类型漏洞)

simple_php 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 解法 &#xfeff;<?php show_source(__FILE__); include("config.php"); $a$_GET[a]; $b$_GET[b]; if($a0 and $a){echo $flag1; } if(is_numeric($b)){exit(); } if($b>1234){ech…