PatchCore

文章目录

  • Abstract
  • Introduction
  • [Related Works](#Related Works)
    • [Industrial Anomaly Detection](#Industrial Anomaly Detection)
  • Method
    • [Locally aware patch features](#Locally aware patch features)
    • [Coreset-reduced patch-feature memory bank](#Coreset-reduced patch-feature memory bank)
    • [Anomaly Detection with PatchCore](#Anomaly Detection with PatchCore)
  • Conclusion
  • SK

paper
code

Abstract

PatchCore 是 2021 年提出的工业异常检测算法,只需正常样本,通过构建"正常 Patch 特征记忆库(Memory Bank)"并在推理时做最近邻距离判断,实现高精度异常检测与定位,在 MVTec AD 上可达 99.6% AUROC。

本研究解决的一个重要挑战是冷启动问题:仅使用名义(无缺陷)的示例图像来训练模型。虽然可以为每个类别手工设计解决方案,但目标是构建能够同时自动高效处理多种不同任务的系统,最佳性能的方法通常结合了ImageNet模型的嵌入与异常检测模型。

核心思想

PatchCore 的目标是 记录正常样本的全部局部特征,并在测试时判断哪些区域偏离正常分布。

其关键流程包括:

使用 ImageNet 预训练 CNN(如 WideResNet50)提取 中间层特征(layer2、layer3)

构造 Locally‑aware Patch Feature(局部感知 Patch 特征)

将所有正常 Patch 特征存入 Memory Bank

使用基于最远点选择的贪心核心集采样(K-Center Greedy Coreset Sampling)压缩记忆库,减少冗余,提高推理速度

推理时对每个 Patch 做 KNN 最近邻搜索,距离越大越异常

Introduction

检测图像中异常模式的能力是人类认知中深植于其中的一种特征。人类仅需看到少量正常样本,便能区分数据中的预期变化与异常值。本研究针对这一问题的计算模型,即工业图像数据视觉检查中的冷启动异常检测。该问题广泛出现在许多工业场景中:虽然获取正常样本的图像很容易,但要完整地定义所有可能的缺陷变化却十分昂贵且复杂。这项任务自然可视为一种分布外检测问题,即模型需要区分来自训练数据分布的样本与那些不属于其支持域的样本。工业视觉缺陷分类尤为困难,因为错误可能从细微的划痕到较大的结构缺陷(如部件缺失)不等5。图1展示了来自MVTec AD基准数据集的部分示例,以及我们所提出方法的结果。目前针对冷启动工业视觉异常检测的研究,主要依赖于通过自编码方法12, 36, 44、生成对抗网络(GANs)2, 39, 43或其他无监督适应方法42, 56来学习正常分布的模型。最近,4, 10 提出的方法利用了ImageNet分类中常见的深度表示,无需对目标分布进行适应。尽管缺乏适应过程,这些模型仍能提供较强的异常检测性能,甚至具备可靠的缺陷空间定位能力。

这些技术的核心原理在于,在利用深度特征表示的多尺度特性的同时,对测试样本与基准样本之间进行特征匹配。细微且精细的缺陷分割由高分辨率特征来处理,而结构偏差和整体图像级别的异常检测则应由更高抽象层次的特征来覆盖。

由于该方法不具备自适应性,其固有的缺点是高层抽象层次上的匹配置信度有限:来自ImageNet训练的高层抽象特征与工业环境中所需的实际抽象特征存在较大差异。此外,测试时这些方法可利用的基准上下文也受到可提取的高层特征表示数量较少的限制。

在本文中,我们提出PatchCore作为一种有效的补救方法,其优势体现在三个方面:(1)最大化测试时可用的名义信息;(2)减少对ImageNet类别的偏倚;(3)保持较高的推理速度。基于一个事实------只要单个图像区域出现异常,该图像即可被判定为异常14, 56,PatchCore通过利用局部聚合的中层特征图块来实现这一目标 。采用中层网络特征图块,使PatchCore能够在高分辨率下对ImageNet类别具有极小的偏倚,同时通过局部邻域内的特征聚合,确保保留足够的空间上下文信息。这使得PatchCore能够构建一个庞大的记忆库,在测试时最优地利用现有的名义上下文。最后,为了提升实际应用可行性,PatchCore还引入了贪婪式子集采样1,作为关键组成部分,用于降低提取的图块级记忆库中的冗余性,并显著减少存储内存和推理时间,从而使其在现实工业应用中极具吸引力。

大多数异常检测模型依赖于学习名义数据固有表示的能力。例如,可以通过使用自编码器模型44来实现这一目标。为了更好地估计名义特征分布,已有多种方法被提出,包括基于高斯混合模型的扩展60、生成对抗训练目标2,39,43、对预定义物理增强具有不变性的方法25、隐藏特征对重构重建的鲁棒性29、原型记忆库21、注意力引导52、结构化目标7,59以及受限表示空间38等。其他无监督的表示学习方法也可类似地加以利用,例如通过生成对抗网络(GANs)13、学习预测预定义的几何变换20,或通过归一化流(normalizing flows)42。在已知相应的名义表示和新的测试表示后,异常检测便可简单地基于重建误差44、到k个最近邻的距离18,或在这些特征之上对单类分类模型(如OC-SVMs 46或SVDD 50, 56)进行微调来实现。对于大多数这类方法,异常定位通常可自然地基于像素级重建误差;同时,基于显著性分析的方法,如Grad-CAM 47或XRAI 28,也可用于异常分割42, 45, 52。

Industrial Anomaly Detection

尽管通过学习名义表示进行一般异常检测的文献非常丰富,但工业图像数据本身也带来了独特的挑战5。近期的研究4已展示了利用在ImageNet等大型外部自然图像数据集上预训练的模型,无需对当前数据进行任何调整,即可实现最先进的检测性能。这促使了其他基于更高效重用预训练特征的工业异常检测方法的出现,例如SPADE10,它利用包含多种特征层次的内存库,实现细粒度、基于kNN的18异常分割和图像级异常检测。类似地,最近的研究14提出了PaDiM,该方法采用局部约束的特征袋(bag-of-features)方法8,用于估计图像块级别的特征分布矩(均值和协方差),从而计算块级马哈拉诺比斯距离33。该方法与40在完整图像上研究的方法相似。为了更好地应对自然预训练图像数据与工业图像数据之间的分布差异,后续可进行适应性调整,例如通过学生-教师知识蒸馏24(如6, 45中所示)或在预训练网络特征42基础上训练的归一化流17, 30。

PatchCore 所使用的具体组件与 SPADE 和 PaDiM 最为相关。SPADE 利用从预训练主干网络中提取的名义特征构成一个记忆库,并采用独立的方法进行图像级和像素级异常检测。PatchCore 也使用了记忆库,但引入了邻域感知的补丁级特征,这对于实现更高性能至关重要,因为这能保留更多的名义上下文,并融入更合适的归纳偏置。此外,记忆库还通过 coreset 技术进行子采样,以确保在高性能下推理成本较低。Coreset 技术长期以来已被广泛应用于基础的 kNN 和 kMeans 方法22以及混合模型19,通过找到最能近似给定数据集结构的子集,从而以显著降低的成本获得近似解1, 9。近年来,基于 coreset 的方法也逐渐被引入深度学习领域,例如用于网络剪枝34、主动学习48,以及通过增加小批量的有效数据覆盖范围来改善生成对抗网络(GAN)训练49或表示学习41。后三种方法通过使用贪心的子集选择机制取得了成功。为了逼近记忆库特征空间的覆盖范围,我们同样为PatchCore采用了一种贪心的子集机制。最后,我们在图像级异常检测和异常分割方面所采用的局部级方法与PaDiM相关,旨在提高异常检测的灵敏度。我们采用一种高效的局部特征记忆库,在测试时所有被评估的图像均能平等地访问该记忆库;而PaDiM则将局部级异常检测限制在每个局部区域特有的马哈拉诺比斯距离测量上。因此,PatchCore在依赖图像对齐的程度降低的同时,也能够利用更大的名义上下文来估计异常。此外,与PaDiM不同,输入图像在训练和测试阶段无需保持相同的形状。最后,PatchCore利用局部感知的局部特征得分,以考虑局部空间变化,并减少对ImageNet类别的偏倚。

Method

Locally aware patch features

我们用 XN 表示训练时可用的所有名义图像集合(∀x ∈ XN:yx = 0),其中 yx ∈ {0, 1},表示图像 x 是名义的(0)还是异常的(1)。相应地,我们定义 XT 为测试时提供的样本集合,满足 ∀x ∈ XT:yx ∈ {0, 1}。根据 4、10 和 14 的方法,PatchCore 使用在 ImageNet 上预训练的网络 φ。由于特定网络层级的特征起着重要作用,我们使用 φi,j = φj(xi) 来表示图像 xi ∈ X(数据集为 X)在预训练网络 φ 的第 j 层(即第 j 个层级)的特征。除非特别说明,本文与现有文献一致,其中 j 表示 ResNet 类似架构(如 ResNet-50 或 WideResnet-50)中特征图的索引,j ∈ {1, 2, 3, 4} 分别对应不同空间分辨率模块的最终输出。

一种特征表示的选择是网络特征层次结构的最顶层。这种方法在4或10中被采用,但会带来以下两个问题。首先,它会丢失更多局部的名义信息14。由于测试时遇到的异常类型事先无法确定,这会对下游异常检测性能产生不利影响。其次,ImageNet预训练网络中非常深且抽象的特征主要针对自然图像分类任务,而该任务与冷启动工业异常检测任务以及当前评估的数据仅有很小的重叠。

因此,我们建议使用一个包含中间或中等层级特征表示的补丁级特征记忆库 M,以利用提供的训练上下文,避免特征过于泛化或过度偏向于 ImageNet 分类。在 ResNet 类似架构的具体情况下,这通常指例如 j ∈ 2, 3。为了形式化补丁表示,我们扩展了之前引入的符号。假设特征图 φi,j ∈ Rc∗×h∗×w∗ 是一个具有深度 c∗、高度 h∗ 和宽度 w∗ 的三维张量。然后我们使用 φi,j(h, w) = φj(xi,h, w) ∈ Rc∗ 来表示在位置 h ∈ {1, ..., h∗} 和 w ∈ {1, ..., w∗} 处的 c∗ 维特征切片。假设每个 φi,j 的感受野大小大于 1,则这实际上对应于图像补丁的特征表示。理想情况下,每个补丁表示应具备足够大的感受野尺寸,以捕捉有意义的异常上下文,并对局部空间变化具有鲁棒性。虽然可以通过分步池化并进一步深入网络层次来实现这一点,但由此产生的局部特征会更加特有于ImageNet,从而对当前的异常检测任务相关性降低,同时训练成本增加,有效特征图分辨率下降。

这促使我们在构建每个区域级特征表示时,采用局部邻域聚合方法,以扩大感受野大小并增强对微小空间偏差的鲁棒性,同时不损失空间分辨率或特征图的可用性 。为此,我们扩展了上述 φi,j(h, w) 的符号,以考虑不规则的区域大小 p(对应所考虑的邻域大小),并纳入来自邻域的特征向量。

在邻域 N(h,w) p 中,对特征向量进行某种聚合操作。对于 PatchCore,我们采用自适应平均池化。这类似于对每个单独的特征图进行局部平滑处理,从而在 (h, w) 处生成一个预定义维度 d 的单一表示,该表示适用于所有满足 h ∈ {1,..., h∗} 且 w ∈ {1,..., w∗} 的 (h, w) 对,因此保留了特征图的分辨率。对于特征图张量 φi,j,其局部感知的补片-特征集合 Ps,p(φi,j) 是

可选地使用一个步长参数 s,我们将其设置为 1,但第 4.4.2 节中的消融实验除外。与 10 和 14 类似,通过实验证明,多个特征层次的聚合能带来一定优势。然而,为了保持所用特征的一般性以及空间分辨率,PatchCore 仅使用两个中间特征层次 j 和 j+1。这通过简单地计算 Ps,p(φi,j+1),并将每个元素与其在最低层级(即最高分辨率)上对应的补丁特征进行聚合来实现。我们通过双线性重缩放 Ps,p(φi,j+1),使其 |Ps,p(φi,j+1)| 与 |Ps,p(φi,j)| 相匹配,从而达到这一目标。

最后,对于所有名义上的训练样本 xi ∈ XN,PatchCore 内存库 M 简单地定义为

Coreset-reduced patch-feature memory bank

随着XN尺寸的增大,M会变得极其庞大,从而导致评估新测试数据所需的时间和存储空间均显著增加。这一问题在SPADE10中已得到指出,该方法用于异常分割,同时利用了低级和高级特征图。由于计算资源的限制,SPADE需要在像素级异常检测中预先选择特征图,而其依赖于基于全图像深度特征表示的较弱图像级异常检测机制,即对最后一层特征图进行全局平均操作,这会导致从完整图像中计算出的分辨率较低、偏向ImageNet的特征表示,可能对检测和定位性能产生负面影响。

这些问题可以通过使M在较大图像尺寸和数量下仍具完全可搜索性来解决,同时支持基于补丁的比较,这对异常检测和分割都具有益处。这要求保留编码在M中的名义特征覆盖信息。然而,随机子采样,尤其是以多个倍数进行采样,会丢失M中名义特征覆盖所包含的重要信息(参见第4.4.2节中的实验)。本研究采用核心子采样机制来减少M的规模,我们发现该方法能缩短推理时间,同时保持性能。

从概念上讲,核心集选择旨在找到一个子集 S⊂ A,使得在集合 A 上的问题解能够通过在 S 上计算得到的解最接近地逼近,尤其是更快速地逼近 1。根据具体问题的不同,所关注的核心集也会有所差异。由于 PatchCore 使用最近邻计算(下一节),我们采用最小最大设施选址核心集选择方法(参见例如48和49),以确保在补丁级特征空间中,M-核心集 MC 的覆盖范围与原始记忆库 M 相比具有近似的相似性。

M∗C 的精确计算是 NP-难问题 54,因此我们采用 48 中提出的迭代贪心近似方法。为了进一步减少 coreset 选择的时间,我们参考 49,利用 Johnson-Lindenstrauss 定理 11,通过随机线性投影 ψ:Rd → Rd*(其中 d* < d)来降低集合 M 中元素 m ∈ M 的维度。内存bank的缩减过程总结在算法 1 中。为便于表示,我们使用 PatchCore?n% 表示原始内存银行被子采样的比例,例如 Patch-Core?1% 表示对 M 进行了 100 倍的子采样。图 3 展示了贪心 coreset 子采样与随机采样的空间覆盖情况对比。

Anomaly Detection with PatchCore

通过名义上的局部特征记忆库 M,我们利用测试图像 xtest 的局部特征集合 P(xtest) = {Ps, p(φj(xtest))} 中各测试局部特征与记忆库 M 中相应最近邻 m∗ 之间的最大距离得分 s*,来估计图像级异常分数 s ∈ R:

为了获得 s,我们使用对 s* 进行缩放来考虑邻近区域的行为:如果与异常候选 mtest,∗ 最接近的记忆库特征 m∗ 本身远离邻近样本,从而属于一种已经罕见的名义性出现,则会提高异常得分。

使用 Nb(m∗) 表示在 M 中与测试补丁特征 m∗ 最接近的 b 个补丁特征。我们发现,这种重新加权方法比仅使用最大补丁距离更为稳健。给定 s 后,分割结果可直接获得。公式 7(第一行)中的图像级异常分数需要通过 arg max 操作对每个补丁计算异常分数。在相同步骤中,可以像 14 中那样,根据各补丁的空间位置重新对齐已计算出的补丁异常分数,从而生成分割图。为了匹配原始输入分辨率(我们可能希望使用中间网络特征),通过双线性插值对结果进行上采样。此外,我们使用标准差为 σ = 4 的高斯核对结果进行了平滑处理,但未优化该参数。

Conclusion

本文介绍了用于冷启动异常检测的PatchCore算法,该算法仅需利用名义样本的知识,在测试时即可检测并分割异常数据。PatchCore通过使用从ImageNet预训练网络中提取的、具有局部感知能力的名义补丁级特征表示构成的记忆库,在测试时保留尽可能多的名义上下文;同时通过coreset子采样技术实现低运行成本。其结果是一种在工业级异常检测基准上计算开销较低的先进冷启动图像异常检测与定位系统。在MVTec数据集上,我们实现了超过99%的图像异常检测AUROC,并在相关小训练集场景下取得了最高的样本效率。

由于自动工业异常检测是计算机视觉最成功的应用之一,通过PatchCore所获得的改进对这一领域的从业者而言可能具有显著价值。由于我们的研究专注于工业异常检测,其带来的负面社会影响较为有限。尽管该基本方法在其他更具争议性的领域中也有可能被用于检测系统,但我们认为这些改进并不足以改变此类系统在社会中的应用方式。

尽管PatchCore在工业异常检测中表现出较高的有效性,且无需针对具体问题领域进行专门调整,但其适用性通常受限于所使用预训练特征的可迁移性。这一问题可通过将PatchCore的有效性与所用特征的自适应相结合来解决。

SK

WideResNet50---ResNet50

metrics

I-AUROC、I-AP、I-F1、P-AUPRO、P-AUROC、P-AP、P-F1

相关推荐
QY_Research_4 小时前
全球钥匙联锁系统 市场规模及CAGR5.2%深度分析
大数据·人工智能·物联网·安全·机器人
Even_ISP_Color4 小时前
NAFNetLocal_池化窗口一致性
人工智能·深度学习·机器学习
白露与泡影4 小时前
Spring AI Alibaba -- 文生图、文生音及向量化
java·人工智能·spring
AI你一生一世4 小时前
当“版权主张”不再需要人类:从 Luanti 被下架看自动化维权的工程化风险
运维·人工智能·自动化·开源软件·内容分发·自动化维权·版权主张
港股研究社4 小时前
换了多个AI之后,我的创作项目在豆包工作集合
人工智能
森山冶仁4 小时前
数据飞轮的企业版切入:四个环节先做哪个
人工智能·数据治理·数据要素·数据质量·数据资产
xianghongtao01164 小时前
DeepSeek成名之后的路
人工智能·智能体·deepseek·deepseek融资·端脑科技·商业新闻
linktokenview4 小时前
GLM-5.3-Flash私有化部署实践指南
人工智能
W_326004 小时前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