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

论文题目: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

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

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

相关文章

基于灰狼优化算法优化RBF(GWO-RBF)的数据回归预测(多输入多输出)

代码原理及流程 基于灰狼优化算法优化多输入多输出(MIMO)的RBF神经网络的数据回归预测,可以采取以下步骤: 1. 数据准备:准备包含多个输入特征和多个输出目标的数据集,确保数据已经经过预处理和归一化。 …

盲人社区生活支持体系:织就一张温暖的网

在当今社会,构建一个全面、包容的盲人社区生活支持体系成为了推动社会进步、保障残障人士权益的重要议题。随着科技的不断革新,一款名为“蝙蝠避障”的辅助软件走进了盲人的日常生活,它如同一位无形的向导,通过实时避障与拍照识别…

Failed to load property source from location ‘classpath:/application.yml‘

总帮客户二开 经常会遇到这种问题 网上的解决办法都是刷新maven (对我没用!) 我的解决办法是修改编码!

PLSQL连接Linux Oracle21c

PLSQL连接Linux Oracle21c 一、安装PLsql 下载官网 https://www.allroundautomations.com/registered-plsqldev/ 二、Oracle Instant Client下载 使用plsql连接oracle的时候是需要本地先安装oracle客户端,英文名就是Oracle Instant Client。 官方下载地址&…

初识java——javaSE (6)接口的实现——比较器与深拷贝,浅拷贝

文章目录 前言一 比较器1.1 关于两个对象的比较1.2 Comparable接口:1.3 Arrays.sort方法的实现1.4 比较器的实现Comparator接口 二 深拷贝与浅拷贝2.1 浅拷贝:Cloneable接口:clone方法:实现拷贝:浅拷贝: 2.…

【C++】list容器

目录 一.list容器介绍 二.C中list的基本组成 三.list容器相关接口的模拟实现 1.push_back() 2.迭代器的begin()和end() 3.insert() 4.erase() 5.pop_front() 6.pop_back() 7.size() 8.empty() 9.析构~list()和清除数据clear() 10.拷贝构造 11.赋值运算 四.模拟…

分享几张漂亮的linux kde主题

分享几张漂亮的linux kde主题:在系统设置的全局主题内下载。

SpringBoot——整合Redis

目录 Redis 创建Commodity表 启动MySQL和Redis 新建一个SpringBoot项目 pom.xml application.properties Commodity实体类 ComMapper接口 ComService业务层接口 ComServiceImpl业务接口的实现类 ComController控制器 RedisConfig配置类 SpringbootRdisApplication启…

c++|多态

c|多态 1 多态的概念2 多态的定义及其实现2.1 满足多态的条件2.2 虚函数2.3 虚函数的重写2.4 析构函数适合加virtural吗2.4 C11 override 和 final2.5 三个概念的对比 3 多态的原理4 抽象类4.1 概念4.2 纯虚函数 1 多态的概念 多态的概念:通俗来说,就是…

微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能,因为目前论坛上也有很多博主出过类似的文章,这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励,先点个赞赞吧👍,蟹蟹!! 目标 实现下方效果图 技术…

HarmonyOS鸿蒙应用开发——安装与配置

今天脑子又抽风,前端转完学后端之后,今天大周末早上醒来突然又想学鸿蒙了,刚好有个比赛需要用到鸿蒙,于是乎我就随便点开b站看了一下鸿蒙视频,然后马上来写这篇博客,后续我的鸿蒙的博客可能会跳着、不连续地…

springboot集成达梦数据库8

springboot集成达梦数据库8 官方文档&#xff1a;[https://eco.dameng.com/document/dm/zh-cn/start/java-development.html](https://eco.dameng.com/document/dm/zh-cn/start/java-development.html) 引入maven依赖 <!--添加数据库驱动安装包--> <dependency> …

十六进制转十进制

十六进制转十进制 在玩编程的时候常会碰到十六进制转换的问题。对于专业的大佬大咖这不是问题&#xff0c;小人物总会有些麻烦。我在研究调色板时也遇到进制转换问题。前些时在本站发了十进制转十六进制的博文&#xff0c;今再写十六进制转十进制的转换方法。供大家参考。 下面…

awk编辑器

目录 工作原理 命令格式 普通格式 BEGIN格式 语句循环格式 awk常见的内建变量&#xff08;可直接用&#xff09; 按行打印行内容 统计行数量 按字段输出文本 通过管道、双引号调用 Shell 命令 awk编辑器是一种流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分…

光环P3O不错的一个讲座

光环P3O不错的一个讲座&#xff0c;地址&#xff1a;https://apphfuydjku5721.h5.xiaoeknow.com/v2/course/alive/l_663dc840e4b0694c62c32d1d?app_idapphfuydJkU5721&share_fromu_5c987304d8515_wH2E5HgCgx&share_type5&share_user_idu_5c987304d8515_wH2E5HgCgx…

AIGC-风格迁移-“DEADiff:稳定可控的文本到图像风格化扩散模型 “-CVPR2024

DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 代码&#xff1a;https://tianhao-qi.github.io/DEADiff/ 论文&#xff1a;https://arxiv.org/pdf/2403.06951 本文介绍了一种名为DEADiff的方法&#xff0c;旨在解决基于扩散的文本到图…

又翻车了!谷歌急于手动删除搜索中的奇怪AI答案|TodayAI

谷歌公司近日确认&#xff0c;正在“迅速采取行动”删除一些AI工具的奇怪回应。社交媒体上充斥着谷歌新AI概览产品&#xff08;AI Overview&#xff09;说出奇怪话语的例子&#xff0c;从告诉用户在披萨上涂胶水到建议他们吃石头。这次混乱的AI发布导致谷歌不得不手动禁用某些搜…

车灯合面合壳密封使用UV胶的优缺点是什么呢?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

车灯合面合壳密封使用UV胶的优缺点是什么呢? 车灯合壳密封使用UV胶的优缺点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;UV胶通过紫外线照射可以在短时间内迅速固化&#xff0c;大大缩短了车灯制造的工艺流程时间&#xff0c;提高了生产效率。高度透明&#xff…

二叉树——进阶(递归创建,非递归,广度优先,翻转,深度,对称)

二叉树——进阶 二叉树的递归创建非递归前中后序遍历非递归前序遍历非递归中序遍历非递归后序遍历 广度优先遍历二叉树&#xff08;层序遍历&#xff09;翻转二叉树 二叉树深度最大深度最小深度 对称二叉树 二叉树的递归创建 1&#xff0c;二叉树是一种结构相对固定的数据&…

金融信贷风控系统设计模式应用之模版方法

背景介绍 风控系统每种场景 如个人消费贷 都需要跑很多规则 规则1 申请人姓名身份证号实名验证规则2 申请人手机号码实名认证规则3 银行卡预留手机号码实名认证规则4 申请人银行卡预留手机号码在网状态检验规则5 申请人银行借记卡有效性核验规则6 户籍地址与身份证号归属地比…