CVPR2023:SimpleNet:一个简单的图像异常检测和定位网络

发布时间 2023-09-22 09:34:32作者: 水木清扬

图片

论文题目:

SimpleNet: A Simple Network for Image Anomaly Detection and Localization

摘要

我们提出了一个简单且应用友好的网络(称为SimpleNet)来检测和定位异常。SimpleNet由四个部分组成:(1)生成局部特征的预训练特征提取器,(2)将局部特征转移到目标域的浅特征适配器,(3)通过向正常特征添加高斯噪声来伪造异常特征的简单异常特征生成器,以及(4)区分异常特征和正常特征的二进制异常鉴别器。在推理过程中,异常特征生成器将被丢弃。我们的方法基于三个直觉。首先,将预训练的特征转换为面向目标的特征有助于避免域偏差。其次,在特征空间中生成合成异常更为有效,因为缺陷在图像空间中可能没有太多的共性。第三,简单的鉴别器效率高、实用。尽管简单,SimpleNet在定量和定性上都优于以前的方法。在MVTec AD基准测试中,SimpleNet实现了99.6%的异常检测AUROC,与表现第二好的模型相比,将误差降低了55.5%。此外,SimpleNet比现有方法更快,在3080ti GPU上具有77 FPS的高帧率。此外,SimpleNet在单类新颖性检测任务上表现出了显著的性能改进。

代码:https://github.com/DonaldRR/SimpleNet

1. 介绍

图像异常检测与定位任务的目的是识别异常图像,定位异常子区域,检测各种感兴趣的异常的技术在工业检测中有广泛的应用。在工业场景中,异常检测和定位尤其困难,因为异常样本很少,异常可以从细微的变化(如薄划痕)到大的结构缺陷(如缺件)不等。图1显示了来自MVTec AD基准测试的一些示例以及我们提出的方法的结果。这种情况下禁止被监督的方法接近。

图片

目前的方法以无监督的方式解决这个问题,在训练过程中只使用正常样本。基于重建的方法、基于综合的方法和基于嵌入的方法是解决这一问题的三个主要趋势。基于重建的方法,假设仅使用正常数据训练的深度网络无法准确重建异常区域。将像素级重构误差作为异常分值进行异常定位。然而,这一假设可能并不总是成立,有时网络可以很好地“泛化”,以至于它也可以很好地重建异常输入,从而导致误检。基于合成的方法通过训练在无异常图像上生成的合成异常来估计正常和异常之间的决策边界,但是,合成的图像不够真实。来自合成数据的特征可能偏离正常特征很远,使用这种负样本进行训练可能导致正态特征空间的边界松散,这意味着分布中特征空间可能包含不明显的缺陷。

最近,基于嵌入的方法达到了最先进的性能,这些方法使用ImageNet预训练卷积神经网络(CNN)提取广义正态特征。然后采用多元高斯分布、归一化流、记忆库等统计算法嵌入正态特征分布。通过将输入特征与学习分布或记忆特征进行比较来检测异常。然而,工业图像通常具有与ImageNet不同的分布,直接使用这些有偏差的特征可能会导致不匹配问题。此外,统计算法往往存在计算复杂度高、内存消耗大的问题。

为了缓解上述问题,我们提出了一种新的异常检测和定位网络,称为SimpleNet。SimpleNet利用了基于合成和基于嵌入的方式,并做了一些改进。首先,我们建议使用特征适配器来产生面向目标的特征,而不是直接使用预训练的特征来减少域偏差。其次,我们提出在特征空间中对正常特征施加噪声来生成异常特征,而不是直接在图像上合成异常特征。我们认为,通过适当校准噪声的尺度,可以获得紧密有界的正态特征空间。第三,我们通过训练一个简单的鉴别器来简化异常检测过程,该鉴别器比上述基于嵌入的方法采用的复杂统计算法计算效率高得多。具体来说,SimpleNet使用预训练的主干进行常规特征提取,然后使用特征适配器将特征转移到目标域。然后,通过在适应的正态特征上加入高斯噪声,简单地生成异常特征,在这些特征上训练一个由几层MLP组成的简单判别器来判别异常。

