AnomalyGPT: Detecting Industrial Anomalies Using Large Vision-Language Models翻译

大型视觉-语言模型(LVLMs),如MiniGPT-4和LLaVA,已经展示了理解图像的能力,并在各种视觉任务中取得了显著的表现。尽管它们由于广泛的训练数据集而在识别常见物体方面拥有强大的能力,但它们缺乏特定领域的知识,并且对物体内部的局部细节理解较弱,这限制了它们在工业异常检测(IAD)任务中的有效性。另一方面,大多数现有的IAD方法只提供异常分数,并需要手动设置阈值来区分正常和异常样本,这限制了它们的实际实施。在本文中,我们探讨了利用LVLM解决IAD问题,并提出了AnomalyGPT,一种基于LVLM的新型IAD方法。我们通过模拟异常图像并为每个图像生成相应的文本描述来生成训练数据。我们还使用图像解码器提供细粒度的语义,并设计了一个提示学习器,使用提示嵌入来微调LVLM。我们的AnomalyGPT消除了手动阈值调整的需要,因此可以直接评估异常的存在和位置。此外,AnomalyGPT支持多轮对话,并展示了令人印象深刻的少样本上下文学习能力。仅用一张正常图像,AnomalyGPT就实现了最先进的性能,准确率达到86.1%,图像级AUC为94.1%,像素级AUC为95.3%,在MVTec-AD数据集上。代码可在https://github.com/CASIA-IVA-Lab/AnomalyGPT上获得。

大型语言模型(LLMs),如GPT-3.5[19]和LLaMA[26],在一系列自然语言处理(NLP)任务上展示了卓越的性能。最近,包括MiniGPT-4[36]、BLIP-2[15]和PandaGPT[25]在内的新方法进一步扩展了LLMs在视觉处理方面的能力,通过将视觉特征与文本特征对齐,为人工通用智能(AGI)领域带来了重大革命。虽然LVLMs是在来自互联网的大量数据上预训练的,但它们在特定领域的知识相对有限,并且对物体内部的局部细节缺乏敏感性,这限制了它们在工业异常检测(IAD)任务中的潜力。

工业异常检测(IAD)任务的目标是在工业产品图像中检测和定位异常。由于现实世界样本的稀有性和不可预测性,模型需要仅在正常样本上进行训练,并区分偏离正常样本的异常样本。当前的IAD方法[10, 11, 32]通常只为测试样本提供异常分数,并要求手动指定阈值,以区分每个类别物品的正常和异常实例,这不适合实际生产环境。

如图1和表1所示,现有的IAD方法和LVLMs都不能很好地解决IAD问题,因此我们引入了AnomalyGPT,这是一款基于LVLM的新型IAD方法。AnomalyGPT能够在不需要手动设置阈值的情况下检测异常的存在和位置。此外,我们的方法可以提供有关图像的信息,并允许交互式参与,使用户可以根据他们的需求和提供的答案提出后续问题。AnomalyGPT还可以通过少量正常样本进行上下文学习,实现对之前未见物体的快速适应。

图1. 我们的AnomalyGPT与现有的IAD方法和LVLMs之间的比较。现有的IAD方法只能提供异常分数并且需要手动设置阈值,而现有的LVLMs无法在图像中检测到异常。AnomalyGPT不仅能提供有关图像的信息,还能指示异常的存在和位置。

表1. 我们的AnomalyGPT与现有方法在不同功能上的比较。表中的“传统IAD方法”指的是“一类一模型”的方法,如PatchCore[23]、InTra[21]和PyramidFlow[13]。“少样本IAD方法”指的是可以进行少样本学习的方法,如RegAD[10]、Graphcore[29]和WinCLIP[27]。“LVLMs”代表一般的大型视觉-语言模型,如MiniGPT-4[36]、LLaVA[17]和PandaGPT[25]。表中的“异常分数”代表仅为异常检测提供分数,而“异常判断”表示直接评估异常的存在。

具体来说,我们专注于使用合成的异常视觉-文本数据对LVLM进行微调,将IAD知识整合到模型中。然而,直接使用IAD数据进行训练存在许多挑战。首先是数据稀缺性。像LLaVA[17]和PandaGPT[25]这样的方法在160k张图像上进行了预训练,这些图像具有相应的多轮对话。然而,现有的IAD数据集[1, 37]只包含几千个样本,这使得直接微调容易过拟合和灾难性遗忘。为了解决这个问题,我们使用提示嵌入而不是参数微调来微调LVLM。在图像输入后添加额外的提示嵌入,将补充的IAD知识引入LVLM。第二个挑战与细粒度的语义有关。我们提出了一个轻量级的视觉-文本特征匹配解码器,用于生成像素级的异常定位结果。解码器的输出通过提示嵌入与原始测试图像一起引入LVLM,这允许LVLM同时使用原始图像和解码器的输出进行异常判断,提高了其判断的准确性。

