在工业制造领域,产品质量检测是至关重要的一环。传统的人工质检不仅成本高昂,而且容易因疲劳或注意力分散导致漏检、误检。随着计算机视觉技术的发展,基于深度学习的自动化缺陷检测系统正逐步成为工业生产线上的"智能质检员"。
然而一个长期存在的难题是:如何在没有缺陷样本的情况下训练出一个可靠的异常检测模型? 这也是工业场景中典型的"冷启动"问题------通常我们只能收集到大量正常产品图像,而缺陷样本稀少、种类多变,难以覆盖所有异常情况。

本研究聚焦于冷启动工业异常检测------在这种设定下,模型必须仅使用正常(无缺陷)的训练图像来检测和定位缺陷。PatchCore,一个基于块级别记忆库的异常检测框架,它在测试时最大化对正常模式的覆盖,同时保持计算高效。如图1所示,PatchCore无需任何针对具体任务的训练或适应,即可实现最先进的检测和定位性能。
冷启动异常检测的挑战
在真实工业场景中,缺陷样本的收集成本极高,且缺陷类型可能千变万化。因此,冷启动异常检测(也称单类分类) 成为研究重点:模型只能通过正常样本学习"什么是正常",并据此判断测试样本是否异常。
以往的方法主要包括自编码器、生成对抗网络等,它们试图通过重建或生成正常样本来学习其分布,但往往对复杂纹理或结构性缺陷的识别能力有限。
近年来,一种新思路是直接利用在 ImageNet 等大型数据集上预训练的深度特征,通过特征匹配进行异常判断,如 SPADE、PaDiM 等方法。但这些方法仍存在两个主要问题:
- 高层特征偏向自然图像分类,与工业场景差异较大;
- 可用上下文信息有限,导致匹配置信度不足。
PatchCore:如何做到"无缺陷样本"高精度检测?
PatchCore 的核心思想是:构建一个具有强代表性的正常图像特征记忆库,并在推理时通过特征匹配实现异常判断。

PatchCore由三个紧密耦合的组件构成:局部感知的块级特征提取、基于核心集的记忆库缩减,以及基于最近邻的异常评分用于检测和定位。整体流程如图2所示。重要的是,PatchCore以免训练的方式运行,仅依赖于预训练的卷积主干网络和正常数据。
- 局部感知块特征
PatchCore从ImageNet预训练的卷积网络中提取特征图。一个核心设计选择是使用中层特征层级,而非最深层的特征,因为深层特征已知对语义对象类别有强烈偏向。特征图中的每个空间位置对应输入图像中一个感受野的块级表示。
为了增强对小范围空间错位的鲁棒性,同时保持分辨率,PatchCore引入了局部邻域聚合。对于位于空间位置 (h, w) 的一个块,聚合其周围大小为 p 的邻域内的特征:

局部感知的块表示随后通过自适应平均池化计算得出。

这种聚合是一个关键贡献 ,因为它在不加深网络的情况下增大了感受野,从而在保持对细微异常敏感度的同时,减少了ImageNet偏差。 来自相邻层级的块特征在空间上对齐并组合,所有正常的块表示被存储在一个统一的记忆库中。
- 基于核心集缩减的块特征记忆库
为所有正常图像存储块级特征,会导致记忆库规模随数据集快速增大,使得朴素的最近邻搜索不切实际。为解决此问题,PatchCore引入了核心集子采样来压缩记忆库,同时保持其对正常特征空间的覆盖。
记忆库缩减被表述为一个极小极大设施选址问题,目标是寻找一个子集 𝓜꜀,使其能最佳近似原始记忆库𝓜:

由于精确优化是NP难问题,这里采用了一种贪婪近似算法,迭代地选择距离当前子集最远的特征。为了进一步提升效率,PatchCore应用了随机线性投影,利用Johnson--Lindenstrauss引理在核心集选择期间降低维度。如图3所示,与随机子采样相比,此策略能更有效地保留正常特征分布的结构,使得记忆库规模可以数量级地缩减,而性能损失最小。
- 使用PatchCore进行异常检测
在推理阶段,PatchCore从测试图像提取块级特征,并将其与缩减后的记忆库进行比较。对于每个测试块,计算其到最近正常邻居的距离,图像级的异常分数定义为所有块距离中的最大值:

