因为自己在查阅yolov5使用tensorrt加速资料的过程中走过一些弯路,所以在这里把自己亲手搭建yolov5-tensorrt加速流程进行记录,防止记忆消失~
1、各种环境包下载
tensorrt加速过程是利用gpu对模型计算加速的过程,因此,需要将与之相关的环境包全部下载完成。这里贴出我自己今次环境搭建的主要硬件。
- 显卡为 1660sTi
- python 3.9
- win10
根据上述显卡下载对应的cuda版本、cudnn版本、pytorch版本、torchvision 版本 。这里需要提醒的是,所有环境之间的对应关系要保持兼容,否则会出现意想不到的错误。
重中之中,安装TensorRT。下面是英伟达下载tensorrt的官网,值得注意的是,tensorryt的版本也要注意保持兼容。
下在好tensorrt后,需要将文件夹中的一些文件来回复制粘贴,这个部分好多博主都写过,这里就不再阐述。
还有注意的一点,tensorrt安装后也要配置环境变量。
2、安装opencv
https://opencv.org/releases/?aliasId=l10B6XvDlABIGHJ2I这里是opencv官网,从官网下载好安装包后,进行安装,这个安装和普通软件的安装没有区别,直接点开EXE安装包,一直下一步就可以完成了。
2.1、 添加环境变量
D:\Program\OpenCV\build\x64\vc16\bin
D:\Program\OpenCV\build\x64\vc16\lib
D:\Program\OpenCV\build\include
D:\Program\OpenCV\build\include\opencv2
2.2、查看opencv是否安装成功
win+R后输入cmd,然后在控制台输入opencv_version,如果能正常显示opencv版本则安装成功。
3、YOLOV5项目源码以及编译后的源码下载
- github.com/ultralytics/yolov5.git
- GitHub - Monday-Leo/Yolov5_Tensorrt_Win10: A simple implementation of tensorrt yolov5 python/c++🔥
- 以及yolov5权重文件,这里以yolov5s.pt为例
4、生成WTS模型
- 将仓库中的gen_wts.py和下载好的yolov5s.pt权重文件拷贝到yolov5 6.0的目录下
- 运行下面的命令进行模型的转换
- python gen_wts.py -w yolov5s.pt -o yolov5s.wts
- 其中w参数为输入pt模型路径,-o参数为输出wts模型的路径。
- 运行完成后,会在当前目录下生成一个yolov5s.wts的权重模型,这个模型就是用于之后转换为tensorrt的专用序列化模型。
5、cmake编译
5.1. 生成Makefile
在上面下载的编译好的yolov5源码仓库下新建一个build文件夹。
打开Cmake,源文件选择本仓库目录,build选择刚新建的build目录
修改configure
选择自己需用的Visual Studio版本,以及编译平台,之后点击finish
一段时间之后就可以完成了
5.1.1. 配置CMakeLists.txt
打开CMakeLists.txt,修改OpenCV、TensorRT、dirent.h的目录,其中dirent.h在本仓库的include中,需要注意的,这些路径都必须使用绝对路径,用\来分割路径。
5.1.2. 修改算力
具体数值参考上面nvidia官网进行设定
这里RTX 2060的算力是75,所以修改arch=compute_75;code=sm_75
6、源代码编译
6.1. 修改源代码
使用Visual Studio打开项目build文件夹中的sln文件
- 搜索yololayer.h文件对其进行修改
- 修改文件中的这些参数为自己的模型类别数、输入大小,
- 如果使用的是官方预训练权重,那么不用修改。但如果是自己训练的模型不修改的话,之后是会报错的.
static constexpr int CLASS_NUM = 80;
static constexpr int INPUT_H = 640; // yolov5's input height and width must be divisible by 32.
static constexpr int INPUT_W = 640;
6.2. 生成exe
将界面上方的debug改为Release,然后点击菜单栏处的生成-重新生成yolov5
编译成功后如下图。
可以看到build/release文件夹下已经生成了对应的exe文件了
6.3. 生成engine
- 将最开始生成的yolov5s.wts模型复制到exe所在的文件夹中,在这个目录中打开cmd输入
yolov5 -s yolov5s.wts yolov5s.engine s
-
我们这边使用的是s模型,最后则输入s,同理若为m模型,最后一个参数则需要改成m
-
此时,程序会将wts转换为engine序列化模型,需要的时间比较久.
编译完成后。
-
生成engine完成后,会在文件夹下出现yolov5s.engine的模型,
7. 推理
- 将仓库中的pictures文件夹复制到EXE文件夹项,尝试预测是否正确,输入
yolov5 -d yolov5s.engine ./pictures
里面一共有两张图片,每一张的推理时间仅为4毫秒,也就是250FPS,这个速度可以说相当快了
推理效果
结语
至此,yolov5+tensorrt部署工作完成,最重要的是两点,一个是环境部署,一个是cmakelist的修改。