Nvidia Jetson 平台 DeepStream-6.0.1 部署 YoloV5-6.0 实现目标检测

2023-05-16

项目介绍:在 Jetson 平台上利用 DeepStream 处理多路视频源,并实现自己训练的 YoloV5 模型的部署。

文章目录

  • 前言
  • 1. YoloV5 模型训练自己的数据集
    • 1.1 建立自己的数据集
      • 1.1.1 开始之前
        • Anaconda 创建新的虚拟环境
        • dGPU 平台安装 Pytorch
        • dGPU 平台安装 YoloV5 基础环境
      • 1.1.2 roboflow 建立数据集
        • 创建 Project
        • 采集图片
        • 标注图片
        • 生成数据集
        • 导出数据集
    • 1.2 训练自己的数据集
        • 1.2.1 选择模型
        • 1.2.2 训练模型
  • 2. 模型转换(重点)
    • 2.1 下载 DeepStream-Yolo 并提取模型转换程序
    • 2.2 模型转换
  • 3. Jetson 平台的环境搭建(Jetson AGX Xavier)
    • 3.1 烧录系统的准备
      • 3.1.1 进入 Recovery 模式
      • 3.1.2 Host 主机
    • 3.2 烧录系统
      • 3.2.1 选项设置
      • 3.2.2 配置 Jetson AGX Xavier 的基本信息
    • 3.3 进入系统
      • 3.3.1 配置软件源
      • 3.3.2 安装 PIP
    • 3.4 通过 JetPack SDK Manager 安装 SDK
  • 4. 在 Jetson AGX Xavier 平台上使用 YoloV5
    • 4.1 安装库和依赖
      • 4.1.1 安装基本的依赖库
      • 4.1.2 安装 Cython
      • 4.1.3 升级 PIP 和 Protobuf
      • 4.1.4 升级科学计算库
      • 4.1.5 更新 matplotlib 到 3.3.4 (matplotlib 3.4 需要 python>=3.7)
      • 4.1.6 更新 scipy (安装时间较长)
      • 4.1.7 更新 scikit-image (安装时间较长)
    • 4.2 安装 Pytorch 以及 torchvison(重点)
      • 4.2.1 安装 Pytorch
      • 4.2.2 安装 torchvison
    • 4.3 测试 YoloV5
  • 5. 在 Jetson AGX Xavier 平台上使用 DeepStream 实现目标检测
    • 5.1 部署 DeepStream-Yolo
    • 5.2 修改配置文件
      • 5.2.1 deepstream_app_config.txt 文件
        • 显示 UI 的控制
        • 输入视频控制
        • 输出方式控制
        • 修改模型配置文件路径
      • 5.2.2 config_infer_primary_yoloV5.txt 文件
      • 5.2.3 labels.txt 文件
    • 5.3 运行


前言

之前在 dGPU 平台的 DeepStream-5.1 上部署过 YoloV5 模型,本以为在 Jetson 平台上使用 DeepStream-6.0.1 也可以复刻之前的过程,但是没想到是步步都踩坑,而且坑坑不一样!因此,记录下来最终成功的方法以及在部署过程中踩到的一些坑。

项目中各模块版本:

平台dGPUJetson
CUDA10.210.2
Pytorch11.1.01.8.0
torchvison0.12.00.9.0
YoloV56.06.0
JetPack-4.6.1
DeepStream-6.0.1

1. YoloV5 模型训练自己的数据集

YoloV5 在工程的应用上确实很方便,具体的使用方法在项目中也写的很清楚,在目前的不同平台上的多次使用中均未碰到问题。其中,YoloV5 的 6.0 和 6.1 版本都可以通过其 export.py 文件直接生成 TensorRT 的引擎文件 .engine,但是 dGPU 平台生成的 .engine 文件不能在 Jetson 平台上使用,而我在 Jetson 平台上生成的 .engine 文件也不能部署成功,还有待进一步研究。

YoloV5 在不断地更新中,目前已经更新至 6.1 版本,之前出现过权重文件的兼容问题。所以,建议基于对应 Release 版本的预训练权重文件训练自己的数据集,并且对训练出来的权重文件标明版本号。

YoloV5 项目地址:https://github.com/ultralytics/yolov5

训练自己的数据集可以在 dGPU 平台上完成,本节的内容全部在 dGPU 平台上完成。

1.1 建立自己的数据集

YoloV5 官方的实现方式是基于 Pytorch 架构,可以使用 roboflow 建立自己的数据集。

1.1.1 开始之前

