Deepson在Jetson Nano上进行视频分析的入门

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、DeepStream简介

1.什么是DeepStream应用程序?

DeepStream应用程序将深层神经网络和其他复杂的处理任务引入到流处理管道中,以实现对视频和其他传感器数据的近实时分析。从这些传感器中提取有意义的见解为提高运营效率和安全性创造了机会。例如,摄像头是当前使用最多的物联网传感器。在我们的家中,街道上,停车场,大型购物中心,仓库,工厂中都可以找到相机–无处不在。视频分析的潜在用途是巨大的:访问控制,防止丢失,自动结帐,监视,安全,自动检查(QA),包裹分类(智能物流),交通控制/工程,工业自动化等。
在这里插入图片描述
尽管智能视频分析(IVA)在行业和应用方面有所不同,但从像素到见解的流程在所有用例中都保持一致。正是这种通用的工作流程是DeepStream SDK通用流分析即插即用体系结构的基础。
在这里插入图片描述
更具体地说,DeepStream应用程序是一组模块化插件,这些插件相连接以形成处理管道。每个插件代表一个功能块,例如,使用TensorRT进行推理或多流解码。硬件加速的插件与基础硬件(如果适用)交互以提供最佳性能。例如,解码插件与NVDEC交互,而推理插件与GPU或DLA交互。每个插件可以根据需要在管道中实例化多次。
在这里插入图片描述
笔记:

DLA-深度学习加速器(仅适用于Jetson AGX Xavier)
PVA-可编程视觉加速器(仅适用于Jetson AGX Xavier)
ISP-图像信号处理
VIC-视觉图像合成器

2.什么是DeepStream SDK?

NVIDIA DeepStream SDK是基于开源GStreamer多媒体框架的流分析工具包。DeepStream SDK加快了可伸缩IVA应用程序的开发速度,使开发人员更容易构建核心深度学习网络,而不必从头开始设计端到端应用程序。在包含NVIDIA Jetson模块或NVIDIA dGPU适配器的系统上支持该SDK。它由可扩展的硬件加速插件集合组成,这些插件与低级库进行交互以优化性能,并定义了标准化的元数据结构,可实现自定义/用户特定的添加。
有关DeepStream SDK的更多详细信息和说明,请参考以下材料:
NVIDIA DeepStream SDK开发指南
NVIDIA DeepStream插件手册
NVIDIA DeepStream SDK API参考文档

3.DeepStream SDK参考应用程序

DeepStream SDK随附了多个测试应用程序,包括预训练的模型,示例配置文件和可用于运行这些应用程序的示例视频流。其他示例和源代码示例提供了足够的信息,可以帮助您启动大多数IVA用例的开发工作。测试应用程序演示:

如何使用DeepStream元素(例如,获取源代码,对多个流进行解码和多路复用,在经过预训练的模型上进行推理,对图像进行注释和渲染)
如何生成一批帧并对其进行推断以提高资源利用率
如何将自定义/特定于用户的元数据添加到DeepStream的任何组件中
以及更多…有关完整的详细信息,请参阅《 NVIDIA DeepStream SDK开发指南》。

4.GStreamer插件

GStreamer是用于插件,数据流和媒体类型处理/协商的框架。它用于创建流媒体应用程序。插件是在运行时动态加载的共享库,可以独立扩展和升级。当安排并链接在一起时,插件形成处理流水线,该流水线定义了流媒体应用程序的数据流。您可以通过其广泛的在线文档,从“什么是GStreamer?”开始了解有关GStreamer的更多信息。

除了可以在GStreamer框架库中找到的开源插件之外,DeepStream SDK还包括利用GPU功能的NVIDIA硬件加速插件。有关DeepStream GStreamer插件的完整列表,请参见《 NVIDIA DeepStream插件手册》

以下列表概述了本课程提供的练习中引用的开源和DeepStream插件。

开源GStreamer插件:

