PromptAD: Learning Prompts with only Normal Samples for Few-Shot Anomaly Detection

华东师范大学,上海,中国
华东师范大学
重庆学院,重庆,中国
海军军医大学,上海,中国
厦门大学,中国福建

摘要

​  视觉语言模型对few-shot工业异常检测有了很大的改进,通常需要通过快速工程设计数百个提示。对于自动化场景,我们首先使用传统的多类范式的提示学习作为自动学习提示,但发现它在单类异常检测中不能很好地工作。为了解决上述问题,本文提出了一种少镜头异常检测的一类提示学习方法PromptAD。首先,我们提出了语义连接方法,通过将正常提示与异常后缀连接,将正常提示转置为异常提示,从而构建了大量的负样本,用于指导单类设置中的提示学习。此外,为了缓解缺乏异常图像所带来的训练挑战,我们引入了显式异常边缘的概念,通过超参数显式地控制正常提示特征和异常提示特征之间的边缘。对于图像级/像素级异常检测,PromptAD在MVTec和VisA上的11/12 few-shot设置中获得第一名。

引言

​  在这个框架中,在训练期间只有正常的样本可用,但在测试阶段,该模型被期望识别异常的样本。由于工业异常检测通常为各种工业生产线定制一个模型,因此以很少的样本快速训练模型的能力在实际应用中具有重要的前景。

​  由于基础模型[27,36,38]具有较强的 zero-shot能力,WinCLIP [21]被提出作为第一个利用视觉语言基础模型(即CLIP [37])来提高模型在少镜头设置下的异常检测性能的工作。为了更好地利用提示指导,WinCLIP引入了一种名为“提示集成”的提示工程师策略,该策略结合了足够数量的手动设计的提示。例如,一些手动提示(例如,裁剪后的照片、模糊的照片等)被作为正常的提示组合在一起。如图1(右)所示,随着提示数量的增加,WinCLIP的表现有所改善,在大约1000个提示时达到饱和点。其他方法如SAA+ [7]和AnoVL [13]也采用即时工程来提高模型性能,这已经成为快速引导异常检测的仪式。及时工程涉及人工干预,需要仔细设计,不满足工业场景的自动化要求。

image-20240709213252747

图1.左:多类和单类设置下的提示学习。右图:WinCLIP使用不同的提示数量的提示引导结果,以及基线和我们的PromptAD的提示引导结果,以便一次性提示学习。所有的结果都在MVTec上。

​  在本文中,我们提出了一种只有正常样本的一类提示学习方法,称为PromptAD。为了解决上述的第一个挑战,我们提出了语义连接(SC)。直观地说,将一个提示符与反义文本连接起来可以改变它的语义。根据这个想法,如图1(左b.)所示,SC首先设计一个可学习的正常提示,如\([\mathbf{P}_{1}][\mathbf{P}_{2}]\ldots[\mathbf{P}_{E_{N}}][obj.]\)。对于正常样本,然后手动连接与异常相关的各种文本与正常提示,如\([\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_N}][obj.][with][flaw]\)。它被转换为异常提示,在提示学习过程中可以作为正常样本的负提示。为了扩大异常信息的丰富性,SC还设计了一个可学习的异常提示,通过将一个可学习标记的后缀与一个正常提示连接起来,例如\([\mathbf{P}_{1}][\mathbf{P}_{2}]\ldots[\mathbf{P}_{E_{N}}][obj.][\mathbf{A}_{1}][\mathbf{A}_{2}]\ldots[\mathbf{A}_{E_{A}}]\),其中\(\begin{bmatrix}\mathbf{A}_i\end{bmatrix}\)是可学习的token。对可学习异常提示和手动异常提示的分布进行对齐,以确保可学习异常提示学习到更多正确的异常信息。

​  此外,在异常检测中,异常样本不可用,因此无法通过对比损失来明确控制正常和异常提示特征之间的边缘。为了解决第二个挑战,我们提出了显式异常边缘(EAM)的概念,其中引入了一个超参数,以确保正常特征与正常提示特征之间的距离小于正常特征与异常提示特征之间的距离。从而确保在正常提示和异常提示之间有足够的间隔。图1(右)说明了我们的巨大优势,可以看出,(与WinCLIP [21]和Baseline[59]相比)PromptAD仅通过10个∼20(↓∼980和↓0)提示就能达到91.3%(↑1.2%和↑9.8%)/92.5%(↑7.7%和↑的3.7%)图像级/像素级异常检测结果。

