【YOLO】Windows 下 YOLOv8 使用 TensorRT 进行模型加速部署

news/2024/7/10 23:27:05 标签: YOLO, windows, opencv

本文全文参考文章为 win10下 yolov8 tensorrt模型加速部署【实战】
本文使用的代码仓库为 TensorRT-Alpha

注:其他 Yolov8 TensorRT 部署项目:YOLOv8 Tensorrt Python/C++部署教程

一、前期准备工作

安装Visual Studio 2019或者Visual Studio 2022、Nvidia驱动
安装cuda,cudnn、opencv、tensorrt并进行相应的环境配置,这里不做配置教程

二、属性表的创建

制作属性表的3个步骤:
1. 拷贝include路径
2. 拷贝lib路径,外加设置dll到系统环境变量
3. 拷贝lib文件名称

打开 VS 2019,创建新项目 Yolov8_TensorRT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1 创建OpenCV属性表

在这里插入图片描述
如上图将项目设置为 Debug x64 或者 Release x64 模式即可

接着切换到 属性管理器 ,这里以 Release x64 为例,右键选择 添加新项目属性表,命名为 OpenCV_ReleaseX64.props
在这里插入图片描述
在这里插入图片描述
接下来要对属性表进行编辑,双击建好的属性表,主要编辑内容为:
通用属性 -> VC++目录 -> 包含目录库目录 以及 链接器-> 输入 -> 附加依赖项
在这里插入图片描述
在这里插入图片描述
首先对 包含目录 进行编辑,这里将 OpenCV 头文件路径拷贝进去,并确定
路径如下:

path/to/opencv/build/include
path/to/opencv/build/include/opencv2

在这里插入图片描述
接下来,对 库目录 进行编辑,将库路径拷贝进去,并确定
路径如下:

path/to/opencv/build/x64/vc15/lib

在这里插入图片描述
然后对 链接器-> 输入 -> 附加依赖项 进行编辑,将opencv_world460.lib 添加进去
只需要文件名,不同版本文件名不一样,我OpenCV版本是4.6.0所以这里是460
该文件本地路径是 opencv/build/x64/vc15/lib/opencv_world460.lib
在这里插入图片描述
最后点击 应用确定 即可

结束完这个操作后,Release x64OpenCV 属性表 就配置完成了

实现Debug x64OpenCV 属性表,只需要将最后 链接器-> 输入 -> 附加依赖项 文件名改为 opencv_world460d.lib ,其余操作和上面流程一致

2.2 创建TensorRT属性表

同样在 Release | X64 下右键选择 添加新项目属性表,命名为 TensorRT_X64.props
OpenCV属性表 类似,需要编辑的内容为:
通用属性 -> VC++目录 -> 包含目录库目录 以及 链接器-> 输入 -> 附加依赖项

首先对 包含目录 进行编辑,这里将 TensorRT 头文件路径拷贝进去,头文件路径如下:

path/to/TensorRT-8.4.3.1/include
path/to/TensorRT-8.4.3.1/samples/common
path/to/TensorRT-8.4.3.1/samples/common/windows

在这里插入图片描述
接下来,对 库目录 进行编辑,将库路径拷贝进去
文件路径如下:

path/to/TensorRT-8.4.3.1/lib

在这里插入图片描述

然后对 链接器-> 输入 -> 附加依赖项 进行编辑,文件名为:

# 文件目录 path/to/TensorRT-8.4.3.1/lib
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib

在这里插入图片描述

最后,修改 TensorRT属性表通用属性 ->C/C++ -> 预处理器 -> 预处理器定义 -> 添加指令:_CRT_SECURE_NO_WARNINGS
在这里插入图片描述
到此,TensorRT属性表配置完成

2.3 创建CUDA属性表

CUDA属性表直接使用官方的,路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.6.props


这样,所有的属性表就配置完成了

YOLOv8__84">三、YOLOv8 模型部署

3.1 导出训练权重的 onnx 文件

进入YOLOv8的项目中使用以下命令导出 onnx 文件

 yolo export model=weights/Animal/animal.pt format=onnx dynamic=True simplify=True

在这里插入图片描述

3.2 使用 TensorRT 编译 onnx 文件

使用以下命令对onnx文件进行编译

D:/TensorRT-8.4.3.1/bin/trtexec.exe --onnx=./weights/Animal/animal.onnx --saveEngine=./weights/Animal/animal.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640

在这里插入图片描述

3.3 编译运行

先下载 TensorRT-Alpha

git clone https://github.com/FeiYull/TensorRT-Alpha.git

3.3.1设置项目文件

TensorRT-Alpha/yolov8 中选中的文件拷贝到项目的 源文件
在这里插入图片描述
TensorRT-Alpha/utils 中选中的文件拷贝到项目的 头文件
在这里插入图片描述
最后将TensorRT-8.4.3.1/samples/common 下的 logger.cpp、sampleOptions.cpp 文件拷贝到项目的 资源文件在这里插入图片描述
接下来设置 生成依赖项,选择 CUDA 11.6(若没有,见下文 遇到的问题 中有解决方案)
在这里插入图片描述
在这里插入图片描述
然后设置 NVCC 编译 .cu及其对应头文件
选择下图中框选的文件右键 属性->项类型 更改为 CUDA C/C++ ,然后点击应用、确定即可

