本文全文参考文章为 win10下 yolov8 tensorrt模型加速部署【实战】
本文使用的代码仓库为 TensorRT-Alpha注:其他 Yolov8 TensorRT 部署项目:YOLOv8 Tensorrt Python/C++部署教程
一、前期准备工作
安装Visual Studio 2019或者Visual Studio 2022、Nvidia驱动
安装cuda,cudnn、opencv、tensorrt并进行相应的环境配置,这里不做配置教程
二、属性表的创建
制作属性表的3个步骤:
- 拷贝include路径
- 拷贝lib路径,外加设置dll到系统环境变量
- 拷贝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 x64
的
OpenCV 属性表
就配置完成了
实现
Debug x64
的
OpenCV 属性表
,只需要将最后
链接器
->
输入
->
附加依赖项
文件名改为
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 模型部署
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
即可解决问题
5.2 由于找不到 opencv_world460d.dll,无法执行代码,重新安装程序可能会解决此问题
解决方法:
将 opencv 安装路径
path/to/opencv/build/x64/vc15/bin
中所有后缀是
.dll
的应用程序扩展复制到
C:/Windows/System32
中,即可解决
版权归原作者 MangoloD 所有, 如有侵权,请联系我们删除。