marcoslucianops / DeepStream-Yolo配置指南和基本使用方法

1,794 阅读6分钟

DeepStream-Yolo

英伟达DeepStream SDK 6.1 / 6.0.1 / 6.0配置用于YOLO模型。

未来的更新

  • DeepStream 教程
  • 支持YOLOX
  • 支持YOLOv6
  • 动态批量大小

对该资源库的改进

  • 暗网cfg参数器(不需要编辑nvdsparsebbox_Yolo.cpp 或其他文件)
  • 支持new_coordsscale_x_y 参数
  • 对新模型的支持
  • 支持新的层
  • 支持新的激活
  • 支持卷积组
  • 支持INT8校准
  • 支持非方形模型
  • 多个模型的新文件
  • 支持YOLOv5
  • 支持YOLOR
  • GPU YOLO解码器 #138
  • 支持PP-YOLOE
  • 支持YOLOv7
  • 优化的NMS #142
  • 模型基准

开始使用

要求

X86平台上的DeepStream 6.1

x86平台上的DeepStream 6.0.1 / 6.0

Jetson平台上的DeepStream 6.1

Jetson平台上的DeepStream 6.0.1 / 6.0

支持的模型

基准

配置

board = NVIDIA Tesla V100 16GB (AWS: p3.2xlarge)
batch-size = 1
eval = val2017 (COCO)
sample = 1920x1080 video

注意:在Darknet(with letter_box=1)和PyTorch模型的config_infer文件中使用了 maintain-aspect-ratio=1。

NMS配置

  • 评估
nms-iou-threshold = 0.6 (Darknet) / 0.65 (PyTorch) / 0.7 (Paddle)
pre-cluster-threshold = 0.001
topk = 300
  • 测试
nms-iou-threshold = 0.45 / 0.7 (Paddle)
pre-cluster-threshold = 0.25
topk = 300

结果

:* = PyTorch

注意:** = YOLOv4是用trainvalno5k集训练的,所以mAP在val2017测试中很高。

DeepStreamPrecisionResolutionIoU=0.5:0.95IoU=0.5IoU=0.75FPS
PP-YOLOE-xFP166400.5060.6810.551116.54
PP-YOLOE-lFP166400.4980.6740.545187.93
PP-YOLOE-mFP166400.4760.6460.522257.42
PP-YOLOE-s (400)FP166400.4220.5890.463465.23
YOLOv7-E6EFP1612800.4760.6480.52147.82
YOLOv7-D6FP1612800.4790.6480.52060.66
YOLOv7-E6FP1612800.4710.6400.51673.05
YOLOv7-W6FP1612800.4440.6100.483110.29
YOLOv7-X*FP166400.4960.6790.536162.31
YOLOv7*FP166400.4760.6600.518237.79
YOLOv7-Tiny Leaky*FP166400.3450.5160.372611.36
YOLOv7-Tiny Leaky*FP164160.3280.4930.348633.73
YOLOv5x6 6.1FP1612800.5080.6830.55454.88
YOLOv5l6 6.1FP1612800.4940.6680.54087.86
YOLOv5m6 6.1FP1612800.4690.6440.514142.68
YOLOv5s6 6.1FP1612800.3990.5810.438271.19
YOLOv5n6 6.1FP1612800.3170.4870.344392.20
YOLOv5x 6.1FP166400.4700.6520.513152.99
YOLOv5l 6.1FP166400.4540.6360.496247.60
YOLOv5m 6.1FP166400.4210.6040.458375.06
YOLOv5s 6.1FP166400.3440.5280.371602.44
YOLOv5n 6.1FP166400.2470.4130.256629.04
YOLOv4**FP166080.4970.7390.549206.23
YOLOv4-TinyFP164160.2150.4020.205634.69

dGPU安装

要在dGPU(x86平台)上安装DeepStream,不需要docker,我们需要做一些步骤来准备计算机。

DeepStream 6.1

1.禁用BIOS中的安全启动

2.安装依赖项

