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

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

  • 换国内源
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 版本的对应关系。
NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第2张图片

1.安装 Deepstream 5.0

1.1 系统内命令安装 Deepstream 5.0

  • 下载对应的 DeepStream SDK NVIDIA DeepStream SDK on Jetson (Archived)链接
  • 参考官方安装教程链接 Install Jetson SDK components
  • 输入以下命令以安装必备程序包:
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系统上

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

  • 下载 NVIDIA SDK Manager Download NVIDIA SDK Manager ,得到安装包 sdkmanager_1.9.0-10816_amd64.deb
sudo apt install ./sdkmanager_1.9.0-10816_amd64.deb
sdkmanager

SDK Manager 官方使用说明 NVIDIA SDK MANAGER

  • 打开SDK Manager ,根绝 JetPack 版本选择 Deepstream
    NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第4张图片

2.验证 Deepstream 5.0

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

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

进入目录/opt/nvidia/deepstream/deepstream-5.0/samples
NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第6张图片
进行功能验证

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

  • 需要根据 Jetson 设备的 JetPack 版本来确定安装的 torch 版本 ,根绝需求我安装的是torch-1.80 官方下载链接
  • CSDN下载链接 torch-1.8.0-cp36-cp36m-linux-aarch64.whl

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

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

3.安装 torchvision

  • 安装对应版本的 torchvision ,pytorch/vision 链接
    下图为版本对应关系
    NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第8张图片

注:若安装时出现 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()

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

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 					

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

4.3 下载yolov5s.pt

因为weights目录下的 download_weights.sh 脚本和上一步 python3 detect.py 推理下载的都是最新版的 pt 文件,这里需要是 5.0 版本的 pt 文件,下载链接 yolov5/releases/tag/v5.0链接 , 下拉到最底部,下载 pt 文件
NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第11张图片

将下载的 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

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

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

修改 utils/datasets.py 源码,将以下内容屏蔽掉
NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第13张图片

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

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

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 为转换生成的文件名称

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

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目录下

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

三、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 其实用不到,可以直接屏蔽到,就可以编译成功

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

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/ 目录下
NVIDIA Jetson NX基于Deepstream5.0部署TensorRT+YOLOv5-v5.0实现目标检测识别详细学习笔记_第18张图片
配置 config_infer_primary_yolov5.txt 文件,确保引擎文件和库文件名称和路径正确

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

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 

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

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

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

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

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

2.1 验证 RTSP 目标检测识别

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

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

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

你可能感兴趣的:(NVIDIA,Jetson,目标检测,人工智能,计算机视觉,pip,视觉检测)