YOLOv10的使用总结

 

目录

YOLOv10介绍

部署和使用示例

微调训练



YOLO模型因其在计算成本和检测性能之间的平衡而在实时目标检测中很受欢迎。前几天YOLOv10也刚刚发布了。我们这篇文章就来看看YOLOv10有哪些改进,如何部署,以及微调。

概述
实时物体检测旨在以较低的延迟准确预测图像中的物体类别和位置。YOLO 系列在性能和效率之间取得了平衡,因此一直处于这项研究的前沿。然而,对 NMS 的依赖和架构上的低效阻碍了最佳性能的实现。YOLOv10 通过为无 NMS 训练引入一致的双重分配和以效率-准确性为导向的整体模型设计策略,解决了这些问题

 

YOLOv10介绍


YOLOv10 的架构借鉴了以往 YOLO 模型的优点,同时引入了几项关键创新。模型架构由以下部分组成:

Backbone:YOLOv10 中的骨干网负责特征提取,使用增强版 CSPNet(Cross Stage Partial Network)来改善梯度流并减少计算冗余
Neck:颈部用于汇聚不同尺度的特征,并将其传递给头部。它包括 PAN(Path Aggregation Network)层,可实现有效的多尺度特征融合
One-to-Many Head:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性
One-to-One Head:在推理过程中为每个对象生成一个最佳预测,从而消除对 NMS 的需求,减少延迟并提高效率

核心特点
NMS-Free Training:利用一致的双重分配来消除对 NMS 的需求,从而减少推理延迟

Holistic Model Design:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类头、空间通道去耦向下采样和等级引导块设计

Enhanced Model Capabilities:纳入大核卷积和部分自注意模块,在不增加大量计算成本的情况下提高性能

模型型号
YOLOv10 有多种型号,可满足不同的应用需求

YOLOv10-N:纳米版本,适用于资源极其有限的环境
YOLOv10-S:兼顾速度和精度的小型版本
YOLOv10-M:通用的中型版本
YOLOv10-B:平衡型,宽度增加,精度更高
YOLOv10-L:大型版本,精度更高,但计算资源增加
YOLOv10-X:超大型版本可实现最高精度和性能
性能
在准确性和效率方面,YOLOv10 优于以前的 YOLO 版本和其他最先进的模型。例如,在 COCO 数据集上,YOLOv10-S 比具有类似 AP 的 RT-DETR-R18 快 1.8 倍;在性能相同的情况下,YOLOv10-B 比 YOLOv9-C 减少了 46% 的延迟和 25% 的参数

方法
一致的双重分配,实现无 NMS 训练
YOLOv10 采用双重标签分配,在训练过程中将一对多和一对一策略结合起来,以确保丰富的监督和高效的端到端部署。一致匹配度量可调整两种策略之间的监督,从而提高推理过程中的预测质量效率-准确度驱动的整体模型设计
 

由于YOLO模型本身的结构,其计算冗余和能力有限,在平衡效率和准确性方面面临挑战。所以作者提出了全面的模型设计来解决这些问题,同时注重效率和准确性。

效率驱动型模型设计:

通过使用深度可分离卷积的简化架构来减少计算开销。
分离空间减少和信道增加减少计算成本并保留信息。
使用内在秩分析来识别和减少模型阶段的冗余,用更有效的结构代替复杂的块。
精度驱动的模型设计:

通过增加深度阶段的接受场来增强模型能力,有选择地使用大核深度卷积来避免浅阶段的开销。
通过PSA划分特征并将自注意力应用于部分特征,结合有效的自注意力,降低计算复杂性和内存使用,同时增强全局表示学习。

部署和使用示例

我们将从安装所需的库开始。

 # Clone ultralytics repogit clone https://github.com/ultralytics/ultralytics# cd to local directorycd ultralytics# Install dependenciespip install -r requirements.txt

 

1、使用YOLOv10进行目标检测

目标检测是计算机视觉中的一项基本任务。YOLOv10通过在推理期间消除非最大抑制(NMS)的需要来增强这一点,从而降低延迟并提高性能。

我们先载入模型和需要处理的视频

 import cv2import numpy as npfrom ultralytics import YOLO# Load YOLOv10 modelmodel=YOLO('yolov10.pt')# Path to the video filevideo_path='path/to/your/deephub.mp4'cap=cv2.VideoCapture(video_path)

然后就可以处理视频帧

 whilecap.isOpened():ret, frame=cap.read()ifnotret:break# Perform object detectionresults=model(frame)# Draw bounding boxesfor result in results:boxes=result['boxes']for box in boxes:x1, y1, x2, y2=box['coords']label=box['label']confidence=box['confidence']cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.putText(frame, f'{label}{confidence:.2f}', (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# Display the framecv2.imshow('YOLOv10 Object Detection', frame)ifcv2.waitKey(1) &0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()

 

2、使用YOLOv10进行区域计数

区域计数可以对指定区域内的对象进行计数,这个例子演示了如何使用YOLOv10对定义区域中的对象进行计数。