实验上,我们在MVTec-AD[1]和VisA[37]数据集上进行了广泛的实验。在MVTec-AD数据集上进行无监督训练后,我们达到了93.3%的准确率,图像级AUC为97.4%,像素级AUC为93.1%。当一次性迁移到VisA数据集时,我们达到了77.4%的准确率,图像级AUC为87.4%,像素级AUC为96.2%。相反,在VisA数据集上进行无监督训练后,一次性迁移到MVTec-AD数据集的结果显示,准确率为86.1%,图像级AUC为94.1%,像素级AUC为95.3%。
我们的贡献总结如下:
• 我们首次提出使用LVLM来解决IAD任务。我们的方法不仅能够在不需要手动调整阈值的情况下检测和定位异常,而且还支持多轮对话。据我们所知,我们是第一个成功将LVLM应用于工业异常检测领域的。
• 我们工作中的轻量级视觉-文本特征匹配解码器解决了LLM对细粒度语义识别能力较弱的限制,并缓解了LLM仅限于生成文本输出的能力限制。
• 我们使用提示嵌入进行微调,并与LVLM预训练期间使用的数据同时训练我们的模型,从而保留了LVLM的固有能力,并实现了多轮对话。
• 我们的方法保持了强大的迁移能力,并能够在新数据集上进行上下文少样本学习,表现出色。

工业异常检测:现有的IAD方法可以分为基于重建和基于特征嵌入的方法。基于重建的方法主要目标是将异常样本重建为其对应的正常样本,并通过计算重建误差来检测异常。RIAD[33]、SCADN[30]、InTra[21]和AnoDDPM[28]采用了不同的重建网络架构,从自动编码器和生成对抗网络(GAN)到Transformer和扩散模型。

基于特征嵌入的方法专注于对正常样本的特征嵌入进行建模。例如,PatchSVDD[31]旨在找到一个紧密包含正常样本的超球面。Cflow-AD[9]和PyramidFlow[13]使用归一化流将正常样本投影到高斯分布上。PatchCore[23]和CFA[12]从正常样本建立一个补丁嵌入的记忆库,并通过测量测试样本嵌入与其在记忆库中最近正常嵌入之间的距离来检测异常。

这些方法通常遵循“一类一模型”的学习范式,需要为每个物体类别提供大量正常样本以学习其分布,这使得它们对于新物体类别不切实际,也不太适合动态生产环境。相比之下,我们的方法促进了新物体类别的上下文学习,仅使用少量正常样本即可进行推断。

零样本/少样本工业异常检测:最近的研究努力集中在使用最少的正常样本来完成IAD任务。PatchCore[23]仅使用少量正常样本构建记忆库,导致性能显著下降。RegAD[10]训练了一个图像配准网络,将测试图像与正常样本对齐,然后计算相应补丁的相似性。WinCLIP[11]利用CLIP[22]计算图像与代表正常和异常语义的文本描述之间的相似性,根据它们的相对分数区分异常。然而,这些方法只能在推理期间为测试样本提供异常分数。为了区分正常样本和异常样本,需要在测试集上实验确定最佳阈值,这与IAD任务的初衷相悖,即只使用正常数据。例如,尽管PatchCore[23]在无监督设置下在MVTec-AD上实现了99.3%的图像级AUC,但当使用统一阈值进行推理时,其准确率下降到79.76%。详细的实验结果和分析可以在附录A中找到。相比之下,我们的方法使LVLM能够直接评估测试样本是否存在异常,并确定它们的位置,展示了增强的实用性。

大型视觉-语言模型:传统上在NLP领域取得成功的LLMs,现在也在视觉任务中进行了探索。BLIP2[15]利用Q-Former将视觉特征从Vision Transformer[7]输入到Flan-T5[4]模型中。MiniGPT4[36]通过线性层将BLIP-2的图像部分和Vicuna[3]模型连接起来,使用大量的图像-文本数据进行两阶段微调过程。PandaGPT[25]通过线性层在ImageBind[8]和Vicuna[3]模型之间建立连接,允许多模态输入。这些方法展示了基于LLM的多才多艺模型的潜力。