Anaconda 创建新的虚拟环境

dGPU 平台的操作都将会在 Anaconda 创建的虚拟环境中进行。

conda create -n yolo.v5 python=3.9
conda activate -n yolo.v5

dGPU 平台安装 Pytorch

检查 YoloV5 的版本,并且根据版本需求安装 Pytorch 平台的版本。

Pytorch 官网提供简单明了的安装方法,dGPU 平台推荐使用 Anaconda 安装,并且在 Anaconda 建立虚拟环境训练自己的数据集。
其中 torchvision 和 pytorch 之间有严格的版本对应关系,可以在 Pypi 官网的 torchvison 中查看两者的对应关系。

# Stable (1.11.0) - CUDA-10.2
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

# LTS (1.8.2) - CUDA-10.2
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch-lts

dGPU 平台安装 YoloV5 基础环境

从 GitHub 克隆 repo 并且使用 pip 安装所需要的包,本次使用的 YoloV5 是 6.0 版本。

git clone -b v6.0 https://github.com/ultralytics/yolov5.git
cd yolov5
python -m pip install -r requirements.txt

1.1.2 roboflow 建立数据集

RoboFlow 的官方地址:https://roboflow.com/

创建 Project

在 roboflow 创建账户之后就可以建立公共 Project(免费用户只能建立公共项目和数据库),可以上传图片和标注、在线标注、生成数据集和在线训练。
Create New Project

采集图片

收集图片作为自己的数据库,并上传到 roboflow 建立数据库。
在边栏中选择 Upload 界面,直接选取图片文件夹和对应标注的文件夹,系统会根据文件名自动匹配图片和对应的标注。
同时,也可以上传未标注图片,并使用 roboflow 进行标注。
在这里插入图片描述

标注图片

上传图片成功后,边栏中进入 Dataset 界面,单击任意图片可以进入图片标注。
图片标注

生成数据集

进入边栏的 Version 界面,单击 Create New Vision 开始生成数据库,进行四项设置便可以生成可以直接进行训练的数据集。

  1. Source Images,可以查看数据库中的所有图片、类别数量和标注情况。
    Source Images
  2. Train/Test Split,可以按照需求对数据库中的图片划分 train、val 和 test 集,实现 Data Balance。
    Train/Test Split
  3. Preprocessing,对数据库的图片进行一些预处理,这里只进行 Auto-Orient 和 Resize。
    Preprocessing
  4. Augmentation,按要求对图片进行处理,如旋转、裁切和风格变化等等,按需使用。
    Augmentation
  5. Generate,生成数据集。
    Generate

导出数据集

当数据库成功生成后,可以导出数据集,单击 Export 并选择对应模型所需要的数据类型就可以生成最终的可训练数据库。数据集下载到本地后解压到数据库文件夹中,其中 data.yaml 一般作为访问数据库的入口,建议确定数据库的保存位置后,将 data.yaml 中训练集和验证集的路径改为绝对路径。
Export

1.2 训练自己的数据集

1.2.1 选择模型

YoloV5 有多个大小不同的模型,根据项目需求和硬件平台条件选择不同的模型,本文以 YoloV5s 作为范例。
在这里插入图片描述

1.2.2 训练模型

YoloV5 的训练方法很简单,但是在开始训练前,需要先修改 yolov5/models/yolov5s.yaml,将参数 nc(Number of Classes)修改为个人模型要检测的类别数目,然后从 YoloV5 项目下载对应的预训练参数(需要下载 YoloV5 对应版本的预训练模型),开始训练。

cd yolov5
# 修改参数 nc:80 的数值为个人模型要检测的类别数量
gedit models/yolov5s.yaml
# 下载预训练模型
wget https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
mkdir weights
mv ./yolov5s.pt weights/
# 开始训练
python3 train.py --data /path/to/your/dataset/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt

训练结果会保存在 /runs/train/exp/weights 中,将其移动到 YoloV5 的根目录下,并且重新命名。

cd yolov5
mv ./runs/train/exp/weights/best.pt ./yolov5s.pt

2. 模型转换(重点)

之前踩了很多坑,这部分是重点,直接生成 .engine 文件的方法我尝试了很多种都不能成功,此方法不生成 .engine 文件,而是只需要生成 .cfg 和 .wts 文件即可,.engine 文件的生成交给 Jetson 平台的 Deepstream 自动完成。