SimpleNet易于训练和应用,具有出色的性能和推理速度。所提出的SimpleNet基于广泛使用的WideResnet50主干,在MVTec AD上实现了99.6%的AUROC,运行速度为77 fps,在准确性和效率方面都超过了之前发布的最佳异常检测方法,见图2。我们进一步将SimpleNet引入到OneClass新颖性检测任务中,以显示其通用性。这些优点使得SimpleNet在学术研究和工业应用之间架起了一座桥梁。

 

图片

2. 相关工作

异常检测与定位方法主要分为三类,即基于重构的方法、基于综合的方法和基于嵌入的方法。

基于重建的方法认为异常图像区域不应该能够被正确重建,因为它们不存在于训练样本中。一些方法利用自动编码器和生成对抗网络等生成模型对正常数据进行编码和重构。其他方法将帧异常检测作为一个图像修补问题,其中来自图像的补丁被随机屏蔽。然后,利用神经网络对擦除信息进行预测。积分结构相似指数(SSIM)损失函数在训练中被广泛使用。作为输入图像与其重建图像之间逐像素的差异,生成异常图。然而,如果异常与正常训练数据具有共同的组成模式(例如局部边缘),或者解码器“太强”而无法很好地解码某些异常编码,则可能很好地重构图像中的异常。

基于合成的方法通常是在无异常图像上合成异常。DRÆM提出了一种以端到端方式对综合生成的刚出分布模式进行判别性训练的网络。CutPaste提出了一种生成用于异常检测的综合异常的简单策略,即剪切图像补丁并在大图像的随机位置粘贴。训练CNN从正态分布和增强数据分布中区分图像。然而,合成异常的外观与实际异常并不吻合。在实践中,由于缺陷是多种多样且不可预测的,因此生成包含所有异常值的异常集是不可能的。而不是合成图像上的异常,与提出的SimpleNet,负样本在特征空间中合成。

基于嵌入的方法最近达到了最先进的性能。这些方法将常规特征嵌入到压缩空间中。在嵌入空间中,异常特征与正常聚类相距甚远。典型的方法利用在ImageNet上预训练的网络进行特征提取。PaDiM使用预训练模型,通过多元高斯分布嵌入提取的异常斑块特征。PatchCore使用最大限度地代表标称补丁特征的内存库,测试中采用马氏距离或最大特征距离对输入特征进行评分。然而,工业图像通常具有与ImageNet不同的分布,直接使用预训练的特征可能会导致不匹配问题。此外,计算协方差逆或在内存库中搜索最近邻居都会限制实时性能,特别是对于边缘设备。

CS-Flow、CFLOW-AD和DifferNet提出通过归一化流(normalizing flow, NF)将正态特征分布转化为高斯分布。由于归一化流只能处理全尺寸的特征映射,即不允许下采样,并且耦合层消耗的内存是普通卷积层的几倍,因此这些方法都是消耗内存的。蒸馏方法训练一个学生网络,以匹配固定的预训练教师网络的输出,只有正常样本。给定一个异常查询,应该检测到学生和教师输出之间的差异,由于输入图像要同时经过教师和学生,因此计算复杂度增加了一倍。

SimpleNet克服了上述问题,SimpleNet使用特征适配器在目标数据集上执行迁移学习,以减轻预训练cnn的偏差。SimpleNet提出在特征空间中合成畸变,而不是直接在图像上合成畸变。SimpleNet在推理时遵循单流方式,完全由传统的CNN块构建,便于快速训练,推理和工业应用。

3.方法

本节将详细介绍拟议的SimpleNet,如图3所示,SimpleNet由一个特征提取器、一个特征适配器、一个异常特征生成器和一个鉴别器组成。异常特征生成器仅在训练期间使用,因此SimpleNet在推理时遵循单一流方式。下面将依次描述这些模块。