为了提高鲁棒性,PatchCore应用了一种密度感知重加权,该权重考虑了最近正常邻居在特征空间中的孤立程度:

这种重加权强调了远离密集正常区域的异常,是提高召回率的关键设计选择。像素级异常定位通过将块分数映射回其空间位置获得,随后进行插值和高斯平滑以生成密集的异常热力图。
实验结果
实验在多个工业检测数据集上进行了验证,图像级异常检测、像素级异常定位、计算效率以及在有限训练数据下的鲁棒性。实验设计反映了真实的工业检测场景,强调仅正常数据可用的冷启动情况。其中最具代表性的是广泛使用的 MVTec AD 数据集,涵盖15类工业产品,包括纹理类和物体类。
- 模型设置
PatchCore使用ImageNet预训练的卷积主干网络实现,不针对目标数据集进行任何微调。关键配置选择包括:主干网络、特征层级(主要为中层)、块构建参数、记忆库缩减比例等。值得注意的是,PatchCore不需要在目标数据集上训练,因此推理速度和内存效率是设计中的关键因素。
- 评估指标
使用三个主要指标:
图像级AUROC:衡量区分异常图像与正常图像的能力。
像素级AUROC:评估异常定位精度。
PRO:基于区域的度量,衡量预测异常区域与真实区域的重叠程度。
- 在MVTec AD上的异常检测表现




PatchCore在MVTec AD上实现了最先进的图像级异常检测性能。如表1所示,PatchCore达到高达99.1%的AUROC,显著优于PaDiM和SPADE等方法。在像素级AUROC和PRO指标上,PatchCore同样达到了最优性能(表2,表3)。重要的是,其改进版本在更高分辨率图像和集成系统上也能应用,同时保持低于默认版本的推理时间(表4)。
- 推理时间

如表5所示,即使不进行子采样,PatchCore的推理速度也快于SPADE,同时精度更高。通过核心集子采样,PatchCore的推理时间变得显著更快,达到与PaDiM相当或更好的水平,同时保持更优的检测和定位性能。作者也评估了近似最近邻搜索,虽然速度更快,但会导致检测性能明显下降。核心集子采样成为了更有效和稳健的解决方案。
- 消融实验

局部感知块特征与层级选择:图4的结果表明局部邻域聚合的重要性。性能在邻域大小p=3时达到峰值,确认适度的局部上下文对于准确的块级异常检测至关重要。中层特征层级的表现优于浅层和深层,验证了避免过度ImageNet偏差的设计选择。

核心集子采样的重要性:图5比较了贪婪核心集子采样与随机子采样等方法。核心集选择始终能更好地保持性能,在某些情况下甚至能提高联合检测和定位的精度。此外,通过增大步幅来缩减记忆库会导致性能下降,这凸显了保持空间分辨率的重要性。

小样本异常检测:如图6所示,PatchCore展现出卓越的样本效率。仅使用20%的正常训练数据,PatchCore就能达到或超过对比方法使用全部数据训练的性能。即使在极端的1-5个训练样本情况下,PatchCore仍具竞争力。

在其他基准上的评估:如表6所示,在mSTC上,PatchCore无需任何数据集特定调整就实现了最先进的异常定位性能,展示了强大的跨领域可迁移性。在MTD上,PatchCore略微优于DifferNet,尽管该数据集具有很高的类内变异性。
总结
本文提出了PatchCore,一个免训练的、基于记忆库的冷启动异常检测框架,有效地平衡了性能、效率和可扩展性。通过利用局部感知的块级特征和核心集缩减的记忆库,PatchCore在最大化正常上下文覆盖的同时,缓解了ImageNet偏差和推理瓶颈。大量实验证明其在多个基准测试的图像级检测和像素级定位上取得了最先进的结果。该方法在小样本设置下的强劲表现进一步凸显了其实用价值。