深度学习论文: EfficientAD: Accurate Visual Anomaly Detection at Millisecond-Level Latencies及其PyTorch实现
深度学习论文: EfficientAD: Accurate Visual Anomaly Detection at Millisecond-Level Latencies及其PyTorch实现
EfficientAD: Accurate Visual Anomaly Detection at Millisecond-Level Latencies
PDF: https://browse.arxiv.org/pdf/2303.14535v2.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks
1 概述
EfficientAD使用一种学生-教师的方法来检测异常特征。即训练一个学生网络来预测正常的、即无异常的训练图像的提取特征。在测试时,通过学生无法预测异常特征来实现异常检测。同时提出了一种训练损失,限制了学生模仿教师特征提取器超出正常图像的范围。这使得EfficientAD能够大大降低学生-教师模型的计算成本,同时提高对异常特征的检测能力。此外,EfficientAD还解决了检测涉及无效的正常局部特征组合的具有挑战性的逻辑异常问题,例如对象的错误排序。EfficientAD通过高效地结合一个全局分析图像的自编码器来检测这些异常情况。

2 EfficientAD
2-1 Efficient Patch Descriptors
图像块描述网络(patch description network,PDN)的每个输出神经元具有一个33×33像素的感受野,因此每个输出特征向量描述了一个33×33的图像块。PDN是完全卷积的,可以应用于大小可变的图像,在单次前向传递中生成所有特征向量。PDN在第一层和第二层卷积层之后使用strided average-pooling层。

为了使PDN生成具有表达力的特征,将一个深度预训练的分类网络信息融入其中,即通过最小化PDN输出与预训练网络提取的特征之间的均方差来训练PDN(为了进行对比,使用与PatchCore相同的预训练特征,来自WideResNet-101,训练集来自ImageNet)。
此外,与最近方法使用的深度网络相比,PDN具有另一个优势。PDN生成的特征向量仅依赖于其33×33图像块中的像素,
与最近方法使用的深度网络相比,PDN具有另一个优势。PDN生成的特征向量仅依赖于其33×33图像块中的像素,这确保了PDN具有明确定义的感受野,使得图像中的一个部分的异常不会影响远距离部分的异常特征向量,从而影响异常的定位能力。如下图

PDN网络结构:

2-2 Lightweight Student–Teacher
为了检测异常特征向量,EfficientAD采用了student–teacher (S–T)方法,其中student和teacher都使用2-1蒸馏过的精简PDN。同时引入一种训练损失,可以在不影响测试时的计算需求的情况下显著提高异常检测能力。
标准的(S–T)框架中,增加训练图像的数量可以提高学生在异常图像上模仿老师的能力,但是会导致检测异常的性能变差。同时如果减少训练图像的数量则会抑制学到正常图像的重要信息。所以最终需要实现的目标是向学生展示足够的数据,以便它在正常图像上能够充分模仿老师,同时避免对异常图像的泛化。借鉴Online Hard Example Mining(OHEM),提出了一种hard feature loss,只使用具有最高损失的输出元素进行反向传播。

此外,除了hard feature loss,在训练过程中还加入了一种损失惩罚来进一步阻碍学生在不属于正常训练图像的图像上模仿老师。在标准的S-T框架中,老师是在图像分类数据集上进行预训练的,或者是这种预训练网络的蒸馏版本。学生不是在预训练数据集上进行训练,而只是在应用项目的正常图像上进行训练。作者提议在学生的训练过程中还使用老师预训练的图像。具体来说,在每个训练步骤中,从预训练数据集(ImageNet)中随机选择一张图像P。将学生的损失计算为L_{ST} = L_{hard} + (CWH)^{−1} {\textstyle \sum_{c}} \left \| S(P)_{c}\right \| ^{2} _{F}。这种惩罚阻碍了学生将对老师的模仿泛化到分布之外的图像上。
2-2 Logical Anomaly Detection
EfficientAD使用自编码器来学习训练图像的逻辑约束并检测违反这些约束的行为。如缺失、错位和多余等。EfficientAD通过增加student网络的输出通道,使用自编码器学习student网络的输出。

学生通过学习自动编码器在正常图像上的系统重建错误(例如模糊的重建)来进行训练。同时,它不会学习异常情况下的重建错误。这使得自动编码器的输出与学生的输出之间的差异非常适合计算异常图。类似于学生-老师对,异常图是两个输出之间的平方差异,跨通道进行平均。将这个异常图称为全局异常图,将学生-老师对生成的异常图称为局部异常图。对这两个异常图进行平均,计算得到组合异常图,并使用其最大值作为图像级别的异常分数。因此,组合异常图包含了学生-老师对的检测结果和自动编码器-学生对的检测结果。在计算这些检测结果时,共享学生的隐藏层可以保持较低的计算要求,同时实现对结构和逻辑异常的检测。
自编码器的网络架构:

2-3 Anomaly Map Normalization
局部异常图和全局异常图在进行平均之前必须经过归一化处理,以使它们具有相似的尺度,从而得到组合异常图。否则,一个图中的噪声可能会使另一个图中的准确检测在组合图中难以辨别(这对于仅在其中一个图中检测到异常的情况非常重要)。
EfficientAD使用校验图像来估计正常图像中的噪声尺度。对于这两种异常图类型,计算验证图像中所有像素异常分数的集合。然后,分别为每个集合计算两个p分位数:q_{a}和q_{b},其中p = a和p = b。确定一个线性变换,将q_{a}映射为异常分数0,将q_{b}映射为分数0.1。在测试时,局部异常图和全局异常图分别使用相应的线性变换进行归一化。
3 Experiments


