服务器搭建Tensorrt 转换Yolov5实例

pipu

关注

阅读 67

2022-01-21

本方案针对服务器端搭建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)。

精彩评论(0)

0 0 举报