图片

3.1. 特征提取器

Feature Extractor获取局部特征,我们将流程重新表述如下。我们将训练集和测试集分别表示为Xtrain和Xtest。对于Xtrain ∪ Xtest中的任何图像xi∈RH×W ×3,预训练的网络ϕ从不同的层次中提取特征,就像通常使用类似resnet的主干一样。由于预训练网络偏向于它被训练的数据集,因此只选择目标数据集的一个子集是合理的。形式上,我们将L定义为包含层次结构索引的子集。级别l∈l的特征映射记为:ϕl,i ~ ϕl(xi)∈RHl×Wl×Cl,其中Hl, Wl, Cl分别为特征映射的高度,宽度和通道大小。对于位置(h, w)上的入口项ϕl,i h,w∈RCl,其patchsize为p的邻域定义为

图片

用聚合函数fagg(这里使用自适应平均池化)对邻域N h,wp内的特征进行聚合,得到局部特征zl,i h,w, as

图片

为了组合来自不同层次的特征zl,i h,w,所有的特征映射被线性调整为相同的大小(H0, W0),即最大的一个的大小。简单地按通道连接特征映射,得到特征映射oi∈RH0×H0×C。流程定义为

图片

我们定义oih,w∈RC为oi在位置(h, w)的入口。我们把上面的表达式化简为

图片

其中fφ为特征提取器。

3.2. 功能适配器

由于工业图像通常与骨干预训练中使用的数据集分布不同,我们采用Feature Adaptor Gθ将训练特征转移到目标域,特征适配器Gθ将局部特征oh,w投影到适应特征qh,w上

图片

特征适配器可以由简单的神经块组成,如全连接层或多层感知器(MLP)。我们通过实验发现,单层全连接产生了良好的性能。

3.3. 异常特征发生器

为了训练鉴别器来估计样本的正态似然,最简单的方法是抽取负样本,即缺陷特征,并与正态样本一起优化。由于缺乏缺陷,使得抽样分布估计很难估计。其他方法依靠额外的数据来合成缺陷图像,我们在特征空间的正常样本上添加简单的噪声,声称它优于那些被操纵的方法。

反常特征是在正常特征qih,w∈RC上加入高斯噪声生成的。形式上,对噪声向量λ∈RC进行采样,每个条目遵循一个i.i.d高斯分布N(µ,σ2)。反常特征qi−h,w被融合为

图片

图4显示了异常特征对四类MVTec AD的影响,我们可以看到,适应特征的每个维度的标准差趋于一致,因此,在区分异常特征和正常特征时,特征空间趋于紧凑。

图片

3.4. 鉴别器

Discriminator Dψ作为一个正态性评分器,直接估计每个位置(h, w)的正态性。由于负样本是与正态特征{qi|xi∈Xtrain}一起生成的,所以在训练时都被馈送到鉴别器。鉴别器期望正常特征的输出为正,而异常特征的输出为负。我们简单地使用2层多层感知器(MLP)结构作为普通分类器,估计正态性为Dψ(qh,w)∈R。

3.5. 损失函数与训练

一个简单的截短l1损失推导为

图片

Th +和Th -是防止过拟合的截断项,它们默认设置为0.5和-0.5,训练目标是

图片

在实验部分,我们将用广泛使用的交叉熵损失来实验评估所提出的截断l1损失函数。训练过程的伪代码如算法1所示。

图片

3.6. 推理和评分函数

异常特征生成器在推理时被丢弃。请注意,剩余模块可以堆叠到端到端网络中。我们将每个xi∈Xtest依次输入上述特征提取器fφ和特征适配器Gθ中,以获得自适应特征qih,w,如式5所示。异常评分由Discriminator提供

图片

在推理过程中用于异常定位的异常映射定义为

图片

然后用SAL(xi)插值得到输入样本的空间分辨率,用σ = 4的高斯滤波得到光滑边界。由于任何大小的异常区域都存在最响应点,因此取异常图的最大分值作为每张图像的异常检测分值

