SAHI: Slicing Aided Hyper Inference

news2024/11/27 10:21:44

SAHI是一个用于大规模目标检测和实例分割的轻量级视觉库

概述

目标检测和实例分割是目前计算机视中最重要的应用领域。然而,在实际应中,小目标的检测和大图像上的推理仍然是主要的问题,SAHI 来帮助开发人员用许多视觉实用工具克服这些现实世界的问题

教程

<1>Introduction to SAHI

Sahi:一种用于大规模对象检测和实例分割的视觉库

github开源:GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots

目标检测和实例分割是目前计算机视觉中最重要的应用领域。然而,在实际应用中,小目标的检测和大图像上的推理仍然是主要的问题。

在这里,您可以看到最先进的实例分割模型Cascade MaskRCNN的推理结果:https://github.com/open-mmlab/mmdetection/tree/master/configs/cascade_rcnn#cascade-mask-r-cnn

如图所示,上方较小的汽车不会被检测到。

有没有一种方法,用于检测这些较小的对象,而无需重新训练模型也不需要较大的GPU内存分配?

SAHI(切片辅助超推理)可以帮助开发人员克服这些现实世界的问题

看完这篇文章你就知道了

  • 介绍对象检测和实例分割
  • SAHI的安装
  • 使用SAHI进行切片推理
  • 基于SAHI的图像和数据集切片
  • 使用SAHI为新的检测框架添加支持

介绍对象检测和实例分割

A)目标检测:

目标检测是指对图像中存在的所有目标进行识别和正确标记的方法。

这大致包括两个步骤

1目标定位:在这里,以尽可能紧的方式确定包围框或包围区域,以确定物体在图像中的确切位置。

2:图像分类:本地化的对象,然后馈送到一个分类器,该分类器标记的对象。

B)语义分割:

它是指将给定图像中的每个像素链接到特定类别标签的过程。例如,在下面的图像中,像素被标记为汽车、树木、行人等。然后使用这些段来查找各种对象之间的相互作用/关系。

C)实例分割:

这里,我们将类标签与每个像素相关联,类似于语义分割,不同之处在于它将同一类的多个对象视为单个对象/单独的实体。

<2>Installation of SAHI

GIF summarizing necessary installation steps for SAHI.

这里直接利用指令pip install -U sahi安装

然后安装torchvision,这里我安装过就不再安装了,若是安装遇到困难,可以参考本人的博文,其中有提到crowdcountingp2p代码复现_追忆苔上雪的博客-CSDN博客

然后安装检测框架,比如mmdetmmdet · PyPI

到这里就可在Python中导入和使用任何SAHI函数

 

<3>Sliced inference with SAHI

 Sliced inference with SAHI CLI.

切片推理的概念基本上是在原始图像的较小切片上执行推理,然后合并原始图像上的切片预测。可以如下图所示:

在这里,我们将在此示例图像上展示一个切片推理演示GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots

首先导入教程所需的函数

from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction
from sahi.utils.cv import read_image_as_pil

AutoDetectionModel是一个 factory class,支持流行检测框架,它可用于在任何MMDetection模型上加载和执行切片/标准推理

get_sliced_prediction是用于执行切片推理的函数。

然后,我们需要通过定义所需的参数来创建一个DetectionModel实例

detection_model = AutoDetectionModel.from_pretrained(
    model_type='mmdet',
    model_path=mmdet_cascade_mask_rcnn_model_path,
    config_path=mmdet_cascade_mask_rcnn_config_path,
    confidence_threshold=0.4,
    device="cuda:0"
)

DetectionModel见下图或者开源的代码

model_type可以是‘yolov5’, ‘mmdet’, ‘huggingface’, ‘torchvision’, ‘detectron2’,取决于自己的权重文件

model_path 和 config_path 是成功加载任何模型所必须的

得分低于confidence_threshold的预测将在结果中被忽略。

device参数指定推理设备,可以将其设置为cuda:0或cpu。

读取图片

image = read_image_as_pil(image_dir)

最后,我们可以执行切片预测。在本例中,我们设置重叠率为0.2:

result = get_sliced_prediction(
    image,
    detection_model,
    slice_height = 256,
    slice_width = 256,
    overlap_height_ratio = 0.2,
    overlap_width_ratio = 0.2
)

可视化原始图像上的预测边界框和masks

result.export_visuals(export_dir="result/")
Image("result/prediction_visual.png")

可以下述链接中完成细节https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_mmdetection.ipynb

https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_yolov5.ipynb

基于SAHI的图像和数据集切片

可以独立地使用SAHI(GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots)的切片操作。

例如,可以将单个图像切片为

