【异常检测】新版异常检测库anomalib的使用

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

0. 前言

异常检测库anomalib的使用

20240509142432

1. 前提

1.1 数据组织形式

说明: 分类时不需要mask
20240509141420

数据: https://github.com/openvinotoolkit/anomalib/releases/download/hazelnut_toy_dataset/hazelnut_toy.zip

1.2 安装

最新版的anomalib使用Python3.10

conda create -n anomalib_env python=3.10
conda activate anomalib_envpip install anomalib

2. 分类任务

在异常检测过程中,可能存在异常图片无法获取的情况,所以分两种情况:

  • 有正常图片和异常图片
  • 只有正常图片

2.1 正常图片and异常图片

如下代码,使用Folder类,我们需要指定

  • 数据集名称
  • 数据集根目录
  • 正常图片目录
  • 异常图片目录
  • 任务类型

至此,我们就生成了datamodule。

# Import the datamodule
from anomalib.data import Folder# Create the datamodule
datamodule = Folder(name="hazelnut_toy",root="datasets/hazelnut_toy",normal_dir="good",abnormal_dir="crack",task="classification",
)# Setup the datamodule
datamodule.setup()

2.1.1 数据集

我们可以查看train,valid,test

i, train_data = next(enumerate(datamodule.train_dataloader()))
print(train_data.keys())
# dict_keys(['image_path', 'label', 'image'])i, val_data = next(enumerate(datamodule.val_dataloader()))
print(val_data.keys())
# dict_keys(['image_path', 'label', 'image'])i, test_data = next(enumerate(datamodule.test_dataloader()))
print(test_data.keys())
# dict_keys(['image_path', 'label', 'image'])

我们可以指定验证集和测试集的划分比例可划分模式

20240509095709

默认情况下正常图片为训练集,异常图片为测试集。

20240509114942

默认的验证集是从测试集进行划分的,默认划分比例为0.5

20240509100144

2.1.2 训练

说明: 训练完会进行测试

# Import the model and engine
from anomalib.models import Patchcore
from anomalib.engine import Engine# Create the model and engine
model = Patchcore()
engine = Engine(task="classification")# Train a Patchcore model on the given datamodule
engine.train(datamodule=datamodule, model=model)

2.2 只有正常图片

当只有正常图片时,有两种处理方式:

  • 只进行训练
  • 生成异常图片进行验证和测试

我们这里展示第二种方式

2.2.1 数据集

# Import the datamodule
from anomalib.data import Folder
from anomalib.data.utils import TestSplitMode# Create the datamodule
datamodule = Folder(name="hazelnut_toy",root="datasets/hazelnut_toy",normal_dir="good",test_split_mode=TestSplitMode.SYNTHETIC,task="classification",
)# Setup the datamodule
datamodule.setup()

2.2.2 训练

这里训练和上述类似,

# Import the model and engine
from anomalib.models import Patchcore
from anomalib.engine import Engine# Create the model and engine
model = Patchcore()
engine = Engine(task="classification")# Train a Patchcore model on the given datamodule
engine.train(datamodule=datamodule, model=model)

3. 分割任务

3.1 正常图片and异常图片

3.1.1 数据集

假设我们有一个数据集,其中训练集只包含正常图像,测试集同时包含正常和异常图像。我们还对测试集中的异常图像进行了掩码处理。我们想要训练一个能够检测出测试集中异常区域的异常分割模型

# Import the datamodule
from anomalib.data import Folder# Create the datamodule
datamodule = Folder(name="hazelnut_toy",root="datasets/hazelnut_toy",normal_dir="good",abnormal_dir="crack",mask_dir="mask/crack",normal_split_ratio=0.2,
)# Setup the datamodule
datamodule.setup()

其中datasets和dataloader访问方式如下:

# Access the datasets
train_dataset = datamodule.train_data
val_dataset = datamodule.val_data
test_dataset = datamodule.test_data# Access the dataloaders
train_dataloader = datamodule.train_dataloader()
val_dataloader = datamodule.val_dataloader()
test_dataloader = datamodule.test_dataloader()

3.1.2 训练

# Import the model and engine
from anomalib.models import Patchcore
from anomalib.engine import Engine# Create the model and engine
model = Patchcore()
engine = Engine()# Train a Patchcore model on the given datamodule
engine.train(datamodule=datamodule, model=model)

3.2 只有正常图片

和上述分类一样,当只有正常图片时,有两种处理方式:

  • 只进行训练
  • 生成异常图片进行验证和测试

我们依然展示的是第二种情况

# Import the datamodule
from anomalib.data import Folder
from anomalib.data.utils import TestSplitMode# Create the datamodule
datamodule = Folder(name="hazelnut_toy",root="datasets/hazelnut_toy",normal_dir="good",test_split_mode=TestSplitMode.SYNTHETIC,
)# Setup the datamodule
datamodule.setup()

训练和上述类似

参考

  1. https://anomalib.readthedocs.io/en/latest/markdown/guides/how_to/data/custom_data.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15 华三华为链路聚合综述

1 链路聚合简介 以太网链路聚合通过将多条以太网物理链路捆绑在一起形成一条以太网逻辑链路,实现增加链路带宽的目的,同时这些捆绑在一起的链路通过相互动态备份,可以有效地提高链路的可靠性。 2 成员端口的状态 聚合组内的成员端口具有以下…

Ps 滤镜:视频