定义区域和设置模型

 from shapely.geometry import Polygon, Point# Define counting regionscounting_regions= [{"name": "Region 1","polygon": Polygon([(50, 80), (250, 20), (450, 80), (400, 350), (100, 350)]),"counts": 0,"color": (255, 0, 0)},{"name": "Region 2","polygon": Polygon([(200, 250), (440, 250), (440, 550), (200, 550)]),"counts": 0,"color": (0, 255, 0)},]model=YOLO('yolov10.pt')

处理视频和计数区域中的对象 

 cap=cv2.VideoCapture('path/to/your/deephub.mp4')whilecap.isOpened():ret, frame=cap.read()ifnotret:break# Perform object detectionresults=model(frame)# Draw regionsforregionincounting_regions:points=np.array(region["polygon"].exterior.coords, dtype=np.int32)cv2.polylines(frame, [points], isClosed=True, color=region["color"], thickness=2)region["counts"] =0  # Reset counts for each frame# Count objects in regionsforresultinresults:boxes=result['boxes']forboxinboxes:x1, y1, x2, y2=box['coords']center=Point((x1+x2) /2, (y1+y2) /2)forregionincounting_regions:ifregion["polygon"].contains(center):region["counts"] +=1# Display countsforregionincounting_regions:text=f'{region["name"]}: {region["counts"]}'cv2.putText(frame, text, (int(region["polygon"].centroid.x), int(region["polygon"].centroid.y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, region["color"], 2)# Display the framecv2.imshow('YOLOv10 Region Counting', frame)ifcv2.waitKey(1) &0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()

微调训练

在使用模型时最主要的还是要在我们自己的数据集上进行微调,所以我们最后再介绍一下如何使用自己的数据进行微调。

我将使用一个预先准备好的检测x射线图像中的危险物品的数据集来作为演示。

 

我们只用roboflow直接下载yolov8格式的数据集 

 !pip install -q roboflowfrom roboflow import Roboflowrf = Roboflow(api_key="your-api-key")project = rf.workspace("vladutc").project("x-ray-baggage")version = project.version(3)dataset = version.download("yolov8")

 指定参数和文件路径,然后开始模型训练。

 !yolo task=detect mode=train epochs=25 batch=32 plots=True \model='/content/-q/yolov10n.pt' \data='/content/X-Ray-Baggage-3/data.yaml'

 这里需要一个data.yaml文件,他的格式如下:

 names:- Gun- Knife- Pliers- Scissors- Wrenchnc: 5roboflow:license: CC BY 4.0project: x-ray-baggageurl: https://universe.roboflow.com/vladutc/x-ray-baggage/dataset/3version: 3workspace: vladutctest: /content/X-Ray-Baggage-3/test/imagestrain: /content/X-Ray-Baggage-3/train/imagesval: /content/X-Ray-Baggage-3/valid/images

 

训练完成后我们可以看看结果:

 Image(filename='/content/runs/detect/train/results.png', width=1000)

 

最后可以测试数据并在网格中显示结果。

 fromultralyticsimportYOLOv10importglobimportmatplotlib.pyplotaspltimportmatplotlib.imageasmpimgmodel_path='/content/runs/detect/train/weights/best.pt'model=YOLOv10(model_path)results=model(source='/content/X-Ray-Baggage-3/test/images', conf=0.25,save=True)images=glob.glob('/content/runs/detect/predict/*.jpg')images_to_display=images[:10]fig, axes=plt.subplots(2, 5, figsize=(20, 10))fori, axinenumerate(axes.flat):ifi<len(images_to_display):img=mpimg.imread(images_to_display[i])ax.imshow(img)ax.axis('off')  else:ax.axis('off')  plt.tight_layout()plt.show()

YOLOv10的改进在性能和延迟方面均达到了最先进的水平,充分展示了其优越性。并且继承了Ultralytics的传统,无论是部署还是自定义训练和微调都十分的友好,有兴趣的可以现在开始研究了。

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

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

相关文章

CSS 实现电影信息卡片

CSS 实现电影信息卡片 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"poster"><img src"./poster.jpg" /></div><div class"details"><img src"./avtar…

这 10 种架构师,不合格!

大家好&#xff0c;我是君哥。 架构师这个岗位是好多程序员努力的方向&#xff0c;尤其是刚毕业的时候&#xff0c;对架构师有一种崇拜感。毕竟从初级到架构要经历好几次级别飞跃。 工作时间久了&#xff0c;发现架构师这个岗位&#xff0c;其实定义非常广泛&#xff0c;根据工…

Element-ui中Table表格无法显示

Element-ui中Table表格无法显示 在使用过程中发现样式正常显示但是table就是不显示&#xff0c;研究了一段时间后&#xff0c;发现问题是项目结构的问题 当你创建vue和安装el的时候&#xff0c;一定要注意进入到正确的项目文件夹&#xff0c;如果在外面也出现一个package.jso…

【iOS】UI学习——cell的复用及自定义cell

