原文: A practical guide to image-based anomaly detection using Anomalib
1. 简介
在工业生产中,质量保证是一个很重要的话题, 因此在生产中细小的缺陷需要被可靠的检出。工业异常检出旨在从正常的样本中检测异常的、有缺陷的情况。工业异常检测主要面临的挑战:
- 难以获取大量异常样本
- 正常样本和异常样本差异较小
- 异常的类型不能预先得知
这些挑战使得很难使用传统的分类算法训练,需要提出特殊的方法来应对处理。
2. 相关工作
无监督异常检测和定位方法可以分为判别方法和生成方法。
2.1 判别方法
判别方法尝试建模正常样本和异常样本的边界。这类方法首先从图片中生成嵌入特征,进而对比来自OK样本的嵌入。将特征的距离作为异常分数。这类方法能得到较好的结果但是经常缺乏可解释性,我们常常无法判断那一部分导致了异常。例如,当使用诸如SPADE方法。SPADE在测试时使用嵌入向量进行KNN聚类。这意味着推理复杂度规模随着训练集的尺寸增长。推理速度在工业生产中较为重要,因此此类方法降低了其实用性。
2.1.1 PaDiM
在PaDiM之前,一些判别式方法需要深度神经网络训练,或者在一个大的数据集上使用KNN,这些操作都极大的降低了推理速度。这也阻碍了在实际工业环境中的应用。 Patch Distribution Modeling (PaDiM) 旨在解决这一挑战。PaDiM使用在ImageNet分类中预先训练的CNN模型来进行特征嵌入。图像被划分为独立的Patches 并且对每个Patch 进行特征嵌入。PaDiM 使用CNN预训练的所有层。由于这样可能导致许多冗余的信息,在这里它们随机抽样选择嵌入。有趣的是, 这一工作和PCA降维一样好同时还更快。PaDiM假设所有的嵌入特征都服从多维高斯分布,并估计每个Patch的抽样均值和抽样误差参数。最后的结果为每个训练集图片Patch的多维高斯分布。
在推理阶段的异常得分基于测试图片的Patch和学习到的Patch之间的马氏距离给出。最后的异常得分是异常值map 的最大值。这个算法避免了KNN类算法因为训练集的增大导致算法复杂度的递增。
2.1.2 PatchCore
和PaDiM相似,PatchCore将图片单独拆分为patches. PatchCore的想法是如果一个单独的patch 是异常的那么整张图都将被分类为异常。PatchCore 也解决PaDiM面临相同的调整,其目标总结为以下三点:
- 最大化获取在测试时的正常信息。PaDiM局限于通过马氏距离检测Patch级别异常检测。在PatchCore 中,在训练阶段的提取的特征将保存在一个内存库中,在测试时也可以同等获取。
- 减少与ImageNet 分类任务的偏差。与PaDiM相似,同样采用在ImageNet上的预训练模型。为了减少异常检测任务和分类任务的偏差,只是用作为低级特征的中层特征具有更强的泛华性而高级特征更加偏向于ImageNet分类任务。
- 保持较高的推理效率,PatchCore引入了coreset子采样即:近似源数据集结构的同时大大减少了其大小。
在训练阶段,使用预训练的CNN提取特征嵌入,使用corest进行抽样,并且存入内存库。在测试阶段在内存库中使用最近邻搜索,网络结构如下:
2.2 生成类方法
生成类方法尝试从样本中建模每一个类别的真实分布,比如生成一张新的图片。此类方法基于一个想法,即:由于异常模式在训练集中不存在,所以这些异常模式难以被生成。Autoencoder-based方法尝试从自动编解码机中检测输入和输出的不同来进行异常区域检测。一个较高的重建误差区域标识着一个异常区域。GAN-based 类方法假定只有正样本能够被生成。景观这些生成类方法比较符合直观和可解释,但是它们的性能有限,因为一些异常的特征也能够被较好的重建。
2.2.1 CFlow-AD
目前为止,我们已经讨论了判别式方法。CFlow-AD是一类生成式方法。
CFLow-AD 基于一种条件归一化流网络。
3. 性能测试
3.1 Anomalib
Anomalib 是一个开源的异常检测python库,包含上述算法的实现。Anomalib包含一些列异常检测算法,这个库旨在提供为特定需求提供自定义的网络设计,实验跟踪,可视化和超参数优化,这些异常检测的需求。
3.2 Dataset
一个工业生产相关的异常检测数据集是MVTec dataset. 包含5k 高分辨率图片并划分为10中不同的对象和物种纹理类型。每个类都都包含一个没有缺陷的训练集和一个包含各种缺陷的测试集。
3.3 评价指标
评价指标主要是使用AUROC
3.4 Anomalib 安装
官方给出的安装流程,可能会出现问题。对踩过的坑进行总结
- RuntimeError: CUDA error: no kernel image is available for execution on the device
这个错误是因为官方给出的 setup.py 提供的pytorch 安装有问题,重装pytorch即可:
pip uninstall -y torch torchvision torchtext
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
相关链接: https://github.com/openvinotoolkit/anomalib/issues/792
如果重装后提示 anomalib 库找不到,可以注释掉 ./requirements/base.txt中的内容,再次执行:
pip install -e .
文章出处登录后可见!