然而,正如前面提到的,这些模型是在通用数据上训练的,缺乏特定领域的专业知识。在本文中,通过使用模拟的异常数据、图像解码器和提示嵌入,引入了AnomalyGPT作为一种新的方法,它在不需要手动指定阈值的情况下实现IAD任务,同时也支持少样本上下文学习。表1展示了AnomalyGPT与现有方法在不同功能上的比较。

AnomalyGPT 是一种新型的对话式工业异常检测视觉-语言模型,主要设计用于检测工业制品图像中的异常并确定它们的位置。我们利用预训练的图像编码器和大型语言模型(LLM),通过模拟异常数据对齐IAD图像及其相应的文本描述。我们引入了一个解码器模块和一个提示学习器模块来增强IAD性能,并实现像素级定位输出。采用提示调整和与预训练数据交替训练的方法,保留了LLM的迁移能力,并防止了灾难性遗忘。我们的方法表现出强大的少样本迁移能力,仅提供一件正常样本,就能对之前未见的物品进行异常检测和定位。

图2展示了AnomalyGPT的全面架构。给定一个查询图像 ( x \in \mathbb{R}^{H \times W \times C} ),图像编码器提取的最终特征 ( F_{\text{img}} \in \mathbb{R}^{C_1} ) 通过线性层传递,以获得图像嵌入 ( E_{\text{img}} \in \mathbb{R}^{C_{\text{emb}}} ),然后输入到大型语言模型(LLM)。在无监督设置中,图像编码器中间层提取的补丁级特征与文本特征一起输入到解码器,以生成像素级异常定位结果。在少样本设置中,正常样本的补丁级特征存储在记忆库中,通过计算查询补丁与记忆库中最相似对象之间的距离,可以获得定位结果。定位结果随后通过提示学习器转换为提示嵌入,作为LLM输入的一部分。LLM利用图像输入、提示嵌入和用户提供的文本输入来检测异常并确定它们的位置,从而为用户生成响应。

图2. AnomalyGPT的架构。查询图像被传递给冻结的图像编码器,从中间层提取的补丁级特征被送入图像解码器,以计算它们与正常和异常文本的相似性,以获得定位结果。图像编码器提取的最终特征被送入线性层,然后与定位结果一起传递给提示学习器。提示学习器将它们转换为适合作为LLM输入的提示嵌入,与用户文本输入一起。在少样本设置中,正常样本的补丁级特征存储在记忆库中,可以通过计算查询补丁与记忆库中最相似的对应物之间的距离来获得定位结果。

为了实现像素级异常定位,我们采用了一个轻量级基于特征匹配的图像解码器,它支持无监督IAD和少样本IAD。解码器的设计主要受到PatchCore[23]、WinCLIP[11]和APRIL-GAN[2]的启发。

正如图2的上半部分所示,我们将图像编码器划分为4个阶段,并获取每个阶段提取的中间补丁级特征 ( F_{i\text{patch}} \in \mathbb{R}^{H_i \times W_i \times C_i} ),其中 i 表示第 i 阶段。按照 WinCLIP[11] 的思路,一种自然的方法是计算 ( F_{i\text{patch}} ) 和分别代表正常和异常的文本特征 ( F_{\text{text}} \in \mathbb{R}^{2 \times C_{\text{text}}} ) 之间的相似性。附录B中展示了代表正常和异常情况的详细文本。然而,由于这些中间特征尚未经过最终的图像-文本对齐,它们不能直接与文本特征进行比较。为解决这个问题,我们引入了额外的线性层,将这些中间特征投影到 ( \tilde{F}{i\text{patch}} \in \mathbb{R}^{H_i \times W_i \times C{\text{text}}} ),并与代表正常和异常语义的文本特征对齐。可以通过公式(1)获得定位结果 ( M \in \mathbb{R}^{H \times W} ):
[ M = \text{Upsample} \left( \sum_{i=1}^{4} \text{softmax}\left( \tilde{F}{i\text{patch}} F{\text{text}}^T \right) \right) ]
. (1)

在少样本工业异常检测(IAD)中,如图2的下半部分所示,我们使用相同的图像编码器从正常样本中提取中间补丁级特征,并将它们存储在记忆库 ( B_i \in \mathbb{R}^{N \times C_i} ) 中,其中 i 表示第 i 阶段。对于补丁级特征 ( F_{i\text{patch}} \in \mathbb{R}^{H_i \times W_i \times C_i} ),我们计算每个补丁与记忆库中最相似对象之间的距离,并通过公式(2)获得定位结果 ( M \in \mathbb{R}^{H \times W} ):
[ M = \text{Upsample} \left( \sum_{i=1}^{4} \left( 1 - \max(F_{i\text{patch}} \cdot B_i^T) \right) \right) ]
. (2)

