[AAAI2024]AnomalyGPT Detecting Industrial Anomalies Using Large Vision-Language Models

本篇论文将大语言模型应用在工业异常检测(Industrial Anomaly Detection,IAD)任务。

引言

IAD任务旨在检测和定位工业产品图像中的异常。由于现实世界样本的稀有性和不可预测性,要求模型仅在正常样本上进行训练,并实现对测试时异常样本的检测。

如图1,现有的IAD方法给出异常样本的概率,但需要手动设置阈值。大视觉语言模型(Large Vision-Language Models,LVLMs)能够过给出(有时不能给出)图片的描述,但不能实现异常检测。因此本篇文章将大语言模型应用在IAD任务中,提出AnomalyGPT模型(但实际上本文于GPT模型无关)。

相关工作

先用的IAD任务方法可分为两类

基于重建的方法 reconstruction-based

基于重建的目的是将异常样本重建为相应的正常样本,并通过计算重建误差来检测异常,使用的网络架构包括但不限于:自动编码器和,GAN,Transformer和扩散模型。

基于特征嵌入的方法 feature embedding-based

  • 例如PatchSVDD(Yi and Yoon 2020)的方法通过建立包裹正常样本的超球面(hypersphere)。
  • PyramidFlow(Lei et al. 2023)使用正则化流将正常样本投影到高斯分布上。
  • CFA(Lee, Lee, and Song 2022)建立正常样本patch的embedding,比较测试样本的embedding与正常样本的距离,实现异常检测。

然而,上述方法学习到的类是固定的,不能识别新的类,这在实际的生产环境中并不适用。

对于大模型的使用,作者考虑了两个问题

数据稀缺性

LLaVA(Liu et al. 2023)和PandaGPT(Su et al. 2023)等方法在 16 万张图像上进行了预训练,并配有相应的多轮对话。IAD 数据集仅包含几千个样本,因此直接微调很容易导致过度拟合和灾难性遗忘。

针对这点,作者在框架中加入了额外的可学习prompt embedding层,而不是直接微调参数模型。

细粒度语义

大语言模型对于具有判别性的细粒度语义学习不充分。

针对这点,作者引入了轻量级视觉-文本对齐解码器,去生成像素级别的异常定位。

方法

图像特征处理

作者考虑两种IAD任务设置:无监督和few-shot。中间公共的部分:输入样本xRW×H×C,被Image Encoder提取的C1维度的特征FimgRC1,经过线性层投影后的特征为 EimgRCemb

无监督设置下,输入图片没有标签,但会提供两条文本,例如:“A photo of a normal bottle. A photo of an abnormal capsule.” 两条文本经过预训练的Text Encoder后得到特征FtextRCtext

输入文本变化起的格式包含 state-level,对于normal/anomaly的文本分别为文本的格式如下:

normal anomaly
c:="[o]" c:="damaged [o]"
c:="flawless [o]" c:="broken [o]"
... ...

Token [o]可被替换为物体名,若物体名不可用,则使用“object”代替。完整 state-level的prompt template后填入 Template-level的文本,template-level的文本格式包括:

  • "a cropped photo of the [c]."
  • "a cropped photo of a [c]."
  • "a close-up photo of a [c]."
  • ...

经过文本编码器后的文本特征为FtextR2×Ctextx输入图像Encoder后,对于中间4层的特征表示为FpatchiRHi×Wi×Ci,再经过线性层投影得到F~patchiRHi×Wi×Ctext

然后将文本特征与图像特征做矩阵乘法并上采样得到Mask:M=Upsample(i=14softmax(F~patchiFtextT))

Few-shot设置下,每个类存在几个带标注的样本,图像Encoder中间4层,分别对应一个容量为N的memory bank:BiRN×Ci,然后把整个bank的特征拿来计算,求最大,并把4个结果相加上采样得到掩码mask:M=Upsample(i=14(1max(FpatchiBiT)))

两种设置下,掩码大小与输入图像一致MRH×W

可学习的prompt embedding层

为了利用图像中的细粒度语义并保持 LLM 和解码器输出之间的语义一致性,引入了一个提示学习器,将定位结果M转换为prompt embedding。prompt embedding层输出n1的向量:EbaseRn1×Cemb

掩码经过卷积、投影变为长度为n2的向量:MRH×WEdecRn2×Cemb。再concat向量得到:EpromptR(n1+n2)×Cemb

用户输入图片的文本描述

为了帮助大模型更好的理解图片内容,可以输入图片描述完善以下内容:
## Human: <img> Eimg </img> Eprompt [Image Description ] ls there any anomaly in the image? # Assistant:

每个类含若干个描述,例如:
Bottle:This is a photo of a bottle for anomaly detection, which should be round and without any damage, flaw, defect, scratch, hole or broken part.

然而,在实际生产中,文本描述也可以不提供。作者表示,仅提供Eimg,模型也能有较好的表现。

最后,对于大模型的输出大概是“Yes, there is an anomaly in the image, at the bottom left of the image. or No, there are no anomalies in the image.”

为了让模型更好的理解位置,图片被分为9格

损失函数

用交叉熵计算模型生成的文本序列与目标文本序列之间的损失(其中n是token的数量):

Lce=i=1nyilog(pi)

yi是第i个token真实标签,pi为第i个token的概率预测。

在IAD任务中,异常图像中的大多数区域仍然是正常的,采用Focal损失可以缓解类别不平衡的问题(其中n=H×W表示像素总数):

Lfocal=1ni=1n(1pi)γlog(pi),

并额外使用了Dice损失:

Ldice=i=1nyiy^ii=1nyi2+i=1ny^i2,

yi是图像decoder的输出,y^i的ground-truth。最后的损失函数表示为:

L=αLce+βLfocal+δLdice.

实验

数据集

  • MVTec-AD 包含 15 个不同类别的 3629 张训练图像和 1725 张测试图像。
  • VisA 包含 12 个类别的 9621 张正常图像和 1200 张异常图像。

与之前的IAD方法一致,仅使用这些数据集中的正常数据进行训练。为了模拟异常样本,作者使用poisson图像编辑,相较于裁剪-粘贴,对于边缘处理更平滑。

参考文献

  1. Gu, Zhaopeng, et al. "Anomalygpt: Detecting industrial anomalies using large vision-language models." Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 38. No. 3. 2024.
posted @   October-  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!
点击右上角即可分享
微信分享提示