GstFileSrc-从文件中读取数据:视频数据或图像。
GstH264Parse-解析传入的H264流。对于H265编解码器,请使用H265Parse。
GstRtpH264Pay-将H264编码的有效负载转换为RTP数据包(RFC 3984)。
GstUDPSink-将UDP数据包发送到网络。与RTP有效负载(GstRtpH264Pay)配对时,它可以实现RTP流。
GstCapsFilter-在不修改数据的情况下限制数据格式。
GstV4l2Src-从v4l2设备捕获视频。
GstQTMux-将流(音频和视频)合并到QuickTime(.mov)文件中。
GstFileSink-将传入数据写入本地文件系统中的文件。
GstURIDecodeBin-将数据从URI解码到原始媒体中。它选择一个可以处理给定“ uri”方案的源元素,并将其连接到解码器。

NVIDIA硬件加速插件:

Gst-nvstreammux-在发送AI批处理之前批处理流。
Gst-nvinfer-使用TensorRT运行推理。
Gst-nvvideo4linux2-使用硬件加速解码器(NVDEC)解码视频流;使用硬件加速编码器(NVENC)将I420格式的RAW数据编码为H264或H265输出视频流。
Gst-nvvideoconvert-执行视频颜色格式转换。Gst-nvdsosd插件之前的第一个Gst-nvvideoconvert插件将流数据从I420转换为RGBA,Gst-nvdsosd插件之后的第二个Gst-nvvideoconvert插件将RGBA转换为I420。
Gst-nvdsosd-绘制边界框,文本和关注区域(ROI)多边形。
Gst-nvtracker-跟踪帧之间的对象。
Gst-nvmultistreamtiler-从批处理缓冲区合成2D切片。
Gst-nvv4l2decoder-解码视频流。
Gst-Nvv4l2h264enc-编码视频流。
Gst-NvArgusCameraSrc-提供使用Argus API控制ISP属性的选项。

5.TensorRT

TensorRT是一个高性能的神经网络推理优化器和运行时引擎。它特别关注使用GPU生成结果(即评分,检测,回归或推断)的目的,使用GPU快速有效地运行经过预训练的网络。DeepStream Gst-nvinfer插件实现基于TensorRT的推理。
在这里插入图片描述
Gst-nvinfer插件允许输出层中的项目数量不受限制,并具有可配置的输出类,以适应特定的应用程序需求。DeepStream应用程序能够从Gst-nvinfer插件的任何推理层访问输入和输出缓冲区。这使得能够从网络的中间层提取特征以连接到下游深度学习网络。

深度学习模型需要与TensorRT兼容才能与DeepStream一起使用。请查看devblog, 如何使用TensorRT加速深度学习推理。它提供了一个简单的示例和代码演练,以帮助您了解TensorRT。

TensorRT开发人员指南
NVIDIA开发人员TensorRT页面

6.视频分析

使用DeepStream SDK将视频转换为分析数据
DeepStream SDK通用流分析架构定义了可扩展的视频处理管道,可用于执行推理,对象跟踪和报告。在DeepStream应用程序分析每个视频帧时,插件会提取信息并将其存储为级联元数据记录的一部分,从而保持记录与源帧的关联。管道末端的完整元数据收集代表了深度学习模型和其他分析插件从框架中提取的完整信息集。DeepStream应用程序可以使用此信息进行显示,也可以作为消息的一部分从外部进行传输,以进行进一步的分析或长期归档。
在这里插入图片描述
DeepStream对元数据使用可扩展的标准结构。基本元数据结构NvDsBatchMeta从在所需Gst-nvstreammux插件内部创建的批处理级元数据开始。辅助元数据结构包含框架,对象,分类器和标签数据。DeepStream还提供了一种在批处理,框架或对象级别添加用户特定的元数据的机制。
有关元数据结构和使用的更多信息,请参阅《 DeepStream插件手册》

7.DeepStream用例练习

DeepStream SDK包含 用于各种使用案例的示例参考应用程序。在本课程的笔记本中,您将学习如何利用这些示例并将其扩展为创建新的DeepStream应用程序。您将可以使用媒体播放器观看计算机上的流。如果尚未安装,请在开始练习之前进行安装:请参阅“ 安装Media Player” 和 “运行Media Player” 部分。

目标检测应用
笔记本1:构建DeepStream管道以查找视频流中的对象,并用边界框对其进行注释,然后将带注释的流以及找到的对象计数一起输出。

多网络应用
笔记本2:构建DeepStream应用程序以查找视频流中的对象,将这些图像通过多个分类网络传递,并在输出流中显示有关对象的详细信息。

多流输入
笔记本3:添加了对具有平铺输出的多个输入流进行推理的功能。