​  综上所述,本文的主要贡献是:

  1. 我们探讨了提示学习在单类异常检测中的可行性,并提出了一种one-class提示学习方法称为PromptAD,它彻底击败了传统的多类提示学习。
    2. 提出了语义连接(SC),它可以通过连接异常后缀来转换正常提示的语义,从而为正常样本构造足够的负提示。
    3. 提出了显式异常边缘(EAM),它可以通过一个超参数显式地控制正常提示特征与异常提示特征之间的距离。
    4. 对于图像级/像素级异常检测,PromptAD在MVTec [4]和VisA [61]的11/12 few-shot设置中获得第一名。

前期准备工作

CLIP和提示学习

​  对比语言图像预训练称为CLIP [37],是一种大规模的视觉语言模型,以其zero-shot分类能力而闻名。具体来说,给出一个未知的图像i,和K个文本提示\(\{\mathbf{s}_{1},\mathbf{s}_{2},...,\mathbf{s}_{K}\}\),CLIP可以预测i属于以下K个文本提示的分布: \[p(\mathbf{y}|\mathbf{i})=\frac{\exp<f(\mathbf{i}),g(\mathbf{s}_y)/\tau>}{\sum_{i=1}^K\exp<f(\mathbf{i}),g(\mathbf{s}_i)/\tau>}\] ​  其中,f(·)和g(·)分别是视觉编码器和文本编码器。<·,·>表示余弦相似度,τ为温度超参数。用于CLIP零镜头分类的初始文本提示仍然很简单,例如[class]的照片等,比直接使用类的名称作为提示略好一些。

​  提示学习受自然语言处理(NLP)[24,46]中提示学习成功的启发,CoOp [59]将这种模式引入到 few-shot分类中,旨在自动学习CLIP的高效提示。具体来说,在CoOp中使用的提示符不是冻结的文本描述,而是一组可训练的参数: \[\mathbf{s}_k=[\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_P}][class_k]\] ​  其中\([\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_P}]\)是可训练的标记,\([class_k]\)是不可训练的第k类名。提示学习的目的是自动训练有效的提示,以提高下游分类任务的剪辑性能。

CLIP Surgery

​  作为一种分类模型,CLIP在没有微调的提示引导图像定位任务中的适应性要差得多。为了找出为什么CLIP不能完成图像定位任务,一些CLIP可解释的工作[31,57]分析了CLIP提取视觉特征的机制。这些研究观察到,Q-K自注意[48]的全局特征提取影响了CLIP的定位能力,具体如下: \[Attn(\mathbf{Q},\mathbf{K},\mathbf{V})=softmax(\mathbf{Q}\cdot\mathbf{K}^\mathrm{T}\cdot scale)\cdot\mathbf{V}\] ​  为此,CLIP-Surgery[31]提出了一种V-V注意机制,在不破坏原始结构的情况下增强模型对局部特征的注意。如图2所示,特征提取过程描述如下: \[\begin{gathered}\mathbf{Z}_{ori}^{l-1}=[\mathbf{t}_{cls};\mathbf{t}_{1};\mathbf{t}_{2},...;\mathbf{t}_{T}], \\\mathbf{Z}^{l-1}=[\mathbf{t}_{cls}^{\prime};\mathbf{t}_{1}^{\prime};\mathbf{t}_{2}^{\prime},...;\mathbf{t}_{T}^{\prime}], \\[\mathbf{Q}^{l},\mathbf{K}^{l},\mathbf{V}^{l}]=QKV_Proj.^{l}(\mathbf{Z}_{ori}^{l-1}), \\\mathbf{Z}^{l}=Proj.^{l}(Attn(\mathbf{V}^{l},\mathbf{V}^{l},\mathbf{V}^{l}))+\mathbf{Z}^{l-1}, \end{gathered}\] ​  其中\(\mathbf{Z}_{ori}^{l-1}\)表示(l−1)层输出的原始剪辑视觉编码器和\(\mathbf{Z}^{l-1}\)表示本地感知输出层l−1,QKV P roj.l和P rojl表示QKV投影和输出投影,其参数由原始CLIP的视觉编码器参数初始化。最终的原始输出和局部感知输出为Zori和Z,CLS特征\(\mathbf{Z}_{ori}[0] \in \mathbb{R}^d\)用于图像级异常检测,局部特征图\(\mathbf{Z}[1:]\in\mathbb{R}^{T\times d}\)用于像素级异常检测。在本文中,我们使用改进的CLIP作为主干,并将其称为VV-CLIP。

方法论

概观

​  图2说明了我们建议的PromptAD的概述。PromptAD建立在VV-CLIP上,其视觉编码器用于提取全局和局部特征。所提出的语义连接(SC)用于设计提示。

image-20240710104034694