模型转换可以在 dGPU 或者 Jetson 平台上完成,但是都必须使用相应平台的相关依赖,dGPU 平台的依赖在第一部分已经详细说明了,Jetson 平台的依赖在后文中会详细说明!建议在 dGPU 平台完成模型转换,只需要将转换的模型直接拷贝到 Jetson 平台就能运行,避免在 Jetson 平台上重复工作。

2.1 下载 DeepStream-Yolo 并提取模型转换程序

DeepStream-Yolo 是部署成功的重点,DeepStream 所需要的设置文件和相关的模型转换程序都可以提供。

git clone https://github.com/marcoslucianops/DeepStream-Yolo.git
cp ./DeepStream-Yolo/utils/gen_wts_yoloV5.py ./yolov5/

DeepStream-Yolo 项目地址:https://github.com/marcoslucianops/DeepStream-Yolo

2.2 模型转换

利用 gen_wts_yoloV5.py 程序将 .pt 权重文件转化为.cfg 和 .wts 文件,注意该程序有个 bug,如果第一节最后训练生成的权重文件没有重命名成 yolov5s.pt 这样的通用名称,程序可能会因为名字报错,更改一下即可,可以在模型转换完成后更改为自定义名称。

cd yolov5
python gen_wts_yoloV5.py -c ./models/yolov5s.yaml -w yolov5s.pt
mv ./yolov5s.pt ./my_yolov5s.pt
mv ./yolov5s.cfg ./my_yolov5s.cfg
mv ./yolov5s.wts ./my_yolov5s.wts

至此,我们就可以得到最终的模型文件 my_yolov5s.cfg 和 my_yolov5s.wts,这两个文件可以在 dGPU 平台和 Jetson 平台通用。

3. Jetson 平台的环境搭建(Jetson AGX Xavier)

本人使用的是 Jetson AGX Xavier 开发者套件作为边缘端部署平台。
Jetson AGX Xavier

3.1 烧录系统的准备

3.1.1 进入 Recovery 模式

  1. 将 Xavier 关机,确保 Xavier 处在关机状态
  2. 按住机身案件中间的 Recovery 键 3 ~ 4 秒
  3. 不松开 Recovery 键,同时按下 Power 键开机,两个键同时按住 2秒以上后再松开
  4. Xavier 进入 Recovery 模式
  5. 通过按键旁边的 type-c 接口连接 Jetson AGX Xavier 和 Host 主机

3.1.2 Host 主机

Host 主机必须使用 Ubuntu 18.04,下载并安装 JetPack SDK Manager,下载需要 NVIDIA 账户,JDK Manager 可以安装不同版本的 JetPack,本文使用的是 JetPack-4.6.1。

sudo dpkg -i sdkmanager_x.x.x-xxxx_amd64.deb

3.2 烧录系统

打开 SDK Manager 后,需要登录NVIDIA 账户,登录成功后可以看到连接到 Host 主机的 Jetson AGX Xavier,如果没有看到,重复3.1.1 中的过程,一切就绪后开始基本设置。

3.2.1 选项设置

建议不要勾选 Host Machine 选项(可以节省时间),选择 JetPack 版本,选择是否安装对应 JetPack 版本的 DeepStream,本文的基本设置如下:
SDK Manager 选项
点击 CONTINUE 进入第二步后,可以配置安装的组件,主要为两部分:

  1. Jetson OS:生成系统镜像,并向 Jetson AGX Xavier 烧录系统,该系统为 Ubuntu 18.04(NVIDIA 定制),架构为 aarch64。
  2. Jetson SDK Components:各种推理部署组件,主要会安装 CUDA、CUDNN、TensorRT、OpenCV 和 DeepStream,可以展开后查看详细内容。

同意协议后开始,点击 CONTINUE 开始安装,此时会要求输入 Host 主机的用户密码,如果之前未下载过相关组件,会自动开始下载组件,下载完成后自动开始安装,如果 Host 主机下载过 JetPack,可以直接开始安装。
SDK 组件
输入用户密码

3.2.2 配置 Jetson AGX Xavier 的基本信息

弹出该页面后开始安装设置,并配置 Jetson AGX Xavier 的用户名和用户密码,本文选择设置方式为 Manual Setup,用户名为 nvidia,密码为 nvidia(实验使用,工程部署请勿使用弱密码)。

点击 Flash,开始烧录系统。

如果报错,显示设备没有进入 Recovery 模式,请直接重复 3.1.1 过程,然后点击 Retry 即可。
基本设置
系统烧录完成后,当弹出该页面后,暂时不要开始安装 SDK 组件,停止主机操作,为 Jetson AGX Xavier 连接显示器、键盘和鼠标,进入 Jetson AGX Xavier 的系统中,用户名为 nvidia,密码为 nvidia,这两项是在烧录系统时设置的。
OS Flash Success

