Windows下 TensorRT 部署Yolov5模型(C++)
环境介绍
- Windows版本:Windows11
- CUDA版本:11.1.1
- CUDNN版本:8.2.1
- TensorRT版本:7.2.1.6
- Visual studio版本:2017社区版
- openCV版本:3.4.6
- cmake版本:3.17.1
所需下载资源
yolov5源代码
下载yolov5源码链接:https://github.com/ultralytics/yolov5
在这里我选择的v7.0版本下载
tensorrx源代码
tensorrx下载链接:https://github.com/wang-xinyu/tensorrtx
因为我下载的yolov5版本为7.0,所以在这里我需要下载与之对应的版本7.0。
下载yolov5预训练模型
下载地址:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
根据自己下载的yolov5版本下载对应的模型
正式部署
解压tensorrtx-yolov5-v7.0与yolov5-7.0(解压位置由你决定)
解压之后如图所示
## 进入tensorrtx-yolov5-v7.0目录下的yolov5目录下出创建一个build文件夹
进入tensorrtx-yolov5-v7.0目录下的yolov5目录下出创建一个build文件夹
修改CMakeLists(可跳过)
之所以修改CMakeLists的原因是因为我安装openCV是因为我没有默认安装位置,导致后续的操作中它无法自动的寻找到openCV路径
set(OpenCV_DIR “你openCV的安装目录”)
cmake配置
打开cmake-gui应用程序
配置如下图示所示
选择正确的目录之后点击Configure按钮之后进行下一步配置
没有出现问题如下图所示
之后点Generate按钮与open Project按钮
如果你遇到No CUDA toolset found的问题(没有则跳过)
找到你原来下载的CUDA的安装包用解压软件打开
这个目录根据你的VS安装位置来选择(重点是找到BuildCustomizations这个文件)
修改代码解决错误(没有错误跳过)
点击open project之后会得到如下,重点是yolov5_det这个项目(推理图片)
之后你可能会得到如下错误
现在来解决这些问题
第一个问题:无法打开包括文件: “dirent.h”: No such file or directory
发生这个原因是因为这个下面没有包含这个dirent.h文件,我们要做的是让这个项目包含这个文件
首先下载这个文件:https://github.com/tronkko/dirent 并解压
将刚才解压的include(目录根据你自己的存放位置填写)添加到这里
添加完之后重新生成这个项目(你会发现这个问题已经解决)
现在解决第二个问题:“max”: 不是“std”的成员
双击这个错误会跳转到相应的代码位置
再次重新生成项目
现在解决第三个问题:“unordered_map”: 不是“std”的成员
再次重新生成项目
至此部署完成
部署完成测试
生成WTS模型(用于之后转换为tensorrt专用的序列化模型)
首先把tensorrtx-yolov5-v7.0目录下的yolov5目录下的gen_wts.py和下载的yolov5s.pt拷贝到yolov5-7.0目录下
之后用cmd进入yolov5目录位置:执行python gen_wts.py -w yolov5s.pt -o yolov5s.wts
转换为TensorRT专用的序列化模型
拷贝yolov5s.wts到我们创建build目录下的Release目录下
cmd进入这个目录:执行 yolov5_det -s yolov5s.wts yolov5s.engine s 最后的s参数是因为我使用的s模型,如果你是其他模型,则输入对应的参数(生成时间大概10-20分钟)
测试推理图片
拷贝yolov5-7.0目录下的data目录下的images文件夹到创建build目录下的Release目录下
执行程序推理图片(命令:yolov5_det -d yolov5s.engine ./images)
python调用dll来推理图片
首先生成dll文件
修改python代码
tensorrtx-yolov5-v7.0\yolov5目录下提供了相关的代码把它拷贝到Release目录下
打开这个文件并修改相关的设置