DeepStream-Yolo
英伟达DeepStream SDK 6.1 / 6.0.1 / 6.0配置用于YOLO模型。
未来的更新
- DeepStream 教程
- 支持YOLOX
- 支持YOLOv6
- 动态批量大小
对该资源库的改进
- 暗网cfg参数器(不需要编辑
nvdsparsebbox_Yolo.cpp或其他文件) - 支持
new_coords和scale_x_y参数 - 对新模型的支持
- 支持新的层
- 支持新的激活
- 支持卷积组
- 支持INT8校准
- 支持非方形模型
- 多个模型的新文件
- 支持YOLOv5
- 支持YOLOR
- GPU YOLO解码器 #138
- 支持PP-YOLOE
- 支持YOLOv7
- 优化的NMS #142
- 模型基准
开始使用
- 要求
- 支持的模型
- 基准
- dGPU安装
- 基本使用方法
- NMS配置
- INT8校准
- YOLOv5的使用
- YOLOR的使用
- 使用PP-YOLOE
- YOLOv7的使用
- 使用您的自定义模型
- 多个YOLO GIEs
要求
X86平台上的DeepStream 6.1
- Ubuntu 20.04
- CUDA 11.6更新1
- TensorRT 8.2 GA Update 4 (8.2.5.1)
- NVIDIA驱动程序510.47.03
- 英伟达DeepStream SDK 6.1
- GStreamer 1.16.2
- 深度Stream-Yolo
x86平台上的DeepStream 6.0.1 / 6.0
- Ubuntu 18.04
- CUDA 11.4更新1
- TensorRT 8.0 GA (8.0.1)
- NVIDIA驱动程序 >= 470.63.01
- NVIDIA DeepStream SDK 6.0.1 / 6.0
- GStreamer 1.14.5
- DeepStream-Yolo
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测试中很高。
| DeepStream | Precision | Resolution | IoU=0.5:0.95 | IoU=0.5 | IoU=0.75 | FPS |
|---|---|---|---|---|---|---|
| PP-YOLOE-x | FP16 | 640 | 0.506 | 0.681 | 0.551 | 116.54 |
| PP-YOLOE-l | FP16 | 640 | 0.498 | 0.674 | 0.545 | 187.93 |
| PP-YOLOE-m | FP16 | 640 | 0.476 | 0.646 | 0.522 | 257.42 |
| PP-YOLOE-s (400) | FP16 | 640 | 0.422 | 0.589 | 0.463 | 465.23 |
| YOLOv7-E6E | FP16 | 1280 | 0.476 | 0.648 | 0.521 | 47.82 |
| YOLOv7-D6 | FP16 | 1280 | 0.479 | 0.648 | 0.520 | 60.66 |
| YOLOv7-E6 | FP16 | 1280 | 0.471 | 0.640 | 0.516 | 73.05 |
| YOLOv7-W6 | FP16 | 1280 | 0.444 | 0.610 | 0.483 | 110.29 |
| YOLOv7-X* | FP16 | 640 | 0.496 | 0.679 | 0.536 | 162.31 |
| YOLOv7* | FP16 | 640 | 0.476 | 0.660 | 0.518 | 237.79 |
| YOLOv7-Tiny Leaky* | FP16 | 640 | 0.345 | 0.516 | 0.372 | 611.36 |
| YOLOv7-Tiny Leaky* | FP16 | 416 | 0.328 | 0.493 | 0.348 | 633.73 |
| YOLOv5x6 6.1 | FP16 | 1280 | 0.508 | 0.683 | 0.554 | 54.88 |
| YOLOv5l6 6.1 | FP16 | 1280 | 0.494 | 0.668 | 0.540 | 87.86 |
| YOLOv5m6 6.1 | FP16 | 1280 | 0.469 | 0.644 | 0.514 | 142.68 |
| YOLOv5s6 6.1 | FP16 | 1280 | 0.399 | 0.581 | 0.438 | 271.19 |
| YOLOv5n6 6.1 | FP16 | 1280 | 0.317 | 0.487 | 0.344 | 392.20 |
| YOLOv5x 6.1 | FP16 | 640 | 0.470 | 0.652 | 0.513 | 152.99 |
| YOLOv5l 6.1 | FP16 | 640 | 0.454 | 0.636 | 0.496 | 247.60 |
| YOLOv5m 6.1 | FP16 | 640 | 0.421 | 0.604 | 0.458 | 375.06 |
| YOLOv5s 6.1 | FP16 | 640 | 0.344 | 0.528 | 0.371 | 602.44 |
| YOLOv5n 6.1 | FP16 | 640 | 0.247 | 0.413 | 0.256 | 629.04 |
| YOLOv4** | FP16 | 608 | 0.497 | 0.739 | 0.549 | 206.23 |
| YOLOv4-Tiny | FP16 | 416 | 0.215 | 0.402 | 0.205 | 634.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下载cfg 和weights 文件到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-threshold 和topk 的值,修改 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 calibrationfor 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-app 或deepstream-test 代码。对于Python,你可以安装和编辑deepstream_python_apps。
基本上,你需要操作NvDsObjectMeta (Python/C/C++)and NvDsFrameMeta (Python/C/C++) 来获得bboxes的标签、位置等。