3.3 进入系统

在进一步安装 Nvidia 提供的各项 SDK 之前,需要先进入系统,对系统进行更新,并按照个人的需求对系统进行设置。

3.3.1 配置软件源

将系统的软件源更换为国内的镜像源,使用的镜像为 ubuntu-ports。
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/

cd /etc/apt/
sudo cp sources.list sources.list.save
sudo gedit sources.list

将 sources.list 中的内容全部替换为以下内容:

# 清华大学开源软件镜像 Ubuntu Ports - Ubuntu 版本:18.04
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse

对系统的组件进行更新:

# sudo apt-get update
# sudo apt-get upgrade
sudo apt-get update && sudo apt-get upgrade -y
# sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo apt-get autoclean

3.3.2 安装 PIP

安装 PIP,并且更改 PIP 的软件源为国内镜像源。

sudo apt-get install python3-pip
# 更换为国内源
python3 -m pip install --upgrade pip
python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3.4 通过 JetPack SDK Manager 安装 SDK

当 Jetson AGX Xavier 的系统设置完成后,重新回到 Host 主机,开始 SDK 中组件的安装,输入用户名和密码,开始安装。
如果显示无法连接,进入 Jetson AGX Xavier 系统中查看 SSH 服务是否安装并开启,如果没有,请安装 SSH 服务器端!

sudo apt-get install openssh-server

SDK Install
安装完成!
Install Success

4. 在 Jetson AGX Xavier 平台上使用 YoloV5

原文地址:https://cognitivexr.at/blog/2021/03/11/installing-pytorch-and-yolov5-on-an-nvidia-jetson-xavier-nx.html
从这一步开始,所有操作均在 Jetson AGX Xavier 上完成!

4.1 安装库和依赖

基于 Pytorch 的 YoloV5 需要以下库和依赖:

  • numpy
  • pandas
  • scipy
  • scikit-image
  • matplotlib
  • seaborn
  • opencv-python

其中,Opencv 在安装 JetPack 时就已经安装在了系统中,无需再次安装。

除此之外,还有一些依赖需要更新到最新版本:

  • numpy: 1.13 (current 1.19.5)
  • matplotlib: (latest usable with Python 3.6 is 3.3.4)
  • pandas: 0.22.0 (current 1.1.5)
  • scipy: 0.19.1 (current 1.5.4)

4.1.1 安装基本的依赖库

sudo apt install -y python3-pip python3-venv python3-dev libpython3-dev
sudo apt install -y libopenblas-base
sudo apt install -y gfortran libopenmpi-dev liblapack-dev libatlas-base-dev

4.1.2 安装 Cython

python3 -m pip install Cython

4.1.3 升级 PIP 和 Protobuf

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade protobuf

4.1.4 升级科学计算库

python3 -m pip install --upgrade numpy
python3 -m pip install --upgrade pandas

4.1.5 更新 matplotlib 到 3.3.4 (matplotlib 3.4 需要 python>=3.7)

这里之前尝试过多次pip3 install matplotlib ,都出现无法安装和编译的情况,但是按照本文的写法,一次成功。

python3 -m pip install "matplotlib==3.3.4"

4.1.6 更新 scipy (安装时间较长)

python3 -m pip install --upgrade scipy

4.1.7 更新 scikit-image (安装时间较长)

python3 -m pip install sklearn scikit-image

4.2 安装 Pytorch 以及 torchvison(重点)

部署的难点之一在于 torch 和 torchvision 的安装,Pytorch 为 Jetson 平台提供了专门的版本,在 Jetson Zoo 和 Nvidia Forums 中都可以找到,安装其他非 Jetson 版本的 Pytorch 也可以成功安装不报错,但是后续部署均不成功。而且,目前安装包只提供 Python 3.6 的版本,其他版本 Python 暂时无法使用。

Jetson Zoo 官方地址:https://www.elinux.org/Jetson_Zoo
Nvidia Forums官方地址:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048

4.2.1 安装 Pytorch

建议通过上方提供的地址直接下载 pytorch 的安装包,两者提供的包是同一个地址来源,没有任何差别。使用 wget 命令的过程中存在无法下载的问题,但是通过浏览器下载则可以成功。本文安装的版本是 Pytorch-1.8.0。

