TensorRT推理YOLOv5

发布时间 2023-09-18 01:42:45作者: 珠峰上吹泡泡

一、查看cuda和cudnn的安装版本

1.1 查看cuda的版本信息

nvcc --version

# 输出
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Thu_Jun_11_22:26:48_Pacific_Daylight_Time_2020
Cuda compilation tools, release 11.0, V11.0.194
Build cuda_11.0_bu.relgpu_drvr445TC445_37.28540450_0

1.2 查看cudnn的版本信息

导航到cudnn的安装目录,其通常安装在cuda的安装目录下(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y,其中X.Y是cuda的版本号),然后在include目录的cudnn_version.h头文件中能看到cudnn的版本信息,如下所示:

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 5

二、TensorRT下载安装

2.1 下载

选择对应cuda的版本进行下载--->官方下载地址

2.2 安装

解压后将bin、include和lib目录放到环境变量就安装完成了。

为了验证TensorRT是否安装成功,右键打开samples/sampleMNIST中的工程,切换到Release模式生成可执行程序

ReleaseMode

切换到bin目录下,在cmd中执行sample_mnist.exe(或者直接在VS中执行)。

sample_mnist_exe

可能会出现这样的error。tensorrtMnistError

上述错误的原因在于找不到对应的pgm格式的文件,这时可通过执行data/mnist目录下的download_pgms.py文件下载。

pgmFiles

此时在运行sample_mnist.exe成功即证明TensorRT安装成功。

tensorrtExeSuccess

三、推理YOLOv5

3.1 tensorrtx下载

拟使用王鑫宇大神的tensorrtx进行推理,代码下载路径为 GitHub下载链接

3.2 yolov5s.wts 生成

进入tensorrtx\yolov5文件夹中,将gen_wts.py文件复制到YOLOv5项目(yolov5-6.0)文件夹中,然后指定权重文件即可将pt文件转化为wts格式。

python gen_wts.py -w yolov5s.pt

3.3 tensorrtx编译运行

3.3.1 vs中新建一个空项目,且选择Release+x64这个组合。

createEmptyProject

3.3.2 将tensorrtx\yolov5文件夹下所有的.cpp文件(包含cu文件)和.h文件加入进工程。

addFiles

3.3.3 添加头文件和库文件

1)头文件

tensorrtInclude

2)库文件

tensorRTlib

附加依赖项的内容添加如下,其中opencv的版本需要修改。

nvinfer.lib
nvinfer_plugin.lib
cudart.lib
cudadevrt.lib
cudart_static.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
opencv_world440.lib

3.3.4 遇到的问题及解决

1)LNK2001错误

LNK2001Error

解决方式:

项目右键--->生成依赖项--->生成自定义

生成自定义文件

将cu文件的项类型配置为CUDA C/C++

cu文件配置

2)cannot define dllimport entity

dllimportEntityError

解决方法:

在C/C++--->预处理器--->预处理器定义中添加宏。

API_EXPORTS
<different options>

3)C3928与C2589错误

C3928Error

解决方法:

在C/C++--->预处理器--->预处理器定义中添加宏。

_CRT_SECURE_NO_WARNINGS
NOMINMAX

至此,tensorrtx应该可以正常编译成功。

tensorrtx编译成功

3.4 tensorrtx加速命令

3.4.1 将wts文件拷贝到可执行程序目录下

wts文件拷贝

3.4.2 生成engine文件

yolov5Infer.exe -s yolov5s.wts yolov5s.engine s
# -s 指序列化命令行参数
# s 表示yolov5模型的类型 s n l

整个过程时间较长,约为13分钟。

构建engine的过程

3.4.3 推理运行

yolov5.exe -d yolov5s.engine ./samples
# -d 表示反序列化命令行参数
# ./samples指待推理的文件目录

第一张会牵涉到engine文件的反序列化过程,所以时间会稍微久一点。

推理时间

推理结果

tensorrt推理结果

_bus

_zidane

参考文章:win10安装TensorRT

参考文章:tensorrt windows下简易说明

参考文章:windows上配置TensorRT yolov5 -6.0部署

参考文章:Win10—YOLOv5实战+TensorRT部署+VS2019编译