研读论文——《实现工业异常检测的完全召回》

目录

整体概述

论文标题

核心问题:

创新方法:

论文讲解:

局限分析:

提出的问题:

创新性方法的实现:PatchCore

1. 局部图像块特征表示

2. 内存银行机制

3. 核心子采样(Coreset Subsampling)

4. 异常检测与定位

5. 推理效率与性能优化

总结

公式说明

1. 图像块特征聚合公式

2. 内存银行构建与查询公式

名词解释

【1】局部聚合

【2】内存银行机制

内存银行机制的工作原理:

总结:


整体概述

论文标题

Towards Total Recall in Industrial Anomaly Detection

核心问题:

        该论文解决了工业制造中异常检测的“冷启动”问题,即仅使用正常样本来训练模型,从而检测未见过的异常样本。冷启动问题在很多工业场景中十分普遍,获取正常样本较容易,但确定异常样本的多样性非常困难且成本高。

创新方法:

论文提出了一种新方法PatchCore,用于解决冷启动异常检测问题。PatchCore的创新点在于:

  1. 最大化正常样本的代表性:通过使用最大代表性存储库来存储图像块特征。

  2. 减少对ImageNet类的偏见:通过使用局部特征聚合技术避免过度依赖ImageNet数据集的类别。

  3. 高效推理:通过引入贪婪的核心子采样(coreset subsampling)策略来降低存储需求和推理时间,同时保持检测性能。

        该方法依赖于预训练模型(ImageNet)作为特征提取器,但结合了局部聚合【1】和内存银行机制【2】,以便在测试时高效地利用仅有的正常样本数据。

论文讲解:

        论文首先提出了冷启动异常检测问题,并阐述了现有方法的局限性。接着,作者介绍了PatchCore的工作原理,重点讲解了如何通过提取图像的局部特征并将其存入内存银行来增强模型的异常检测能力。接下来的部分详细描述了如何通过核心子采样来优化内存银行,减少冗余并提升推理速度。最后,作者在多个工业数据集(如MVTec AD和MTD)上进行实验,展示了PatchCore在图像级和像素级异常检测上的优秀表现。

论文分为以下几个主要部分:

  1. 引言
    引言部分首先介绍了工业异常检测的背景,特别是针对工业视觉检查中的“冷启动”问题。文中提到,许多工业应用中,只有正常样本(非缺陷样本)可供训练,而缺陷样本既难以获得,也可能种类繁多且多变。冷启动问题的核心挑战是如何仅使用正常样本训练出一个可以有效识别并定位异常的模型。作者提到现有的深度学习方法在这种任务中的潜力,尤其是通过利用ImageNet等预训练模型的深层特征,但是这类方法也面临诸如对目标领域不适应、推理速度慢等问题。为了解决这些问题,本文提出了PatchCore,一种基于局部图像块特征的异常检测方法,通过最大化正常样本的代表性来提高检测精度,同时保证推理效率。

  2. 相关工作
    在相关工作部分,作者回顾了工业异常检测的研究历程,尤其是在冷启动情况下的模型训练方法。现有的工作多依赖于自编码器、生成对抗网络(GAN)等技术来学习正常样本的分布,从而检测偏离这一分布的异常样本。作者还提到了一些基于ImageNet预训练特征的方法,这些方法虽然在缺陷检测上取得了不错的效果,但由于其过于依赖ImageNet数据集中的类别,导致在工业应用中缺乏灵活性和适应性。相比之下,PatchCore通过使用局部图像块特征并引入内存银行机制,能够在不依赖于领域特定训练数据的情况下,有效提高异常检测的性能。

  3. 方法

    • PatchCore的框架
      本文提出的PatchCore方法,核心思想是使用图像的局部特征(图像块)来进行异常检测。具体来说,PatchCore通过一个预训练的卷积神经网络提取正常图像的局部特征,这些特征被存储在内存银行中。为了避免对ImageNet类别的过度依赖,PatchCore采用了局部特征聚合方法,将图像块的特征与邻近图像块的特征进行组合,从而提升对局部异常的检测能力。

    • 内存银行机制
      为了更有效地使用正常样本,PatchCore引入了内存银行机制,存储所有正常样本的特征。在测试阶段,PatchCore通过与内存银行中存储的特征进行相似性匹配,判断测试图像是否包含异常。这一机制能够显著提高异常检测的准确性和效率。

    • 核心子采样
      为了进一步提高推理效率,PatchCore采用了核心子采样技术,减少内存银行中的冗余数据。这一策略通过贪心算法选择最具代表性的特征子集,从而减少存储需求和计算成本,同时保持较高的检测性能。

  4. 数据集与实验
    实验部分主要使用了MVTec AD和MTD数据集进行验证。MVTec AD是一个广泛使用的工业异常检测基准数据集,包含多种不同类别的缺陷图像。实验结果表明,PatchCore在多个数据集上的表现超越了当前最先进的方法,特别是在AUROC(接收操作特征曲线下的面积)指标上,PatchCore达到了99.6%,显著减少了检测误差。与此同时,PatchCore在低样本学习(low-shot learning)条件下也表现出了较高的样本效率,能够在仅使用少量正常样本的情况下达到较好的检测效果。

  5. 可视化与分析
    为了验证PatchCore的有效性,论文使用了GradCAM等方法对检测结果进行了可视化。结果显示,PatchCore能够准确地关注到图像中的异常区域,尤其是细粒度缺陷,如微小划痕和结构性缺失。通过热图可视化,能够直观地看到PatchCore在测试过程中如何识别出局部异常,从而提高了异常定位的精度。