sudo apt-get update
sudo apt-get install gcc make git libtool autoconf autogen pkg-config cmake
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install dkms
sudo apt-get install libssl1.1 libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstrtspserver-1.0-0 libjansson4 libyaml-cpp-dev
sudo apt-get install linux-headers-$(uname -r)

注意:清除所有的NVIDIA驱动、CUDA等(将$CUDA_PATH替换为你的CUDA路径)。

sudo nvidia-uninstall
sudo $CUDA_PATH/bin/cuda-uninstaller
sudo apt-get remove --purge '*nvidia*'
sudo apt-get remove --purge '*cuda*'
sudo apt-get remove --purge '*cudnn*'
sudo apt-get remove --purge '*tensorrt*'
sudo apt autoremove --purge && sudo apt autoclean && sudo apt clean

3.安装CUDA钥匙圈

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update

4.下载并安装NVIDIA驱动程序

  • TITAN, GeForce RTX / GTX系列和RTX / Quadro系列

    wget https://us.download.nvidia.com/XFree86/Linux-x86_64/510.47.03/NVIDIA-Linux-x86_64-510.47.03.run
    
  • 数据中心/Tesla系列

    wget https://us.download.nvidia.com/tesla/510.47.03/NVIDIA-Linux-x86_64-510.47.03.run
    
  • 运行

    sudo sh NVIDIA-Linux-x86_64-510.47.03.run --silent --disable-nouveau --dkms --install-libglvnd
    

    注意:此步骤将禁用nouveau驱动程序。

  • 重新启动

    sudo reboot
    
  • 安装

    sudo sh NVIDIA-Linux-x86_64-510.47.03.run --silent --disable-nouveau --dkms --install-libglvnd
    

注意:如果你使用的是带有NVIDIA Optimius的笔记本电脑,请运行

sudo apt-get install nvidia-prime
sudo prime-select nvidia

5.下载并安装CUDA

wget https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_510.47.03_linux.run
sudo sh cuda_11.6.1_510.47.03_linux.run --silent --toolkit
  • 导出环境变量

    echo $'export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}\nexport LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc && source ~/.bashrc
    

6.从NVIDIA网站下载并安装TensorRT

TensorRT 8.2 GA Update 4 for Ubuntu 20.04 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4 and 11.5 DEB local repo Package

sudo dpkg -i nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.5.1-ga-20220505_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.5.1-ga-20220505/82307095.pub
sudo apt-get update
sudo apt-get install libnvinfer8=8.2.5-1+cuda11.4 libnvinfer-plugin8=8.2.5-1+cuda11.4 libnvparsers8=8.2.5-1+cuda11.4 libnvonnxparsers8=8.2.5-1+cuda11.4 libnvinfer-bin=8.2.5-1+cuda11.4 libnvinfer-dev=8.2.5-1+cuda11.4 libnvinfer-plugin-dev=8.2.5-1+cuda11.4 libnvparsers-dev=8.2.5-1+cuda11.4 libnvonnxparsers-dev=8.2.5-1+cuda11.4 libnvinfer-samples=8.2.5-1+cuda11.4 libnvinfer-doc=8.2.5-1+cuda11.4 libcudnn8-dev=8.4.0.27-1+cuda11.6 libcudnn8=8.4.0.27-1+cuda11.6
sudo apt-mark hold libnvinfer* libnvparsers* libnvonnxparsers* libcudnn8* tensorrt

7.从NVIDIA网站下载并安装DeepStream SDK

DeepStream 6.1 for Servers and Workstations (.deb)

sudo apt-get install ./deepstream-6.1_6.1.0-1_amd64.deb
rm ${HOME}/.cache/gstreamer-1.0/registry.x86_64.bin
sudo ln -snf /usr/local/cuda-11.6 /usr/local/cuda

8.重新启动计算机

sudo reboot

DeepStream 6.0.1 / 6.0

1.禁用BIOS中的安全启动

