【异常检测】新版异常检测库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_env

pip 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

畅享清凉乐趣,气膜水上乐园的五大优点—轻空间

夏日的到来,让我们一同探索气膜水上乐园所带来的独特魅力。这里有着不同于传统水上乐园的五大优点,让您尽情享受清凉乐趣,感受畅游的无限畅快! 1. 全年无休,尽享水上乐趣 气膜水上乐园的特殊建造材料和创新设计&#x…

qml 调用 C++函数

1、新建一个类 1)继承自QObject类(记得添加QObject头文件) 2)增加Q_OBJECT宏 3)在需要调用的类成员函数前添加Q_INVOKEABLE声明 注意1:如果没有2)和3),运行后提示函数类型错误 注意2&#…

CTF数据安全大赛crypto题目解题过程

CTF-Crypto加密题目内容 下面是一个Base64加密的密文 bXNobnszODdoajM3MzM1NzExMzQxMmo4MGg0bDVoMDYzNDQzNH0原文链接: 数据安全大赛CTF-Crypto题目 - 红客网-网络安全与渗透技术 我们用Python写一个解密脚本: import base64 import time #base64加密…

外贸人绝不能错过的欧洲市场如何开发?

欧洲市场作为世界上消费较大且较高的市场之一,容量大且接纳性强,不少外贸企业都希望在欧洲市场上掘金。 今天,我们就一起来看外贸人绝不能错过的欧洲市场如何开发?现在的欧洲还有哪些机会? 一、欧洲基本情况及市场特点…

各种依赖注入和分层解耦

分层解耦 三层架构 controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据 service:业务逻辑层,处理具体业务的逻辑 dao:数据访问,负责数据访问操作,包括数据的增、删、改、查 流程为&…

wsl2安装rancher并导入和创建k8s集群

环境准备 安装wsl2点击此文]ubuntu20.04安装docker 点击此文,安装完成后docker镜像仓库改成阿里云镜像加速地址.如果不熟请点击此文 docker 安装rancher 启动wsl,根据官方文档以root身份执行 sudo docker run -d --restartunless-stopped -p 80:80 -p 443:443 --privileged …

位图转矢量图在线Ai神器,让你的图片无限放大不失真的秘密武器,重点免费、免费、免费

💻开局附上神器地址:Convert PNG, JPG files to SVG vectors online - svg.tmttool.com 这边结合自己的使用场景简单做下使用教程👇商业场景中经常需要对Ai生成的插画图进行二次创作,了解Ai做图的小伙伴就知道生成的图分辨率有限&…

2W 3KVDC 隔离 稳压单输出 DC/DC 电源模块——TPB 系列

TPB系列的输出带稳压和短路保护,特别适合于对输出电压精度和输出纹波噪声有要求的场合,完全兼容TPR和TPG的安装要求。

实现网站HTTPS访问:全面指南

在当今网络安全至关重要的时代,HTTPS已经成为网站安全的基本标准。HTTPS(超文本传输安全协议)通过在HTTP协议基础上加入SSL/TLS加密层,确保了数据在用户浏览器和服务器之间的传输是加密的,有效防止数据被窃取或篡改&am…

河北公司推行精益管理咨询时需要注意哪些问题?

近年来,越来越多的河北公司开始关注并推行精益管理咨询,以期通过优化流程、降低成本、提高效率来获得竞争优势。然而,在实施过程中,公司需要注意一系列问题,以确保精益管理咨询能够顺利推进并取得预期效果。天行健精益…

社交媒体数据恢复:海鸥

在使用社交软件的过程中,难免会遇到一些问题,例如误删聊天记录、丢失重要信息等。对于海鸥社交软件的用户来说,了解如何恢复数据是非常重要的。本篇将为您提供一份详细的海鸥社交软件数据恢复教程。 一、备份与预防措施 在遇到数据丢失的问…

Web地理空间引擎

Web地理空间引擎是指用于在Web上创建和显示地理空间信息的软件平台。它们通常提供一组API和工具,用于加载、可视化和分析地理空间数据。Web地理空间引擎被广泛应用于各种应用,例如地图、导航、位置服务、游戏和模拟等。北京木奇移动技术有限公司&#xf…

【C语言】模拟实现深入了解:字符串函数

🔥引言 本篇将模拟实现字符串函数,通过底层了解更多相关细节 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自…

BLIP2预研笔记

0. 前言 文章是公司内部分享学习写的预研报告,里面有小部分文段是直接从网上借鉴的,侵删 1. 任务和方法历史进化: 在大模型等类似的预训练模型的方式(以包含“预训练阶段”等n阶段训练方式为特色)为主流之前&#xf…

Allegro PCB designer放置振列过空,Via Array,

首先 Place >>Via Array, 然后配置options 选项卡。 最后鼠标左击一下,拉个区域框,再点击一下。如下图 尤其注意鼠标左击一下再左击一下。

电路板维修【一】

最近喜欢上了电路板维修,经常看很多博主的维修视频,觉得还是颇有收获的(维修板子原来有方法可循),于是做笔记如下: 一.【修了半天也没找到问题,原来是检查方向错了,变频油烟机板维修…

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展,小程序作为一种轻量级、易传播的应用形态,逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式,与小程序结合后,不仅为观众提供了更为便捷的观看体验,…

清华团队国产“Sora”火了!画面效果对标OpenAI,长度可达16秒,还能读懂物理规律

Sora席卷世界,也掀起了全球竞逐AI视频生成的热潮。 就在今天,国内又有一支短片引发关注。 视频来自生数科技联合清华大学最新发布的视频大模型「Vidu」。 从官宣消息看,「Vidu」支持一键生成长达16秒、分辨率达1080p的高清视频内容。 更令…

JSP ssm 智能水表管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 智能水表管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

JSP ssm 房屋中介管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 房屋中介管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…