局限分析:

  1. 计算成本:尽管PatchCore在推理时间上表现良好,但在大规模数据集上,尤其是图像分辨率较高时,仍然可能需要相对较大的存储和计算资源。

  2. 泛化能力:PatchCore主要依赖于ImageNet预训练的特征,虽然它可以有效地应用于工业异常检测,但在某些行业或数据集上,特征转移的效果可能受到限制。未来可能需要进行特定领域的适配。

  3. 数据需求:PatchCore在小样本学习的情况下具有较好的性能,但仍需要一定量的正常样本。如果训练数据极其稀缺,可能需要考虑其他增强方法。

提出的问题:

  • Why型:为什么PatchCore在冷启动异常检测任务中比传统的基于重建误差的模型(如自编码器)更优?

  • How型:如何将PatchCore扩展到需要少量标注样本的场景中,尤其是当数据分布与训练数据有较大偏差时?


创新性方法的实现:PatchCore

        在论文《Towards Total Recall in Industrial Anomaly Detection》中,作者提出了一种创新性的方法——PatchCore,用于解决工业异常检测中的冷启动问题。PatchCore的核心思想是通过使用局部图像块特征和内存银行机制来实现高效且准确的异常检测。以下是该方法实现的详细讲解:

1. 局部图像块特征表示

        PatchCore的创新之一是利用局部图像块特征而非传统的全图特征进行异常检测。传统的异常检测方法通常依赖于整个图像的特征表示,这样的全局特征往往忽视了图像中局部区域的细微变化。然而,在工业异常检测中,许多缺陷可能表现为图像中的局部变化,如微小的划痕、裂纹或缺失部件。为了解决这个问题,PatchCore通过提取图像中的局部图像块特征来聚焦在局部异常上。

  • 局部特征提取:PatchCore使用一个预训练的深度神经网络(如ResNet-50)作为特征提取器。这些网络的最后几层能够提取到图像的高层次特征,但对微小的局部异常仍然可能不够敏感。为了克服这一问题,PatchCore通过局部聚合的方式,从网络的中间层(如层2和层3)提取图像块特征。局部聚合有助于保持较高的空间分辨率,同时避免了过多依赖低层次的图像特征,这样可以捕捉到细粒度的异常信息。

  • 局部特征聚合:PatchCore不仅提取每个图像块的特征,还通过聚合图像块邻域内的特征来增强特征的稳定性。这种聚合可以通过平均池化或其他聚合方法来实现,以确保每个图像块在其邻域内得到充分的上下文信息。这种方法能够有效减少局部噪声的影响,提高对微小异常的敏感度。