from sahi.slicing import slice_image
slice_image_result, num_total_invalid_segmentation = slice_image(
    image=image_path,
    output_file_name=output_file_name,
    output_dir=output_dir,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

或者,可以从任何coco格式的数据集创建切片的coco数据集,如下所示

from sahi.slicing import slice_coco
coco_dict, coco_path = slice_coco(
    coco_annotation_file_path=coco_annotation_file_path,
    image_dir=image_dir,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

与SAHI的命令行接口

 sahi predict cli command

使用权重路径对 YOLOv5 模型进行推理:

sahi predict --source image_dir/ --model_type yolov5 
--model_path yolov5s.pt --slice_height 512 --slice_width 512

使用权重路径和配置路径为 MMDetection 和 Detectron2 模型执行推理

sahi predict --source image_dir/ --model_type detectron2 --model_path weight.pt 
--config_path config.yaml --slice_height 512 --slice_width 512

误差分析图/指标

使用COCO格式的数据集创建COCO格式的预测结果

 Gif showing COCO formatted dataset prediction capabilities of SAHI.

sahi predict --source image_dir/ --dataset_json_path dataset.json --model_type yolov5 
--model_path weight.pt --no_sliced_prediction

使用已创建的result.json创建错误分析图:

 Gif showing error analysis capabilities of SAHI.

sahi coco analyse --dataset_json_path dataset.json --result_json_path result.json

指标的含义:

C75: IOU阈值为0.75时的结果

C50: IOU阈值为0.50时的结果

Loc: 忽略定位错误后的结果

Sim: 忽略超类别误报后的结果

Oth: 忽略所有类别混淆后的结果

BG: 忽略所有误报后的结果

FN: 忽略所有假阴性后的结果

模型可能有改进的部分

C75-C50 and C50-Loc=更准确的边界框预测可能带来的收益

Loc-Sim=修正超类别混淆后的潜在收益

Loc-Oth=修正类别混淆后的潜在收益

Oth-BG=修正所有误报后的潜在收益

BG-FN=修正所有假阴性后的潜在收益

交互式可视化

安装fiftyone库:

pip install -U fiftyone

利用预测结果启动一个fiftyone 网络应用程序

 Gif showing interactive visualization capabilities of SAHI.

sahi coco fiftyone --dataset_json_path dataset.json --image_dir image_dir/ result.json

使用SAHI为新的检测框架添加支持

SAHI(GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots)框架目前支持YOLOv5(GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite),所有MMDetection模型(GitHub - open-mmlab/mmdetection at master),HuggingFace 目标检测模型 (https://huggingface.co/models?pipeline_tag=object-detection&sort=downloads),所有Detectron2模型,此外还能轻松加到其他新的框架上

需要做的就是在sahi/models/文件夹路径下(https://github.com/obss/sahi/tree/main/sahi/models)创建 一个新的.py文件然后在.py文件下创建一个继承来自 DetectionModel class(https://github.com/obss/sahi/blob/7e48bdb6afda26f977b763abdd7d8c9c170636bd/sahi/models/base.py#L12)的类,可以将YOLOv5 wrapper (https://github.com/obss/sahi/blob/7e48bdb6afda26f977b763abdd7d8c9c170636bd/sahi/models/yolov5.py#L17)作为一个参考

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

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

相关文章

破案了,c知道就是套壳chatgpt

不过也是好事儿&#xff0c;国内不用魔法也可以用gpt了&#xff0c;比一些公司硬要自己开发二流产品强多了

超牛逼黑客帝国代码雨,装X必用

html 1.用法 在电脑桌面新建一个文本文档&#xff0c;然后将代码复制到文本文档里&#xff0c;再将后缀改为".html"。 2.效果图 <!DOCTYPE html> <html> <head><title>黑客帝国代码雨</title> </head><body> <can…

Grafana中table的使用技巧

将多个指标数据显示在同一个Table中&#xff0c;需要用到Transform功能&#xff0c;利用Transform功能可以将数据进行处理只显示想要的数据&#xff1a;

OA低代码平台为企业踏出信息化系统第一步

随着互联网不断的发展&#xff0c;传统的管理模式已经快速进入淘汰的阶段。在这个快速发展的社会&#xff0c;企业若想快速高效的运营&#xff0c;必须踏出第一步改变—信息化系统。对于一个企业而言&#xff0c;企业员工是办公自动化&#xff08;简称OA&#xff09;生存的根本…

OpenCV for Python 第六天:图像的加法运算和加法加权运算

上一篇博客当中&#xff0c;我们认识了如何获取图片的属性&#xff0c;那么这一篇博客我们就来了解一下有关图像的加法和位运算是什么样的&#xff0c;并通过这些运算完成图片的相关操作 文章目录 加法运算cv2.add()cv2.addWeighted()基础操作符 add() 与基础操作符 的对比 每日…

【golang】12、gin 源码解析

文章目录 快速使用返回响应路由匹配pathqueryMultipart/Urlencoded Form 解析请求MultipartFrom MiddleWare github.com/gin-gonic/gin 是 golang 的 web 框架&#xff0c;其用字典树做路由匹配、支持中间件&#xff0c;本文介绍其源码实现。 快速使用 package mainimport (&…

C语言字符串函数学习

前面已经学习了strcpy和strcmp函数&#xff1b;下面继续学习其他的字符串函数&#xff1b; strcat(字符数组1&#xff0c;字符数组2) 字符串连接 把两个字符数组中的字符串连接起来&#xff0c;把字符串2连接到字符串1的后面&#xff0c;结果放在字符数组1中&#xff1b; …

Microsoft Outlook如何撤回已发送的邮件?

打开想要撤回的邮件→More Move Actions→Recall This Message→成功撤回的前提是对方尚未阅读此邮件

vs Qt工程界面无法使用中文,报编译错误问题解决方案

vs Qt工程界面无法使用中文&#xff0c;报编译错误问题解决方案 若基于visual studio 开发Qt 界面程序时&#xff0c;若想界面显示中文时&#xff0c;如设置按钮文字为“按钮”&#xff0c;编译时报错&#xff0c;如")"&#xff0c;这个是由于文件编码问题 1. 可以…

Prompt 技巧指南-让 ChatGPT 回答更准确

随着 ChatGPT 等大型语言模型 (LLM)的兴起&#xff0c;人们慢慢发现&#xff0c;怎么样向 LLM 提问、以什么技巧提问&#xff0c;是获得更加准确的回答的关键&#xff0c;也由此产生了提示工程这个全新的领域。 提示工程(prompt engineering)是一门相对较新的领域&#xff0c;用…

Milk-V Duo开发板之TF扩容

起因 开发板正式进入系统后&#xff0c;然后通过SSH的方案登录进入&#xff0c;进入以后&#xff0c;使用df -h命令查看&#xff0c;会发现ROOTFS的容量仅仅只有245.9MB&#xff0c;而我们的boot分区的容量也不过128MB&#xff0c;那么我的TF卡一共32GB&#xff0c;剩下的容量…

windows mysql 自动启动bat脚本

上一篇&#xff1a;windows mysql服务自动启动 错误模块名称:ntdll.dll_csdn_aspnet的博客-CSDN博客 根据上一篇文章进行手动启动mysql服务补充&#xff0c;由于演示机器系统安装的为win11家庭版&#xff0c;为了安全起见&#xff0c;在项目演示期间&#xff0c;避免数据库使用…

基于 Junit 的接口自动化测试框架实现

目录 前言&#xff1a; 分层的自动化测试 接口测试的意义 接口测试框架选型 我们封装的接口测试框架 接口测试关键实践 测试代码规范 (仅供参考) 前言&#xff1a; 基于JUnit的接口自动化测试框架可以实现对接口进行自动化测试&#xff0c;并提供了丰富的断言和报告功能…

PALO ALTO NETWORKS 的新一代防火墙如何保护企业安全

轻松采用创新技术、阻止网络攻击得逞并专注更重要的工作 IT 的快速发展已改变网络边界的面貌。数据无处不在&#xff0c;用户可随时随地从各类设备访问这些数据。同时&#xff0c;IT 团队正在采用云、分析和自动化来加速新应用的交付以及推动业务发展。这些根本性的转变带来了…

Kakfa - 多副本架构

文章目录 基本架构Kafka 多副本架构概念优点缺点 图解多副本架构小结 基本架构 Kafka 多副本架构 概念 Kafka 是一个高性能、分布式的消息系统&#xff0c;被广泛应用于各种场景中。在 Kafka 中&#xff0c;多副本架构是保证数据可靠性的重要手段之一。 多副本架构指的是将同…

【动手学深度学习】--12.深度卷积神经网络AlexNet

文章目录 深度卷积神经网络AlexNet1.AlexNet2.模型设计3.激活函数4.模型实现5.读取数据集6.训练AlexNet 深度卷积神经网络AlexNet 学习视频&#xff1a;深度卷积神经网络 AlexNet【动手学深度学习v2】 官方笔记&#xff1a;深度卷积神经网络&#xff08;AlexNet&#xff09; …

Qt的三大优势,打造高效工业软件开发:

强大的跨平台特性&#xff1a;Qt拥有优良的跨平台支持&#xff0c;可以在众多操作系统上运行&#xff0c;包括Microsoft Windows、Linux、Solaris、HP-UX、FreeBSD、QNX等等。这使得开发者可以轻松地将应用程序部署到不同的平台上&#xff0c;提高开发效率和覆盖范围。 面向对…

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

在水利、环境、生态、机械以及航天等领域中&#xff0c;数学模型已经成为一种常用的技术手段。同时&#xff0c;为了提高模型的性能&#xff0c;减小模型误用带来的风险&#xff1b;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…

linux之Ubuntu系列(七)用户管理 终端命令 su 切换用户

# 切换用户 zenxx:su - sup # 录入sup 密码 supxx:$ 切换root用户

Bard:Google AI开始支持中文对话和看图说话了

说起时下火爆的生成式AI&#xff0c;并不是只有ChatGPT。Bard也是一个很优秀的产品&#xff0c;并且刚刚发布的很多有趣的新功能。文末告诉你如何访问Bard。 Google AI在最近的更新中发布了Bard&#xff0c;一个新的语言模型。Bard支持多种语言&#xff0c;包括中文&#xff0…