# 安装基本依赖
python3 -m pip install -U future psutil dataclasses typing-extensions pyyaml tqdm seaborn
# 下载 pytorch 
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl 
# 安装 pytorch
python3 -m pip install torch-1.8.0-cp36-cp36m-linux_aarch64.whl

安装完成后,查看 pytorch 是否检测到系统中的 CUDA。

python3 -c 'import torch; print(torch.cuda.is_available())'

如果返回结果为 True,则 pytorch 已经检测到了系统中的 CUDA。

注意:这里会报错 Illegal instruction (core dumped),其他不走也有可能报这个错误,解决方法是编辑用户根目录下的 .bashrc 文件,在最后一行添加 export OPENBLAS_CORETYPE=ARMV8。

gedit .bashrc
# 将以下命令写入文件中,临时使用也可以直接使用该命令
export OPENBLAS_CORETYPE=ARMV8
source .bashrc

4.2.2 安装 torchvison

torchvision 和 pytorch 之间有严格的版本对应关系,可以在 Pypi 官网的 torchvison 中查看两者的对应关系,目前的对应关系如下:
torchvison version
本文使用的是 Pytorch-1.8.0,对应的 torchvison 版本为 torchvison-0.9.0,请按照以下方法编译安装,直接通过 PIP 安装存在 YoloV5 报错无法使用的情况。

# 安装基本组件
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
python3 -m pip install --upgrade pillow
# 下载 torchvison 的源码
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
# 编译安装
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user
# torchvison 目录下运行 pytorch 会出错
cd ..

4.3 测试 YoloV5

wget -q https://github.com/pjreddie/darknet/raw/master/data/dog.jpg
python3 -c "import torch
import cv2
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
model = model.cuda()
img = cv2.cvtColor(cv2.imread('dog.jpg'), cv2.COLOR_BGR2RGB)
pred = model(img, 320 + 32 * 4)
for obj in pred.xyxy[0].cpu().numpy():
    xyxy, conf, label = obj[:4], obj[4], pred.names[int(obj[5])]
    print(xyxy, '%s (conf=%.2f%%)' % (label, conf*100))"

结果为:

[ 130.96 220.09 311.58 538.49] dog (conf=87.70%)
[ 126.34 133.22 565.66 423.71] bicycle (conf=82.05%)
[ 467.74 76.326 692.75 171.35] car (conf=56.09%)
[ 466.57 77.787 692.83 175.51] truck (conf=52.34%)

成功后,YoloV5 的依赖环境就全部安装成功,克隆 YoloV5-6.0 就可以正常使用 YoloV5 了。

git clone -b v6.0 https://github.com/ultralytics/yolov5.git
cd yolov5
# 可以使用 yolov5 训练、验证和检测

5. 在 Jetson AGX Xavier 平台上使用 DeepStream 实现目标检测

原文地址:https://blog.csdn.net/djj199301111/article/details/123628292
尝试了很多个版本,最终是基于 DeepStream-Yolo 实现了部署,可以提供DeepStream 所需要的配置文件。2. 模型转换中的工作也可以此时在 Jetson AGX Xavier 上的 YoloV5 中完成,步骤同样,最终都需要生成 my_yolov5s.cfg 文件和 my_yolov5s.wts 文件。到这一步时,默认所有模型已经转换成功,得到了 my_yolov5s.cfg 文件和 my_yolov5s.wts 文件。

5.1 部署 DeepStream-Yolo

DeepStream-Yolo 项目地址:https://github.com/marcoslucianops/DeepStream-Yolo
需要从 GitHub 克隆 repo,并且移动到 DeepStream 的Source 文件夹下。

git clone https://github.com/marcoslucianops/DeepStream-Yolo.git
#将项目拷贝至deepstream/source下
cp -r ./DeepStream-Yolo /opt/nvidia/deepstream/deepstream/source

编译 nvdsinfer_custom_impl_Yolo 文件夹下的文件,才能正常使用 DeepStream-Yolo,在编译前,修改部分参数:

  • Makefile:CUDA_VER?=10.2
cd /opt/nvidia/deepstream/deepstream-6.0/source/DeepStream-Yolo
make -C nvdsinfer_custom_impl_Yolo
# CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo

将 my_yolov5s.cfg 文件和 my_yolov5s.wts 文件 拷贝到 DeepStream-Yolo 的根目录下,即可完成 DeepStream-Yolo 所有的部署。

5.2 修改配置文件

修改配置文件,DeepStream 就可以实现不同的功能。

5.2.1 deepstream_app_config.txt 文件