如果你使用的是带有较新的Intel/AMD处理器的笔记本电脑,并且你在设置->细节->关于标签中的图形是llvmpipe,请更新内核。

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11/amd64/linux-headers-5.11.0-051100_5.11.0-051100.202102142330_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11/amd64/linux-headers-5.11.0-051100-generic_5.11.0-051100.202102142330_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11/amd64/linux-image-unsigned-5.11.0-051100-generic_5.11.0-051100.202102142330_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11/amd64/linux-modules-5.11.0-051100-generic_5.11.0-051100.202102142330_amd64.deb
sudo dpkg -i  *.deb
sudo reboot

2.安装依赖项

sudo apt-get update
sudo apt-get install gcc make git libtool autoconf autogen pkg-config cmake
sudo apt-get install python3 python3-dev python3-pip
sudo apt install libssl1.0.0 libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstrtspserver-1.0-0 libjansson4
sudo apt-get install linux-headers-$(uname -r)

注意:只有当你使用默认的Ubuntu内核时才安装DKMS。

sudo apt-get install dkms

注意:清除所有的NVIDIA驱动、CUDA等(将$CUDA_PATH改为你的CUDA路径)。

sudo nvidia-uninstall
sudo $CUDA_PATH/bin/cuda-uninstaller
sudo apt-get remove --purge '*nvidia*'
sudo apt-get remove --purge '*cuda*'
sudo apt-get remove --purge '*cudnn*'
sudo apt-get remove --purge '*tensorrt*'
sudo apt autoremove --purge && sudo apt autoclean && sudo apt clean

3.安装CUDA Keyring

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update

4.下载并安装NVIDIA驱动程序

  • TITAN, GeForce RTX / GTX系列和RTX / Quadro系列

    wget https://us.download.nvidia.com/XFree86/Linux-x86_64/470.129.06/NVIDIA-Linux-x86_64-470.129.06.run
    
  • 数据中心/Tesla系列

    wget https://us.download.nvidia.com/tesla/470.129.06/NVIDIA-Linux-x86_64-470.129.06.run
    
  • 运行

    sudo sh NVIDIA-Linux-x86_64-470.129.06.run --silent --disable-nouveau --dkms --install-libglvnd
    

    注意: 这一步将禁用nouveau驱动。

    注意:如果你安装的是5.11.0内核,请删除--dkms标志。

  • 重新启动

    sudo reboot
    
  • 安装

    sudo sh NVIDIA-Linux-x86_64-470.129.06.run --silent --disable-nouveau --dkms --install-libglvnd
    

    注意: 如果你安装的是5.11.0内核,请移除--dkms标志。

注意: 如果你使用的是带有NVIDIA Optimius的笔记本电脑,请运行

sudo apt-get install nvidia-prime
sudo prime-select nvidia

5.下载并安装CUDA

wget https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux.run
sudo sh cuda_11.4.1_470.57.02_linux.run --silent --toolkit
  • 导出环境变量

    echo $'export PATH=/usr/local/cuda-11.4/bin${PATH:+:${PATH}}\nexport LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc && source ~/.bashrc
    

6.从NVIDIA网站下载并安装TensorRT

TensorRT 8.0.1 GA for Ubuntu 18.04 and CUDA 11.3 DEB local repo package

sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626/7fa2af80.pub
sudo apt-get update
sudo apt-get install libnvinfer8=8.0.1-1+cuda11.3 libnvinfer-plugin8=8.0.1-1+cuda11.3 libnvparsers8=8.0.1-1+cuda11.3 libnvonnxparsers8=8.0.1-1+cuda11.3 libnvinfer-bin=8.0.1-1+cuda11.3 libnvinfer-dev=8.0.1-1+cuda11.3 libnvinfer-plugin-dev=8.0.1-1+cuda11.3 libnvparsers-dev=8.0.1-1+cuda11.3 libnvonnxparsers-dev=8.0.1-1+cuda11.3 libnvinfer-samples=8.0.1-1+cuda11.3 libnvinfer-doc=8.0.1-1+cuda11.3 libcudnn8-dev=8.2.1.32-1+cuda11.3 libcudnn8=8.2.1.32-1+cuda11.3
sudo apt-mark hold libnvinfer* libnvparsers* libnvonnxparsers* libcudnn8* tensorrt