视频文件输出
笔记本4:添加了将带注释的视频流以您选择的格式保存到文件中,以供下载和以后使用的功能。

(可选)使用不同的神经网络
需要Internet连接到Jetson Nano
笔记本5:将DeepStream管道中的神经网络更改为另一个,例如YOLO(您只看一次)。

免责声明:YOLO模型是从http://pjreddie.com/darknet和 https://github.com/pjreddie/darknet获取的开放模型 。NVIDIA不保证此模型的准确性。准确度可能会因视频而异。
提示:您可以在此练习中尝试自己的视频,或者从https://www.pexels.com/ 或https://www.videvo.net/等网站上从Internet下载一些视频。

(可选)直播
需要连接到Jetson Nano的USB网络摄像头
笔记本6:在连接到Jetson Nano的网络摄像机的实时流上进行推理。

8.DeepStream SDK目录结构

以下目录树概述了DeepStream SDK文件结构。请参阅SDK下载以获取完整列表,因为此处的列表仅详细说明了前三个级别。
DeepStream SDK 4.0.1目录(3个级别):
deepstream_sdk_v4.0.1_jetson
┠──binaries.tbz2
┠── install.sh
┠──LicenseAgreement.pdf
┠──LICENSE.txt
┠──自述文件
┠──samples
┠──配置
deep──deepstream-app
┠──型号
┠──Primary_Detector
┠──Primary_Detector_Nano
┠──Secondary_CarColor
┠──Secondary_CarMake
┠──Secondary_VehicleTypes
┖──细分
streams──流
┠──sample_1080p_h264.mp4
┠──sample_1080p_h265.mp4
┠──sample_720p.h264
┠──sample_720p.jpg
┠──sample_720p.mjpeg
┠──sample_720p.mp4
┠──sample_cam6.mp4
┖──sample_industrial.jpg
┖──资料来源
┠──应用
apps──应用程序-常见
┖──sample_apps
┠──gst插件
┠──gst-dsexample
┠──gst-nvinfer
┠──gst-nvmsgbroker
┖──gst-nvmsgconv
┠──包括
┠──gstnvdsinfer.h
┠──gstnvdsmeta.h
┠──gst-nvevent.h
┠──gst-nvmessage.h
┠──gst-nvquery.h
┠──nvbufsurface.h
┠──nvbufsurftransform.h
┠──nvds_dewarper_meta.h
┠──nvdsinfer_context.h
┠──nvdsinfer_custom_impl.h
┠──nvdsinfer_dbscan.h
┠──nvdsinfer.h
┠──nvdsinfer_tlt.h
┠──nvdsinfer_utils.h
┠──nvds_latency_meta.h
┠──┠──nvds_logger.h
┠──nvdsmeta.h
┠──nvdsmeta_schema.h
┠──nvds_msgapi.h
┠──nvds_opticalflow_meta.h
┠──nvdstracker.h
┠──nvds_version.h
V nvll_osd_api.h
┖──nvll_osd_struct.h
┠──图书馆
┠──amqp_protocol_adaptor
┠──azure_protocol_adaptor
┠──kafka_protocol_adaptor
┠──┠──nvdsinfer
┠──nvdsinfer_customparser
┖──nvmsgconv
┠──objectDetector_FasterRCNN
┠──config_infer_primary_fasterRCNN.txt
┠──deepstream_app_config_fasterRCNN.txt
┠──labels.txt
┠──nvdsinfer_custom_impl_fasterRCNN
┖┖──自述文件
┠──objectDetector_SSD
┠──config_infer_primary_ssd.txt
┠──deepstream_app_config_ssd.txt
┠──nvdsinfer_custom_impl_ssd
┖┖──自述文件
┠──objectDetector_Yolo
┠──config_infer_primary_yoloV2_tiny.txt
┠──config_infer_primary_yoloV2.txt
┠──config_infer_primary_yoloV3_tiny.txt
┠──config_infer_primary_yoloV3.txt
┠──deepstream_app_config_yoloV2_tiny.txt
┠──deepstream_app_config_yoloV2.txt
┠──deepstream_app_config_yoloV3_tiny.txt
┠──deepstream_app_config_yoloV3.txt
┠──labels.txt
┠──nvdsinfer_custom_impl_Yolo
┃ ┠── prebuild.sh
┠┠──自述文件
┠──yolov2.cfg
┠──yolov2-tiny.cfg
┠──yolov2-tiny.weights
┠──yolov2.weights
┠──yolov3_b1_fp32.engine
┠──yolov3-calibration.table.trt5.1
┠──yolov3.cfg
┠──yolov3_tiny_b1_fp32.engine
┠──yolov3-tiny.cfg
┠──yolov3-tiny.weights
┖──yolov3.weights
┖──工具
┖──nvds_logger

