• ubuntu下yolov5 tensorrt模型部署


    ubuntu下yolov5 tensorrt模型部署

    • YOLOv5的创新性:相比于之前的目标检测算法,YOLOv5在多个方面进行了创新和优化。首先,它在网络结构上采用了轻量级的设计,使用了CSPDarknet53作为骨干网络,减少了计算量和参数量,提高了算法的实时性和效率。其次,YOLOv5引入了蒸馏学习策略,使用教师模型指导学生模型进行学习,提高了模型的性能和泛化能力。此外,YOLOv5还采用了多尺度特征融合策略,使得模型能够更好地捕捉到不同尺度的目标特征。另外,YOLOv5还改进了损失函数的设计,采用GIOU和COCO等损失函数,提高了模型的准确性。
    • YOLOv5对工业界的影响:YOLOv5的推出对工业界产生了广泛的影响。首先,它被广泛应用于智能驾驶、安防监控、机器人视觉等场景中,为工业界提供了更准确、高效和可靠的目标检测工具。其次,YOLOv5的推出加速了目标检测技术的发展和应用,促进了计算机视觉领域的进步。此外,YOLOv5的开源也为工业界提供了更多的参考和选择,推动了深度学习算法的发展和完善。
    • YOLOv5的优点:YOLOv5具有多个优点。首先,它具有高效性,能够在短时间内处理大量的图像和视频数据。其次,YOLOv5具有准确性,能够准确地检测到目标物体并对其进行分类和定位。此外,YOLOv5还具有实时性,能够实时地输出检测结果和处理速度,使得它能够适用于各种实际应用场景中。另外,YOLOv5还具有易用性,其简单的接口和易懂的文档使得开发者可以轻松上手并开发出高质量的目标检测程序。

    本文提供yolov5-tensorrt加速方法。
    有源码!有源码!有源码! 不要慌,哈哈哈。
    在这里插入图片描述
    下图右边是yolov5s部署之后,tensorrt部署效果,和python推理结果一致。
    在这里插入图片描述

    yolov5s : Offical( left ) vs Ours( right )

    一、Ubuntu18.04环境配置

    如果您对tensorrt不是很熟悉,请务必保持下面库版本一致。
    请注意: Linux系统安装以下库,务必去进入系统bios下,关闭安全启动(设置 secure boot 为 disable)

    1.1 安装工具链和opencv

    sudo apt-get update 
    sudo apt-get install build-essential 
    sudo apt-get install git
    sudo apt-get install gdb
    sudo apt-get install cmake
    
    • 1
    • 2
    • 3
    • 4
    • 5
    sudo apt-get install libopencv-dev  
    # pkg-config --modversion opencv
    
    • 1
    • 2

    1.2 安装Nvidia相关库

    注:Nvidia相关网站需要注册账号。

    1.2.1 安装Nvidia显卡驱动

    ubuntu-drivers devices
    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt update
    sudo apt install nvidia-driver-470-server # for ubuntu18.04
    nvidia-smi
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2.2 安装 cuda11.3

    • 进入链接: https://developer.nvidia.com/cuda-toolkit-archive
    • 选择:CUDA Toolkit 11.3.0(April 2021)
    • 选择:[Linux] -> [x86_64] -> [Ubuntu] -> [18.04] -> [runfile(local)]

      在网页你能看到下面安装命令,我这里已经拷贝下来:
    wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
    sudo sh cuda_11.3.0_465.19.01_linux.run
    
    • 1
    • 2

    cuda的安装过程中,需要你在bash窗口手动作一些选择,这里选择如下:

    • select:[continue] -> [accept] -> 接着按下回车键取消Driver和465.19.01这个选项,如下图(it is important!) -> [Install]

      在这里插入图片描述
      bash窗口提示如下表示安装完成
    #===========
    #= Summary =
    #===========
    
    #Driver:   Not Selected
    #Toolkit:  Installed in /usr/local/cuda-11.3/
    #......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    把cuda添加到环境变量:

    vim ~/.bashrc
    
    • 1

    把下面拷贝到 .bashrc里面

    # cuda v11.3
    export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    export CUDA_HOME=/usr/local/cuda-11.3
    
    • 1
    • 2
    • 3
    • 4

    刷新环境变量和验证

    source ~/.bashrc
    nvcc -V
    
    • 1
    • 2

    bash窗口打印如下信息表示cuda11.3安装正常

    nvcc: NVIDIA (R) Cuda compiler driver<br>
    Copyright (c) 2005-2021 NVIDIA Corporation<br>
    Built on Sun_Mar_21_19:15:46_PDT_2021<br>
    Cuda compilation tools, release 11.3, V11.3.58<br>
    Build cuda_11.3.r11.3/compiler.29745058_0<br>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2.3 安装 cudnn8.2

    • 进入网站:https://developer.nvidia.com/rdp/cudnn-archive
    • 选择: Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x
    • 选择: cuDNN Library for Linux (x86_64)
    • 你将会下载这个压缩包: “cudnn-11.3-linux-x64-v8.2.0.53.tgz”
    # 解压
    tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz
    
    • 1
    • 2

    将cudnn的头文件和lib拷贝到cuda11.3的安装目录下:

    sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
    sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
    sudo chmod a+r /usr/local/cuda/include/cudnn.h
    sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
    
    • 1
    • 2
    • 3
    • 4

    1.2.4 下载 tensorrt8.4.2.4

    本教程中,tensorrt只需要下载\、解压即可,不需要安装。

    • 进入网站:https://developer.nvidia.com/nvidia-tensorrt-8x-download
    • 把这个打勾: I Agree To the Terms of the NVIDIA TensorRT License Agreement
    • 选择: TensorRT 8.4 GA Update 1
    • 选择: TensorRT 8.4 GA Update 1 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package
    • 你将会下载这个压缩包: “TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz”
    # 解压
    tar -zxvf TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
    # 快速验证一下tensorrt+cuda+cudnn是否安装正常
    cd TensorRT-8.4.2.4/samples/sampleMNIST
    make
    cd ../../bin/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    导出tensorrt环境变量(it is important!),注:将LD_LIBRARY_PATH:后面的路径换成你自己的!后续编译onnx模型的时候也需要执行下面第一行命令

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/temp/TensorRT-8.4.2.4/lib
    ./sample_mnist
    
    • 1
    • 2

    bash窗口打印类似如下图的手写数字识别表明cuda+cudnn+tensorrt安装正常
    在这里插入图片描述

    1.2.5 下载仓库TensorRT-Alpha并设置

    git clone https://github.com/FeiYull/tensorrt-alpha
    
    • 1

    设置您自己TensorRT根目录:

    git clone https://github.com/FeiYull/tensorrt-alpha
    cd tensorrt-alpha/cmake
    vim common.cmake
    # 在文件common.cmake中的第20行中,设置成你自己的目录,别和我设置一样的路径eg:
    # set(TensorRT_ROOT /root/TensorRT-8.4.2.4)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、从yolov5源码中导出onnx文件

    可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件:

    # 下载yolov5源码
    git clone https://github.com/ultralytics/yolov5
    
    • 1
    • 2

    切换版本为yolov5.7.0

    git checkout v7.0
    
    • 1

    安装 yolov5环境

    pip install -r requirements.txt
    
    • 1

    用以下指令导出onnx模型文件,640表示模型的输入分辨率为:640X640,1280同理表示:1280X1280。建议使用640对应的小模型。

    # 640
    python export.py --weights=yolov5n.pt  --dynamic --include=onnx 
    python export.py --weights=yolov5s.pt  --dynamic --include=onnx
    python export.py --weights=yolov5m.pt  --dynamic --include=onnx
    python export.py --weights=yolov5l.pt  --dynamic --include=onnx
    python export.py --weights=yolov5x.pt  --dynamic --include=onnx
    # 1280
    python export.py --weights=yolov5n6.pt  --dynamic --include=onnx
    python export.py --weights=yolov5s6.pt  --dynamic --include=onnx
    python export.py --weights=yolov5m6.pt  --dynamic --include=onnx
    python export.py --weights=yolov5l6.pt  --dynamic --include=onnx
    python export.py --weights=yolov5x6.pt  --dynamic --include=onnx
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    三、利用tensorrt编译onnx模型

    将你的onnx模型放到这个路径:tensorrt-alpha/data/yolov5

    cd tensorrt-alpha/data/yolov5
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.2.4/lib
    
    • 1
    • 2

    编译onnx模型指令,640表示模型的输入分辨率为:640X640,1280同理表示:1280X1280。注意:编译onnx格式的模型会得到例如xxxx.trt格式的文件,下文推理要用到。

    # 640
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5n.onnx   --saveEngine=yolov5n.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5s.onnx   --saveEngine=yolov5s.trt   --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5m.onnx   --saveEngine=yolov5m.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5l.onnx   --saveEngine=yolov5l.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5x.onnx   --saveEngine=yolov5x.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
    # 1280
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5n6.onnx   --saveEngine=yolov5n6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
    ../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5s6.onnx   --saveEngine=yolov5s6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    四、编译执行yolov5-tensorrt工程

    使用命令行编译下代码

    git clone https://github.com/FeiYull/tensorrt-alpha
    cd tensorrt-alpha/yolov5
    mkdir build
    cd build
    cmake ..
    make -j10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    按照需求执行推理,支持推理一张图片、在线推理视频文件,或者在线从摄像头获取视频流并推理。

    # 640
    # infer an image
    ./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=1  --img=../../data/6406401.jpg   --show --savePath=../
    # infer video
    ./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=8  --video=../../data/people.mp4  --show 
    # infer web camera
    ./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=2  --show  --cam_id=0
    
    # 1280
    ./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5s6.trt  --size=1280 --batch_size=1 --img=../../data/6406401.jpg   --show --savePath
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    例如:以下是yolov5推理视频流效果。
    在这里插入图片描述

    五、结束语

    都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha
    在这里插入图片描述

  • 相关阅读:
    java档案类
    NEON优化:性能优化经验总结
    CSS盒子模型(上)
    涛思 TDengine 2.6+优化参数
    TypeScript语法快速上手
    SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.11 SpringBoot 整合 MongoDB
    3.NVIDIA Deepstream开发指南中文版--Deepstream 环境配置
    为什么要替换 Object.defineProperty?
    java面试100题(应届生必备)
    在centos7系统中如何给docker配置代理
  • 原文地址:https://blog.csdn.net/m0_72734364/article/details/133773842