YOLOv10最全使用教程(含ONNX和TensorRT推理)

news2024/11/19 21:19:52

论文题目:YOLOv10: Real-Time End-to-End Object Detection
研究单位:清华大学
论文链接:http://arxiv.org/abs/2405.14458
代码链接:https://github.com/THU-MIG/yolov10

作者提供的模型性能评价图,如下:
在这里插入图片描述

ModelTest Size#ParamsFLOPsAPvalLatency
YOLOv10-N6402.3M6.7G38.5%1.84ms
YOLOv10-S6407.2M21.6G46.3%2.49ms
YOLOv10-M64015.4M59.1G51.1%4.74ms
YOLOv10-B64019.1M92.0G52.5%5.74ms
YOLOv10-L64024.4M120.3G53.2%7.28ms
YOLOv10-X64029.5M160.4G54.4%10.70ms

YOLOv10-N:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10n.pt
YOLOv10-S:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10s.pt
YOLOv10-M:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10m.pt
YOLOv10-B:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10b.pt
YOLOv10-L:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10l.pt
YOLOv10-X:https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10x.pt

总结:从结果上看,模型延迟方面有较大的提升,相对于参数来说,AP提升相比最先进的v9较为微小,简单来说就是模型更适合端侧部署,因为推理延迟时间低。

!!!重要说明:YOLOv10的代码参考ultralytics (YOLOv8)and RT-DETR,很多命令都可以复用ultralytics (YOLOv8)的


一、环境配置

测试平台:Ubuntu18.04 x64,编译语言:Python3.9

  • (1)克隆YOLOv10项目地址:
git clone https://github.com/THU-MIG/yolov10.git
  • (2)安装环境【可不看】
    如果之前配置过YOLOv8等其他环境可以略过下面内容,因为这些包基本都差不多,后面训练的时候出问题再pip安装也是可以的。