主配置文件为 deepstream_app_config.txt,主要负责 DeepStream 视频读取和显示的。

显示 UI 的控制

rows 和 columns 控制最终显示的布局,这里 1 × 1 就是最终显示 1 路,如果是 3 × 2 就是三行两列的布局显示 6 路视频。
其中,width 和 height 是分辨率。

[tiled-display]
enable=1
rows=1
columns=1
width=1920
height=1080
gpu-id=0
nvbuf-memory-type=0

输入视频控制

控制视频输入来源,可以设置多个 source 实现多路视频流的读取,通过 type 确定视频流的类型和读取方式,还可以通过 num-sources 对同一路视频进行复制扩展。

[source0]
enable=1
type=3
uri=rtsp://admin:admin123@192.168.1.64/Streaming/CHannels/101?transportmode=unicast
num-sources=1
gpu-id=0
cudadec-memtype=0

输出方式控制

DeepStream 可以控制输出的方式,可以不输出结果、窗口显示和 RTSP 推流等方式。
同样可以使用多个 sink,通过不同的方式同时输出结果。

[sink0]
enable=1
type=2
sync=0
gpu-id=0
nvbuf-memory-type=0

修改模型配置文件路径

在文件 config_infer_primary_yoloV5.txt 中对模型的相关参数进行了设置,需要从主配置文件中加载。

[primary-gie]
enable=1
gpu-id=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV5.txt

5.2.2 config_infer_primary_yoloV5.txt 文件

修改模型配置文件的路径,指向 my_yolov5s.cfg 文件和 my_yolov5s.wts 文件,运行时可以生成 my_yolov5s.engine 文件。

custom-network-config=my_yolov5s.cfg
model-file=my_yolov5s.wts
model-engine-file=my_yolov5s.engine

修改文件精度类型,是有模型决定的,本文使用的 FP16,并且按照检测的类别数量修改 num-detected-classes。

network-mode=2
num-detected-classes=1

5.2.3 labels.txt 文件

修改 labels.txt 文件中的类目名称和数量,保证所有配置文件中检测类别数目是匹配的。

5.3 运行

可以成功运行了!

