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

pc 端 TensorRT API 实现 YOLOv11 的 C++ 小白部署经验

 

标题1  模型转化

python

先下载项目

https://github.com/ultralytics/ultralytics  

同时下载模型

https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt

pythonconda虚拟环境,主要是以下三个,其余缺什么直接pip

anaconda3+python3.8

torch==1.9.0+cu111

ultralytics==8.3.3

环境搭建好,要转换模型,使用 ultralytics/engine/exporter.py 脚本或者在命令行直接输入

yolo export model=yolo11n.pt format=onnx dynamic=False opset=12

得到onnx模型。

2 c++ 编译安装所需环境。

注意 先装vs2019 在安装CUDA

vs2019

cmake==3.24.3

cuda11.7.1+cudnn8.8.0

Tensorrt==8.6.1.6

opencv==4.8.0

以上全部需要装到pc端,需要去官网自行下载,且全部需要设置环境变量。

 CMake下载

链接:Download CMake, 安装时选中红款中选项即可自动加入环境变量。

cuda11.7.1+cudnn8.8.0 安装     

vs2019安装完要重启电脑,CUDA安装完也要重启电脑

CUDA安装及环境配置——最新详细版-CSDN博客

Tensorrt==8.6.1.6 安装

win系统安装tensorRT-8.6.1_tensorrt 8.6 下载-CSDN博客

不过配置完成后,记得将tensorRT目录下的 bin目录加到系统环境变量里。

opencv==4.8.0  安装

[C++] 详细教程 - opencv4.8.0安装和验证测试 (Windows + Linux)_ubuntu安装opencv-CSDN博客

同样 opencv安装完成后,需要将以下两个路径加入系统环境变量

3 编译C++代码和模型

yolov11 c++项目地址  

spacewalk01/yolov11-tensorrt :使用 TensorRT API 实现 YOLOv11 的 C++

用vs2019打开此项目

首先我们修改CMakeLists.txt文件,将源码里面opencv路径和tensorrt路径修改成自己路径

# Find and include OpenCV

set(OpenCV_DIR "D:\\lufiles\\opencv480\\build\\x64\\vc16\\lib")

# Set TensorRT path if not set in environment variables

set(TENSORRT_DIR "D:\\lufiles\\TensorRT-8.6.1.6")

然后打开项目文件夹,在红线框处 输入cmd,

然后依次输入

mkdir build

cd build

cmake ..

之后去build文件夹找到sln文件用vs打开它

然后选择x64 release,并选中ALL_BUILD右键单击选择生成

之后build\Release文件夹下面有个yolov11-tensorrt.exe生成。

之后我们开始转换onnx模型到tensorrt模型,打开文件目录

同样在顶部导航栏里输入cmd,然后执行命令

trtexec --onnx=yolo11n.onnx --saveEngine=yolov10n.engine --fp16

稍等10多分钟后会自动生成yolo11n.engine文件,我们将yolo11n.engine复制到build\Release文件

一切准备好后,可以在准备一张图片,测试是否编译成功

4 测试

第一种,进入文件目录,顶部导航栏输入cmd

然后执行命令

yolov11-tensorrt.exe yolo11n.engine "test.jpg"

成功后,程序会show,yolov11预测的结果和保存一张结果图,保存地址和原图一样。

第二种方式,在vs2019里打开整个项目,并找到Release目录并右键,在终端打开,

在终端输入命令 ./yolov11-tensorrt.exe yolo11n.engine "test.jpg"

结果同上。


http://www.kler.cn/a/508109.html

相关文章:

  • C语言的语法糖
  • 【时时三省】(C语言基础)柔性数组的使用
  • Python股票量化交易分析-开发属于自己的指标
  • 【Rust自学】13.2. 闭包 Pt.2:闭包的类型推断和标注
  • 从AI原理到模型演进及代码实践 的学习二
  • redis(2:数据结构)
  • WebSocket实现分布式的不同方案对比
  • 微服务网关,如何选择?
  • Oracle报错ORA-01078、LRM-00109
  • ElasticSearch常见知识点
  • React Native的现状与未来:从发展到展望
  • 以太网详解(五)GMII、RGMII、SGMII接口时序约束(Quartus 平台)
  • 【2024年华为OD机试】 (B卷,100分)- 响应报文时间(Java JS PythonC/C++)
  • openssl s_server源码剥离
  • C++ 之多线程相关总结
  • [深度学习]神经网络线性回归简易实例
  • 数据结构与算法学习笔记----中国剩余定理
  • GaussDB创建不同兼容模式的数据库
  • MMDetection学习系列(4)——Cascade R-CNN深度探索与实战指南
  • 进程的家园:探索 Linux 地址空间的奥秘
  • 多线程进阶-线程安全的集合类
  • 游戏如何检测Xposed框架
  • C#实例化类,当类名和方法一样或者不一样时运行流程
  • 【达梦数据库(Oracle模式)】如何将视图中的数据导出
  • Python 爬虫学习指南与资料分享
  • rsync结合inotify实现文件实时同步