当前位置: 首页 > news >正文

将目标检测模型导出到C++|RT-DETR、YOLO-NAS、YOLOv10、YOLOv9、YOLOv8

点击下方卡片,关注“小白玩转Python”公众号

最近,出现了更新的YOLO模型,还有RT-DETR模型,这是一个声称能击败YOLO模型的变换器模型,我想将这些模型导出并进行比较,并将它们添加到我的库中。在这篇文章中,我将带你了解如何将这些模型导出到ONNX并运行它们,然后最终比较这些模型的速度。

将RT-DETR模型导出到ONNX

736e99b36fd487fde609ff7dc797d387.png

这是从模型的GitHub页面获取的模型示例输出

为了导出模型,我们需要从模型的GitHub仓库克隆代码(https://github.com/lyuwenyu/RT-DETR)。我将向你展示如何导出模型的第二个版本。如果你想使用第一个版本,导出步骤应该是类似的。

git clone https://github.com/lyuwenyu/RT-DETR.git
cd RT-DETR/rtdetrv2_pytorch

然后我们需要创建一个Python虚拟环境来运行代码。如果你已经有一个工作的环境,那么你可以跳过这一步。

python -m venv rtdetrv2-env
source rtdetrv2-env/bin/activate
pip install -r requirements.txt
pip install scipy

代码需要scipy库,但它不在需求文件中,你需要手动安装。然后我们需要下载coco数据集的YAML配置文件和模型。我们将在这里下载的模型是中等大小的模型。你可以在这里找到其他模型的链接。

mkdir models
cd models
wget -c https://github.com/lyuwenyu/storage/releases/download/v0.1/rtdetrv2_r34vd_120e_coco_ema.pth
wget -O dataset/coco_detection.yml https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml

现在我们可以导出模型了。请注意,如果你改变了模型大小,那么你需要更改下面的配置文件路径以匹配模型。

python tools/export_onnx.py -c configs/rtdetrv2/rtdetrv2_r34vd_120e_coco.yml -r models/rtdetrv2_r34vd_120e_coco_ema.pth --check

现在你有了你的模型(在rtdetrv2_pytorch目录中的model.onnx文件)。你可以进入运行模型部分。

将YOLO-NAS导出到ONNX

7ef881907c60769be47067889f6dd55a.png

与模型的GitHub页面上的其他模型相比,YOLO-NAS模型

为了导出YOLO-NAS模型,你需要安装super_gradients库,然后运行以下Python代码。模型变体是YOLO_NAS_S、YOLO_NAS_M、YOLO_NAS_L。

from super_gradients.training import models
from super_gradients.common.object_names import Modelsmodel = models.get(Models.YOLO_NAS_S, pretrained_weights="coco")model.eval()
model.prep_model_for_conversion(input_size=[1, 3, 640, 640])
model.export("yolo_nas_s.onnx", postprocessing=None, preprocessing=None)

现在你有了你的模型(yolo_nas_s.onnx文件)。你可以进入运行模型部分。

将YOLOv10导出到ONNX

4a649a82bf886fd27c91118703ca2dd9.png

与模型的GitHub页面上的其他模型相比,YOLOv10模型的延迟

我们需要克隆GitHub仓库(https://github.com/THU-MIG/yolov10)并创建一个Conda环境来运行导出代码。

git clone https://github.com/THU-MIG/yolov10.git
cd yolov10conda create -n yolov10-env python=3.9
conda activate yolov10-env
pip install -r requirements.txt
pip install -e .

现在我们需要导出模型。模型的前缀是jameslahm/,支持的模型有yolov10n、yolov10s、yolov10m、yolov10b、yolov10l、yolov10x。

yolo export model=jameslahm/yolov10m format=onnx opset=13 simplify

现在你有了你的模型(yolov10目录中的yolov10m.onnx文件)。你可以进入运行模型部分。

将YOLOv9导出到ONNX

98f10b1ac64aea1ed36a20e619f6ba4a.png

与模型的GitHub页面上的其他模型相比,YOLOv9模型的参数数量

为了导出YOLOv9,你需要有一个工作的正常安装的docker。你可以启动一个容器并导出模型。你可以在这里找到模型文件。

# Create an empty directory and cd into it
git clone https://github.com/WongKinYiu/yolov9.git
# Now we have yolov9 folder in out current directory. Then we run the following line:
docker run --name yolov9 -it -v `pwd`:`pwd` -w `pwd` --shm-size=64g nvcr.io/nvidia/pytorch:21.11-py3
# Install dependencies
apt update
apt install -y zip htop screen libgl1-mesa-glx
pip install seaborn thop
cd yolov9
# Download the model
wget https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-s.pt
# Export the model
python export.py --weights yolov9-s.pt --include onnx

现在你有了你的模型(yolov9目录中的yolov9-s.onnx文件)。你可以进入运行模型部分。

将YOLOv8导出到ONNX

89e19e1034178b8d7144173c01aad796.png

与模型的GitHub页面上的其他模型相比,YOLOv8模型

将YOLOv8导出比其他模型更容易。你只需要安装ultralytics并导出模型。支持的模型有yolov8n、yolov8s、yolov8m、yolov8l和yolov8x。如果你想的话,你可以创建一个虚拟环境来隔离安装。

pip install ultralytics
wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt
yolo export model=yolov8n.pt format=onnx

现在你有了模型(yolov8n.onnx文件),可以进入运行模型部分。

运行模型

现在你有了你想要导出的ONNX模型,你可以使用我编写的库来运行这些模型。你可以在这里找到这个库。库的README文件解释了如何链接到库。以下是如何使用库中的RT-DETR模型的示例。

#include <objdetex/objdetex.h>int main()
{using namespace ObjDetEx;Detector detector(Detector::RT_DETR, "<path/to/onnx/model>");Size batchSize = 1;double detectionThreshold = .6;// Fill this with batchSizex3x640x640 image datafloat *imagePtr = nullptr;// Fill this with batchSizex2 dimension data, not needed for YOLO models// NOTE: 2 is width and height of the original images before resizing to 640x640int64_t *dimensionPtr = nullptr;auto detections = detector(Tensor(imagePtr, {batchSize, 3, 640, 640}),  //Tensor(dimensionPtr, {batchSize, 2}), detectionThreshold);// Use the detectionsreturn 0;
}
·  END  ·
🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!
回复“Python视觉实战项目”,解锁31个超有趣的视觉项目大礼包!🎁本文仅供学习交流使用,如有侵权请联系作者删除

相关文章:

将目标检测模型导出到C++|RT-DETR、YOLO-NAS、YOLOv10、YOLOv9、YOLOv8

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 最近&#xff0c;出现了更新的YOLO模型&#xff0c;还有RT-DETR模型&#xff0c;这是一个声称能击败YOLO模型的变换器模型&#xff0c;我想将这些模型导出并进行比较&#xff0c;并将它们添加到我的库中。在这篇文章中&a…...

【Windows】解决新版 Edge 浏览器开机自启问题(简单有效)

文章目录 1.前言2.查找资料3.查找方法4.解决办法1.点击浏览器的三个...&#xff0c;然后点击设置2.选择【开始、主页和新建标签页】选项卡&#xff0c;然后关闭【Windows设备启动时】 结语 参考文章&#xff1a; 解决新版 Edge 浏览器开机自启问题&#xff08;简单有效&#xf…...

如何给3D人物换衣服CC4

1.导入人物 2.设置人物Apose 3.导入衣服 create -> accessory 选择fbx文件 设置衣服的大小和位置。 4.绑定衣服 设置衣服的权重 添加动作就可以看效果了。...

如何对列表、字符串进行分组

如何对列表、字符串进行分组 1、效果 2、代码 使用python自带库collections中的Counter函数即可实现 代码如下: # -*- coding: utf-8 -*-""" @contact: @file: test.py @time: 2024/9/8 11:18 @author: LDC """ from collections import Co…...

【GEE代码实例教程详解:NDVI时间序列趋势分析】

GEE&#xff08;Google Earth Engine&#xff09;是一个强大的云计算平台&#xff0c;用于处理和分析大规模地球科学数据集。以下是一个关于如何使用GEE进行NDVI&#xff08;归一化植被指数&#xff09;时间序列趋势分析的详细教程。 一、引言 NDVI时间序列趋势分析是一种统计…...

51单片机-DS1302(RTC实时时钟芯片)

数据手册在主页资源免费贡献 开发板芯片数据手册 https://www.alipan.com/s/nnkdHhMGjrz 提取码: 95ik 点击链接保存&#xff0c;...

FreeRTOS学习笔记—②RTOS的认识及任务管理篇

由于正在学习韦东山老师的RTOS课程&#xff0c;结合了网上的一些资料&#xff0c;整理记录了下自己的感悟&#xff0c;用于以后自己的回顾。如有不对的地方请各位大佬纠正。 文章目录 一、RTOS的优势二、RTOS的核心功能2.1 任务管理2.1.1 任务的创建2.1.2 任务的删除*2.1.3 任…...

【C++从练气到飞升】22---C++中的异常

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、C语言传统的处理错误的方式 二、C异常 三、异常的使用 3.1 异常的抛出和捕获 3.1.1 异常的抛…...

前端:HTML、CSS、JS、Vue

1 前端 内容概要 了解前端三件套(HTML、CSS、JS)在前端所起的作用掌握HTML标签的功能&#xff0c;掌握重要标签(a标签&#xff0c;form标签)了解CSS了解JS的基础语法掌握Vue的基础语法重点掌握Vue项目怎么启动项目掌握前后端分离是什么。前端做什么事情&#xff0c;后端做什么…...

RocksDB简介

一、RocksDB是什么 常见的数据库如 Redis Mysql Mongo 可以单独提供网络服务RocksDB提供存储服务,是一个嵌入式KV存储引擎 Rocksdb没有server code,用户需要自己实现server的部分来得到c-s架构的数据库。二、RocksDB的诞生 基于flash存储和ssd普及,网络latency在query worklo…...

[VC] Visual Studio中读写权限冲突

前置场景&#xff1a; 编译没有报错&#xff0c;但是运行提示 内存异常&#xff1a; 情景1&#xff1a; 如下代码运行异常&#xff0c;提示引发了异常&#xff1a;写入权限冲突。*** 是 0xFFFFF..... char* str (char*)malloc(10);str[0] 0x30; 解决方案&#xff1a;要包含头…...

ChatGPT3.5/4.0新手使用手册,国内中文版使用教程

引言 欢迎使用ChatGPT&#xff01;无论你是刚开始接触AI聊天机器人&#xff0c;还是已经有了一些使用经验&#xff0c;这篇新手使用手册将帮助你快速上手&#xff0c;并且从ChatGPT中获得最优的体验。本文主要聚焦于提示词&#xff08;Prompt&#xff09;的使用教学&#xff0…...

基于MicroPython的ESP8266与超声波传感器设计方案

基于MicroPython的ESP8266与超声波传感器的设计方案&#xff1a; 一、硬件准备 1. ESP8266 开发板(如NodeMCU&#xff09; 2. 超声波传感器(如HC-SR04&#xff09; 3. 杜邦线若干 二、硬件连接 1. 将超声波传感器的VCC引脚和ESP8266 的3.3V引脚&#xff0c;分别连接5V和3.3V电…...

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了&#xff0c;需求是执行拖拽动作后&#xff0c;图标同时保留在原位置。 实现效果如下&#xff1a; 实现思路&#xff1a; 1.如果在workspace中拖动&#xff0c;则保留原来“改变图标…...

C++ 中的 override 和 overload的区别

目录 1.Overload(重载) 2.override(重写) 3.override 和 overload 的根本区别 4.override 和 overload 的实际应用 5.override 和 overload 的常见误区 6.总结 1.Overload(重载) 定义&#xff1a;在同一个作用域内&#xff0c;可以声明几个功能类似的函数名相同的函数&am…...

spring boot3框架@Validated失效

项目中使用的springboot3.2.1,在使用Validated校验controller里参数时始终不生效&#xff1b;在网上查了相关资料&#xff0c;添加了spring-boot-starter-validation依赖但还是不行 经过层层调试&#xff0c;终于发现问题&#xff1b; springboot3添加Validated后校验的是 ja…...

UE5引擎工具链知识点

当我们提到“引擎工具链的开发”时&#xff0c;通常指的是为游戏开发或其他类型的软件开发创建一系列工具和技术栈的过程。这包括但不限于游戏引擎本身&#xff08;如Unity或Unreal Engine&#xff09;&#xff0c;以及围绕这些引擎构建的各种工具和服务&#xff0c;比如用于构…...

Python的图像算术与逻辑运算详解

一.图像加法运算 图像加法运算主要有两种方法。第一种是调用Numpy库实现&#xff0c;目标图像像素为两张图像的像素之和&#xff1b;第二种是通过OpenCV调用add()函数实现。第二种方法的函数原型如下&#xff1a; dst add(src1, src2[, dst[, mask[, dtype]]]) – src1表示第…...

WSL 下的 CentOS 装 Docker

WSL 下的 CentOS 装 Docker 卸载旧版本安装前的准备工作1. 安装 yum-utils2. 添加阿里云的 yum 镜像仓库3. 快速生成 Yum 缓存 安装Docker启动docker运行 hello-world卸载 Docker 引擎参考资料 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ d…...

v0.dev快速开发

探索v0.dev&#xff1a;次世代开发者之利器 今之技艺日新月异&#xff0c;开发者之工具亦随之进步不辍。v0.dev者&#xff0c;新兴之开发者利器也&#xff0c;迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势&#xff0c;助汝速速上手&#xff0c;提升开发之…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...