图片

4. 实验

4.1. 数据集

我们的大部分实验都是在MVTec异常检测基准上进行的,它是异常检测和定位领域的一个著名数据集。MVTec AD包含5个纹理和10个来自制造业的对象类别,共有5354张图像。该数据集由用于训练的正常图像和用于测试的带有不同类型缺陷的正常和异常图像组成。它还为有缺陷的测试图像提供像素级注释。典型的图像如图1所示,图像分别被调整大小和中心裁剪为256 × 256和224 × 224,没有应用数据增强。我们遵循单类分类协议,也称为冷启动异常检测,其中我们在其各自的正常训练样本上为每个类别训练一个单类分类器。

我们在CIFAR10上进行一类新颖性检测,CIFAR10包含50K张训练图像和10K张规模为32 × 32的测试图像,分为10个类别。在一类新颖性检测的设置下,一个类别作为正常数据,其他类别作为新颖性。

4.2. 评价指标

图像级异常检测性能是通过标准的接收算子曲线下面积(Area Under the Receiver Operator Curve)来测量的,我们将其表示为I-AUROC,使用生成的异常检测分数SAD(公式11)。对于异常定位,使用异常图SAL(式10)来评估逐像素AUROC(记为P-AUROC)。

根据先前的工作,我们在MVTec AD上计算类平均AUROC和平均AUROC总体类别,用于检测和定位。比较基线包括AE-SSIM、RIAD、DRÆM、CutPaste、CS-Flow、PaDiM、RevDist和PatchCore。

4.3. 实现细节

本节描述了本文实验的配置实现细节,实验中使用的所有骨干网均使用ImageNet进行预训练,当骨干网为ResNet-like架构时,用于特征提取器。默认情况下,我们的实现使用WideResnet50作为主干,并且来自特征提取器的特征维度设置为1536。后面的特性适配器本质上是一个完全连接的层,没有偏置,适配器中FC层的输入和输出特征的尺寸是相同的。异常特征生成器添加id。高斯噪声N (0, σ2),σ默认设置为0.015。随后的鉴别器由线性层、批量归一化层、relu(0.2斜率)和线性层组成。式7中,th+和th -均设为0.5。使用Adam优化器,将特征适配器和鉴别器的学习率分别设置为0.0001和0.0002,权重衰减为0.00001。每个数据集的训练epoch设置为160,batchsize为4。

4.4. MVTec AD异常检测

MVTec AD异常检测结果如表1所示。图像级异常分数由异常图的最大分数给出,如式11所示,SimpleNet在15个类别中有9个获得了最高分。对于纹理和物体,SimpleNet分别达到了I-AUROC的99.8%和99.5%的新SOTA。SimpleNet实现了更高的平均图像异常检测性能,即I-AUROC得分为99.6%。请注意,PatchCore(下一个最佳竞争对手,在相同的WideResnet50骨干网下)的误差从0.9%减少到SimpleNet的0.4%意味着误差减少55.5%。在工业检测设置中,这是一个相关的和显著的减少。

图片

4.5. MVTec AD异常定位

异常定位性能通过逐像素AUROC来衡量,我们将其记为P-AUROC。与最先进方法的比较见表1。SimpleNet在MVTec AD上实现了98.1% P-AUROC的最佳异常检测性能,而新的SOTA对目标的P-AUROC检测性能为98.4%,SimpleNet在15个类别中有4个获得了最高分。我们在图8中展示了异常定位的代表性样本。

图片

4.6. Inference time

除了检测和定位性能外,推理时间是工业模型部署中最重要的问题,与最新方法在推理时间上的比较如图2所示。所有方法都是在相同的硬件上测量的,包括Nvidia GeForce GTX 3080ti GPU和Intel(R) Xeon(R) CPU E5-2680 v3@2.5GHZ。结果表明,该方法在实现最佳性能的同时,也实现了最快的速度,SimpleNet比PatchCore快近8倍。