7.从NVIDIA网站下载并安装DeepStream SDK

  • DeepStream 6.0.1 for Servers and Workstations (.deb)

    sudo apt-get install ./deepstream-6.0_6.0.1-1_amd64.deb
    
  • DeepStream 6.0 for Servers and Workstations (.deb)

    sudo apt-get install ./deepstream-6.0_6.0.0-1_amd64.deb
    
  • 运行

    rm ${HOME}/.cache/gstreamer-1.0/registry.x86_64.bin
    sudo ln -snf /usr/local/cuda-11.4 /usr/local/cuda
    

8.重新启动计算机

sudo reboot

基本使用方法

1.下载 repo

git clone https://github.com/marcoslucianops/DeepStream-Yolo.git
cd DeepStream-Yolo

2.从Darknetrepo下载cfgweights 文件到DeepStream-Yolo文件夹中。

3.编译lib

  • X86平台上的DeepStream 6.1

    CUDA_VER=11.6 make -C nvdsinfer_custom_impl_Yolo
    
  • 在x86平台上的DeepStream 6.0.1 / 6.0

    CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo
    
  • Jetson平台上的DeepStream 6.1

    CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo
    
  • 在Jetson平台上的DeepStream 6.0.1 / 6.0

    CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
    

4.根据你的模型编辑config_infer_primary.txt 文件(以YOLOv4为例)。

[property]
...
custom-network-config=yolov4.cfg
model-file=yolov4.weights
...

5.运行

deepstream-app -c deepstream_app_config.txt

注意:如果你想使用YOLOv2或YOLOv2-Tiny模型,请在运行前修改deepstream_app_config.txt 文件。

...
[primary-gie]
...
config-file=config_infer_primary_yoloV2.txt
...

NMS配置

要改变nms-iou-threshold,pre-cluster-thresholdtopk 的值,修改 config_infer 文件并重新生成模型引擎文件。

[class-attrs-all]
nms-iou-threshold=0.45
pre-cluster-threshold=0.25
topk=300

注意:重要的是重新生成引擎,以获得基于你设置的pre-cluster-threshold 的最大探测速度。

注意:较低的topk 值将导致更多的性能。

注意:请确保在config_infer文件中设置cluster-mode=2

INT8校准

1.安装OpenCV

sudo apt-get install libopencv-dev

2.编译/重新编译支持OpenCV的nvdsinfer_custom_impl_Yolo lib

  • 在x86平台上的DeepStream 6.1

    CUDA_VER=11.6 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo
    
  • 在x86平台上的DeepStream 6.0.1 / 6.0

    CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo
    
  • Jetson平台上的DeepStream 6.1

    CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo
    
  • Jetson平台上的DeepStream 6.0.1 / 6.0

    CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo
    

3.对于COCO数据集,下载val2017,解压,并移动到DeepStream-Yolo文件夹中。

  • 从COCO数据集中选择1000个随机图像来运行校准

    mkdir calibration
    
    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
        cp ${jpg} calibration/; \
    done
    
  • 用所有选定的图像创建calibration.txt 文件

    realpath calibration/*jpg > calibration.txt
    
  • 设置环境变量

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    
  • 编辑config_infer 文件

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...
    

    编写

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    
  • 运行

    deepstream-app -c deepstream_app_config.txt
    

注意:NVIDIA建议至少要有500张图片才能获得良好的精确度。在这个例子中,我使用了1000张图片以获得更好的精度(更多的图片=更多的精度)。更高的INT8_CALIB_BATCH_SIZE 值将导致更高的精度和更快的校准速度。根据你的GPU内存来设置它。这个过程可能需要很长的时间。

提取元数据

你可以使用Python和C/C++从DeepStream获取元数据。对于C/C++,你可以编辑deepstream-appdeepstream-test 代码。对于Python,你可以安装和编辑deepstream_python_apps

基本上,你需要操作NvDsObjectMeta (Python/C/C++)and NvDsFrameMeta (Python/C/C++) 来获得bboxes的标签、位置等。

我的项目:https://www.youtube.com/MarcosLucianoTV