NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记

前言

查看Jetson nxJetPack 版本和 CUDA、cuDNN、OPENCV、TensorRT版本

  • 安装pip3、jtop
sudo apt-get update
sudo apt-get install python3-pip python3-dev -y
sudo -H pip3 install jetson-stats
sudo jtop

在这里插入图片描述

  • 换国内源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

#清华源
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted

sudo apt-get update

一、配置Deepstream SDK

Deepstream SDK 版本配置需要根据自己 Jetson 设备安装的 JetPack 版本来对应安装,我的 Jetson NX 安装的 JetPack 版本为 4.5 ,所以我安装的 Deepstrean SDK5.0,下图为 Deepstream SDK 版本和 JetPack 版本的对应关系。
在这里插入图片描述

1.安装 Deepstream 5.0

1.1 系统内命令安装 Deepstream 5.0

sudo apt install \
libssl1.1 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstreamer-plugins-base1.0-dev \
libgstrtspserver-1.0-0 \
libjansson4 \
libyaml-cpp-dev
  • 安装Deepstream 5.0
sudo tar -xvf deepstream_sdk_5.0_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.0
sudo ./install.sh
sudo ldconfig
  • 安装 librdkafka
git clone https://github.com/edenhill/librdkafka.git
cd librdkafka
git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a
./configure
make
sudo make install

将生成的库复制到Deepstream目录下:

sudo mkdir -p /opt/nvidia/deepstream/deepstream-5.0/lib
sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-5.0/lib

1.2 SDK Manager安装 Deepstream 5.0

注明JetPack 4.5 为较低 Jetson 系统版本,需要把SDK Manager安装在Ubuntu16.04或Ubuntu18.04系统上

在这里插入图片描述

sudo apt install ./sdkmanager_1.9.0-10816_amd64.deb
sdkmanager

SDK Manager 官方使用说明 NVIDIA SDK MANAGER

  • 打开SDK Manager ,根绝 JetPack 版本选择 Deepstream
    在这里插入图片描述

2.验证 Deepstream 5.0

  • 查看安装版本
deepstream-app --version-all

在这里插入图片描述

进入目录/opt/nvidia/deepstream/deepstream-5.0/samples
在这里插入图片描述
进行功能验证

sudo deepstream-app -c <path_to_config_file>

二、配置YOLOv5环境

1.配置需要的库

sudo apt-get install build-essential make cmake cmake-curses-gui -y
sudo apt-get install git g++ pkg-config curl -y
sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module -y
sudo apt-get install libhdf5-serial-dev hdf5-tools -y
sudo apt-get install nano locate screen -y
sudo apt-get install libfreetype6-dev -y
sudo apt-get install protobuf-compiler libprotobuf-dev openssl -y
sudo apt-get install libssl-dev libcurl4-openssl-dev -y
sudo apt-get install cython3 -y
sudo apt-get install gfortran -y
sudo apt-get install libjpeg-dev -y
sudo apt-get install libopenmpi2 -y
sudo apt-get install libopenblas-dev -y
sudo apt-get install libjpeg-dev zlib1g-dev -y
sudo apt-get install build-essential -y
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install ffmpeg -y

2.安装 torch

在这里插入图片描述

  • torch-1.80包目录下输入命令安装
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl

3.安装 torchvision

注:若安装时出现 IIIegal instruction 错误,可在 ~/.bashrc 添加 export OPENBLAS_CORETYPE = ARMV8

输入指令

git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
sudo python3 setup.py install
  • 安装完之后进行验证:
python3
import torch
torch.__version__				
import torchvision
torchvision.__version__
quit()

在这里插入图片描述

4.配置 YOLOv5环境

4.1 更换 pip 为国内源

mkdir ~/.pip
sudo gedit ~/.pip/pip.conf

改为清华源,将下面内容输入到 pip.conf里面,然后保存退出