2. 内存银行机制

        PatchCore的另一创新在于使用内存银行机制来存储和管理从正常样本中提取的局部特征。内存银行的作用是将所有正常样本的图像块特征存储在一个可查询的存储池中,并在测试时使用这些存储的特征来进行异常检测。具体实现如下:

  • 内存银行的构建:在训练阶段,PatchCore通过从正常样本中提取图像块特征并将这些特征存入内存银行。每个正常图像的特征表示都是基于局部图像块的聚合结果。这些特征被存储在内存银行中,为后续的异常检测提供参考。内存银行的大小随着训练数据的增加而增长,包含了大量的正常样本特征。

  • 测试阶段的异常检测:在测试阶段,当给定一个新图像时,PatchCore首先提取该图像的局部特征,并将这些特征与内存银行中的特征进行比较。通过计算新图像特征与内存银行中存储的特征之间的相似度,PatchCore能够判断该图像是否为异常图像。如果测试图像的局部特征与内存银行中的正常样本特征差异较大,则该图像被判定为异常。

3. 核心子采样(Coreset Subsampling)

        为了提高模型的推理效率,PatchCore引入了核心子采样机制。由于内存银行可能包含大量的特征,为了加速推理过程,PatchCore采用了子采样技术,通过贪婪的核心选择算法,从内存银行中选择出最具代表性的特征子集,从而减少存储需求和计算开销。

  • 贪婪核心选择:核心选择的目标是找到一个子集,使得该子集能够尽可能精确地代表整个内存银行中的特征空间。具体来说,PatchCore使用贪婪算法来选择内存银行中的特征点,这些特征点在空间上尽可能分散,以确保它们能够覆盖内存银行的多样性。通过这种方式,PatchCore能够在不显著降低检测精度的情况下,大大减少推理时的计算负担。

  • 减少冗余:核心子采样不仅减少了存储需求,还能有效减少内存银行中的冗余数据。当内存银行中存储了大量类似的特征时,冗余数据会降低模型的效率。通过核心选择,PatchCore保留了最具代表性的特征,从而提高了推理速度并减少了存储成本。

4. 异常检测与定位

PatchCore不仅能够进行图像级的异常检测,还能够实现像素级的异常定位。具体过程如下:

  • 图像级异常检测:对于每个测试图像,PatchCore计算该图像每个图像块的异常分数。若至少有一个图像块的异常分数超过预设阈值,则整个图像被认为是异常图像。这种方法可以在测试阶段迅速判断图像是否含有缺陷。

  • 像素级异常定位:除了图像级检测外,PatchCore还能够定位图像中的具体异常区域。通过对每个图像块计算异常分数,PatchCore能够生成像素级的异常分数图,从而实现缺陷的精确定位。这一过程有助于在工业应用中对缺陷进行细粒度的分析。

5. 推理效率与性能优化

        PatchCore在保证高性能的同时,注重推理效率的优化。通过内存银行和核心子采样机制,PatchCore不仅在检测精度上表现优秀,而且在推理速度上也具有竞争力。具体的优化策略包括:

  • 推理速度:通过使用核心子采样和局部特征聚合,PatchCore显著降低了推理过程中的计算开销,使得模型可以在大规模数据集上进行高效推理。

  • 高效推理:即使在内存银行较大、数据复杂的情况下,PatchCore也能在不牺牲精度的前提下,保持较快的推理速度。这使得PatchCore在工业场景中具有较高的实用性,尤其是在需要快速响应的实际应用中。

总结

        PatchCore通过局部图像块特征、内存银行机制和核心子采样技术的结合,提出了一种高效且准确的工业异常检测方法。该方法能够在没有异常样本的情况下,仅通过正常样本进行训练,并且在推理过程中能够高效地进行异常检测与定位,具有较强的应用潜力。通过这些创新性方法的实现,PatchCore在工业异常检测中实现了前所未有的性能提升,尤其在低样本学习和冷启动场景下表现出了显著的优势。


公式说明

论文中涉及到几个重要的公式,主要集中在异常检测、特征匹配以及内存银行的构建和查询过程。以下是方法实现中涉及的关键公式,并在讲解过程中对其进行解释:

1. 图像块特征聚合公式

\phi_{i,j}(N^{(h, w)}_p) = f_{\text{agg}} \left( \{ \phi_{i,j}(a, b) | (a, b) \in N(^{(h, w)}_p) \} \right)

这个公式描述了局部图像块特征的聚合过程,其中:

  • \phi_{i,j}(a, b)是图像x_i在第 j 层提取的特征图中的位置 (a,b)对应的特征。

  • N^{(h, w)}_p  是以位置 (h,w)为中心,大小为 p 的邻域,表示图像块的局部区域。

  • 聚合函数 f_{\text{agg}} 用于对邻域内的所有特征进行聚合,形成该位置处的最终特征表示。

        这个公式实际上是在进行图像块级的特征聚合,借此减少了局部噪声的影响,并增强了对细微异常的检测能力。