deepstream-app -c deepstream_app_config.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nvidia Jetson 平台 DeepStream-6.0.1 部署 YoloV5-6.0 实现目标检测 的相关文章

  • 关于锂电池的二三事

    为了解释的更清楚 xff0c 我录制了一个视频 xff0c 详情可以参看 xff1a 我的这个B站视频 这是目录0 0 背景参数指标一些使用方法 背景 锂电池是我们日常生活中和制造东西时经常见到和使用的一种东西 xff0c 但是有很多细节可
  • 单片机堆栈知识总结

    堆栈 在片内RAM中 xff0c 常常要指定一个专门的区域来存放某些特别的数据 它遵循顺序存取和后进先出 LIFO FILO 的原则 xff0c 这个RAM区叫堆栈 其实堆栈就是单片机中的一些存储单元 xff0c 这些存储单元被指定保存一些
  • STM32串口发送中断试验、在初始化时不能使能串口发送中断

    问题描述 在测试STM32串口发送完成中断的应用中 xff0c 遇到了一个很奇怪的问题 xff0c 在初始化完成之后直接就进入了串口中断函数的发送完成服务中断函数部分 本测试代码是在原来的基础上更改的 xff0c 原来只使能了接受中断 xf
  • java,http post请求,多个不同方式请求示例

    以下是 Java 中进行 HTTP POST 请求的示例代码 xff0c 包括使用 HttpURLConnection 和 HttpClient 两种方式 xff0c 供您参考 使用 HttpURLConnection 发送 POST 请求
  • 【STM32】HAL库开发教程(一)—基本使用

    前言 提示 xff1a 本系列本章针对STM32F207 xff0c 基于Cubemx和Keil进行程序开发 本系列文章并不是一步一操作的傻瓜式教程 xff0c 而更希望是一个向导 xff0c 引导读者去思考去开发 做为一个开发者应该是在思
  • 【STM32】HAL库开发教程(五)—RTC使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 一 RTC简介 STM32F2的实时时钟 RTC 是一个独立的BCD Binary Coded Decimal 定时器 计时器 xff0c 提供了一
  • 【STM32】HAL库开发教程(七)—SPI使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中SPI通信的使用 一 开发步骤 1 STM32CubeMX配置 在左侧引脚配置处勾选SPI进行配置在SPI模式
  • 【通信技术】信噪比及单位

    信噪比 xff1a 一个电子设备或者电子系统中信号与噪声的比例 计量单位 dB xff0c 其计算方法是10lg Ps Pn xff0c 其中Ps和Pn分别代表信号和噪声的有效功率 功率单位 xff1a dBm是一个考征功率绝对值的值 xf
  • 【C语言】字符串打印(定长)

    目的 xff1a 打印长度可控的字符串 char ucBuf uint8 t ucLen char ucString 256 memcpy ucString ucBuf ucLen ucString ucLen 61 39 0 39 pri
  • 【卫星】卫星通信基本概念与知识

    不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 卫星通信基本概念与知识 上行链路 xff1a 从地球站发射信号到通信卫星所经过的通信路径成为上行链路 下行链路 xff1a 通信卫星将信号再转发到其他地球
  • 计算机基础笔记(三)—操作系统

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 目录 前言一 概述二 操作系统分类三 组成部分用户界面内存管理器进程管理进程同步设备管理文件管理 四 主流操作系统UNIXLinuxWindows
  • 计算机基础笔记(四)—数据结构

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 目录 前言数组链表栈 xff08 LIFO xff09 队列 xff08 FIFO xff09 广义线性表树图 定义 有特殊关系的数据的集合 xff
  • 计算机基础笔记(五)—数据库

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 目录 前言文件结构顺序文件索引文件散列文件目录 数据库数据库体系结构数据库模型数据库的设计其他数据库 文件结构 文件是数据记录的集合 xff0c 每
  • 陀螺仪数据处理(BMI088)

    1 BMI088惯性传感器介绍 1 1传感器原理图 传感器采用3 3V供电 xff0c 使用SPI IIC通讯模式 xff08 本文采用SPI通讯协议 xff09 1 2传感器功能介绍 注 xff1a 这里提到的数据读取频率 2000Hz是
  • FreeRTOS 多任务系统——任务切换、任务管理方式心得

    目前在进行对使用FreeRTOS的项目的代码升级 xff0c 之前采用的主逻辑任务切换模式 xff1a 由一个任务来进行逻辑上为串行的不同功能切换 xff0c 其他任务分别负责通信实时传输 传感器检测和电机控制 xff0c 系统中断中采用变
  • 13.C工程与寄存器封装

    文章目录 启动代码分析使用C语言点灯封装代码寄存器操作的标准化 启动代码分析 text global start start Vector table xff1a 占用异常向量表空间 xff0c 让它不再能被其它代码占用 b reset b
  • 授权(authorization)的设计思路

    本文对授权 authorization 的设计思路 客户端必须得到用户的授权 authorization grant xff0c 才能获得令牌 token 授权码模式 xff08 authorization code xff09 grant
  • Ubuntu18.04下安装ROS步骤及遇到的错误集锦(尤其是rosdep update报错)

    1 首先设置软件源 xff08 任选其一使用 xff09 1 xff09 国外的软件源 xff08 速度慢 xff09 sudo sh span class token operator span c span class token st
  • C语言中的 __FILE__ __LINE__ #line

    C语言中的 FILE 用以指示本行语句所在源文件的文件名 例 xff1a a c include lt stdio h gt int main printf 34 s n 34 FILE 在gcc编译生成a out xff0c 执行后输出结
  • ROS入门(一)安装并配置ROS环境

    1 安装ROS 在学习这些教程之前先按照 lt lt 在ubuntu中安装ROS kinetic gt gt 这篇博客 完成安装 注意 如果你是使用类似apt这样的软件管理器来安装ROS的 xff0c 那么安装后这些软件包将不具备写入权限

