深度学习论文: Towards Total Recall in Industrial Anomaly Detection及其PyTorch实现
Towards Total Recall in Industrial Anomaly Detection
PDF: https://arxiv.org/pdf/2106.08265.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks
1 概述
在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。
PatchCore对SPADE,PaDiM等一系列基于图像Patch的无监督异常检测算法工作进行了扩展,主要解决了SPADE测试速度太慢的问题,并且在特征提取部分做了一些探索。相比SPADE,PaDiM,PatchCore 仅使用stage2、stage3的特征图进行建模,通过增加窗口大小为3、步长为1、padding为1的平均池化AvgPool2d增大感受野后拼接,使用KNN Greedy CoreSet 采样选取最具代表性的特征点(选择与其他特征点最远的点以实现尽可能平衡的采样,效果类似泊松圆盘),构建特征向量记忆池,只保留1%~10%的特征数,进而实现高效的特征筛选并用于异常检测。并提出采用了re-weighting策略计算Image-Level的异常得分代替此前的最大值异常得分。
2 PatchCore
PatchCore方法包含了几个部分,首先,我们将局部补丁特征聚合到一个内存库中,这样可以更好地存储和管理特征信息。然后,我们使用核心集缩减方法来提高算法的效率,这样可以减少计算复杂度并加快处理速度。最后,我们提出了一个完整的算法,用于进行检测和定位决策,这样可以实现对缺陷的准确识别和定位。通过这些步骤,PatchCore方法能够有效地应对大规模工业制造中的缺陷检测任务。
2-1 Locally aware patch features
PatchCore使用在ImageNet上预先训练的网络φ,采用ResNet-50 / WideResNet-50 进行特征提取
1.创建一个存储块M,存储patch features
2.从中间层获取特征
3.采用局部邻域聚合的方法来增加感受野,然后合并特征
具体实现:
1.提取邻域的特征
2.合并邻域的特征集合(采用Adaptive Average Pooling),组合feature map
3.局部特征集合
4.遍历整个数据集,取并集,得到特征存储块
M
M
M
2-2 Coreset-reduced patch-feature memory bank
随着输入样本增加,记忆库 M M M也会随之增大,要求更大的存储空间和推理时间。因此,本文使用coreset subsampling方法来减小 M M M,coreset selection旨在找到一个子集 S ⊂ A S⊂A S⊂A,对于通过 A A A 得到的解,通过 S S S 可以快速得到最近似解。
2-3 Anomaly Detection with PatchCore
通过预训练好的ResNet-50在正常样本上面进行特征提取,随后再采用 coreset subsampling,进行有效的降采样生成更加核心的特征集即memory bank 。
在测试的时候,将提取到的特征通过 nearest neighbour search(最近邻搜索:每个query进来,首先找最近距离最近的领域质心,找到距离query最近的质心后,锁定该领域) 然后在该领域内计算距离最远的数据点,用该距离计算anomaly score,判断是否异常,得到结果。