[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=https://pypi.tuna.tsinghua.edu.cn

4.2 下载 Yolov5 源码,安装需要的包

由于不同版本的Yolov5网络架构不同,所以 Yolov5tensorrtx 也有对应版本,我下载 Yolov5-5.0 的版本 Yolov5-5.0链接

python3 -m pip install --upgrade pip 
pip3 install wheel       
unzip  yolov5-5.0.zip  
cd yolov5-5.0
pip3 install -r requirements.txt    //安装 yolov5-5.0所需要的支持包,这个方法可能会失败
//若安装支持包失败,可以在直接进行推理执行命令
python3 detect.py
//报故缺什么安装什么即可,例如 pip3 install matplotlib==3.2.2 ,具体安装版本可参考yolov5-5.0目录下requirements.txt 					

在这里插入图片描述

4.3 下载yolov5s.pt

因为weights目录下的 download_weights.sh 脚本和上一步 python3 detect.py 推理下载的都是最新版的 pt 文件,这里需要是 5.0 版本的 pt 文件,下载链接 yolov5/releases/tag/v5.0链接 , 下拉到最底部,下载 pt 文件
在这里插入图片描述

将下载的 yolov5s.pt 复制 yolov5-5.0 文件夹下,在 yolov5-5.0/model/common.py 源码里添加 SPPF 的类,将下面的源码复制 common.py

import warnings
class SPPF(nn.Module):
    # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
 
    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')  # suppress torch 1.9.0 max_pool2d() warning
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

4.4 测试图片目标检测识别

cd yolov5-5.0
python3 detect.py --source data/images/bus.jpg --weights ./yolov5s.pt

在这里插入图片描述

4.5 测试 RTSP 推拉流目标检测识别

window主机进行 RTSP 推流视频文件,Jetson nx 进行拉流图像解析

cd yolov5-5.0
python3 detect.py --source 'rtsp://192.168.1.123:8554/video' --weights ./yolov5s.pt

在这里插入图片描述

4.6 测试 USB 摄像头目标检测识别

修改 utils/datasets.py 源码,将以下内容屏蔽掉
在这里插入图片描述

cd yolov5-5.0
python3 detect.py --source 0 --weights ./yolov5s.pt

在这里插入图片描述

5.TensorRT加速推理

5.1 下载 TensorRT

TensorRT-yolov5-v5.0版本链接

unzip tensorrtx-yolov5-v5.0.zip

5.2 将 .pt 文件转换成 .wts 文件

cp tensorrtx-yolov5-v5.0/yolov5/gen_wts.py ../../yolov5-5.0	//将TensorRT目录下的gen_wts.py复制到yolov5目录下
cd ../../yolov5-5.0
python3 gen_wts.py -w yolov5s.pt -o yolov5s.wts				//生成wts文件,-w 为你的*.pt文件,-o 为转换生成的文件名称

在这里插入图片描述

5.3 生成 .engine 文件并进行推理检测

cd ../tensorrtx-yolov5-v5.0/yolov5
mkdir build && cd build
cp ../../../yolov5-5.0/yolov5s.wts ./			//将yolov5目录下生成的wts文件复制到TensorRT的build目录下
cmake .. 										//编译
make -j8										//生成yolov5执行文件
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s 	//生成engine文件,生成的wts文件用的是yolov5s.pt,所以结尾我用的s
sudo ./yolov5 -d yolov5s.engine ../samples    	//测试一下,测试结果就在build目录下

在这里插入图片描述

三、Deepstream-5.0 && Yolov5-5.0 && Tensorrt 目标识别检测

1.下载Yolov5-in-Deepstream-5.0 并配置环境

下载链接 Yolov5-in-Deepstream-5.0,或者命令下载

git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

1.1 编译 Deepstream 的custom-lib库

更改 Makefile, 我直接 make 编译 libnvdsinfer_custom_impl_Yolo.so库文件时一直失败,后来发现目录Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo/下的 yolo.cppyoloPlugins.cpp 其实用不到,可以直接屏蔽到,就可以编译成功

在这里插入图片描述

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo
make

1.2 加载 Yolov5 环境

TensorRT 加速推理步骤生成的 .enginelibmyplugins.soJetson 设备 安装的 Deepstream 源码类别里YOLO目录下的标签集 labels.txt 复制到 Yolov5-in-Deepstream-5.0/Deepstream 5.0/ 目录下
在这里插入图片描述
配置 config_infer_primary_yolov5.txt 文件,确保引擎文件和库文件名称和路径正确

在这里插入图片描述

2.验证

可通过修改 deepstream_app_config_yoloV5.txt 来配置图像源,是否打开 Tracker ,是否调用 GPU 加速

2.1 验证本地文件目标检测识别

在这里插入图片描述

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt 

在这里插入图片描述

2.1 验证 USB 摄像头目标检测识别

在这里插入图片描述

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt 

在这里插入图片描述

2.1 验证 RTSP 目标检测识别

在这里插入图片描述

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt 

在这里插入图片描述

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年2月25日 上午10:43
下一篇 2023年2月25日 上午10:44

相关推荐