缺陷检测~Anomalib

article/2025/8/19 9:04:25

这里说说如何应用Anomalib在数据集不平衡的情况下检测缺陷

Paula Ramos,英特尔 AI 软件布道师,美国 武卓,英特尔 AI 软件布道师,中国 Samet Akcay,英特尔人工智能研究工程师/科学家

在《如何应用Anomalib在数据集不平衡的情况下检测缺陷?》https://mp.weixin.qq.com/s/VWugI_01bh9otZzDuiQz-A中,我们介绍了深度学习异常检测库 Anomalib。简而言之,当您想进行自动缺陷检测,但数据集不平衡时,Anomalib 是一个很好的工具。

希望您已经通过入门 notebook 访问并亲自试用了这个开源项目。如果没有,请不要担心,这篇博文将教您如何结合自己的数据集使用 Anomalib。

在这个示例中,我们将介绍一个令人振奋的 Dobot 机器人工业用例,其中的机械臂用于教育、工业和智能用例中。如果您没有可用的 Dobot 机器人,您可以简单地修改 notebook,避开、注释或改变机器人代码,使其为您所用。

图 1:使用教育机器人进行基于 Anomalib 的缺陷检测。

为了解 Anomalib 的工作原理,我们将看一个检查彩色立方体的生产线(图 1)。其中一些立方体会有洞或缺陷,需要从传送带上取下。由于这些缺陷在生产线上并不常见,我们将为我们的 AI 模型拍摄一些图像。

安装:

按照以下步骤使用源文件安装 Anomalib:

1.使用 Python 3.8 版本创建运行 Anomalib + Dobot DLL 的环境

  • 对于 Windows,使用以下代码:

python -m venv anomalib_env anomalib_env\Scripts\activate
  • 对于 Ubuntu:

python3 -m venv anomalib_env source anomalib_env/bin/activate

2.从 GitHub 存储库中安装 Anomalib 及 OpenVINO™ 要求(在这篇博文中,我们将不使用 pip 安装命令):

python –m pip install –upgrade pip wheel setuptools git clone https://github.com/openvinotoolkit/anomalib.git cd anomalib pip install -e . [openvino] 

3.安装 Jupyter Lab 或 Jupyter Notebook:https://jupyter.org/install

pip install notebook pip install ipywidgets 

4.然后连接您的 USB 摄像头,使用简单的摄像头应用验证它在正常工作。然后,关闭该应用。

可选:如果您可以访问 Dobot,请实施以下步骤:

  1. 安装 Dobot 要求(更多信息请参考 Dobot 文档)。

  2. 检查 Dobot 的所有连接状态,并使用 Dobot Studio 验证它在正常工作。

  3. 将通风配件安装在 Dobot 上,并使用 Dobot Studio 验证它在正常工作。

  4. 在 Dobot Studio(图 2)中,点击“Home”按钮,找到:

  • 校准坐标:立方体阵列的左上角初始位置。

  • 位置坐标:机械臂应将立方体放在传送带上方的位置。

  • 异常坐标:释放异常立方体的位置。

  • 然后在 notebook 中替换这些坐标。有关该步骤的更多说明,请参考自述文件。

5.如需使用机器人运行 notebook,从这里下载 Dobot API 和驱动程序文件,并将它们添加到存储库 Anomalib 文件夹的 notebooks/500_uses_cases/dobot 中。

图 2:Dobot Studio 界面。

注:如果没有机器人,您可以转到另一个 notebook,如 501b notebook,通过这个链接下载数据集,并在那里尝试训练和推理。

Notebook 的数据采集和推理

下面,我们需要使用正常的数据集创建文件夹。在这个示例中,我们创建了一个彩色立方体的数据集,并为异常情况添加一个黑色圆圈贴纸,以模拟盒子上的洞或缺陷(图 3)。对于数据采集和推理,我们将使用 501a notebook。

图 3:用于第一轮训练的数据集。

在采集数据时,请务必将 acquisition 变量设置 为 True  来运行notebook,并为没有异常的数据定义“正常”文件夹,为异常图像定义“异常”文件夹。数据集将直接在 Anomalib 克隆的文件夹中创建,所以我们将看到 Anomalib/dataset/cubes 文件夹。

如果您没有机器人,您可以修改代码以保存图像或使用下载的数据集进行训练。

推理:

对于推理,acquisition 变量应该是 False,我们不会保存任何图像。我们将读取采集到的视频帧,使用 OpenVINO 运行推理,并决定放置立方体的位置:对于正常立方体,放置在传送带上;对于异常立方体,放置在传送带外。

我们需要识别采集标记 — 采集模式为 True,推理模式为 False。在采集模式下,要注意是创建正常还是异常文件夹。例如,在采集模式下,notebook 会将每张图像保存在 anomalib/datasets/cubes/{FOLDER} 中,以便进一步训练。在推理模式下,notebook 不会保存图像;它将运行推理并显示结果。

训练:

对于训练,我们将使用 501b notebook。在这个 notebook 中,我们将使用 PyTorch Lighting,并使用“Padim”模型进行训练。这种模型有几个优点:我们不需要 GPU,只用 CPU 就可以完成训练过程,而且训练速度也很快。

现在,让我们深入了解一下训练 notebook!

导入

在这一部分,我们将解释用于该示例的软件包。我们还将从 Anomalib 库中调用需要使用的软件包。

配置:

有两种方法来配置 Anomalib 模块,一种是使用配置文件,另一种是使用 API。最简单的方法是通过 API 查看该库的功能。如果您希望在您的生产系统中实施 Anomalib,请使用配置文件(YAML 文件),它是核心训练与测试进程,包含数据集、模型、试验和回调管理(图 4)。

在接下来的部分,我们将描述如何使用 API 配置您的训练。

图 4:训练和验证模块。

数据集管理器:

通过 API,我们可以修改数据集模块。我们将准备数据集路径、格式、图像大小、批量大小和任务类型。然后,我们使用以下代码将数据加载到管道中。

i, data = next(enumerate(datamodule.val_dataloader()))

模型管理器:

对于异常检测模型,我们使用 Padim,您也可以使用其他 Anomalib 模型,如:CFlow、CS-Flow、DFKDE、DFM、DRAEM、FastFlow、Ganomaly Patchcore、Reverse Distillation 和 STFPM。此外,我们使用 API 设置了模型管理器;使用 anomalib.models 导入 Padim。

回调(Callbacks)管理器:

为了适当地训练模型,我们需要添加一些其他的“非基础”逻辑,如保存权重、尽早终止、以异常分数为基准以及将输入/输出图像可视化。为了实现这些,我们使用回调Callbacks。Anomalib 有自己的Callbacks,并支持 PyTorch Lightning 的本地callbacks。通过该代码,我们将创建在训练期间执行的回调列表:https://gist.github.com/paularamo/581d6c99504e673a8147e77995478624。

训练:

在设置数据模块、模型和callbacks之后,我们可以训练模型了。训练模型所需的最后一个组件是 pytorch_lightning Trainer 对象,它可处理训练、测试和预测管道。查看 notebook 中的 Trainer 对象示例:https://gist.github.com/paularamo/e25957185d41798c869aec9b8d127c24。

验证:

我们使用 OpenVINO 推理进行验证。在之前的导入部分,我们导入了 anomalib.deploy 模块中的 OpenVINOInferencer。现在,我们将用它来运行推理并检查结果。首先,我们需要检查 OpenVINO 模型是否在结果文件夹中。

预测结果:

为了实施推理,我们需要从 OpenVINOinference(我们可在其中设置 OpenVINO 模型及其元数据)中调用 predict 方法,并确定需要使用的设备:

predictions = inferencer.predict(image=image)

预测包含与结果有关的各种信息:原始图像、预测分数、异常图、热图图像、预测掩码和分割结果(图 5)。根据您要选择的任务类型,您可能需要更多信息。

图 5:预测结果

最后,我们采用 Dobot 机器人的缺陷检测用例基本是这样的(图 6)。

图 6:运行 Anomalib 模型推理的教育机器人。 whaosoft aiot http://143ai.com

使用您自己的数据集的技巧和建议

数据集转换:

如果您想提高模型的准确性,您可以在您的训练管道中应用数据转换。您应该在 config.yaml 的 dataset.transform_config 部分提供增强配置文件的路径。这意味着您需要有一个用于 Anomalib 设置的 config.yaml 文件,以及一个可供 Anomalib config yaml 文件使用的单独 albumentations_config.yaml 文件。

在这个讨论帖中:https://github.com/openvinotoolkit/anomalib/discussions/737,您可以学习如何将数据转换添加到您的实际训练管道。

强大的模型:

异常检测库并非无所不能,在碰到麻烦的数据集时也可能会失效。好消息是:您可以尝试 13 个不同的模型,并能对每个实验的结果进行基准测试。您可以将基准测试入口点脚本用于其中,并将配置文件用于基准测试目的。这将帮助您为实际用例选择最佳模型。

如需更多指南,请查看“操作指南”https://openvinotoolkit.github.io/anomalib/how_to_guides/index.html。

Paula Ramos 自 21 世纪初以来一直在哥伦比亚开发新型集成工程技术,主要涉及计算机视觉、机器人和机器学习在农业领域的应用。在攻读博士和研究生学位期间,她部署了多个低成本的智能边缘和物联网计算技术,这些技术可供农民等不具备计算机视觉系统专业知识的人员操作。她的发明可在严苛和紧急的条件下运行,如没有照明控制的农业和户外环境,也可从容应对高太阳辐射条件、甚至极端高温条件。目前,她是英特尔 AI 软件布道师,负责开发能够理解和重新创造周围视觉世界以满足现实需求的智能系统/机器。

Samet Akcay 是人工智能研究工程师/科学家。他的主要研究兴趣包括实时图像分类、检测、异常检测,以及基于深度/机器学习算法的无监督特征学习。他最近与人联合开发了开源的 Anomalib,这是该领域最大的异常检测库之一。Samet 拥有英国杜伦大学计算机科学系的博士学位,并获得了美国宾夕法尼亚州立大学电气工程系 Robust Machine Intelligence Lab 的硕士学位。他在顶级的计算机视觉和机器/深度学习会议和期刊上发表了 30 多篇学术论文。

武卓是英特尔 AI 软件布道师,专注于 OpenVINO™ 工具套件的研究。她的工作职责涵盖了从深度学习技术到 5G 无线通信技术的领域。她在计算机视觉、机器学习、边缘计算、物联网系统和无线通信物理层算法等方面做出了卓越贡献。她为汽车、银行、保险等不同行业的企业客户提供基于机器学习和深度学习的端到端解决方案,在 4G-LTE 和 5G 无线通信系统方面进行了广泛研究,并曾在中国贝尔实验室担任研究科学家,期间申请了多项专利。她在上海大学担任副教授时,曾作为主要研究人员主导过多个研究项目。


http://chatgpt.dhexx.cn/article/hlPLWLYm.shtml

相关文章

MS-RTOS正式发布啦!!!

仓库地址 GitHub:https://github.com/ms-rtos?fromtimeline GiTee:https://gitee.com/ms-rtos 一、MS-RTOS 简介 MS-RTOS(Micro Safe RTOS) 是翼辉信息全新设计的一款面向未来的安全实时操作系统,其最大的特点是开创…

15. RDMA之RoCE Soft-RoCE

转自:https://zhuanlan.zhihu.com/p/361740115 阅读本文前建议温习“RDMA概述”一文,了解下RDMA领域的基本概念。 我已经在基本概念篇里面跟大家对本领域的基本知识进行了科普,在对于基本的宏观概念有了认识之后,我们就可以开始更…

用firadisk+grub4dos实现的RAMOS的方法

论坛里有很多Ramos的教程,不过大多数大是MS自己的Ramdisk驱动用Ntldr引导方式实现的,最近新兴一个驱动叫firadisk,这个是Grub4DOSMap --mem虚拟出来的硬盘在WIN下的驱动,通过这种方式也能做出Ramos,而且限制很少&#…

基于 PyTorch 的目标检测和跟踪(无敌版)

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.2.1 Last edited: 2023.2.1 目录 图像中的目标检测 视频中的目标跟踪 作者有言 在文章《基于 PyTorch 的图像分类器》中,介绍…

CMSIS-RTOS是什么?

关注星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang CMSIS:Cortex Microcontroller Software Interface Standard,Cortex微控制器软件接口标准。它包含的内容比较多: CMSIS-RTOS:主要用于…

RAM Sequential

前段时间,在公众号上偶然看到一篇很不错的技术分享文章:《南湖处理器DFT设计范例》。文中详细介绍了中科院计算所的RISC-V处理器实施的DFT设计。 去年,也基于一款处理器应用过Share Test Bus技术,但在memory界面fault测试的问题&a…

monoSLAM

单目相机的优点(和双目相机相比):双目相机测得的深度距离收到基线长度的限制,单目相机就可以解决这个问题。 参考博客:http://blog.csdn.net/heyijia0327/article/details/50758944 (一定要看&#xff0c…