最后,右键 Yolov8_TensorRT -> 属性 -> 配置属性 -> 高级 -> 字符集,设置为 未设置
在这里插入图片描述
接着点击 生成 -> 生成解决方案,直到成功
(这里可能会出现问题: 由于找不到 opencv_world460d.dll, 无法执行代码,重新安装程序可能会解决此问题,见下文 遇到的问题 中有解决方案)
在这里插入图片描述
上述所有步骤都成功完成后,即可设置命令行参数,编译运行啦

3.3.2 编译运行

运行前先修改为自己的 类别数和类别名
类别数app_yolov8.cpp 中修改
类别名utils.h 中修改
在这里插入图片描述
在这里插入图片描述
使用如下命令进行图像的推理

--model=E:/Git_Projects/ultralytics/weights/Animal/animal.trt --size=640 --batch_size=1  --img=E:/Data/Animal/27.jpg  --savePath=E:/Data/Animal/Animal_27 # --show

右键项目 -> 属性 -> 属性配置 -> 调试 -> 命令参数,将上述命令添加进去
在这里插入图片描述
最后,点击 本地Windows调试器 即可
在这里插入图片描述
命令行推理

# 推理图片
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=1 --img=path/to/xxx.jpg --show --savePath=path/to/xxx
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=8 --img=path/to/xxx.jpg --show --savePath=path/to/xxx

# 推理视频
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=8 --video=path/to/xxx.mp4 --show --savePath=../

# 在线推理相机视频
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=2 --cam_id=0  --show

## 1280
# infer camera
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=1280 --batch_size=2 --cam_id=0  --show

四、推理效果

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、可能遇到的问题

5.1 在对项目设置 生成依赖项,未出现 CUDA 版本选项

在这里插入图片描述
解决方法:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\visual_studio_integration\MSBuildExtensions 下的4个文件全部复制到
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations 即可解决问题
在这里插入图片描述
在这里插入图片描述

opencv_world460ddll_164">5.2 由于找不到 opencv_world460d.dll,无法执行代码,重新安装程序可能会解决此问题

解决方法:
opencv 安装路径 path/to/opencv/build/x64/vc15/bin 中所有后缀是 .dll 的应用程序扩展复制到 C:/Windows/System32 中,即可解决
在这里插入图片描述


http://www.niftyadmin.cn/n/323707.html

相关文章

从零开始Vue3+Element Plus后台管理系统(七)——手写一个简单的多页签组件

以前都是用别人现成的多页签组件,自己也想尝试下做个Vue3的版本,目前还只有基本功能,慢慢完善。 主要思路 使用 Pinia 记录页签数据、处理操作初始状态没有页签数据,使用默认路由数据填充右击页签,显示更多关闭操作…

107.(cesium篇)cesium椎体上下跳动

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <

spring项目里的大事务优化

编程型事务更加灵活 声明式事务只需要加在方法头加Transactional注解即可开启事务&#xff0c;但是还是不太灵活&#xff0c;意味着整个方法所进行对数据库操作都要加进事务&#xff0c;当然一次查询也要进入事务&#xff0c;这并不是我们想要的&#xff0c;我们在update、ins…

O型圈通常应用在哪些地方?

O形圈是广泛用于各种行业和应用的机械密封件。它们是由弹性材料制成的圆环&#xff0c;设计用于在两个表面之间压缩以形成密封&#xff0c;防止气体或液体逸出。O形圈是许多机器和设备的重要组成部分&#xff0c;因为它们提供可靠、经济高效的密封解决方案。O形圈常见的应用之一…

socket各个结构体及其参数

1.sockaddr_in结构体 //老的结构体 struct sockaddr{unsigned short sa_family; //地址类型,AF_xxxchar sa_data[14]; //14字节的端口和地址 }struct sockaddr_in{short int sin_family; //地址类型unsigned short int sin_port; //端口号st…

Java中常见集合类核心源码阅读

Java中常见的集合类主要有List、Set和Map。这些集合类使用广泛&#xff0c;因此深入了解它们的实现原理非常重要。在Java的集合类中&#xff0c;最常用的是ArrayList、LinkedList、HashSet和HashMap&#xff0c;这些集合类的实现基本都依赖于数组和链表。 一、ArrayList源码 …

怎么隐藏回收站?3个方法轻松隐藏回收站!

案例&#xff1a;怎么隐藏回收站 【我不太想把回收站放到桌面上&#xff0c;想把它隐藏了&#xff0c;请问大家有什么好的方法可以隐藏回收站吗&#xff1f;】 回收站是一个非常常见的功能&#xff0c;允许用户恢复已删除的文件。然而&#xff0c;有些人可能不希望回收站一直…

win2012/win2016/win2019 IIS部署SSL证书访问https(支持多站点)

请根据操作系统、站点部署数量选择以下相应参考文档&#xff0c;文档仅供参考。 A、windows2008iis7环境SSL部署https单/多站点 B、linux系统SSL部署https单/多站点 C、windows2003系统SSL单站点部署https 部署https(ssl)后设置301跳转将http跳转到https 亚数机房香港IP部…