提示学习器:为了利用图像中的细粒度语义,并保持大型语言模型(LLM)和解码器输出之间的语义一致性,我们引入了一个提示学习器,它将定位结果转换为提示嵌入。此外,与解码器输出无关的可学习的基提示嵌入被纳入提示学习器,以为IAD任务提供额外信息。最后,这些嵌入连同原始图像信息一起输入到LLM中。

如图2所示,提示学习器由可学习的基提示嵌入 ( E_{\text{base}} \in \mathbb{R}^{n_1 \times C_{\text{emb}}} ) 和一个卷积神经网络组成。该网络将定位结果 ( M \in \mathbb{R}^{H \times W} ) 转换为 ( n_2 ) 个提示嵌入 ( E_{\text{dec}} \in \mathbb{R}^{n_2 \times C_{\text{emb}}} )。( E_{\text{base}} ) 和 ( E_{\text{dec}} ) 形成一组 ( n_1 + n_2 ) 个提示嵌入 ( E_{\text{prompt}} \in \mathbb{R}^{(n_1+n_2) \times C_{\text{emb}}} ),它们与图像嵌入结合后输入到大型语言模型(LLM)中。

异常模拟:我们主要采用NSA[24]提出的方法来模拟异常数据。NSA[24]方法在Cut-paste[14]技术的基础上,结合了泊松图像编辑[20]方法,以减轻通过粘贴图像片段引入的不连续性。Cut-paste[14]是IAD领域中用于生成模拟异常图像的常用技术。该方法涉及从图像中随机裁剪一个区域块,然后将其粘贴到另一图像的随机位置,从而创建模拟的异常部分。模拟异常样本可以显著提高IAD模型的性能,但这个过程通常会导致明显的不连续性,如图3所示。泊松编辑方法[20]已经被开发出来,通过求解泊松偏微分方程,将一个图像中的对象无缝克隆到另一个图像中。

图3. 展示了切割粘贴和泊松图像编辑之间的比较。切割粘贴的结果表现出明显的不连续性,而泊松图像编辑的结果是更加自然的。

为了对LVLM进行提示调整,我们根据模拟的异常图像生成相应的文本查询。具体来说,每个查询由两部分组成。第一部分涉及对输入图像的描述,提供图像中存在的对象及其预期属性的信息,例如“这是一张皮革的照片,应该是棕色的,没有任何损伤、瑕疵、缺陷、划痕、孔洞或破损部分”。第二部分查询图像中是否存在异常,即“图像中是否有任何异常?”LVLM首先回应是否存在异常。如果检测到异常,模型继续指定异常区域的数量和位置,例如“是的,图像中有异常,在图像的左下角。”或者“不,图像中没有异常。”我们将图像划分为3×3的网格区域,以便于LVLM用语言指示异常的位置,如图4所示。关于图像的描述内容为LVLM提供了输入图像的基础知识,帮助模型更好地理解图像内容。然而,在实际应用中,用户可以选择省略这些描述性输入,模型仍能够仅基于提供的图像输入执行IAD任务。每个类别的详细描述见附录C。

为了训练解码器和提示学习器,我们主要使用了三种损失函数:交叉熵损失、焦点损失[16]和骰子损失[18]。后两者主要用于提高解码器的像素级定位精度。

交叉熵损失是通常用于训练语言模型的损失函数,它量化了模型生成的文本序列与目标文本序列之间的差异。公式如下:
[ L_{\text{ce}} = -\sum_{i=1}^{n} y_i \log(p_i), ]
其中 n 是 token 的数量,( y_i ) 是 token i 的真实标签,( p_i ) 是 token i 的预测概率。

焦点损失[16]通常用于目标检测和语义分割,以解决类别不平衡问题,它引入了一个可调节参数 γ 来修改交叉熵损失的权重分布,强调难以分类的样本。在IAD任务中,异常图像中的大多数区域仍然是正常的,使用焦点损失可以减轻类别不平衡问题。焦点损失可以通过公式(4)计算:
[ L_{\text{focal}} = -\frac{1}{n} \sum_{i=1}^{n} (1 - p_i)^\gamma \log(p_i), ]
其中 n = H × W 表示像素总数,( p_i ) 是正类的预测概率,γ 是一个可调节的参数,用于调整难以分类样本的权重。在我们的实现中,我们将 γ 设置为 2。