Linux一键实现ramos打造自己的livecd

软件名:remastersys作者:nerun个人亲测可用,kali和ubuntu下都成功了,直接一键将当前使用的系统打包成iso,启动测试如下:1:iso直接加载启动成功进入ramos2:iso解压文件到根目录&#…

RAMOS系统简介及制作

同步发布在个人博客上:https://www.zhyong.cn ,可通过搜索文章名称找到该文章! RAMOS系统简介 内存操作系统(RAMOS)是全内存运行,启动后不依赖硬盘的Windows系统。它的原理是利用特殊的软件把多余的内存虚拟为内存盘,然…

如何打造内存操作系统RAMOS?

如何打造内存操作系统RAMOS?添加链接描述 把系统放进内存里 自己打造高速RAMOS 所谓内存操作系统就是全内存运行,系统将不再依赖硬盘。如今科技这么发达,电脑内存也越来越大,如果我们可以利用剩余内存来制作虚拟磁盘&#xff0c…

RAMOS(全内存操作系统)初识----仅供测试

内存操作系统(RAMOS)是全内存运行,启动后不依赖硬盘的Windows系统。它的原理是利用特殊的软件把多余的内存虚拟为内存盘,然后将制作好的操作系统镜像释放到这个虚拟内存盘中运行,让Windows操作系统和应用软件完全工作于内存之中,从…

英语拼读规则

前言: 想学英语就要用英语的思维去学。不能用某国某人指定的方法。误人子弟呀!! 一、就英语就要像学汉语一样要学会拼音,拼音会了汉字自然就会读了。 第一步:26个字母的【音标】要记牢。不只会写字母 也要会写字母对应…

英语名词复数s的发音规则

目录 1. 英语名词复数s的发音规则 1. 在清辅音后发/s/,[p], [t], [k], [h]; [f], [x], [s], [𝛉], [ꭍ]; [ts], [tr], [tꭍ]。记忆顺口溜:婆婆有位特殊的客户 ,她叫福西施,t前缀 2. 在浊辅音和元音后发/z/音&#x…

英语口语中的音变现象及读音规则

英语口语中的音变现象是指再说英语的过程中出于“省力” 的原因,在读英语的时候唇舌处于放松的状态,可以让我们更轻松地说英语。音变现象包括:连读,弱读,缩读,浊化,异化。这五大音变现象最具有代…

英语语法---读音规则

一、48个音标(音素)简表(18大语音语变现象) 单元音又分为前元音、中元音和后元音,其区分点在于发音时舌身是在口腔的前部、中部还是后部 音素发音链接:https://en-yinbiao.xiao84.com/ 18大语音语变现象&…

链表之头指针、头结点、首元结点、空链表

链表之头指针、头结点、首元结点、空链表 文章目录 链表之头指针、头结点、首元结点、空链表前言疑问整理头指针,头结点,首元结点定义首元结点定义头指针定义头结点定义 疑问回答 前言 最近在用力扣刷链表的题,总是写不出来,对这…

求二叉树指定结点到根结点的路径c++ 非常详细。

看了很多 没有看见完整的代码 我喜欢喂饭喂到嘴边。 部分代码参考16 二叉树:以x为根的子树的深度_DHU杨骅麟(紫外线过敏)的博客-CSDN博客 面试经典(16)--二叉树根节点到指定节点的路径_nginux的博客-CSDN博客_二叉树根节点到目标节点路径 运…

二叉树的结点数

二叉树的结点数(*) (10分) 已知二叉树的结点结构定义如下: typedef struct _NODE_ {char data;struct _NODE_ *lch, *rch; } NODE; 说明:data 为数据域,均为英文大写字母。lch 和 rch 分别为指示左、右孩子的指针。 请编写函数,求二叉树的结点个数。 函数原型 // 结点…

求一个结点x在在二叉树中的双亲结点算法

1、算法思想 使用先序递归遍历思想完成算法设计。首先判断节点的左右孩子是否存在,若存在,并且左右孩子中有一个符合查找要求,则返回元素!否则,继续递归查找,直到成功或者找不到符合要求的结点&#xff01…

计算二叉树中结点的个数

思想: 递归实现 图示为举例二叉树进行思路解释 二叉树中结点的个数:只要能计算出A左子树的个数A右子树的个数1 左子树个数:以B为结点的左子树个数右子树个数1 右子树个数:以C为结点的左子树个数右子树个数1 . . . .&#xff0…