SAHI强化YOLOv5在小目标上的表现

文章目录

  • 环境
  • 前言
  • 安装sahi
  • yolov5检测
  • sahi
  • 添加新的检测模型

环境

  • ubuntu 18.04 64bit
  • sahi 0.8.4
  • yolov5 5.0
  • pytorch 1.7.1+cu101

前言

目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域,各种目标检测网络层出不穷,然而,小目标的检测和在大尺寸图像上的推理在实际应用中依然有诸多问题。 SAHI (Slicing Aided Hyper Inference)就是用来帮助开发人员解决这些现实问题,它是一个轻量级的视觉库,可以在不重新训练原始检测模型(目前支持 yolov5 和 mmdetection)的情况下提升小目标的检出率,而且 gpu 资源的使用并没有大幅提升。

安装sahi

库的安装非常简单,直接使用 pip 安装最新版本,执行命令

pip install sahi

yolov5检测

sahi 使用的 YOLOv5, 这个我们前文已经介绍过了,参考 pip安装YOLOv5

# 安装gpu版torch和torchvision,这里使用1.7.1版本
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# 安装其它依赖
pip install yolov5

可以明显看到图片上方的一些汽车目标没有被检测出来

sahi 

首先安装2个基础依赖库

pip install fiftyone imantics

再来看下面的示例代码