conda create -n yolov10 python=3.9
conda activate yolov10
cd yolov10
pip install -r requirements.txt
  • (3)编译
    如果读者已经进入yolov10的目录下可以略过第一行的进行目录命令(cd yolov10
cd yolov10
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple

  YOLOv10延续了YOLOv8的方式,将项目封装成命令的方式进行训练和测试等操作,因此如果顺利运行完会提示:
在这里插入图片描述
  至此,yolov10的项目安装编译完毕。


二、模型训练

  训练模型的话直接用命令行就可以了,这里以coco数据集(官网是要求数据集放在../datasets/coco文件夹下,如果改位置,可以修改coco.yamlpath变量)为例。

yolo detect train data=coco.yaml model=yolov10s.yaml epochs=500 batch=256 imgsz=640 device=0,1

device:设备id,如果只有一张显卡,则device=0,如果有两张,则device=0,1,依次类推。
imgsz:图像放缩大小resize,默认是640,如果资源不够可以设置为320试试。

  笔者自己测试了一下yolov10s,需要21.2GB的显存,yolov10n需要16GB左右,其他的模型由于设备资源有限,没有进行尝试。


三、模型测试

  • COCO2017数据集AP验证,命令如下:
yolo val model=yolov10s.pt data=coco.yaml batch=256
  • 模型推理测试((默认读取yolov10/ultralytics/assets文件夹下的所有图像)
yolo predict model=yolov10s.pt 

  如果测试别的路径下的文件可以在上面命令后面加上source='xxx/bus.jpg',下述命令跟yolo predict相关的都可以在后面加上改参数。

  推理结果如下:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
总结:YOLOv10s的检测效果还是可圈可点的,连左上角的交通标志牌都识别到了,推理时间也比较快。


四、ONNXRUNTIME测试

说明:本节测试需要提前安装onnxonnxruntime

  • (1)模型转换
yolo export model=yolov10s.pt format=onnx opset=13 simplify

  运行后会在yolov10s.pt文件存放路径下生成一个yolov10s.onnx的ONNX模型文件。

  • (2)模型推理测试((默认读取yolov10/ultralytics/assets文件夹下的所有图像)
yolo predict model=yolov10s.pt

  推理结果如下:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
总结:左上角的交通标志检测不到了,而且速度还慢了,不知道是不是没有用gpu的原因。


五、TensorRT测试

  TensorRT加速推理(需要使用NVIDIA的显卡或者嵌入式设备系列Jetson),而且需要根据自身需求指定对应的模型路径,这里以项目目录下的yolov10s.pt为例。 本节测试需要提前安装Tensorrt(如果没装,可以直接看下面问题,有说明安装方式)。

  • (1)模型转换

  方式一:使用项目命令进行转换(笔者使用)

yolo export model=yolov10s.pt format=engine half=True simplify opset=13 workspace=16

  转换成功结果如下:
在这里插入图片描述

  方式二:使用TensorRT命令行形式进行转换

trtexec --onnx=yolov10s.onnx --saveEngine=yolov10s.engine --fp16
  • (1)模型推理
# Predict with TensorRT
yolo predict model=yolov10s.engine

  推理结果如下(默认读取yolov10/ultralytics/assets文件夹下的所有图像):
在这里插入图片描述
  推理结果如下:
在这里插入图片描述在这里插入图片描述总结:整体来说,推理时间比PT模型和ONNX模型推理还快不少。

  • (3)问题:如果在运行Tensorrt模型生成时出现错误,大概率是在转为INT32时出现了问题,标志为:onnx2trt_utils.cpp:369: Your ONNX model has been generated with INT64 weights ,如果后面提示操作有问题,就是因为Tensorrt版本的问题,YOLOv10很多算子操作都需要tensorrt > 8.5.2.1 ,所以如果不是对应版本的话就会报某些算子不支持操作,如:
    在这里插入图片描述
    如果是因为TensorRT版本的问题,那就要去NVIDIA官网下载对应的TensorRT安装包进行安装,笔者在Ubuntu x64上选择v8.6.1进行安装。
    TensorRT下载地址如下:https://developer.nvidia.com/nvidia-tensorrt-8x-download

  注意要安装TAR压缩包进行编译才有效,下载TAR包后,进行解压,命令如下(记得将命令改成读者自己的文件名称和路径):

tar -xvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz

  然后,在~/.bashrc文件下设置环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx/TensorRT-8.6.1.2/lib
export PATH=$PATH:/xxx/TensorRT-8.6.1.2/bin

  最后,如果想安装python版的tensorrt可以运行如下命令:

cd TensorRT-8.6.1.2/python
pip install tensorrt-8.6.1.2-cp39-none-linux_x86_64.whl

六、总结

  YOLOv10比最先进的YOLOv9延迟时间更低,测试结果可以与YOLOv9媲美,可能会成为YOLO系列模型部署的“新宠”。

七、参考

[1] https://github.com/ultralytics/ultralytics/issues/9962

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

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

相关文章

【数据结构】神奇的二叉树

文章目录 前言1. 树形结构1.1 什么是树1.2 名词概念1.3 树的表现形式 2. 二叉树2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质 3. 二叉树的存储结构3.1 顺序存储3.2 链式存储 4. 二叉树的遍历4.1 前序遍历4.2 中序遍历4.3 后序遍历4.4 层序遍历 5. 遍历的代码实现5.1 递归实现…

机器学习模型可视化分析和诊断神器Yellowbrick

大家好,机器学习(ML)作为人工智能的核心,近来得到巨大应用,ML是使计算机能够在无需显式编程的情况下进行学习和预测或决策。ML算法通过学习历史数据模式,来对新的未见数据做出明智的预测或决策。然而,构建和训练ML模型…

ROS2学习——节点话题通信(2)

目录 一、ROS2节点 1.概念 2.实例 (1)ros2 run (2)ros2 node list (3)remapping重映射 (4)ros2 node info 二、话题 (1) ros2 topic list &#xf…

C语言内存函数(与上篇字符函数及字符串函数一起食用效果更佳哦~)

顾名思义,内存函数就是针对内存块(即一块内存)来处理的。 因此本篇所讲的四种内存函数: memcpy(内存拷贝)memmove(内存移动)memset(内存设置)memcmp&#x…

RocketMQ使用(3):消息重复

一、问题说明 发送时消息重复 当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。如果此时生产者意识到消息发送失败并尝试再次发送消息,消费者后续会收到两条内容相同并且Message…

vue项目elementui刷新页面弹窗问题

bug:每次刷新页面都有这个鬼弹窗。 刚开始以为是自己的代码问题,于是我翻遍了每一行代码,硬是没找出问题。 后来在网上找了些资料,原来是引入的问题。 解决方案: 改一下引入方式即可。 错误姿势 import Vue from …

Autodesk 3ds Max下载,3ds MAX 2024三维建模渲染软件安装包下载安装

3ds MAX中文版,其强大的功能和灵活的操作为广大用户提供了无限的创意空间,使得高质量动画、最新游戏、设计效果等领域的制作需求得以完美满足。 ​ 作为一款三维建模软件,3ds MAX中文版具备极高的建模精度和渲染质量。它支持多种建模方式&am…

Golang项目代码组织架构实践

Golang在项目结构上没有强制性规范,虽然这给了开发者很大的自由度,但也需要自己沉淀一套可行的架构。本文介绍了一种项目布局,可以以此为参考设计适合自己的 Golang 项目组织模式。原文: Golang Project Layout Go 有很多强制的或是约定俗成的…

Python学习---基于TCP协议的网络通信程序案例

TCP简介: ●TCP 面向连接、可靠的、基于字节流的传输控制协议 ●TCP的特点 ○面向连接 ○可靠传输 ■应答机制 ■超时重传 ■错误校验 ■流量管控 ●TCP通信模型 TCP严格区分客户…

2024年5月25日 十二生肖 今日运势

小运播报:2024年5月25日,星期六,农历四月十八 (甲辰年己巳月己丑日),法定节假日。 红榜生肖:鸡、鼠、猴 需要注意:马、狗、羊 喜神方位:东北方 财神方位:…

篮球论坛|基于SprinBoot+vue的篮球论坛系统(源码+数据库+文档)

篮球论坛系统 目录 基于SprinBootvue的篮球论坛系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#xff…

抖音运营_打造高流量的抖音账号

目录 一 账号定位 行业定位 用户定位 内容定位 二 账号人设 我是谁? 我的优势 我的差异化 三 创建账号 名字 头像 简介 四 抖音养号 为什么要养号? 抖音快速养号 正确注册抖音账号 一机一卡一号 实名认证 正确填写账号信息 养号期间的操作 五…

OpenWrt 23.05 安装中文语言包 教程 软路由实测 系列三

1 web 登录 #更改阿里云下载源,可参考第一篇文章:OpenWrt U盘安装使用 详细教程 x86/64平台 软路由实测 系列一-CSDN博客

如何网页在线编辑 Office word 文档,并支域功能:创建域/插入域/替换域等

在日常在线办公场景中,我们经常会遇到一些复杂的文档编辑需求,特别是我们经常会遇到一些复杂的数学公式,会用到“域”功能,“域”功能便是一个高级且实用的工具。通过设置域,用户可以实现文档的自动化处理,…

聚观早报 | 华为畅享 70S真机图赏;vivo Y200 GT开售

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月25日消息 华为畅享 70S真机图赏 vivo Y200 GT开售 一加13部分细节曝光 马斯克谈AI未来 三星Galaxy Z Fold6将…

轻量级 K8S 环境 安装minikube

文章目录 操作系统DockerDocker CE 镜像源站使用官方安装脚本自动安装 (仅适用于公网环境)安装校验Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard参考资料 操作系统 …

[图解]产品经理创新之阿布思考法

0 00:00:00,000 --> 00:00:01,900 那刚才我们讲到了 1 00:00:02,730 --> 00:00:03,746 业务序列图 2 00:00:03,746 --> 00:00:04,560 然后怎么 3 00:00:05,530 --> 00:00:06,963 画现状,怎么改进 4 00:00:06,963 --> 00:00:09,012 然后改进的模式…

简洁实用视频播放器-PotPlayer

一、前言 PotPlayer 是一款简洁实用的视频播放器。 发现的确是良心软件,只有20M 的大小,占内存是同类软件最低的。不要小看它那么小巧简洁,但也很强大的,支持强劲的加速引擎,同时支持3D 视频。 同时支持多种编码和字…

生产物流智能优化系统

对生产调度、物流调度【车辆路径问题、配送中心拣选问题】智能优化算法研究形成系统性程序,逐步开发设计一个智能优化系统【包括:问题说明、实验界面、算法结构和算法程序应用说明】, 当前完成TSP和集送车辆路径的算法程序,程序效…

移动端仪表盘,支持更多组件

05/22 主要更新模块概览 定位函数 快捷筛选 轨迹图表 时间组件 01 表单管理 1.1 【表单组件】- 表单关联新增支持自定义按钮样式 说明: 表单关联-关联数据按钮,原仅支持默认按钮样式,现增加关联数据按钮自定义功能,满…