​  具体来说,将N个可学习正常前缀和目标名称连接得到正常提示(NPs),然后将N个正常提示分别与M个手动异常后缀和L个可学习异常后缀连接,得到N×手动异常提示(MAPs)和N×可学习异常提示(LAPs)。利用视觉特征和提示特征,通过对比损失和所提出的显式异常边缘(EMA)损失来完成提示学习。EMA可以通过一个超参数来控制正常提示特征和异常提示特征之间的显式边距。最后,利用提示学习获得的提示用于提示引导异常检测(PAD)。

​  除了PAD外,参考WinCLIP+ [21],我们还引入了视觉引导异常检测(VAD)。具体来说,如图2所示,在训练过程中,视觉编码器输出的第i层特征(没有CLS特征)被存储为正常的视觉记忆,记为R。在测试阶段,将查询图像的第i层特征图\(\mathbf{F}\in\mathbb{R}^{h\times w\times d}\)R进行比较,得到异常得分图\(\textbf{M}\in\begin{bmatrix}1,0\end{bmatrix}^{h\times w}\)\[\mathbf{M}_{ij}=\min_{\mathbf{r}\in\mathbf{R}}\frac{1}{2}(1-<\mathbf{F}_{ij},\mathbf{r}>)\] ​  在实践中,我们使用两层的中间特征作为内存,为每个查询图像得到两个得分映射,然后对两个得分映射进行平均,得到最终的可视化得分映射Mv。

语义连接

​  在异常检测训练过程中,只能获得正常的样本,这导致没有负的样本来引导快速学习,从而损害了其效果。我们发现,提示的语义可以通过连接来改变。例如,a photo of cable具有正常语义,将其与后缀连接后,a photo of cable with flaw转换为异常语义。通过这种方法,我们提出了语义连接(SC),通过将正常提示与异常后缀连接,将正常提示转换为异常提示,从而基于可学习的正常提示构建足够的对比提示。具体来说,按照CoOp [59]的格式,可学习的正常提示符(NP)设计如下: \[\mathbf{s}^n=[\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_N}][obj.]\] ​  其中,EN表示可学习的正规前缀和[obj.]的长度。表示正在被检测到的对象的名称。可学习的正常提示在与异常后缀连接后,可以转换为异常提示。特别是,我们从数据集[4,61]的异常标签中生成异常后缀,如[] with color stain, [] with crack等,然后将这些文本与NP连接,获得手动异常提示(MAP): \[\mathbf{s}^m=[\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_N}][obj.][with][color][stain]\] ​  其中,前缀为可训练的NP,后缀为手动异常文本。此外,我们将NP与一个可学习的标记后缀结合起来,设计了一个可学习的异常提示符(LAP): \[\mathbf{s}^l=[\mathbf{P}_1][\mathbf{P}_2]\ldots[\mathbf{P}_{E_N}][obj.][\mathbf{A}_1]\ldots[\mathbf{A}_{E_A}]\] ​  其中,EA表示可学习的异常后缀的长度。应该注意的是,由相同的正常前缀或异常后缀连接的提示的参数是共享的。在训练过程中,NPs移动到接近正常的视觉特征,而map和lap则远离正常的视觉特征。快速学习的训练损失与CLIP训练损失一致如下: \[\mathcal{L}_{clip}=\mathbb{E}_{\mathbf{z}}\left[-log\frac{\exp(<\mathbf{z},\bar{\mathbf{w}}^n/\tau>)}{\exp<\mathbf{z},\bar{\mathbf{w}}^n/\tau>+\sum_{\mathbf{w}\in\mathcal{W}}\exp<\mathbf{z},\mathbf{w}/\tau>}\right]\] ​  其中,z表示正常的视觉特征,\(\mathbf{\overline{w}}^n=\frac{\sum_{i=1}^Ng(\mathbf{s}_i^n)}N\)是正常提示功能的原型,$={g()|} $是一个包含所有异常提示特征的集合。由于更多的负样本可以产生更好的对比学习效应[18],因此将每个异常提示特征与视觉特征进行比较。

​  备注。在单类异常检测中,传统的提示学习只能设计出可学习的正常提示,这不利于对比损失的影响。所提出的语义连接可以将正常提示的语义转换为具有共享参数的异常语义,从而使正常样本与语义转换(异常提示)形成对比。

显式异常边缘