2. 内存银行构建与查询公式

在训练过程中,PatchCore构建了一个内存银行 M,用于存储正常样本的局部特征。对于每一个正常样本图像 x_i​,PatchCore提取其局部特征并将其存入内存银行。内存银行的构建公式为:

M = \bigcup_{x_i \in X_N} P_s,p(\phi_j(x_i))

        其中,X_N ​表示正常样本集,P_s,p(\phi_j(x_i)) 表示从图像 x_i 中提取的特征并通过聚合函数处理后的局部特征集。内存银行 M 包含了所有正常图像的局部特征表示。

        在测试时,给定一张新图像 x_{\text{test}},PatchCore提取该图像的局部特征并与内存银行中的特征进行比较。测试阶段的异常检测公式如下:

M_C^* = \arg\min_{\substack{M_C \subset M}} \max_{m \in M} \min_{n \in M_C} \| m - n \|_2

        这个公式计算了测试图像的每个图像块特征与内存银行中特征之间的最小距离。如果测试图像的某个图像块与内存银行中的某个特征点的距离较大,那么该图像块就被认为是异常的。


名词解释

【1】局部聚合

        局部聚合(Local Aggregation)​​ 是指对图像中​​局部区域(patches)的特征进行整合与压缩​​,以构建一个紧凑且具有代表性的正常样本特征库。这一过程的核心目标是通过对局部特征的优化处理,减少冗余信息并增强对正常样本的表征能力,从而提升异常检测的鲁棒性。

​示例说明​

假设训练阶段有1000张正常工业零件图像:

  1. ​局部特征提取​​:每张图像被分割为100个patch,共提取100,000个局部特征。
  2. ​局部聚合​​:通过核心集采样选择1,000个最具代表性的特征,存入内存银行。
  3. ​推理阶段​​:测试图像被分割为相同大小的patch,提取特征后与内存银行中的特征进行相似度匹配。若某个patch的特征与内存银行差异显著,则判定为异常区域。

【2】内存银行机制

        在论文中,内存银行机制是PatchCore模型的核心组成部分之一。它的作用是存储训练过程中提取的图像特征,并在测试时通过对这些特征的高效匹配来实现异常检测。具体来说,内存银行是一个包含图像块(patch-level)特征的存储库,用于存储从正常样本中提取的特征表示。

内存银行机制的工作原理:

  1. 图像特征存储:首先,PatchCore使用预训练的网络提取正常样本(即非异常样本)的局部图像块特征。每个图像块的特征代表了图像的局部结构信息,这些特征被存储在一个称为内存银行的存储池中。

  2. 局部特征聚合:为了增强异常检测的能力,PatchCore通过局部特征聚合来减少对ImageNet类的偏见。局部特征聚合是指对于每个图像块,PatchCore不仅考虑该块的特征,还考虑其邻域内的特征,从而获得更丰富的空间信息。这一聚合过程可以帮助模型更好地处理细粒度的异常。

  3. 内存银行的子采样(Coreset Subsampling):为了提高推理效率并减少存储需求,PatchCore使用了贪婪的核心子采样机制。这意味着,在内存银行中,并非所有的特征都被保留,而是选取一部分最具代表性的特征。这种方法能够在保持高性能的同时显著降低计算和存储的开销。

  4. 测试时的异常检测:在测试阶段,PatchCore会将测试图像的图像块特征与内存银行中存储的特征进行匹配。通过计算图像块之间的相似性,模型判断是否存在异常。如果至少一个图像块的特征与内存银行中的特征差异较大,就认为该图像存在异常。

  5. 推理效率:由于内存银行存储了大量的特征,PatchCore能够在不需要重新训练模型的情况下进行高效的异常检测。此外,核心子采样策略进一步减少了内存银行的大小和推理时间。

总结:

        内存银行机制通过存储正常样本的局部特征,允许PatchCore在测试阶段高效地进行异常检测。通过聚合局部特征和应用核心子采样,PatchCore不仅能减少计算负担,还能在冷启动情况下提供高效且准确的异常检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenJGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值