from sahi.utils.yolov5 import download_yolov5s6_model
from sahi.model import Yolov5DetectionModel
from sahi.utils.file import download_from_url
from sahi.predict import get_sliced_prediction
yolov5_model_path = 'yolov5s6.pt'
# 下载模型
download_yolov5s6_model(destination_path=yolov5_model_path)
# 下载测试图片
download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg', 'small-vehicles1.jpeg')
# 使用的YOLOv5检测模型,使用gpu加速,置信度0.3
detection_model = Yolov5DetectionModel(model_path=yolov5_model_path,confidence_threshold=0.3,device="cuda", # or 'cpu'

执行上面代码,得到

可以看到,在同一张测试图片上,使用同样的模型,sahi 库可以让 yolov5 检测出更多的目标 sahi 的切片推理原理如下图 

sahi 提供了命令行工具 sahi,使用它可以完成快速检测

sahi predict --source small-vehicles1.jpeg --model_type yolov5 --model_path yolov5s6.pt --model_device cuda --export_visual --project results 

 

添加新的检测模型

目前的 sahi 只支持 yolov5 和 mmdetection,但是,我们可以很方便的添加新框架的支持,你只需要在 sahi/sahi/model.py 文件中创建一个新的类,这个类继承自 DetectionModel,然后依次实现 load_modelperform_inference_create_object_prediction_list_from_original_predictions_create_original_predictions_from_object_prediction_list这几个方法即可,具体的可以参考 Yolov5DetectionModel 类的实现。

QQ767172261

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

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

相关文章

速卖通(AliExpress)店铺流量怎么转化?自养号测评策略

随着全球电商的蓬勃发展,速卖通(AliExpress)作为中国领先的跨境电商平台,为卖家提供了一个广阔的销售舞台。然而,对于卖家来说,如何让速卖通店铺实现转化,吸引更多的买家成为关键。 一、速卖通…

Docker 与 Podman:揭示容器编排的最佳 25 大常见问题解答

让我们告诉你一件事。 这不仅仅是这两个强大平台之间的普通比较。 相反,我们分析并列出了有关 Docker 与 Podman 的最紧迫问题。 但这里有一件事——这些问题不仅被技术角度所包围。 我们还深入研究了业务环境,因为我们知道这不仅仅是关于代码。这是…

javaweb `jdbc.properties`文件编写

问题:查询数据库查不到,大概率是两者编码对应不上? 问题描述: 从数据库查询这一句,但数据库是有这个值的。 解决办法: 这是jdbc.properties里面写的内容 drivercom.mysql.jdbc.Driverurljdbc:mysql://12…

Kubectl Patch 的应用

报错 先前创建的crds不会删除。仍处于终止状态 [root@k8s-01 clickhouse-cluster]# kubectl apply -f sample05.yaml Error from server (MethodNotAllowed): error when creating "sample05.yaml": create not allowed while custom resource definition is term…

虚幻商城 蓝图汇总

文章目录 程序化Procedural Road Generator(程序化道路生成器)Procedural City Creator Tools(程序化城市创建者工具)战斗系统Basic Melee Combat System(基本近战战斗系统)Basic Multiplayer Melee Combat System(基本的多人近战战斗系统)Advanced Locomotion System …

【07】ES6:对象的扩展

一、对象字面量语法扩展 1、属性简写 当属性名称和属性值的变量名称相同时,可以省略冒号的变量名称。 const foo barconst baz { foo } // 等同于 const baz { foo: foo }baz // { foo: bar }function f(x, y) {return { x, y } } // 等同于 function f(x, y)…

js加密的原理

JavaScript加密的原理主要基于一种或多种加密算法,如AES(Advanced Encryption Standard)、RSA(Rivest-Shamir-Adleman)、SHA-256(Secure Hash Algorithm 256)等。这些算法将明文(未加…

C#修饰符

C#修饰符 在C#中,修饰符主要的用途是表示当前类,函数,成员变量可以被访问的范围。 常见的有以下几种 Public:公共修饰符,表示该成员可以从任何地方访问。Private:私有修饰符,表示该成员只能从类…

jmeter简单压测kafka

前言 这也是一个笔记,就是计划用jmeter做性能测试,但是这里是只要将数据放到kafka的topic里,后面查看下游业务处理能力。 一、方案 因为只要实现数据放到kafka,参考了下博友的方案,可行。 二、方案验证 详细过程就不…

iptables详解

1、介绍 iptables 是一个在 Linux 系统上用于配置和管理防火墙规则的工具。它允许系统管理员定义数据包的过滤规则、网络地址转换(NAT)规则和数据包的网络地址和端口的转发规则。iptables 提供了非常灵活和强大的功能,可以用于保护网络安全、…

微服务实战系列之MQ

前言 从今天起,席卷北国的雪,持续了一整天,北京也不例外。这场意外的寒潮,把整个冬天渲染的格外cool。当然你可以在外面打雪仗、堆雪人、拉雪橇,也可以静坐屋内,来一场围炉煮茶的party。此刻,冬…

KUKA机器人如何隐藏程序或程序段?

KUKA机器人如何隐藏程序或程序段? 如下图所示,新建一个示例程序进行说明, 如下图所示,如果红框中的动作指令不想让别人看到,想隐藏起来,如何做到? 如下图所示,在想要隐藏的程序或程序段的前后,分别添加 ;fold 和 endfold指令(这里要注意是英文状态下的输入法), 如…

安卓跳转页面闪屏,方法里需要传View 参数

/*** 跳转到首页的公共方法* */public void ToIndexpage(View v){//设置跳转的页面Intent intent new Intent(this, MainActivity.class);//实行跳转startActivity(intent);}

JS基础之闭包

JS基础之闭包 闭包闭包的目的闭包的优缺点 闭包 官方定义: 闭包是能够访问到自由变量的函数。 自由变量:能够在函数中使用,但是不是函数的参数,也不是内部的局部变量。 示例: var a 1; function foo(){console.log(a…

【Jmeter】Jmeter基础5-Jmeter元件介绍之线程(用户)

2.5.1、线程组 一个线程组即一个虚拟用户组,线程组中的每个线程即为1个虚拟用户,每个线程互相隔离,互不影响参数说明: 在取样器错误后要执行的动作 继续:忽略错误,继续执行启动下一进程循环: 终…

JS 有哪些数据类型

JS 有哪些数据类型 7 大基本数据类型:Number、String、Boolean、Null、Undefined、Symbol、BigInt。 引用数据类型:Object。 Array、Date、RegExp、Map、Set 等本质上都属于 Object,typeof 出来的结果都是 object。 拓展: 1、B…

解决:ModuleNotFoundError: No module named ‘docx‘

解决:ModuleNotFoundError: No module named ‘docx’ 文章目录 解决:ModuleNotFoundError: No module named docx背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错: Trace…

LainChain 原理解析:结合 RAG 技术提升大型语言模型能力

摘要:本文将详细介绍 LainChain 的工作原理,以及如何通过结合 RAG(Retrieval-Aggregated Generation)技术来增强大型语言模型(如 GPT 和 ChatGPT 等)的性能。我们将探讨 COT、TOT、RAG 以及 LangChain 的概…

_try_finally原理探究后续

入口程序的最后一道防线 这里调用mainCRTStartup(),然后调用入口程序 相当于这里才是一个进程开始执行的地方 这里有一个call调用,跟进去看看 发现有修改fs:[0]的操作,这里就相当于编译器为我们注册了一个异常处理函数 这里到kernel32.dll里面…

jsp 学科竞赛成绩管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 学科竞赛成绩管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…