9.本章总结

1.设置您的Jetson Nano

(1)如何以“无头”模式运行Jetson Nano
(2)如何通过USB设备模式访问Jetson Nano上的JupyterLab
(3)如何使用Jetson Nano刻录SD卡并使用它
(4)如何安装媒体播放器以从Jetson Nano流式传输RTSP视频

2. DeepStream SDK简介

(1)DeepStream SDK的功能
(2)DeepStream SDK中提供了哪些GStreamer插件
(3)DeepStream支持的元数据类型

3.探索DeepStream SDK

(1)如何使用DeepStream管道识别和计数视频流中的对象
(2)如何在单个管道中运行多个神经网络以对对象进行分类以获得更详细的见解
(3)如何使用DeepStream管道同时分析多个视频流
(4)如何注释视频流并将其保存在文件中以供以后使用

10.拓展

随心所欲
阅读《 Jetson Nano Developer Kit用户指南》 ,其中包括:
有关开发人员套件硬件的更多详细信息。
NVIDIA JetPack的所有组件的说明,包括支持交叉编译的开发人员工具。
所有包含的样本和样本文档的列表。
访问NVIDIA DeepStream SDK开发人员专区, 以访问所有DeepStream SDK下载,文档,操作指南等。
NVIDIA DeepStream论坛 上提问或分享项目 。

项目与学习
通过一些其他示例资源快速启动自己的DeepStream和Jetson Nano项目:

在 Jetson Nano上构建DeepStream Redaction应用程序 ,以编辑视频流中的面部和车牌。
该示例使用ResNet-10逐帧检测场景中的人脸和车牌。检测到的面部和车牌然后自动进行编辑。
与最终帧合成的图像可以显示在屏幕上,也可以根据用户的选择编码为MP4文件。
该示例演示了DeepStream SDKnvcuvidh264dec, nvvidconv, nvinfer 和和以下插件的用法nvosd。

探索 DeepStream参考应用
背对背检测器
在单个帧上执行多次检测
异常检测
使用NVIDIA光流来检测异常

查看 Jetson项目页面,找到有趣的项目,包括:

你好AI世界
使用预先训练的模型进行图像分类和物体检测的计算机视觉深度学习推理入门。
使用TensorRT和实时摄像头流进行实时加速。
用C ++编写您自己的识别程序。
对于那些有兴趣训练自己的网络的人,请参加整整两天的演示,其中包括训练和推理。