随机推荐

  • C语言带参#define个人理解

    之前接触带参 define比较少 xff0c 这几天 查阅stm32官方固件库 xff0c 看到以下代码有点懵 xff1a define IS GPIO ALL PERIPH PERIPH PERIPH 61 61 GPIOA PERIPH
  • Ubuntu学习笔记2-ROS安装及配置

    Ubuntu学习笔记1 ROS安装及配置 前期准备 内容参考大佬赵虚左的视频及文献 xff0c 此博客仅作记录防止忘记用 在Ubuntu虚拟机中安装ROS并使用Vscode开发ROS程序 xff0c 环境如下 xff1a Ubuntu版本
  • DDR模式寄存器

    mode register 模式寄存器 MR0 MR3 用于定义DDR3sdram的各种可编程操作模式 在初始化过程中 xff0c 模式寄存器通过模式寄存器设置 MRS 命令进行编程 xff0c 并保留存储的信息 MR0 8 除外 xff0
  • 什么是迭代器

    迭代器是一种设计模式 xff0c 它是一个对象 xff0c 他可以遍历并且选择序列中的一个对象 xff0c 是开发人员可以忽视这个序列中的底层结构 迭代器被称为轻量级的对象 xff0c 因为它创建的代价是非常小的Java中的Iterator
  • ARM_C高级学习笔记(六)大端模式和小端模式

    文章目录 xff08 一 xff09 什么是大小端模式 xff08 二 xff09 怎么测试大小端模式1 用union来测试机器的大小端模式2 用指针来测试机器的大小端模式 xff08 四 xff09 看似可行实则不行的测试大小端方式 xf
  • VS2019利用Curl库实现HTTP网络通信(C++)

    C 43 43 实现HTTP网络通信 xff0c 一般采用两种方式 xff0c 熟悉TCP协议的大哥可能不需要查这方面的知识 xff1b 还有一种方式就是使用第三方库 xff0c Qt环境下可以用QNetworkRequest实现很方便 x
  • 在windows配置 cygwin 和 gcc 

    1 install cygwin https www cygwin com 2 copy the setup exe under cygwin64 folder and run C cygwin64 gt setup x86 64 exe
  • VMware虚拟机Ubuntu22.04忽然不能上网

    问题描述 原本正常使用的虚拟机Ubuntu22 04忽然之间不能正常上网了 xff0c 右上角的网络连接标志也不见了 尝试删除网络适配器 xff0c 并重新添加网络适配器 不能解决 尝试windows下配置网络 原来正常上网 xff0c w
  • GIT 基于TAG拉取分支

    git 基于tag拉branch 获得最新 span class token function git span origin fetch 从tag创建新的分支 span class token function git span bran
  • 栈的作用

    栈 栈 xff08 stack xff09 又名堆栈 xff0c 它是一种运算受限的线性表 其限制是仅允许在表的一端进行插入和删除运算 这一端被称为栈顶 xff0c 相对地 xff0c 把另一端称为栈底 向一个栈插入新元素又称作进栈 入栈或
  • C++中vector的用法详解

    vector 向量 C 43 43 中的一种数据结构 确切的说是一个类 它相当于一个动态的数组 当程序员无法知道自己需要的数组的规模多大时 用其来解决问题可以达到最大节约空间的目的 用法 1 文件包含 首先在程序开头处加上 include
  • ImportError: libQtGui.so.4: cannot open shared object file: No such file or directory

    报错 xff1a File home sx125 anaconda3 envs pytorch lib python3 7 site packages cv2 init py line 3 in from cv2 import Import
  • 批量更改YOLO标签类别

    原本的标签的classes txt文件中person类别是1 即第二行才是person类 xff0c 而后来找到的数据集大且标注好了 xff0c 好巧不巧person类别是0 故要将labels文件的类别都改成0 要自己先创建好空的文件夹存
  • 【CMake】编译和链接静态库和动态库

    项目结构工作原理 配置项目编译库 项目结构 span class token builtin class name span include myClass h src CMakeLists txt myClass cpp CMakeLis
  • 字符串比较大小

    1 规则 1 如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值 则 继续比较下一位 2 如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值 则 输出结果 1 表示字符串1 gt 字符
  • 将本地jar添加到Maven本地仓库

    在Maven项目中 xff0c 如果需要引入自己的jar包 xff0c 需要将jar添加到本地Maven仓库 方法一 xff1a 假设将包htmlparser jar放入了项目下的lib目录中 xff1a gt project lib ht
  • UART的奇偶校验

    1 奇校验 当数据位中 1 的个数为奇数时 xff0c 校验位为 0 xff0c 否则为 1 2 偶校验 当数据位中 1 的个数为偶数时 xff0c 校验位为 0 xff0c 否则为 1
  • windows 关闭占用端口的进程

    1 netstat ano findstr yourPortNumber 2 taskkill PID typeyourPIDhere F
  • Linux TCP server/client例程

    1 服务器端 span class token macro property span class token directive hash span span class token directive keyword include s
  • Nvidia Jetson 平台 DeepStream-6.0.1 部署 YoloV5-6.0 实现目标检测

    项目介绍 xff1a 在 Jetson 平台上利用 DeepStream 处理多路视频源 xff0c 并实现自己训练的 YoloV5 模型的部署 文章目录 前言1 YoloV5 模型训练自己的数据集1 1 建立自己的数据集1 1 1 开始之