鄢 宁,李岳阳,罗海驰
(1.江南大学 人工智能与计算机学院,江苏 无锡 214122;2.江南大学 物联网工程学院,江苏 无锡 214122)
异常检测主要是判断输入数据是否与训练数据“类似”,主要是针对少数、不可预测或不确定的罕见的事件。在现实世界中,由于异常种类繁多,出现的概率较低,且形式多种多样,因此难以收集到大量的、所有种类的异常样本。但是人们可以很容易地获取到大量的正常样本,这将导致正负样本的比例极其不均衡,另外手工标注工作也非常耗时。因此,无监督异常检测[1-3]的方法至关重要,在训练时,通过使用正常样本进行训练从而得到正常样本的数据分布;在推断时,具有与正常样本不同分布的数据样本被认为是异常样本。
在无监督异常检测方法中,基于重建的方法在训练过程中只需要正常样本,不需要额外的训练数据和预训练模型[4],因此被广泛应用。如基于自编码器[5-7]或生成对抗网络[8-10]的重建方法已经得到了广泛的研究,这种方法是基于正常样本比异常样本能够通过潜在特征空间更好地被重建这一假设[11-12],使重建网络在正常图像上进行训练后能够充分地学习到正常图像的特征,从而在测试时能够很好地重建正常图像。但是,对于异常图像来说,由于在训练阶段没有学习异常特征,因此在测试时其重建能力较差,需通过计算输入图像和重建图像之间的误差来进行异常检测。但是这一假设并不总是成立,由于卷积神经网络具有强大的泛化能力,有时异常特征也能够被重建出来,因此无法通过比较异常图像和其重建图像的差异性来判断是否存在异常。
为了解决上述问题,文献[13-15]通过在自编码器中增加记忆模块,并在训练阶段用于存储正常样本的典型模式,在测试阶段通过聚合内存中与输入相关的正常项来减少重建异常。但是,这种方式容易忽略图像细节,导致输出图像模糊,且原始的记忆模块[13]是以逐像素的方式进行存储和读取的,由于像素点的模式变化是有限的,异常像素点和正常像素点可能会具有相同的模式,那么异常像素点就很容易被重建,最终导致重建异常,因此该方法性能提升有限。
文献[16]提出记忆模块使用合适的块进行存储,异常块与正常块很可能会具有不同块模式,从而对异常块进行较差的重建。为了得到更好的检测结果,选择合适的块的尺寸就显得尤为重要。如果块的尺寸过大,那么模型重建的图像会丢失很多细节信息,从而导致重建模糊;如果块的尺寸过小,异常就会被重建,从而导致检测精度降低。此外,对于不同种类的数据集,由于其特点不同,合适的块的尺寸也不同。对于某个种类的数据集,其需要检测的异常的面积大小差距较大,对于面积较大的异常,如果选用较小尺寸的块存储和读取,则容易重建异常;对于面积较小的异常,如果选用较大尺寸的块存储和读取,则容易重建模糊。为此,需要进行大量的实验以得到合适块的尺寸。
基于上述问题,本文提出一种基于改进的块记忆模块的无监督异常检测方法。在原有的块记忆模块[16]中加入多个尺度的块记忆模块,各尺度块记忆模块通过读取、聚合得到多特征图融合的输出特征图,最大限度地保留不同尺度下样本的特征信息,以更好地重建数据,减少重建异常的情况。通过增加skip connection[17]结构,将编码器输出的多个尺度的特征图使用块金字塔记忆模块得到多个增强特征图,将skip connection 送入解码器进行重建,避免直接将异常特征送入解码器进行重建,以在提高重建图像的清晰度的同时减少重建异常的情况。最终采用SSIM[18]损失,通过亮度、对比度和结构3 个维度来增强图像重建效果,并且作为异常分数组成部分,增强原始图像和重建图像的差异性。
基于重建的方法通常使用自编码器[19-21]进行图像重建。自编码器由编码器和解码器组成,编码器将输入图像映射到低维特征空间,解码器试图从低维特征空间中恢复数据,获得重建图像。文献[8,22]引入对抗学习判别器,使用对抗训练来提高图像重建质量。除了使用基于图像的重建损失和对抗损失来训练自编码器外,最小化原始图像和重建图像在潜在特征空间之间的距离也有助于学习正常样本的数据分布。在推理阶段,除计算原始图像和重建图像的差异分数外,原始图像和重建图像潜在特征空间距离的分数在异常评判中也发挥重要的作用。
由于卷积神经网络强大的泛化能力,且有些异常与正常特征具有相同的局部模式,异常也能够被重建。为此,文献[13]提出在自编码器中增加记忆模块,将编码器的输出不直接传入解码器,而是作为查询来检索内存中相关的项,然后将这些项聚合后送入解码器。由于记忆模块存储的是正常数据的典型模式,因此在测试阶段,从内存中获取正常的数据信息用于重建,来增强异常的重建误差。
记忆模块如图1 所示,其中内存M∊RN×C包含N个维度为C的实值向量,mi表示内存M的第i个内存项,mi∊RC,∀i∊{1,2,…,N}。内存M是 可寻址内存,寻址方案是根据查询与内存项的相似性来计算注意权值w,w∊R1×C。查询z关于内存M中的内存项mi的权值wi的计算公式如下:
图1 记忆模块网络结构Fig.1 Memory module network structure
然后通过使用寻址权值w对内存M中的内存项进行线性组合得到∊RC,计算公式如下:
但是一些异常仍然能够被重建,为了减少这种情况,并且避免受不重要信息的影响,对w进行稀疏化操作,计算公式如下:
其中:λ为收缩阈值(在实验中将其设置为1/N);ϵ是一个非常小的正参量;max(∙,0)为ReLU 激活函数。然后进行归一化操作,得到通过稀疏化操作,使用少量且更相关的内存项来聚合得 到。
提出网络结构由重建子网络G和判别子网络D组 成,网络结 构如图2 所 示。采 用UNet[17]作为基 础重建子网络,其由编码器GE和解码器GD组成。给定输入图像x∊Rh×w×c,其中,h为高,w为宽,c为通道维数。编码器GE将x映射到低维特征空间,解码器GD试图从投影的低维空间中恢复数据得到重建图像∊Rh×w×c,其中,h为高,w为宽,c为通道维数。为了减少图像重建模糊和重建异常的情况,在编码器GE和解码器GD之间增加skip connection 和块金字塔记忆模块得到改进后的重建子网络G,将编码器输出的特征图作为查询检索内存中相关的内存项,聚合后通过skip connection 传入解码器用于重建。
图2 整体网络结构Fig.2 Overall network structure
判别网络D的网络结构是按照DCGAN[23]的判别网络结构设计的,引入判别网络的目的主要有:1)使用对抗学习思想提升重建精度,在训练阶段,判别网络D用来预测给定输入的类标签,对输入图像x和重建图像进行分类,将输入图像x判别为真,重建图像判别为假;2)判别网络D除作为分类器外,还作为特征提取器,提取输入图像x和重建图像的潜在特征表示,再计算两者之间的差异性,训练阶段通过最小化这一差异性来进一步提升重建效果;在测试阶段,将其作为异常评价指标的组成部分提升检测精度。
对于输入图像x,编码器GE输出一组特征,记为{F1,F2,…,FL},其中,L表示编码器GE共输出L层特征图。本文将每层特征图作为其对应的块金字塔记忆模块的输入,对其进行不同尺度的存储和读取,以减少异常重建。
对于编码器GE输出的第l层特征图其中,Hl为高,Wl为宽,Cl为通道维数。对其使用块金字塔记忆模块进行存储和读取如图3所示。
图3 块金字塔记忆模块网络结构Fig.3 Block pyramid memory module network structure
对于第i个分支,将其均分为个块,其 中,rHi、rWi和rCi分别为 沿高度、宽度和 通道维度的划分率。每个块的高度为hli=rHi×Hl,宽度为wli=rWi×Wl,通道长度为cli=rCi×Cl。对于每一个块,将其展平后得到一个向量作为查询,检索内存(表示内存Mli包含Nli个维度为Pli的实值向量,Pli=hli×wli×cli)中相关的内存项,再经过聚合得到的特征向量,最后变换为与Zl相同的维度大小的特征图
本文通过增加多个尺度的块记忆模块来减少重建模糊和重建异常的情况。分支的划分率设置如下:
本文方法只使用正常图像进行训练,在测试阶段同时使用正常图像和异常图像。因为异常图像没有参与训练,所以在测试时异常图像与其重建图像在图像空间和潜在的特征空间之间的差异性较大。本文结合3 个损失函数来训练模型,以保证模型可以更好地重建正常图像。
1)第1 项为重建损失,其中包括L1 损失和基于块的SSIM[18]损失。
L1 损失确保模型能够对输入图像x进行精确的重建,通过把输入图像x与重建图像(即G(x))的绝对差值的总和最小化来优化G:
基于块的SSIM 损失的计算公式如下:
其中:h和w为图像x(或者)的高和宽;NP为x(或者)的像素总个数;SSIM(x,)i,j表示输入图像x与重建图像中以(i,j)为中心的两个块的SSIM 值。
因此,重建损失为:
其中:λ为SSIM 损失的权重参数。
2)第2 项损失为潜在特征空间损失,为确保输入图像x和重建图像有尽可能相似的潜在特征表示,使用判别网络D最后一个卷积层的输出来提取输入图像x和重建图像的潜在特征表示,令z=f(x)和=f(),采用L2 损失:
3)第3 项为对抗损失[24],使用判别网络进行对抗训练,采用对抗损失来使生成网络G尽可能逼真地重建正常图像,判别网络D对输入图像x与重建图像进行分类,采用二分类的交叉熵损失来进行优化:
因此,总的训练损失为上述3 个损失的加权总和:
其中:α、β和γ是调节单个损失对总体目标函数影响的权重参数。
对于测试图像I,其异常分数A(I)为:
其中:a为权重参数。
根据式(10)计算出测试集中每个测试样本的异常分数,将测试集中所有样本的异常分数表示为向量A,并采用文献[9]方式将其缩放到[0,1]内,因此测试样本I的最终异常得分为:
本文使用工业异常检测数据集MVTec AD[25],该数据集专为无监督工业视觉异常检测而开发,是目前该领域的重要基准,包括用来训练的3 629 张正常图像和用于测试的1 725 张图像(包括正常图像和异常图像),由15 种类别的对象组成,包括10 种物体类和5 种纹理类,每类图像包括一个训练集和一个测试集。图像的分辨率在700~1 024 像素范围内,该数据集的挑战在于有些异常图像与正常图像的差别较小,且异常面积的大小差别较大。在实验时,本文将图像大小调整为256×256 像素。
本文方法是使用PyTorch 1.8.1 和CUDA 11.1 实现的,所有实验均在RTX 3090 GPU 上运行。使用Adam[26]优化器,设 置lr=0.000 1,β1=0.500,β2=0.999,weight-decay=0,Epoch 为800,batch_size=8。所有对比实验和消融实验均在同一环境下完成。
本文实验采用AUC 来评价模型的性能,当AUC分数越高时,模型性能越好。AUC 表示随机抽取一对样本(一个正样本和一个负样本),然后用训练得到的分类器来对这两个样本进行预测,该正样本预测值大于该负样本预测值的概率为:
其中:M表示正样本个数;N表示负样本个数;rank(i)表示第i个样本的序号(M个正样本按照预测值从小到大进行排序)。
为验证本文方法的有效性,将主流基于重建的无监督异常检测方法GANomaly[8]、Skip-GANomaly[9]、MemAE[13]和DAAD+[16]与本文方法在MVTec AD 数据集上进行对比,实验结果如表1 所示,其中加粗数字为最优值。
表1 主流方法模型与本文改进方法的AUC 对比Table 1 Comparison of AUC between mainstream method models and improved method in this paper
分析表1 的数据可知,本文方法明显优于主流的基于重建的无监督异常检测方法。GANomaly 存在的重建模糊问题和Skip-GANomaly 存在的重建异常问题导致了两者性能均不佳。MemAE 方法以逐像素点的方式存储正常样本的典型模式,在进行异常检测时,输入特征图的每个像素点都通过加权聚合相似的内存项得到。由于异常像素点与正常像素点可能具有相同的模式,异常很容易被重建,因此性能提升有限。而本文方法是以记忆块的方式进行存储和读取的,异常块与正常块往往具有不同的模式,因此可以通过减少异常重建的情况来提高检测精度。此外,MemAE 方法只对最后一层输出特征图应用记忆模块,导致重建模糊的问题,本文方法通过skip connection 结构减少了重建模糊的问题,进而提升了检测性能。DAAD+方法以统一尺寸的记忆块存储和读取,但是异常的大小不一,难以选择合适的记忆块尺寸,若尺寸过大,则导致重建模糊问题,若尺寸过小,则异常块很可能与正常块有相同的模式,从而导致重建异常问题。而本文方法通过使用多个不同尺度的记忆块来适应不同大小的异常,既可以提升重建清晰度,又可以减少重建异常的情况,因此本文方法检测精度高于DAAD+方法,在15 个类别中,该方法在11 个类别上取得了最高的AUC 分数,并达到最高的平均AUC,比DAAD+方法高出1.5%。
通过在MVTec AD 数据集上做消融实验,以验证所提出的各个模块的有效性,实验结果如表2 所示。将GANomaly 生成网络替换为UNet 并删去skip connection 为基准,对加入的模块进行消融实验。
表2 不同算法对模型性能的影响Table 2 The impact of different algorithms on model performance
分析表2 的数据可知,当对基准网络直接加入skip connection 后,平均AUC 下降了4.3%,因为skip connection 虽然降低了网络的重建难度,增强重建清晰度,但是对于异常图像,异常特征从编码器通过skip connection 直接传入解码器用于重建,导致输入图像与重建图像差别不大,难以判断是否存在异常,不同算法的检测结果对比见图4。如图4(b)和图4(c)所示,图4(b)重建图像较为模糊,图4(c)重建图像与原始图像极为相似(其中,图4(b)、图4(c)和图4(d)的第1 列表示预测图像,第2 列表示预测图像和其对应的原始图像的残差图像)。加入块金字塔记忆模块后,平均AUC 提升了14.2%,因为通过块金字塔记忆模块存储正常图像的典型特征,过滤掉大部分异常特征,避免了异常特征通过skip connection 传入解码器用于重建,减少了重建异常的情况,增大了异常图像和其重建图像之间的差异性,同时还提升了重建清晰度,如图4(d)所示,重建图像清晰,明显改善重建异常问题。加入SSIM 损失,平均AUC 提升了0.4%,提升了网络的重建效果。
图4 不同算法的检测结果对比Fig.4 Comparison of detection results of different algorithms
本文提出一种基于块金字塔记忆模块的无监督异常检测方法。针对重建模糊和重建异常等问题,设计块金字塔记忆模块用来存储不同尺度的正样本信息,在进行异常检测时,该模块将异常特征转化为正常特征,抑制异常重建,从而通过重建误差来检测异常,并且该模块能够聚合与输入特征相似的不同尺度的记忆项,更好地抑制较大面积差的异常重建,提升细腻度重建能力。利用skip connection 结构将经过块金字塔记忆模块增强后的不同尺度的特征图送入解码器能够提高重建的清晰度,并采用SSIM 损失函数增强原始图像和重建图像的差异性。在MVTec AD 数据集上的实验结果表明,本文方法相较于其他主流方法,在平均ROC 指标上的得分有明显提升,减少了异常重建情况和提升了重建清晰度。下一步将针对块金字塔记忆模块多个尺度的增强特征图,探索更加有效的融合方式来提升模型的检测精度,同时优化模型结构,加快推理速度。