JetBot 是一个开放源代码的AI项目,面向对学习AI和构建有趣的应用程序感兴趣的制造商,学生和爱好者。
它易于设置和使用,并且与许多流行的配件兼容。
几个交互式教程向您展示了如何利用AI的力量来教导JetBot跟随物体,避免碰撞等。
JetBot是创建全新AI项目的绝佳启动板。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Jetson Nano上部署YoloX,您可以按照以下步骤进行操作: 1. 安装JetPack SDK:JetPack SDK是NVIDIA Jetson平台的软件开发工具包,包括操作系统、CUDA、TensorRT等必要组件。您可以从NVIDIA官网下载并安装适用于Jetson Nano的JetPack SDK。 2. 安装PyTorch:YoloX是基于PyTorch框架实现的,因此您需要在Jetson Nano上安装PyTorch。您可以使用pip命令安装PyTorch,也可以从源代码编译安装。 3. 下载YoloX代码:您可以从YoloX的GitHub仓库下载源代码,并将其复制到Jetson Nano上。 4. 下载预训练模型:YoloX需要使用预训练模型进行目标检测。您可以从YoloX的GitHub仓库下载预训练模型,并将其复制到Jetson Nano上。 5. 运行YoloX:在Jetson Nano上运行YoloX,您需要使用Python脚本调用YoloX的API,并传入相应的参数。您可以参考YoloX的文档和示例代码进行操作。 需要注意的是,由于Jetson Nano的计算资源有限,可能会影响YoloX的性能。您可以通过调整模型参数、使用更高效的算法等方式来优化YoloX的性能。 ### 回答2: Jetson Nano是一款小型、低功耗的人工智能计算机,而YOLOX则是一种基于目标检测的模型,用于实时识别图像中的对象。在Jetson Nano上部署YOLOX可以让我们使用这个强大的小型计算机进行高效的目标检测。 首先,我们需要准备Jetson Nano开发板和一台电脑。在电脑上,我们需要进行一些准备工作,包括安装JetPack和配置SSH远程连接。JetPack是一种能够在Jetson Nano上安装所需软件的软件包,其中包括CUDA、cuDNN等开发工具,这些工具可以支持将YOLOX部署到Jetson Nano上。SSH远程连接可以使我们在Jetson Nano上直接使用电脑的命令行。 接下来,我们需要下载YOLOX的源代码,并进行配置和编译。具体来说,我们需要安装Python3、Numpy、Pillow、torch、opencv-python等软件包,并将其与Jetson Nano的架构匹配。这些工具可以使我们更加方便地进行模型训练和推理。 然后,我们需要选择适合我们的数据集并进行训练。这里我们可以使用COCO数据集或其他开源数据集进行训练。在训练过程中,我们需要进行超参数的调整和优化,以达到最佳的目标检测效果。 最后,在经过训练的YOLOX模型上运行推理,并确定模型在不同场景下的准确率。为了实现实时目标检测,我们可以使用OpenCV库将摄像头的实时图像输入到YOLOX模型中,以检测图像中的对象。 总之,在Jetson Nano上部署YOLOX需要执行一系列复杂的步骤,包括软件安装、数据集训练和模型推理。我们需要耐心和精力投入,才能最终实现高效的目标检测。 ### 回答3: Jetson Nano是针对边缘计算开发的一款小型计算机,而YoloX是一种新型的目标检测算法,可以在低功耗设备上快速识别目标。在Jetson Nano上部署YoloX可以让我们在嵌入式设备上实现实时目标检测,非常有用。 部署YoloX的过程相对复杂,但是我们可以按照下面的步骤逐步实现: 1. 安装JetPack 4.4+: JetPack是NVIDIA官方提供的一套软件开发工具包,其中包含了CUDA、cuDNN等深度学习库。首先需要下载并安装 JetPack 4.4+,具体安装步骤可以参考官网提示。 2. 安装OpenCV:在Jetson Nano上运行YoloX需要使用OpenCV库,下载之后进行安装,安装命令如下: ``` sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libv4l-dev ``` 3. 下载并编译YoloX源码:从 GitHub 下载 YoloX 源码,然后进行编译。编译命令如下: ``` git clone https://github.com/Megvii-BaseDetection/YOLOX.git cd YOLOX sudo apt-get install python3-pip pip3 install Cython numpy sudo apt-get install ninja-build python3 setup.py build develop ``` 注:为了编译 YoloX 代码,您需要一张 NVIDIA GPU 卡,并配置好 CUDA 和 cuDNN。 4. 下载预训练的模型权重:在进行模型训练之前,需要准备一个已经训练好的模型权重。您可以从 YoloX 官方仓库 处下载预训练的权重,或是使用自己的数据集训练出自己的模型权重。 5. 测试模型:在部署完成后,我们可以使用 YoloX 官方提供的测试脚本来测试模型,具体的测试命令如下: ``` python tools/demo.py image -n yolox-s-416 --path assets/dog.jpg --conf 0.25 --nms 0.45 ``` 这个脚本将会加载预训练的 yolox-s 模型,然后使用一张测试图片(dog.jpg)进行测试,并将结果保存到 output 文件夹下。 总结: 在这篇文章中,我们介绍了在Jetson Nano上部署YoloX的过程及方法,从安装基本的JetPack到编译源代码,再到下载预训练模型,最后通过测试脚本检验模型的准确性。这个过程可能比较繁琐,需要好好的理解和操作。随着AI的深入应用,我们相信越来越多的开发者、技术爱好者们会对边缘计算的优化、应用上有更多的发现和深入研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值