本方案针对服务器端搭建tensorrt 环境,不想搭建docker 环境的情况。
一.服务器端搭建Tensort 环境
目前使用的是公司已搭建好的训练服务器,服务器中已经配置好cuda cudnn。由于训练服务器分配的用户无sudo 权限,因此在使用tensorrt时不能直接安装在/usr/下。Tensorrt tar 安装方式可避免安装问题,可指定路径解压后直接使用,具体使用方式如下。
1.首先需要知道自己所使用的训练服务器安装的cuda 版本,具体如何查询可自行百度哈。本博客仅介绍。如果自己的电脑需要安装cuda 和cudnn 后 继续以下步骤。注意是否安装完成关系到后续如何在Cmakelist 中配置链接的头文件和动态库的问题。
2.服务器已安装cuda,Cmakelist 调用的lib 和include 在示例下图中:
3.由于我们训练服务器已安装cuda-10.2,因此无需配置,如果是公用服务器给出的子用户,根据cuda版本下载对应的Tensorrt,并解压到自己的指定目录
Tensorrt下载链接: https://developer.nvidia.com/nvidia-tensorrt-download
注意:下载一定要下Tar,解压到自己文件下即可。因公用服务器给的子用户是无sudo 权限,无法 安装
3.解压后目录如下,下列目录中我们需要用到的是include lib 和python 文件夹下的whl 安装文件
4.安装Python 版本对应的tensorrt
cd ./ python
pip install xxx.whl --user //无sudo 权限,安装在自己的环境下
注意: 如果安装完成,报libxxx.so 找不到,需要在export 导入指定so lib 的位置,或者在~/.bashrc 中配置tensorrt/lib 的环境变量
二.Yolov5模型转换
注意:使用C++工程方案的模型转换需要前提是已配置好了一方案;
1. 转换工程参考:https://github.com/wang-xinyu/tensorrtx
工程中找到如何转换U版本由于我们是指定路径安装的tensorrt,因此我们在使用转换模型过程中可在Cmakelist中指定依赖。
2.如何配置Cmakelist :如果已经将tensorrt 放置在文件夹下需在cmakelist 中指定tensorrt 的include 和动态库链接;
# tensorrt
include_directories("/home/xxx/xxx/TensorRT-7.0.0.11/include")
link_directories("/home/xxx/xxx/TensorRT-7.0.0.11/targets/x86_64-linux-gnu/lib")
使用中涉及到Opencv 的调用,由于我所使用的opencv 没有安装在服务器上,我在自己电脑上编译opencv 后将include 和lib 放置在Libary 中,在cmakelist 中指定路径调用了。
3.编译转换的可执行文件:
在示例工程中mkdir build 后cmake ..&& make 执行,具体如何执行可参考READM.MD.
4.利用编译好的执行行文件导出 engnie
# 1.需在yolov5 git 上下载yolov5s.pt,注意版本问题,示例C++工程是5.0 版本
python gen_wts.py -w yolov5s.pt -o yolov5s.wts #pt 权重保存成.wts
./yolov5 -s yolov5s.wts yolov5s.engine s # 利用可执行文件生成 .engine ,根据当前平台的cuda 资源生成
三.如何运行示例:
示例工程使用示例工程下:Yolov5 推理示例和Yolov5+deepsort 方案,示例出如何调用我们转换好的模型和依赖库;
1.图片测试:build 下生成了so和yolovs.engine,可使用配置好的python环境运行 yolov5_trt.py,输出测试如图
测试在2080ti上跑yolov5s 相比pytorch 还是快了很多。
2.视频流测试:Yolov5+deepsort 参考链接:https://github.com/cong/yolov5_deepsort_tensorrt
需要配置2中编译好的文件路径即可:
if __name__ == '__main__':
video_path = './video/test.mp4'
PLUGIN_LIBRARY = "/home/xx/xx/xx/yolov5/build/libmyplugins.so"
ctypes.CDLL(PLUGIN_LIBRARY)
engine_file_path = "/home/xx/xx/xx/yolov5/build/yolov5s.engine"
detect(video_path, engine_file_path)
运行示例:
运行速度在2080ti 上大概在15~20fps(640x640)。