Dice损失[18]是语义分割任务中常用的损失函数。它基于Dice系数,可以通过公式(5)计算:
[ L_{\text{dice}} = -\frac{\sum_{i=1}^{n} (2 \cdot y_i \cdot \hat{y}i)}{\sum{i=1}^{n} y_i^2 + \sum_{i=1}^{n} \hat{y}_i^2}, ]
其中 n = H × W,( y_i ) 是解码器的输出,( \hat{y}_i ) 是真实值。

最后,总体损失函数定义为:
[ L = \alpha L_{\text{ce}} + \beta L_{\text{focal}} + \delta L_{\text{dice}}, ]
其中 α、β、δ 是平衡三种损失函数的系数,在实验中默认设置为1。

我们主要在MVTec-AD[1]和VisA[37]数据集上进行实验。MVTec-AD数据集包含3629张训练图像和1725张测试图像,涵盖15个不同类别,是IAD最受欢迎的数据集之一。训练图像仅包含正常图像,而测试图像包含正常和异常图像。图像分辨率从700×700到1024×1024不等。VisA是一个新引入的IAD数据集,包含9621张正常图像和1200张异常图像,涵盖12个类别,分辨率大约在1500×1000左右。与之前的IAD方法一致,我们仅使用这些数据集中的正常数据进行训练。

评估指标:遵循现有的IAD方法,我们采用接收者操作特征曲线下面积(AUC)作为我们的评估指标,分别使用图像级和像素级AUC来评估异常检测和异常定位的性能。然而,我们提出的方法独特之处在于,它允许在不需要手动设置阈值的情况下确定异常的存在。因此,我们还使用图像级准确率来评估我们方法的性能。

我们使用ImageBind-Huge[8]作为图像编码器,Vicuna-7B[3]作为推理大型语言模型(LLM),并通过线性层连接。我们使用PandaGPT[25]的预训练参数初始化我们的模型。我们将图像分辨率设置为224×224,并将ImageBind-Huge的图像编码器的第8层、第16层、第24层和第32层的输出输入到图像解码器。训练在两个RTX-3090 GPU上进行,共50个周期,学习率为1e-3,批量大小为16。应用线性预热和单周期余弦学习率衰减策略。我们使用PandaGPT[25]的预训练数据和我们的异常图像-文本数据进行交替训练。只有解码器和提示学习器进行参数更新,其余参数都保持冻结。

我们的方法与先前的少样本工业异常检测方法进行了比较,选择了SPADE[5]、PaDiM[6]、PatchCore[23]和WinCLIP[11]作为基线。结果展示在表2中。在两个数据集上,我们的方法在图像级AUC方面显著优于以前的方法,并实现了有竞争力的像素级AUC和良好的准确率。

在大量正常样本的无监督训练设置中,由于我们的方法在一个数据集中的所有类别样本上训练单一模型,我们选择了在相同设置下训练的UniAD[32]作为比较的基线。此外,我们还使用相同的统一设置将我们的模型与PaDiM[6]和JNLD[34]进行比较。在MVTec-AD数据集上的结果展示在表3中。

图5展示了我们的AnomalyGPT在无监督异常检测中的性能,图6展示了在1次上下文学习中的测试结果。我们的模型能够指示异常的存在,确定它们的位置,并提供像素级定位结果。用户可以参与与图像内容相关的多轮对话。在1次上下文学习设置中,由于缺乏训练,模型的定位性能略低于无监督设置。更多的定性示例可以在附录D中找到。

为了证明每个提出的模块的有效性,在MVTec-AD和VisA数据集上进行了广泛的消融实验。我们主要关注四个方面:解码器、提示学习器、使用大型语言模型(LLM)进行推理,以及使用LoRA对LLM进行微调。主要结果展示在表4中。在MVTec-AD数据集上进行无监督训练和测试,而在VisA数据集上评估一次性性能。可以观察到,解码器展现出令人印象深刻的像素级异常定位性能。与手动设置的阈值相比,LLM表现出更优越的推理准确率并提供额外的功能。此外,提示调整在准确性和迁移能力方面优于LoRA。

我们介绍了AnomalyGPT,这是一种新型的对话式工业异常检测视觉-语言模型,利用了大型视觉-语言模型(LVLM)的强大能力。AnomalyGPT能够判断图像是否包含异常,并确定它们的位置,而无需手动指定阈值。此外,AnomalyGPT支持以异常检测为重点的多轮对话,并在少样本上下文学习中展现出卓越的性能。AnomalyGPT的有效性在两个常用数据集上得到了验证。我们的工作深入探讨了大型视觉语言模型在异常检测中的潜在应用,为工业异常检测领域提供了新的思路和可能性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值