Ps菜单:滤镜/视频 Filter/Video “视频”滤镜子菜单中包含了“NTSC 颜色”和“逐行”两个滤镜。 这两个滤镜都是针对视频和电视播放的特定需求设计的。 “逐行”滤镜主要解决交错视频的视觉问题,而“NTSC 颜色”滤镜则确保色彩在电视播放时的兼容性和准确…

Java设计模式 _结构型模式_享元模式

一、享元模式 1、享元模式 享元模式(Flyweight Pattern)是一种结构型模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。主要解决有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来&#x…

OxyPlot关注的窗口(即视图范围)始终设置到数据的最后一段

在OxyPlot中,如果你想要将关注的窗口(即视图范围)始终设置到数据的最后一段,你可以通过动态地更新图表的轴范围来实现。这通常涉及到监听数据的更改事件(如果数据是实时更新的),并在数据更改时调…

django中的日志处理

1、事件追踪 在什么样的时间发生了什么样的事情 2、bug调试 3、程序告警 4、大数据统计 ELK 日志分析系统 elasticsearh logstasn kibana 名词概念 loggers:日志器 —— 定大方向:1 handlers:处理器 —— 执行:3 formatters&#xff…

MongoDB 从部署到掌握

一、docker部署MongoDB ## 通过docker安装MongoDB~~~shell #拉取镜像 docker pull mongo:4.0.3#创建容器 docker create --name mongodb-server -p 27017:27017 -v mongodb-data:/data/db mongo:4.0.3 --auth#启动容器 docker start mongodb-server#进入容器 docker exec -it …

【C++】详细版 RAII技术的应用之智能指针(智能指针发展历程和简单模拟实现介绍)

目录 前言 一、智能指针有什么用? 二、什么是RAII(智能指针的底层思想)? 三、智能指针的发展历程以及模拟实现 1.auto_ptr(C98) 2.unique_ptr(C11) 3.shared_ptr(C11) 前言 C中…

【vulhub靶场】Apache 中间件漏洞复现

【vulhub靶场】Apache 中间件漏洞复现 一、Apache HTTPD 换行解析漏洞(CVE-2017-15715)1. 漏洞详情2. 影响版本3. 漏洞复现 二、Apache多后缀解析漏洞(apache_parsing_vulnerability)1. 漏洞详情2. 漏洞复现 三、Apache HTTP Serv…

深度揭秘MySQL事务机制

在开发Java应用程序时,数据库事务的处理是确保数据完整性和一致性的关键所在。MySQL作为广泛使用的数据库系统,其事务机制对于开发者来说至关重要。本文将深入解析MySQL的事务机制,并通过Java代码示例展示如何在应用程序中正确地使用和管理事…

Spring AOP怎么聊(通俗易懂)

将一些通用的逻辑集中实现,然后通过AOP进行逻辑的切入,减少了零散的碎片化代码,提高了系统的可维护性。 具体是含义可以理解为︰通过代理的方式,面向切面编程,在调用想要的对象方法时候,进行拦截处理&…

SSL/TLS 协议

目录 概述 TLS 握手协议:建立安全连接的基础 TLS 握手流程:建立安全通道的关键步骤 TLS 记录协议:确保数据完整性和机密性 验证分析与 TLS 协议:确保服务器身份和数据完整性 TLS 与 SSL 的差异:演变和改进 结论 …

企业数字化转型走向平台化运营会经历哪些阶段?

蚓链实践总结企业数字化转型走向平台化运营通常会经历以下几个阶段: 1. 规划与准备阶段:明确转型目标和战略,评估现有业务和技术状况,制定转型计划。 2. 基础建设阶段:搭建数字化基础设施,包括云平台、数…

【Python爬虫实战入门】:教你一个程序实现PPT模版自由

文章目录 💥一、PPT模版爬取🔥1.1 第一个爬虫🚲1. 获取下载页面链接 ❤️1.2 第二个爬虫🚲1.3 第三个爬虫🎈2. 文件保存 ❤️1.4 翻页处理 🔥二、完整代码 🔥🔥🔥 Pytho…

【Linux】简易进度条的实现

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

深度学习论文: LightGlue: Local Feature Matching at Light Speed

深度学习论文: LightGlue: Local Feature Matching at Light Speed LightGlue: Local Feature Matching at Light Speed PDF: https://arxiv.org/pdf/2306.13643 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/…

AI算法-高数2-导数定义和公式

P14 2.1 导数的定义(一):2.1 导数的定义_哔哩哔哩_bilibili 导数定义: 导数公式: P15 2.1 导数的定义(二):2.1 导数的定义(二)_哔哩哔哩_bilibili [a,b]可导,a的端点:右可导,b端点&…

vim工作模式

vim 一、vim常用的工作模式 前言 这玩意命令太多,记得几个常用即可命令模式 命令模式:使用vi(vim)打开某个文件的时候默认进入的模式就是命令模式。 这种模式下最基础的功能就是上下左右键,还可以使用按键组合的方…

python学习之argparse模块

1.介绍 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。 我们很多时候,需要用到解析命令行参数的程序。 我们常常可以把argparse的使用简化成下面四个步骤 2.使用步骤…

利用信息差:优惠券分享和变现思路

标题:“利用信息差:优惠券分享和变现思路” 在如今的电商时代,优惠券已成为吸引消费者的重要利器。然而,许多人并不知道,优惠券不仅可以用来省钱购物,还可以成为一种赚取收益的利器。本文将探讨如何利用信…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题(129) Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…