图片

4.7. 消融实验

邻域大小和等级 我们研究了方程1中邻域大小p的影响,图6中的结果显示了异常预测的局域性和全局上下文之间的明显优化,从而激励邻域大小p = 3。我们设计了一组实验来测试层次子集L对模型性能的影响,结果如表2所示。我们用1−3对前三个WideResNet50块进行索引。可以看到,来自层次结构级别3的功能已经可以实现最先进的性能,但可以从额外的层次结构级别2中获益,我们选择2 + 3作为默认设置。

图片

图片

适配器配置 适配器提供对预训练特征的转换(投影),我们的默认特性适配器是无偏置的单个FC层,具有相等的输入和输出通道。表3显示了不同特性适配器的比较,第一行“our”实现遵循与表1相同的配置。“our -complex- fa”将简单的特征适配器替换为非线性的(即非线性的1层mlp)。“our -w/o-FA”一行删除了功能适配器。结果表明,单FC层的性能最好,直观地,特征适配器找到一个投影,使得伪造的异常特征和投影的预训练特征很容易分离,这意味着判别器的简单解决方案。使用特性适配器有助于网络控制的现象也表明了这一点,我们观察到使用复杂的特性适配器会显著降低性能。一个可能的原因是,复杂的适配器可能导致过拟合,降低了对测试中各种缺陷的泛化能力。图4比较了特征适配器前后特征各维度标准差的直方图。我们可以看到,当使用异常特征进行训练时,适应的特征空间变得紧凑。

图片

噪声等级 异常特征发生器中的噪声尺度控制着合成的异常特征与正常特征的距离。具体来说,高σ导致异常特征与正常特征保持较高的欧氏距离。在一个大的σ上训练将导致一个宽松的决策界,导致高的假阴性。相反,当σ值很小时,训练过程会变得不稳定,并且鉴别器不能很好地泛化到正常特征上,图5详细说明了σ对MVTec AD中每个类的影响。可以看出,当σ = 0.015时达到平衡,性能最佳。

图片

损失函数 我们比较了提出的损失函数在第3.5节中使用了广泛使用的交叉熵损失(如表3中的“our - ce”行所示)。我们发现,与交叉熵损失相比,I-AUROC提高了0.2%,P-AUROC提高了0.3%。

对主干的依赖 我们用不同的主干测试SimpleNet,结果如表4所示。我们发现,选择不同的主干,结果大多是稳定的。WideResNet50的选择是为了与PaDiM和PatchCore进行比较。

图片

定性结果 图8显示了异常区域的异常定位结果,通过对每个子类的所有异常分数计算f1分数,得到分割结果的阈值。实验结果表明,该方法在较困难的情况下也能很好地定位异常区域。此外,我们可以发现该方法在对象类和纹理类中都具有一致的性能。

4.8. 一类新颖性检测

为了评估所提出的SimpleNet的通用性,我们在CIFAR-10上进行了一类新颖性检测实验。接下来,我们使用单个类别的样本训练模型,并检测来自其他类别的新样本。我们分别为每个类训练相应的模型。注意,新颖性分数被定义为相似性图中的最大分数。表5报告了我们的方法和其他方法的IAUROC评分。为了公平的比较,所有的方法都是在ImageNet上预训练的。基线包括VAE、LSA、DSVDD、OCGAN、HRN、AnoGAN、DAAD、MKD、DisAug CLR、IGD、RevDist。我们的方法优于这些比较方法。值得注意的是,IGD和DisAug CLR在自监督学习的推动下分别达到了91.25%和92.4%。

图片

5. 结论

本文提出了一种简单有效的无监督异常检测和定位方法—SimpleNet,SimpleNet由几个简单的神经网络模块组成,易于训练和应用于工业场景。虽然简单,但SimpleNet在MVtec AD基准测试中实现了最高的性能和最快的推理速度。SimpleNet为异常检测和定位的学术研究和工业应用之间的鸿沟提供了一个新的视角。