​  由于训练中缺乏异常视觉样本,MAPs和LAPs只能将正常视觉特征作为负样本进行对比,并且在正常和异常提示之间缺乏明确的边缘。因此,我们提出了用于ADprompt学习的显式异常边缘(EAM),它可以控制正常提示特征与异常提示特征之间的边缘。EAM实际上是一种通过边际超参数实现的正则化损失,其定义为: \[\mathcal{L}_{ema}=\mathbb{E}_{\mathbf{z}}\left[\max\left(0,d(\frac{\mathbf{z}}{\|\mathbf{z}\|_2},\frac{\mathbf{\bar{w}}^n}{\|\mathbf{\bar{w}}^n\|_2})-d(\frac{\mathbf{z}}{\|\mathbf{z}\|_2},\frac{\mathbf{\bar{w}}^a}{\|\mathbf{\bar{w}}^a\|_2})\right)\right]\] ​  式中,d(·,·)为欧氏距离,\(\mathbf{\bar{w}}^a\)为所有异常提示特征的原型: \[\bar{\mathbf{w}}^a=\frac{\sum_{i=1}^{N\times M}g(\mathbf{s}_i^m)+\sum_{i=1}^{N\times L}g(\mathbf{s}_i^l)}{N\times M+N\times L}\] ​  在CLIP中,最终的特征都被投影到单位超球体上,因此\(\mathcal{L}_{ema}\)中的特征也被归一化,边缘固定为零。与对比损失(\(\mathcal{L}_{clip}\))相比,EMA损失保证了正常样本与异常原型之间的距离比正常样本与正常原型之间的距离更大,从而导致了正常样本与异常原型之间的明确区分。

​  此外,由于map包含足够的异常信息,而lap在没有任何语义指导的情况下被初始化,因此对齐它们有助于lap模拟map的分布。具体来说,我们用平方l2范数来对齐这两个分布的平均值: \[\mathcal{L}_{align}=\lambda\cdot\left\|\frac{\bar{\mathbf{w}}^m}{\|\bar{\mathbf{w}}^m\|_2}-\frac{\bar{\mathbf{w}}^l}{\|\bar{\mathbf{w}}^l\|_2}\right\|_2^2\] ​  其中,\(\mathbf{\bar{w}}^m\)\(\mathbf{\bar{w}}^l\)分别为map和lap的特征均值,λ为控制map和lap对齐程度的超参数。

异常检测

​  在测试阶段,使用\(\mathbf{\bar{w}}^n\)作为正常原型,使用\(\mathbf{\bar{w}}^a\)作为异常原型,完成快速引导的异常检测。图像级评分\(\mathbf{S}_t \in [0,1]\)和像素级评分地图\(\mathbf{M}_t \in [0,1]^{h\times w}\)通过以下公式得到: \[score=\frac{\exp<\mathbf{z}_t,\mathbf{\bar{w}}^n/\tau>}{\exp<\mathbf{z}_t,\mathbf{\bar{w}}^n/\tau>+\exp<\mathbf{z}_t,\mathbf{\bar{w}}^a/\tau>}\] ​  其中,zt是用于图像高度/像素级异常检测的全局/局部图像特征。

​  最后,将视觉引导的Mv和提示引导的Mt融合得到像素级异常评分图,融合Mv和St的最大值得到图像海拔异常评分: \[\mathbf{M}_{pix}=1.0/(1.0/\mathbf{M}_v+1.0/\mathbf{M}_t),\\\mathbf{S}_{img}=1.0/(1.0/\max_{ij}\mathbf{M}_v+1.0/\mathbf{S}_t),\] ​  其中,我们使用的融合方法是调和平均值,它对较小的值[21]更敏感。

实验

​  我们在1、2和4-shot设置下完成了PromptAD和最新方法之间的比较实验,其中包括图像级和像素级的结果。此外,我们还比较了many-shot和 full-shot的方法,以显示PromptAD强大的少镜头性能。最后,我们进行了消融实验,以验证了所提出的SC和EAM对即时学习的改进,并展示了不同的CLIP转换方法[31,57]和超参数的影响。

数据集

​  在本文中,我们使用的基准测试是MVTec [4]和VisA [61]。这两个基准测试都包含多个子集,每个子集只有一个对象。MVTec包含15个对象,每张图像有700−900像素,而VisA包含12个对象,每张图像约为1.5K×1K像素。异常检测是一类任务,因此训练集只包含正常样本,而测试集包含正常样本和具有图像级和像素级注释的异常样本。此外,还对每个对象中出现的异常类别进行了注释。

评估指标

​  我们遵循文献[4],报告了用于图像级和像素级异常检测的接收机操作特征下面积(AUROC)。

实施细节

​  除了超参数τ外,我们还使用了CLIP的OpenCLIP [20]实现及其预训练参数,以及超参数τ的默认值。参考WinCLIP [21],我们使用了基于LAION-400M [43]的CLIP和ViT-B/16+。