网站建设 淘宝描述psd,商业网站建设设计装饰,app开发cms网站开发,wordpress标题居中1. 概述
异常检测问题在工业图像数据分析中扮演着至关重要的角色#xff0c;其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于#xff0c;正常数据的样本相对容易获取#xff0c;而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题#xff0c…1. 概述
异常检测问题在工业图像数据分析中扮演着至关重要的角色其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于正常数据的样本相对容易获取而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题研究者们开发了多种方法其中一种备受关注的方法是PatchCore模型。 PatchCore模型是一种先进的工业异常检测方法它在MVTec数据集上取得了最先进的性能State of the Art简称SOTA。这个数据集是工业领域内公认的用于评估异常检测算法的标准数据集包含了多种不同类别的工业产品图像既有正常样本也有异常样本。 PatchCore的关键优势在于它的特征提取机制。传统的异常检测方法通常需要大量的标注数据来训练模型以学习正常和异常图像之间的差异。然而PatchCore采用了一种不同的策略它利用了预训练模型如WideResNet50来提取图像特征。这种方法的优势在于预训练模型已经在大型数据集如ImageNet上学习了丰富的视觉特征因此可以直接应用于新的任务而无需进行额外的特征提取训练。
源码地址https://github.com/amazon-science/patchcore-inspection 论文地址https://arxiv.org/abs/2106.08265 2. 算法实现
2.1 整体模型
PatchCore模型在工业异常检测领域中的一项重要创新是其能够评估图像中每个像素的异常程度。这种细致的异常评分机制不仅使得模型能够判断整个图像是否异常还能够精确地定位到异常发生的具体区域。
在PatchCore模型中首先会构建一个内存库Memory Bank该内存库包含了正常图像的特征向量。这些特征向量是通过预训练的神经网络模型从正常图像中提取出来的它们有效地捕捉了正常样本的视觉特征。在模型训练阶段PatchCore仅使用正常图像来构建这个内存库不涉及任何异常样本。
当有新的测试图像进入模型时PatchCore会从这些图像中提取特征向量并与内存库中存储的正常特征向量进行比较。通过计算测试图像特征向量与内存库中最接近的特征向量之间的距离模型可以评估测试图像的异常程度。这个距离越小表明测试图像与正常样本越相似越可能是正常图像反之距离越大表明测试图像与正常样本的差异越显著越可能是异常图像。 上图的左侧蓝色虚线框显示的是学习右侧绿色虚线框显示的是推理流程。 在训练过程中首先将正常图像通过一个预训练的卷积神经网络CNN模型这个模型负责提取每个斑块的特征向量。这里的CNN模型可以是如WideResNet50这类在大型数据集上预训练过的网络它们已经具备了强大的特征提取能力。接着从这些特征向量中进行采样选择最具代表性的一部分特征向量将它们存储在记忆库中。
推理Inference阶段是PatchCore模型进行异常检测的关键时期。在这一阶段新的测试图像同样通过训练有素的CNN模型来提取每个斑块的特征向量。这些特征向量代表了测试图像中每个斑块的视觉内容。
随后模型会计算测试图像中每个斑块的特征向量与记忆库中存储的正常特征向量之间的距离。这个距离可以被视为异常程度的度量距离越大表明测试图像中的斑块与正常样本的差异越大因此越可能是异常的。通过这种方式模型能够评估整个图像的异常情况并且能够对每个像素进行异常评分从而精确地定位到异常区域。
2.2 局部感知
在PatchCore模型中局部感知的补丁特征是通过从图像中提取逐个补丁的特征向量来实现的。这一过程首先利用了一个已经在ImageNet数据集上完成训练的卷积神经网络CNN模型。该模型在此任务中的作用是提取图像特征而不是进行进一步的训练或调整。
随后从预训练的CNN模型中得到的特征向量会经过自适应平均池化处理这一步骤确保了不同尺寸的输入图像能够产生具有一致维度的特征向量为后续的异常检测工作奠定了基础。 在选择合适的CNN模型层级来提取特征向量时最后一层虽然提供了高度聚合和高抽象度的特征向量但存在两个主要问题。首先深层特征由于经过多次卷积和池化操作分辨率较低可能导致局部细节特征的丢失。其次最后一层的特征向量可能受到原始训练任务——如ImageNet分类问题——的影响从而在不同领域的异常检测任务中表现出偏差。
鉴于这些问题本文提出了使用模型中间层的特征向量进行异常检测的方法。这样做可以在保持较高抽象水平的同时减少预训练任务对特征向量的影响。实验结果表明使用中间层特征向量的方法在异常检测任务中取得了很好的效果。
根据实验数据特征向量的提取层级与异常检测任务的准确性之间存在一定的关系。图表显示当使用模型的第二层横轴表示层级编号数字越小代表层级越浅时检测准确率非常高。这一结果证实了PatchCore模型确实从第二和第三层即23提取了特征向量【3】这表明在保持特征的局部细节和减少预训练任务影响之间找到了一个平衡点。
2.3 补丁特征记忆库
其次是补丁特征记忆库Coreset-reduced patch-feature memory bank这部分是将得到的特征向量存储在Memory Bank中。随着训练数据数量的增加更多的数据需要存储在记忆库中这增加了评估测试数据所需的推理时间并增加了存储的内存容量。因此本文提出使用Coreset Sampling对得到的特征向量进行采样并将其存储在Memory Bank中。
采样方法表示如下其中M是采样前的特征向量集MC是采样后的特征向量集。 上述公式意味着进行抽样时要使预抽样的特征向量m和后抽样的特征向量中的最大最小距离最小。
然而这个优化问题是NP-hard需要大量的计算时间来获得最优解。因此在本文中采用了以下两种创新方法以更快地获得一个接近最优的解决方案。
贪婪法的逼近以前的研究中使用的方法已经被采纳。通过随机投影降低维度降低特征向量的维度可以降低上述优化问题的计算复杂度其依据是Johnson-Lindenstrauss补码即降维可以实现良好的准确性。
下图将Coreset Sampling应用于虚拟数据并将结果可视化。
下表比较了随机抽样和Coreset抽样在两个虚拟数据集a和b上的结果其中Coverage代表从原始抽样数据中减少的百分比。可以看出上面的Coreset采样比下面的随机采样更有效率。
下图还显示了每种维度压缩方法在异常检测任务中的还原率横轴和准确性纵轴之间的关系。
上图显示在随机的情况下当减少率达到约10-2时准确率明显下降而在Coreset抽样的情况下准确率并没有下降那么多。因此可以说Coreset Sampling是一种有效的抽样方法可以减少数据的数量同时保留异常检测所需的特征。
最后到目前为止描述的存储库的整个算法显示如下
2.4 用PatchCore进行异常检测。
第三种是用PatchCore进行异常检测它使用获得的记忆库来计算要判别的图像测试数据的异常程度。最初和训练时一样测试数据图像通过训练好的CNN模型来获得每个补丁的特征向量。根据以下公式异常情况是由每块测试数据的特征向量mtest和存储在记忆库中的特征向量m计算出来的。 3.实验
3.1 实验装置
本文在三个不同的数据集上测试了所提方法的有效性。 第一个是MVTec数据集。它被广泛用作基准有15个类别包括瓶子、电缆和电网。这个数据集是本研究的主要重点。 第二个是磁砖缺陷MTD数据集。其任务是检测瓷片图像中的裂纹和划痕。 第三个是迷你上海科技园区mSTC数据集[4]它由12个不同场景的行人视频组成任务是检测异常行为如打架或骑自行车。
3.2 估值指数
接收者操作曲线下的面积AUROC被用来作为区分正常和异常图像的性能指标。按像素计算的AUROC(pixelwise AUROC)和PRO被用作检测适当异常的性能指标其中PRO对异常的大小不太敏感。
3.3 结果
我们从MVTec数据集的结果开始。 下表显示了在AUROC中与传统方法的比较结果。 此外下表显示了按像素计算的AUROC的结果。
对于PatchCore分别以25%、10%和1%来改变存储库的子采样结果显示PatchCore对于AUROC和像素AUROC都更准确。还可以看出当存储库中的子采样百分比降低时准确度并没有下降很多。
mSTC和MTD的结果显示在下表中。这些数据集的结果也超过了传统方法的准确性。 3.4 推理时间
下表显示了每种方法在MVTec数据集上的准确性AUROC、像素AUROC和PRO和推理时间。
从PatchCore的结果可以看出推理时间因Coreset Sampling的百分比不同而有很大差异。特别是在1%的情况下推理时间与100%的推理时间相差不大这表明在保持比传统方法更高的精度的同时实现了快速推理。