中国建设安全协会网站/uc浏览网页版进入
PromptAD: 仅使用正常样本进行小样本异常检测的学习提示
论文名称:PromptAD: Learning Prompts with only Normal Samples for Few-Shot Anomaly Detection
论文地址:https://arxiv.org/pdf/2404.05231
研究背景
异常检测(Anomaly Detection)是计算机视觉中非常重要的任务,在工业和医学中的缺陷检测任务中得到了广泛的应用。本文聚焦于无监督工业异常检测任务,这提出了一个被称为一类分类(OCC)设置的挑战。在这个框架中,模型在训练期间只使用正常样本,但在测试阶段,正常样本和异常样本都会用于测试,模型需要能识别异常样本。由于工业异常检测通常为不同的工业生产线定制模型,因此使用少量样本快速训练模型的能力对实际应用具有重要意义。
提示学习(prompt learning)的目的是通过对比学习自动学习提示,以指导图像分类。但是,如图1(右)所示,由于异常检测的单类设置,使用上述提示学习方法作为基线的效果较差,不如在图像级结果上使用手动提示的WinCLIP。导致这种结果的主要的问题在于:1. 提示学习依赖于对比学习,如何在one-class环境中设计prompt来完成对比学习? 2.由于异常样本的缺乏,如何控制正常和异常prompt之间的边缘距离?
本文提出了一种只使用正常样本的单类提示学习异常检测方法PromptAD。为了解决以上的挑战1,本文提出了语义连接(SC),显然,将一个与提示语反义的文本和原始的提示连接可以改变这个提示的语义。基于这个想法,SC首先为正常样本设计了一个可学习的正常提示,例如[P1][P2] . . . [PEN ][obj.],接下来将正常提示与许多异常文本连接生成异常提示,例如[P1][P2] . . . [PEN ][obj.][with][flaw],并可在提示学习期间作为正常样本的负向提示使用。由于手动标注的异常文本有限,为了扩展异常信息的丰富性,SC也通过连接正常提示和可学习的token后缀设计了可学习的异常提示,例如[P1][P2] . . . [PEN ][obj.][A1][A2] . . . [AEA ],其中[Ai ] 是可学习的token。可学习的异常提示和手动设计的异常提示的分布是对齐的,从而确保可学习的异常提示学习更多正确的异常信息。
另外,在异常检测中异常样本不可用,因此不能通过对比损失明确控制正常和异常提示的边界。为了解决挑战2,本文提出了显式异常边缘(EAM)的概念,其中一个超参数确保正常特征和正常提示特征之间的距离小于正常特征和异常提示特征之间的距离。从而确保正常提示和异常提示之间有足够的间隔。
对比于WinCLIP和基线方法,在只使用10-20(下降~980和0)个提示的情况下,PromptAD图像级/像素级异常检测结果分别为91.3%(提高1.2%和9.8%)和92.5%(提高7.7%和3.7%)。
相关工作
Vision-Language Model
利用对比学习和vision transformer,一些视觉-语言模型(VLM)取得了巨大成功。CLIP是最常用的VLM之一,它在大规模的图像-文本对上进行预训练,展现出强大的零样本分类能力。基于预训练的CLIP和提示工程师,一些下游任务取得了巨大飞跃。受到自然语言处理(NLP)中提示学习成功的启发,近期出现了一些针对小样本图像分类任务的提示学习方法。这些方法旨在通过对比学习自动学习更好的提示,以指导基于CLIP的图像分类。
Anomaly Detection
大多数异常检测(AD)方法可以分为三种:基于特征嵌入的方法、基于知识蒸馏的方法和基于重建的方法。基于特征嵌入的异常检测方法通过神经网络提取图像的块特征,然后执行异常检测。基于知识蒸馏的异常检测方法让学生网络只学习教师网络的正常样本知识,并通过教师和学生之间的差异完成异常检测。基于重建的异常检测方法希望模型能够将异常图像重建为正常图像,并通过重建图像与异常图像之间的差异实现异常检测。
Few-Shot Anomaly Detection
TDG和RegAD是首先研究小样本异常检测方法的工作,PatchCore和DifferNet模型也在小样本设置中展示出较好的性能。WinCLIP和RWDA引入了CLIP模型进行异常检测,并在少样本设置中大幅提高了性能。最新的FastRecon通过带有分布正则化的回归重建异常特征,并取得了优异的性能。
本文方法
概述
本文提出的PromptAD模型结构如图2所示。PromptAD建立在VV-CLIP之上,其视觉编码器用于提取全局和局部的特征。本文提出的语义串联(SC)用来设计提示。具体来说,将N个可学习的普通前缀与目标名称串联起来获得普通提示(NPs),然后将这N个普通提示分别与M个手动设置的异常后缀和L个可学习的异常后缀串联,以获得N×M个异常提示(MAPs)和N×L个可学习的异常提示(LAPs)。视觉特征和提示特征用于通过对比损失和本文提出的显式异常边界(EMA)损失来完成提示学习。EMA可以通过超参数控制正常提示特征和异常提示特征之间的显式边际。最后,通过提示学习获得的提示被用于提示引导的异常检测(PAD)。
除了PAD,参考WinCLIP+ ,本文还引入了视觉引导的异常检测(VAD)。具体来说,如图2所示,在训练期间,视觉编码器输出的第i层特征(不包括CLS特征)被存储为正常的视觉记忆,记为R。在测试阶段,将查询图像的第i层特征图与R进行比较,以获得异常分数图:
在实践中,本文使用两层的中间特征作为记忆,为每个查询图像获得两个分数图,然后将这两个分数图平均,以得到最终的视觉引导分数图。
Semantic Concatenation
由于在训练过程中只有正常的样本可以使用,导致了没有负样本用于引导提示学习从而影响了方法的性能。本文发现提示的语义可以通过连接来改变。例如,a photo of cable是正常的语义,当把这个提示和一个后缀连接后,a photo of cable with flaw就转换成了一个异常的语义。通过这种方法,本文提出了语义连接,可以通过将正常的提示与异常后缀连接将正常提示转换为异常提示,从而基于可学习的正常提示构造充足的对比样本。具体来说,遵循CoOp的格式,可学习的正常提示设计如下:
其中E_N代表可学习的正常前缀的长度,[obj.] 代表了被检测的物体的名字。具体来说,本从数据集的异常标签中生成异常后缀,例如[] with color stain, [] with crack等,然后将这些文本与正常提示连接起来,以获得异常提示:
其中前缀是可训练的正常提示,而后缀是手动设置的异常文本。此外,本文将正常提示与一个可学习的标记后缀结合起来,设计出可学习的异常提示:
这里表示可学习异常后缀的长度。需要注意的是,由相同的普通前缀或异常后缀连接得到的提示的参数是共享的。在训练过程中,NP(正常提示)会向正常视觉特征靠近,而MAP(手动异常提示)和LAP(可学习异常提示)则会远离正常视觉特征。提示学习的训练损失与CLIP的训练损失一样,公式如下:
由于更多的异常样本可以产生更好的对比学习效果,每一个异常提示特征都会和视觉特征进行对比。
在传统的提示学习中,由于缺乏异常样本,系统只能设计出能够识别正常样本的提示,这在进行对比学习时存在较大的局限。本文提出的语义连接方法将原本代表正常样本的提示转换为代表异常样本的提示。通过共享参数,异常提示能够复用正常提示的语义信息,同时学习到异常的特征,从而在对比损失中更好地区分正常样本和异常样本。
Explicit Anomaly Margin
由于模型在训练中缺乏有异常的样本,MAP(手动异常提示)和LAP(可学习异常提示)只能将正常的视觉特征作为对比的负样本,并且在正常提示和异常提示之间缺少明确的边界。因此,本文提出了显式异常边界(EAM),它能够控制正常提示特征和异常提示特征之间的边界。实际上,EAM是通过边界超参数实现的正则化损失,其定义如下:
其中_d_(·, ·)代表欧氏距离,是所有异常提示特征的原型:
在CLIP中,最终的特征都被投影到单位超球面上,因此中的特征也进行了归一化,并且边界被固定为零。与对比损失()相比,EMA损失确保了正常样本与异常原型之间的距离大于正常样本与正常原型之间的距离,从而实现了正常和异常原型之间的明确区分。此外,由于MAP包含足够的异常信息,而LAP在初始化时没有任何语义指导,对齐它们有助于LAP模仿MAP的分布。具体来说,本文使用平方的L2范数对两种分布的均值进行对齐:
其中和分别是MAPs和LAPs的特征均值,_λ_ 是控制MAPs和LAPs对齐程度的超参数。
Anomaly Detection
在测试阶段,作为正常原型,作为异常原型来完成提示引导的异常检测任务。图像级的得分和像素级得分图通过以下公式计算:
其中是图像/像素级异常检测的全局/局部图像特征。
最终,将视觉引导的和提示引导的融合以获得像素级异常得分图,将和的最大值融合以获得图像级的异常得分:
本文使用的融合方法是调和平均值,它对较小的值更为敏感。
实验
本文在1、2和4-shot的设置下完成了PromptAD与最新方法之间的对比实验,这些实验包括了图像级别和像素级别的结果。此外,本文还比较了many-shot和full-shot方法,以展示PromptAD强大的few-shot性能。最后,本文进行了消融实验,以验证通过所提出的SC(语义串联)和EAM(显式异常边界)对提示学习改进的效果,并展示了不同CLIP变换方法和超参数的影响。
数据集
MVTec-AD
该数据集模拟了真实的工业生产场景,填补了无监督异常检测的空白。它包含 5 种纹理和 10 种物体,共计 5,354 张来自不同领域的高分辨率图像。训练集包含 3,629 张仅有无异常样本的图像。测试集包含 1,725 张图像,包括正常和异常样本。提供了像素级标注用于异常定位评估。
VisA
该数据集包含共计 10,821 张高分辨率图像,包括 9,621 张正常图像和1,200 张带有 78 种异常的图像。VisA 数据集由 12 个子集组成,每个子集对应一个。
评估指标
本文图像级别和像素级别异常检测的评估指标均采用接收者操作特征曲线下面积(Area Under the Receiver Operation Characteristic,AUROC)。
实现细节
本文使用了OpenCLIP实现的CLIP及其预训练参数,以及超参数τ的默认值。参考WinCLIP,本文使用了基于LAION-400M的CLIP,配备ViT-B/16+。
图像级对比实验
PromptAD和当前方法的图像级别比较实验结果如表1所示。实验结果显示,PromptAD在1、2和4-shot的少样本设置下,相比于其他传统方法和基于CLIP的方法,如WinCLIP+ 和 RWDA,都有显著的性能提升。特别是在MVTec和VisA数据集上,PromptAD的性能提升百分比在1.3%到2.9%之间,这表明PromptAD在少样本异常检测方面具有强大的能力。此外,PromptAD在实现这些性能提升的同时,使用的提示数量还少于对比方法,这进一步证明了其效率和有效性。
像素级对比实验
作者比较了PromptAD与其他方法在像素级别异常检测任务上的性能,实验结果如表4所示。实验结果表明,虽然基于CLIP的方法在像素级别的改进不如图像级别显著,但PromptAD在1-shot和2-shot的少样本设置下在MVTec和VisA数据集上均取得了最佳性能,较WinCLIP+有小幅提升。在4-shot设置下,PromptAD在VisA上保持了第一名,而在MVTec上以微弱差距位居第二。此外,通过可视化的异常定位结果,作者展示了PromptAD在定位小面积异常方面的高准确性,这表明PromptAD在像素级别的异常检测任务上具有较高的精确度和鲁棒性。这些结果进一步证实了PromptAD在少样本异常检测领域的有效性和优越性。
异常定位的定量结果如图3所示。PromptAD在1-shot设置中对对象和纹理具有更好的异常定位能力。此外,PromptAD还可以非常准确地定位一些非常小的异常区域。
与many-shoy方法的对比
在少样本设置下PromptAD与其他many-shot/full-shot设置下的方法的比较结果,如表2所示。实验结果显示,PromptAD不仅在少样本设置下表现出色,其图像级别的异常检测结果优于其他多次射击方法,而且在像素级别上也展现出了有竞争力的性能。这表明PromptAD在处理只有少量样本可用的情况时,依然能够有效地进行异常检测。
消融实验
本文在MVTec和VisA数据集上,在1-shot设置下,对PromptAD的不同模块对整体性能的影响进行了实验验证。包括语义串联(SC)和显式异常边界(EAM)。同时,本文还验证了视觉引导的异常检测(VAD)的效果。消融研究的结果如表3所示:
不同 CLIP 变换的结果
实验结果如表5所示:
超参数分析
本文分析了N、L和λ对PromptAD的影响。λ是损失的超参数,控制MAP和LAP特征分布的对齐程度。N是NP的数量。L是异常提示后缀的数量,N×L是LAP的数量。图4说明了N和L对PromptAD的影响。在图像级结果中,N影响不大,N = 1和N = 4之间没有明显差异。而L有显著的影响,较大的L可以得到更好的结果。在像素级结果中,N和L的影响都相对较小,较大的L略微改善了结果。
图5记录了不同λ的图像级/像素级结果。可以看出,当λ等于或大于0时,结果更差。这表明 MAP 和 LAP 的分布需要对齐,但不能过度对齐,这会降低异常提示的多样性,从而降低模型对异常图像特征的感知。
可视化结果
为了量化 PromptAD 的效果,本文对 L2 归一化后的视觉和文本特征进行了可视化。图 6 显示了可视化结果,可以看出正常提示特征和异常提示特征之间的区分非常明显,正常提示特征与正常视觉特征之间的重叠度非常高,证明了 PromptAD 的有效性。
结论
本文提出了一种新的异常检测方法PromptAD,可以在小样本异常检测场景中只使用正常样本自动地学习prompt。首先,为了解决one-class任务的挑战,本文提出了semantic concatenation通过连接mnormal prompt和anomaly suffixe构建anomaly prompt从而引导prompt learning。其次,本文提出了明确的异常边缘损失,通过超参数确定了正常和异常prompt的特征。最后,对于图像级/像素级异常检测,PromptAD在11/12个小样本任务中达到第一。
相关文章:

CVPR2024 | PromptAD: 仅使用正常样本进行小样本异常检测的学习提示
PromptAD: 仅使用正常样本进行小样本异常检测的学习提示 论文名称:PromptAD: Learning Prompts with only Normal Samples for Few-Shot Anomaly Detection 论文地址:https://arxiv.org/pdf/2404.05231 研究背景 异常检测(Anomaly Detecti…...

文件批量上传,oss使用时间戳解决同名问题 以及一些sql bug
1.文件批量上传 ApiOperation(value "文件批量上传")PostMapping("/multipleImageUpload")Transactional(rollbackFor Exception.class)public Result multipleImageUpload(ApiParam(name "files",value "文件",required true) R…...
机器学习——线性回归(sklearn)
目录 一、认识线性回归 1. 介绍 2. 多元线性回归的基本原理(LinearRegression) 二、多重共线性 1. 介绍 2. 多重共线性详细解释 三、岭回归(解决多重共线性问题) 1. 模型推导 2. 选取最佳的正则化参数取值 四、Lasso&am…...

Go 语言切片(Slice) 15
在 Go 语言中,切片(Slice)是一种可以容纳多个值的数据结构,它可以被视为一个可变的数组。切片是一个引用类型,它可以容纳任意类型的值,可以是整数、字符串、浮点数、结构体等。 切片的声明方式是使用 [] 语法,例如&am…...

嵌入式开发--STM32G030C8T6,写片上FLASH死机CFGBSY和写入出错
故障现象1 G0系列,写片上FLASH时,经常死机,而且按复位键都没用,属于不断电都救不回来的那种死法。这种情况一般是由硬件置位了某个标志导致,只有断电才能故障复原。 故障查找 检查FLASH的相关寄存器,发现…...

通过Fiddler抓包保存网页上的视频(包括Bilibili、B站和其他视频站)亲测可用
本文仅供学习交流用途 文中出现的信息仅为演示需要 请勿以任何方法剽窃、盗用任何视频作者的任何视频 有时候遇到一些素材想保存下来,但是网站不给保存,无论视频是否允许转载。这篇介绍一下最近发现的一个保存视频的方法。 不会介绍Fiddler了…...

企业为什么需要安装加密软件
1. 数据保护 防止数据泄露:加密软件通过对敏感数据进行加密处理,确保即使数据在传输或存储过程中被截获,也无法被未授权人员读取或利用,从而有效防止数据泄露。 完整性保护:加密不仅保护数据的机密性,还通…...

Spring Web MVC入门(下)
1. 响应 1.1 返回静态页面 创建前端页面,如下图所示: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Index页面</title> </head> <body>Hello,Spring MVC…...

uniapp app中使用柱状图 折线图 圆环图和饼图
实现思路 借助echarts.min.js 搭配l-echart进行配置 废话不多说上代码后自己百度了解配置项的意思就好 下面代码是折线图的 ,柱状图和它一摸一样,只需要把line换成bar就好 <template><l-echart ref"chart"></l-echart> …...

jmreport测试数据库出现 权限不足,此功能需要分配角色 解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 关于jmreport的补充可看官网:jmreport上线安全配置 1. 问题所示 jmreport测试数据库出现,出现如下所示的问题:权限不足,此功能需要分配角色! 截图如下所示: 2. 原理分析 对于原理分析的Bug,代表当前用户没有足够的…...

这是啥设计模式-适配模式
有一个广告召回系统,输入用户id就可以给用户推荐相应的广告,一开始我们只有布尔检索和向量检索两种方式。 1. 面向接口编程,而非实现 第一点就是定义接口,客户端关注的是接口,对客户端来说,他只关心检索引…...

大语言模型(LLMs)Tokenizers详解
Tokenizers是大语言模型(Large Language Models,LLMs)中用于将文本分割成基本单元(tokens)的工具。这些工具不仅影响模型的输入表示,还直接影响模型的性能和效率。以下是对Tokenizers的详细解释:…...

分支-快排/归并---1
目录 1.排序数组 2.数组中的第K个最大元素 3.最小k个数 4.排序数组(归并) 5.数组中的逆序对 6.计算右侧小于当前元素的个数 7. 翻转对 1.排序数组 快排的写法有很多,这里我采取了相对快的三路划分加随机基准值。 三路划分,是…...

代码随想录训练营 Day32打卡 动态规划 part01 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
代码随想录训练营 Day32打卡 动态规划 part01 一、 理论基础 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。 例如:有N件物品和一个最多能背重量为W 的背包…...

【智能流体力学】剖析ANSYS Fluent材料属性设定与边界条件
目录 一、材料属性设定**1. 材料属性的概述****功能****2. 材料属性的类型****标准材料库****多相流****燃烧模型****传热模型****辐射模型****3. 属性设置与函数****4. 自定义材料数据库****5. Granta数据库支持**二、边界条件**1. 通用边界条件****Pressure Inlet (压力-入口…...

微信小程序反编译工具
目录 介绍 工程结构还原 微信开发者工具运行 如何查看当前运行版本? 开启小程序F12 重新打包运行 效果示例 安装 用法 参数说明 获取微信小程序AppID 文件夹名即为AppID 下载地址 介绍 纯Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器, 自…...

线程基本概念
一、进程的结束 wait(阻塞) 一般不做额外的事情 wait(非阻塞) 逻辑不受影响(必须套在循环中) wait作用:1.获取子进程退出状态 2.回收资源 传参为指针:被调修改主调 获取退出状态值: WIFEXITED 判断是否…...

在SpringBoot中执行后台任务
在 Spring Boot 中执行后台任务通常涉及到使用线程池和定时任务。Spring Boot 提供了多种方式来实现后台任务,包括使用 Scheduled 注解、ThreadPoolTaskExecutor 和 ExecutorService。 下面我将详细介绍如何使用这些方法来实现后台任务。 使用 Scheduled 注解 Sp…...

【网络】UDP回显服务器和客户端的构造,以及连接流程
回显服务器(Echo Server) 最简单的客户端服务器程序,不涉及到业务流程,只是对与 API 的用法做演示 客户端发送什么样的请求,服务器就返回什么样的响应,没有任何业务逻辑,没有进行任何计算或者…...

【智能流体力学】ANSYS Fluent工作流程设置、求解和后处理详解
目录 一、设置阶段1. **模型****功能** :**详细说明及原理** :2. **材料****功能** :**详细说明及原理** :3. **单元区域条件****功能** :**详细说明及原理** :4. **边界条件****功能** :**详细说明及原理** :5. **网格交界面****功能** :**详细说明及原理** :6. **动…...

最新UI六零导航系统源码 | 多模版全开源
六零导航页 (LyLme Spage) 致力于简洁高效无广告的上网导航和搜索入口,支持后台添加链接、自定义搜索引擎,沉淀最具价值链接,全站无商业推广,简约而不简单。 使用PHPMySql,增加后台管理 多模板选择,支持在…...

K8S中使用英伟达GPU —— 筑梦之路
前提条件 根据不同的操作系统,安装好显卡驱动,并能正常识别出来显卡,比如如下截图: GPU容器创建流程 containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvid…...

2024-2025年最值得选的Java计算机毕业设计选题大全:800个热门选题
一、前言 博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ…...

libnl教程(2):发送请求
文章目录 前言示例示例代码构造请求创建套接字发送请求 简化示例 前言 前置阅读要求:libnl教程(1):订阅内核的netlink广播通知 本文介绍,libnl如何向内核发送请求。这包含三个部分:构建请求;创建套接字;发送请求。 …...

【软件测试】功能测试理论基础
目录 项目的测试流程🏴 需求评审 评审形式 测试人员在需求评审中职责 测试计划与方案 测试计划 问题 测试方案🏴 测试计划与方案的对比 功能测试设计🏴 测试设计的步骤 项目的测试流程🏴 作用: 有序有效开展…...

玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本
很多工作室需要将修改好的系统导出来制作线刷包。前面分享过很多制作线刷包类的教程。那么一个机型中有很多分区。那些分区回读后要写入。那些分区不需要写入。强写有可能会导致不开机 不进系统的故障。首先要明白。就算机型全分区导出后在写回去 都不一定可以开机进系统。那么…...

MongoDB 插入文档
MongoDB 插入文档 MongoDB 是一个流行的 NoSQL 数据库,它使用文档存储数据。在 MongoDB 中,数据以 BSON(Binary JSON)格式存储,这是一种二进制表示的 JSON 格式。MongoDB 提供了灵活的数据模型,使得插入和查询文档变得非常简单。本文将详细介绍如何在 MongoDB 中插入文档…...

【内网】服务器升级nginx1.17.0
今天用rpm包升级内网nginx版本,上来就给我报错 警告:nginx-1.27.0-2.el7.ngx.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 7bd9bf62: NOKEY 错误:依赖检测失败: libcrypto.so.10()(64bit) 被 nginx-1:1.27.0-2.el7.ngx.x…...

歌曲爬虫下载
本次编写一个程序要爬取歌曲音乐榜https://www.onenzb.com/ 里面歌曲。有帮到铁子的可以收藏和关注起来!!!废话不多说直接上代码。 1 必要的包 import requests from lxml import html,etree from bs4 import BeautifulSoup import re impo…...

transformer-explainer
安装和启动 找到这个项目,然后装好了。 这个项目的目的如名字。 https://github.com/poloclub/transformer-explainerTransformer Explained: Learn How LLM Transformer Models Work with Interactive Visualization - poloclub/transformer-explainerhttps:/…...