目录 前言cell的复用手动&#xff08;非注册&#xff09;自动&#xff08;注册&#xff09; 自定义cell总结 前言 Cell复用和自定义Cell是在开发iOS应用时常见的一种优化技巧和定制需求。   Cell复用是UITableView或UICollectionView的一个重要优化机制。当用户滚动这些视图时…

图解 Twitter 架构图

写在前面 两年前&#xff0c;马老板收购了twitter&#xff0c;并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。 Twitter解析 开始之前&#xff0c;我先提前说明一下&#xff0c;我之前不是做搜推广的&#xff0c;所以对这些了解不是很深&…

实战项目: 负载均衡

0. 前言 这个项目使用了前后端,实现一个丐版的LeetCode刷题网站,并根据每台主机的实际情况,选择对应的主机,负载均衡的调度 0.1 所用技术与开发环境 所用技术: C STL 标准库 Boost 准标准库 ( 字符串切割 ) cpp- httplib 第三方开源网络库 ctemplate 第三方开源前端网…

【Java】已解决:java.lang.OutOfMemoryError: Java heap space

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java&#xff1a;java.lang.OutOfMemoryError: Java heap space 一、问题分析背景 在Java开发过程中&#xff0c;有时我们会遇到java.lang.OutOfMemoryError: Java heap spa…

容器镜像外网同步方案

目录 一、目的 二、安装nexus 1、购买香港云主机​编辑 2、安装nexus 3、启动nexus 服务 4、放行安全组 三、配置nexus 1、登录nexus管理页面 2、修改nexus密码 3、创建 Blob 存储空间(可选) 4、创建 镜像代理仓库 5、Realms配置 四、拉取镜像 1、配置docker 2、…

Floyd-Warshall

应用场景 要求出每两点之间的最短路。或判断两点之间的连通性&#xff08;两点之间是否有路径&#xff09;。 板子 代码&#xff08;必背!!!&#xff09; for(int k 1; k < n; k)for(int i 1; i < n; i)for(int j 1; j < n; j)d[i][j] min(d[i][j], d[i][k] …

C数据结构:排序

目录 冒泡排序 选择排序 堆排序 插入排序 希尔排序 快速排序 hoare版本 挖坑法 前后指针法 快速排序优化 三数取中法 小区间优化 快速排序非递归 栈版本 队列版本 归并排序 归并排序非递归 ​编辑 计数排序 各排序时间、空间、稳定汇总 冒泡排序 void Bub…

内存-VSS、RSS、PSS、USS

一、 VSS 虚拟耗用内存大小&#xff0c;是进程可以访问的所有虚拟内存的总量&#xff0c;包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。 RSS 驻留内存大小&#xff0c;是进程当前实际占用的物理内存大小&#xff0c;包括进程独自占用的物理内存、…

【Java】图的初识

文章目录 【Java】图的初识图是什么图的基本组成部分图的类型图的表示方法图的常见操作 Java中图的表示方法邻接矩阵邻接表 常见操作图的遍历深度优先搜索&#xff08;DFS&#xff09;广度优先搜索&#xff08;BFS) 结论 【Java】图的初识 图是什么 图是一种数学概念&#xf…

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…

富瀚微FH8322 ISP图像调试—BLC校正

1、简单介绍 目录 1、简单介绍 2、调试方法 3、输出结果 富瀚微平台调试有一段时间了&#xff0c;一直没有总结&#xff0c;我们调试ISP的时候&#xff0c;首先一步时确定好sensor的黑电平值&#xff0c;黑电平如果不准&#xff0c;则会影响到后面的颜色及对比度相关模块。…

快消品经销商需要注意哪些仓库管理细节,才能提效降本

仓库管理是快消品经销商必须重视的环节&#xff0c;只有仓库管理做好了&#xff0c;整体效率才能得到提升&#xff0c;成本才能降低&#xff0c;客户订单更快地交付&#xff0c;而在仓库管理中有很多细节需要经销商注意。 01仓库布局与设计&#xff1a;合理的仓库布局可以极大地…

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…

基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真。利用电压外环PI调节器得到有功 电流指令值结合由负载侧电流检测 到 的无功 电流指令值 &#…

最新版点微同城源码34.7+全套插件+小程序前后端(含安装教程)

模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89394996 更多资源下载&#xff1a;关注我。

嘻嘻我是图床倒霉蛋

嘻嘻花了将近两个小时的时间配了一个小小的图床 手把手教你搭建阿里云图床(PicGoTypora阿里云OSS)&#xff0c;新手小白一看就会-阿里云开发者社区 (aliyun.com) 大体上按照这篇配置就好 七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云 我买了一…

股指期货功能

其金融期货的本质&#xff0c;决定了股指期货具有以下几方面特点&#xff1a; &#xff08;1&#xff09;交割方式为现金交割&#xff1b; &#xff08;2&#xff09;股指期货的持有成本较低&#xff1b; &#xff08;3&#xff09;股指期货的保证金率较低&#xff0c;杠杆性…