论文目的
提出patchcore,一种仅需要正常样本(无监督),便可以通过高效的记忆库和核集子采样实现最先进的冷启动异常检测和定位的异常检测方法。
摘要
在大规模工业制造中,能够发现有缺陷的零件是一个关键组成部分。本文解决了一个特别的问题,即冷启动问题:仅使用正常(无缺陷)样本图像来训练模型。虽然可以手工制作每个类别的解决方案,但目标是构建能够自动且同时在许多不同任务上表现良好的系统(即高鲁棒性与泛用性)。最佳的做法是将来自ImageNet模型的嵌入与异常检测模型结合起来。本文在这方面的工作基础上进行扩展,提出了PatchCore,它使用了具有最大代表性的正常区块特征记忆库。PatchCore在检测和定位方面实现了与现有技术水平相当的推理时间,同时取得了最先进的性能。在具有挑战性的、广泛使用的MVTec AD基准测试中,PatchCore实现了高达99.6%的图像级异常检测AUROC得分,其错误率比第二名竞争对手减少了一半以上。文章还报告了在另外两个数据集上的竞争性结果,并在少样本情况下也实现了有竞争性的结果。
1.介绍
能够检测图像中异常模式是人类认知中深深根植的一个特征。人类在仅见到少量正常实例后,就可以区分数据中的预期变化和异常情况。本文解决了这个问题的计算版本,即用于工业图像数据的视觉检查的冷启动异常检测问题。该问题在许多工业场景中出现,因为获取正常样本的图像很容易,但完整指定预期缺陷的变化却成本高且复杂。这个任务自然被视为一个分布外检测问题,其中模型需要区分训练数据分布内的样本和分布外的样本。工业视觉缺陷分类尤其困难,因为错误可能从细微的变化(如细小的划痕)到较大的结构性缺陷(如缺少组件)。图一展示了MVTec AD基准中的一些例子以及本文提出的方法的结果。现有的冷启动工业视觉异常检测工作依赖于通过自动编码方法、生成对抗网络(GANs)或其他无监督自适应方法来学习正常分布的模型。最近,有人提出利用来自ImageNet分类的通用深度表示,而无需适应目标分布。尽管缺少适应,这些模型提供了强大的异常检测性能,甚至能够实现稳健的缺陷空间定位。这些技术背后的关键原理是测试样本与正常样本之间的特征匹配,同时利用深度特征表示的多尺度特性。细微、精细的缺陷分割由高分辨率特征覆盖,而结构性偏差和整体图像级异常检测由更高抽象层次的特征覆盖。然而,这种非自适应方法的固有缺点是,在更高抽象层次上的匹配置信度有限:来自ImageNet训练的高层抽象特征与工业环境所需的抽象特征重合较少。此外,这些方法在测试时可用的正常上下文实际上受到可提取高层特征表示数量的限制。
图一 MVTecAD数据集下的patchcore分割结果
本文提出了PatchCore作为一种有效的解决方案,通过:
- 最大化测试时可用的正常信息。
- 减少对ImageNet类别的偏向。
- 保持高推理速度。
PatchCore通过利用局部聚合的中层特征补丁实现了基于单个区块异常即可以判断整个图像异常的事实这一目标。中层网络区块特征的使用使PatchCore能够在高分辨率下操作,并且对ImageNet类别的偏向最小化,而局部邻域特征聚合确保了足够的空间上下文保留,这产生了一个广泛的记忆库,使PatchCore能够在测试时最佳利用可用的正常上下文。
最后,为了实际应用,PatchCore还引入了贪婪核集子采样作为正常特征库的一个关键元素,以减少提取的区块级记忆库的冗余,并显著降低存储内存和推理时间,使PatchCore对实际工业应用非常有吸引力。(通过贪婪核集子采样以舍去部分局部特征从而提升性能)
在多样的MVTec AD以及专门的磁性瓷砖缺陷(MTD)工业异常检测基准上的深入实验展示了PatchCore在工业异常检测中的强大能力。它在MVTec AD和MTD上实现了最先进的图像级检测得分,在MVTec AD上几乎达到完美的得分(AUROC高达99.6%),将之前方法的检测错误减少了一半以上,同时在工业异常定位性能上也达到最先进水平。PatchCore在不需要对现有数据集进行训练的情况下实现了这一点,使其在工业异常检测的实际应用中非常有吸引力。
2.相关工作
文章在这部分总结了当时工业异常检测的一些先进方法,研究方向以及该领域的总体情况:
- 名义数据表示学习:大多数异常检测模型通过自动编码、GANs和归一化流等方法学习名义数据的表示。
- 检测与定位方法:异常检测主要通过重建误差、最近邻距离或一类分类模型进行,定位则基于像素级误差或显著性方法。
- 工业场景应用:工业图像数据面临特定挑战,使用预训练模型(如ImageNet)在工业异常检测中表现良好,但必须通过一些方法减少对ImageNet类别的偏向。
- PatchCore:结合SPADE(利用包括各种特征层次的记忆库进行细粒度的基于kNN的异常分割和图像级异常检测)和PaDiM(利用局部约束的特征袋方法,估计补丁级特征分布矩来进行补丁级马氏距离测量)优点,使用邻域感知的补丁级特征记忆库和核集子采样,提高检测性能并降低推理成本。
3.方法
PatchCore 方法由几个部分组成,这里将按顺序描述:聚合到记忆库的局部区块特征感知(3.1),核集缩减方法以提高效率(3.2),以及最终实现检测和定位决策的完整算法(3.3)。
图二 patchcore的概览
3.1 局部区块特征感知
这部分主要介绍了patchcore从ImageNet的预训练模型中选取哪些特征层构建记忆库 𝑀,同时为了增强patchcore对小空间差异的鲁棒性以及增大其感受野而对patchcore进行特征局部邻域聚合。
首先说patchcore的最终选择,其选择中间特征层组成记忆库,如ResNet框架中的2和3层。
为什么不选择更深层次呢?文中给出了两点原因:
- 深层丢失了更多局部化的名义信息。由于测试时遇到的异常类型是未知的,这对下游异常检测性能有害。
- ImageNet 预训练网络中的深层和抽象特征倾向于自然图像分类任务,这与工业异常检测任务和评估数据的重叠较少。
即对于异常目标检测这种需要对局部,细节进行检测的任务,过深的层次会导致特征过抽象,从而丧失了原本应该保留的局部特征信息。
接下来为patchcore如何实现局部特征聚合,这部分包含了很多公式,下面为这些公式与其对应的解释:
定义邻域:
其中表示在位置 (ℎ,𝑤)附近大小为 𝑝×𝑝 的邻域。
聚合邻域特征:
其中是一个聚合函数,将位置 (ℎ,𝑤)附近邻域的特征𝜙{i,j}聚合起来。
对于,patchcore选择的是自适应平均池化(adaptive average pooling),其作用类似于对每个特征图进行局部平滑操作。
局部感受区块集合
其原理如下:
- 公式通过聚合特定位置 (ℎ,𝑤)及其邻域的特征,创建一组局部感知特征。这里,步长参数 𝑠 控制在特征图上选取位置的间隔(通常设置为1),从而保留特征图的分辨率。
- 邻域大小 𝑝 确定每个位置的局部感受野,这样可以在不同位置上聚合特征,以捕获更多局部上下文信息。
记忆库定义:
对于所有规范的训练样本,PatchCore 记忆库 𝑀 定义为:
通过聚合训练样本的局部感受区块特征集合,创建一个包含丰富上下文信息和局部特征的记忆库。
公式中的 表示从第 𝑗j层特征图中提取的特征,通过选择适当的层次(中间层次),确保记忆库中的特征既包含低层次的细节信息,也包含高层次的抽象信息。
总体来说,通过选取特定层次以及局部特征聚合,PatchCore 能够在保持高分辨率和高精度的同时,提高对空间变化和噪声的鲁棒性,从而实现更有效的异常检测和定位。
3.2 核集缩减局部特征记忆库
这一节主要解释patchcore是如何处理记忆库中的内容,在尽量保持性能的同时大幅减少其存储需求并提高性能。
随着 的不断增大,记忆库𝑀也在不断增大,从而导致评估新测试数据的推理时间和所需存储空间都显著增加。所以本文提出通过找到一个𝑀的子集𝑀c,使𝑀c能够保持对原始记忆库的良好表示,同时极大缩小其对存储的需求以及推理时间。而实现方法,由于随机子采样,尤其是大幅度采样,会丢失 𝑀M 中编码的名义特征覆盖范围中的大量信息,所以本文提出采用核集子采样机制来缩减𝑀。
由于 PatchCore 使用最近邻计算,我们使用了一种最小最大设施位置核集选择方法,以确保 𝑀c核集在区块级特征空间上的覆盖范围与原始记忆库 𝑀 的覆盖范围大致相同:
公式通过最小化在 𝑀 中每个特征向量 𝑚 到 𝑀c 中最近特征向量 𝑛 的最大距离,来确保 𝑀c 能够很好地代表整个𝑀。
本文提到由于(exact computation of M∗ C is NP-Hard ,我不太理解),所以建议使用迭代贪婪近似算法来进一步减少核集选择时间。同时为进一步减少核集选择时间,研究者使用 Johnson-Lindenstrauss 定理,通过随机线性投影减少 𝑀 中元素的维度:
ψ 是一个随机线性投影函数,将 𝑑 维空间中的点投影到 𝑑∗ 维空间,其中 𝑑∗<𝑑。
核集选择和维度降低的结合,使得 PatchCore 方法能够在保持高性能的同时,大幅减少记忆库的大小和推理时间。这不仅提高了模型的实际应用性,还确保了在处理大规模数据时的效率和效果。
图三 不难看出,使用核集记忆库子采样相较于随机子采样,能够更好的代表整个记忆库,其中上一行为核集记忆子采样得到的结果,下一行为随机子采样得到的结果,蓝色代表原记忆库,红色为相应方法处理后的结果。
3.3 使用patchcore进行异常检测
这一节解释了patchcore如何通过计算最大距离得分来进行异常检测。
通过利用正常局部区块特征库M,patchcore通过计算最大距离得分来估计测试图像的图像级异常得分,该得分表示测试区块特征集合中区块特征与其在 𝑀中各自最近邻特征 𝑚∗之间的最大距离:
最大距离得分 𝑠∗ 用于衡量测试图像中最不匹配的区块特征,从而标识出可能存在的异常区域。
为了获得s,patchcore使用对𝑠∗的缩放来考虑邻近区块的行为:如果记忆库中与异常候选最接近的特征 𝑚∗ 本身与其邻近样本之间的距离很大,因此已经是一个罕见的正常情况,则增加异常得分:
这种重新加权方法增加了对罕见正常情况的检测能力,使得模型在面对边缘情况时更加鲁棒。
总体来说,通过实验者设计的计算方法与公式,使得 PatchCore 在检测和定位工业异常时表现出色,能够处理大规模图像数据,提供高精度和高效的异常检测解决方案。
4.实验
4.1 实验细节
patchcore主要在MVTecAD上进行的实验(数据集链接),图像被调整大小并中心裁剪为256 × 256 和 224 × 224。没有应用数据增强,因为这需要对保留类别的增强方法有先验知识。
文中还介绍了patchcore在其他数据集包括MTD数据集,mSTC数据集上进行冷启动异常定位基准测试,这里不过多赘述。
对于评估指标,图像级异常检测性能通过AUROC来衡量,使用生成的异常分数。在与先前工作的对应下,研究者在 MVTec 上计算类别平均 AUROC。而为了衡量分割性能,研究者选择使用像素级 AUROC 和 PRO 指标。PRO 分数考虑了连接异常组件的重叠和恢复,以更好地解释 MVTec AD 中变化的异常大小。
如果不了解这些指标,可以参考文章:缺陷异常检测及定位性能评价指标–AUROC,PRO(per-region-overlap)-CSDN博客
4.2 在 MVTec AD 上的异常检测
文章展示了patchcore在MVTec AD数据集上的测试结果,记录了不同记忆库子采样级别(25%、10% 和 1%)的结果。在所有情况下,PatchCore 在所有子数据集上均实现了显著更高的平均图像异常检测性能,并在所有子数据集上保持了一致的高性能。请注意,从 PaDiM 的 2.1% 错误率减少到 PatchCore-25% 的 0.9% 意味着错误率减少了 57%。在工业检测环境中,这是一个相关且显著的减少,同时以最优 F1 阈值计算,仅有 1725 张图像中的 42 张被错误分类,且三分之一的类别完全正确解决。
由于核集记忆库子采样的有效性,在补充材料中patchcore通过应用更高分辨率的图像进一步提升了性能,同时还有更多的补充说明与结果,可以查看原文。这里不进行展示,只提供在MVTec AD上的测试结果:
图四、五 MVTecAD数据集下的patchcore测试结果与其他方法对比,上图展示其在F1阈值下判断的准确率,下图为异常分割准确率。
4.3 推理时间
这部分主要比较patchcore的推理时间,直接上图:
图六 patchcore与不同方法的推理时间比较
4.4 消融研究
4.4.1 局部感知区块特征和层次结构
这部分通过评估不同邻域大小对异常检测性能的影响,研究了局部感知区块特征的重要性。下图的结果很重要,其解释了patchcore对于邻域大小的选择结果以及为什么选择骨干网络的中间特征层(2,3层)作为记忆库
上图可以看出局部性和全局上下文之间的最佳平衡,从而激发了邻域大小 𝑝=3 的选择,而下图中展示了不同层特征的测试结果,尽管通过向下移动网络层次结构,也可以获得更多全局上下文,但代价是分辨率降低和更严重的 ImageNet 类别偏差。可以看出,层次结构的第 2 层特征已经可以实现最先进的性能,但从后续层次(2 + 3)提取的额外特征图受益,所以被选择为patchcore的默认设置。
4.4.2 核集子采样的重要性
下图比较了不同记忆库 𝑀M 子采样方法:核集子采样、随机子采样和对应于子采样目标百分比 的基准代理学习(这个方法的原理原文有介绍,即灰色线)。
其中核集子采样的准确率远远高出其他两种,同时无子采样的性能与大小小两个数量级的核集缩减记忆库的性能相当,且子采样的记忆库包含的冗余要少得多。
4.5 4.6少样本目标检测和其他基准的评估
同样如题所示,直接展示结果
图七、八 上图为少样本异常检测结果,下图为在mSTC和MTD数据集的测试结果
5. 结论
直接原文翻译:
本文介绍了用于冷启动异常检测的 PatchCore 算法,该算法仅利用名义样本的知识来在测试时检测和分割异常数据。PatchCore 在测试时通过使用由从 ImageNet 预训练网络中提取的局部感知名义区块级特征表示组成的记忆库,保持最大量的名义上下文,并通过核集子采样实现最小运行时间之间取得了平衡。结果是一个最先进的冷启动图像异常检测和定位系统,在工业异常检测基准上具有低计算成本。在 MVTec 上,我们实现了超过 99% 的图像异常检测 AUROC,在相关的少样本环境中具有最高的样本效率。
更广泛的影响
由于自动化工业异常检测是计算机视觉最成功的应用之一,通过 PatchCore 获得的改进对于该领域的从业者可能具有显著兴趣。由于我们的工作专注于工业异常检测,负面的社会影响有限。尽管该基本方法可以在更有争议的领域中用于检测系统,但我们认为我们的改进不足以改变此类系统的社会应用。
限制
尽管 PatchCore 在工业异常检测中表现出高度的有效性,而无需特定地适应当前的问题域,其适用性通常受限于预训练特征的可迁移性。可以通过将 PatchCore 的有效性与利用特征的适应性结合起来解决这一问题。我们将此有趣的扩展留待未来工作。
在理解源码后再次阅读patchcore的论文又有了新的收获,便记录一下学习的过程。