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

系列文章目录

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


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

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

  • 系列文章目录
  • 前言
  • 一、DeepStream简介
    • 1.什么是DeepStream应用程序?
    • 2.什么是DeepStream SDK?
    • 3.DeepStream SDK参考应用程序
    • 4.GStreamer插件
    • 5.TensorRT
    • 6.视频分析
    • 7.DeepStream用例练习
    • 8.DeepStream SDK目录结构
    • 9.本章总结
    • 10.拓展
  • 总结


前言

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


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

一、DeepStream简介

1.什么是DeepStream应用程序?

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

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的推理。
Deepson在Jetson Nano上进行视频分析的入门_第4张图片
Gst-nvinfer插件允许输出层中的项目数量不受限制,并具有可配置的输出类,以适应特定的应用程序需求。DeepStream应用程序能够从Gst-nvinfer插件的任何推理层访问输入和输出缓冲区。这使得能够从网络的中间层提取特征以连接到下游深度学习网络。

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

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

6.视频分析

使用DeepStream SDK将视频转换为分析数据
DeepStream SDK通用流分析架构定义了可扩展的视频处理管道,可用于执行推理,对象跟踪和报告。在DeepStream应用程序分析每个视频帧时,插件会提取信息并将其存储为级联元数据记录的一部分,从而保持记录与源帧的关联。管道末端的完整元数据收集代表了深度学习模型和其他分析插件从框架中提取的完整信息集。DeepStream应用程序可以使用此信息进行显示,也可以作为消息的一部分从外部进行传输,以进行进一步的分析或长期归档。
Deepson在Jetson Nano上进行视频分析的入门_第5张图片
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提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(nvidia,gstreamer)