原文: A practical guide to image-based anomaly detection using Anomalib

1. 简介

在工业生产中,质量保证是一个很重要的话题, 因此在生产中细小的缺陷需要被可靠的检出。工业异常检出旨在从正常的样本中检测异常的、有缺陷的情况。工业异常检测主要面临的挑战:

  1. 难以获取大量异常样本
  2. 正常样本和异常样本差异较小
  3. 异常的类型不能预先得知

这些挑战使得很难使用传统的分类算法训练,需要提出特殊的方法来应对处理。

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面临相同的调整,其目标总结为以下三点:

  1. 最大化获取在测试时的正常信息。PaDiM局限于通过马氏距离检测Patch级别异常检测。在PatchCore 中,在训练阶段的提取的特征将保存在一个内存库中,在测试时也可以同等获取。
  2. 减少与ImageNet 分类任务的偏差。与PaDiM相似,同样采用在ImageNet上的预训练模型。为了减少异常检测任务和分类任务的偏差,只是用作为低级特征的中层特征具有更强的泛华性而高级特征更加偏向于ImageNet分类任务。
  3. 保持较高的推理效率,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 .

【图像异常检测】 Anomalib相关推荐

  1. 图像 异常检测算法_检测图像异常的算法

    图像 异常检测算法 Modern applications are generating enormous amounts of image data. And in the last years, ...

  2. 快速攻克机器学习图像异常检测

    作者 | 小白       责编 | 欧阳姝黎 在机器学习中,处理异常检测任务是很常见的.数据科学家经常遇到必须显示,解释和预测异常的问题.在这篇文章中,我们主要讲述:从时间序列交换为图像.给定一张图 ...

  3. 最新研究总结:工业图像异常检测

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 异常检测,GAN如何gan ? 作者丨小小理工男@知乎 来源丨https://zh ...

  4. 工业图像异常检测最新研究总结(2019-2020)

    点击上方"机器学习算法那些事",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨小小理工男@知乎 来源丨https://zhuanl ...

  5. 图像检测系列之(12)异常检测(13)拼接伪造(14)deepfake | ICCV2021生成对抗GAN汇总梳理...

    (1)GAN改进系列 | 最新ICCV2021生成对抗网络GAN论文梳理汇总 图像编辑系列之(2)基于StyleGAN(3)GAN逆映射(4)人脸 (5)语义生成 | ICCV2021生成对抗GAN梳 ...

  6. 【机器学习】异常检测

    前言 异常检测实际案例:网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等.时间序列的异常又分为点异常和模式异常. 对于一个新观测值进行判断: 离群点检测: 训练数据包含离群点,即远离 ...

  7. 带你读论文丨异常检测算法及发展趋势分析

    摘要:本文根据对现有基于深度学习的异常检测算法的调研,介绍现有的深度异常检测算法,并对深度异常检测算法的未来发展趋势进行大致的预测. 本文分享自华为云社区<[论文阅读]异常检测算法及发展趋势分析 ...

  8. FYD-Focus Your Distribution-关注你的分布:异常检测和定位的从粗到细的非对比性学习-FYD

    论文翻译: Focus Y our Distribution: Coarse-to-Fine Non-Contrastive Learning for Anomaly Detection and Lo ...

  9. 异常检测论文阅读《PANDA: Adapting Pretrained Features for Anomaly Detection and Segmentation》

    <PANDA: Adapting Pretrained Features for Anomaly Detection and Segmentation> CVPR2021 论文背景: 近年 ...

最新文章

  1. matlab 打开txt文件窗口,Matlab读取txt文件、xlsx文件
  2. 第十六届全国大学生智能车竞赛创意组别-航天智慧物流
  3. java多图片上传json_SpringMVC框架五:图片上传与JSON交互
  4. Linux shell利用sed如何批量更改文件名详解
  5. iOS 代码触发button点击事件
  6. 将当前登录用户去重显示。
  7. Bregman 散度
  8. 微信小程序封装api接口方法教程
  9. pycharm打开cmd乱码问题
  10. python 修改ubuntu 的ip
  11. 代码主题darcula_darcula主题模式是()模式。_学小易找答案
  12. 计算机毕业设计ssm基于web的社团管理系统r848z系统+程序+源码+lw+远程部署
  13. Ubuntu下web开发,php编辑器推荐
  14. 简单爬今日头条街拍获取图集
  15. Ask, acquire, and attack: data-free UAP generation using class impressions
  16. MySQL like模糊匹配是否走索引
  17. Boosting三巨头:XGBoost、LightGBM和CatBoost(发展、原理、区别和联系,附代码和案例)
  18. 08年总结评述(一)
  19. java 曲线控件_java画图之曲线拖动
  20. ChatGPT写的C++学习路线是怎样的

热门文章

  1. 配置了多个Filter过滤器,它们的执行顺序是怎么样的?
  2. BZOJ 3527 [Zjoi2014] 力
  3. APP服务器:你想知道的都在这里
  4. 福禄克网络测试仪DSX-5000能做什么?
  5. 从入门到进阶的Python数据分析手册,真香!
  6. Starlink的发展
  7. 宽带噪声语音信号增强matlab,基于声卡和Matlab平台的语音信号增强处理系统
  8. python多进程读同一个文件_python 多进程读写文件
  9. 组播地址使用范围规定
  10. Docker安装Nginx并修改Nginx配置文件