欢迎使用DeepStream文档
重要
在开始之前,请确保您了解如何将DeepStream 6.2自定义模型迁移到DeepStream 6.3。详细信息请参阅本文档的自述文件第一部分。
重要
DeepStream 6.3是支持NVIDIA®Jetson™Xavier AGX、NVIDIA®Jetson™NX、NVIDIA®Jetson™Orin NX、NVIDIA®Jetson™AGX Orin和NVIDIA®Jetson™Orin Nano新功能的版本。这是支持Ubuntu 20.04 LTS的版本。
NVIDIA DeepStream概述
DeepStream是一个流分析工具包,旨在构建 AI 支持的应用程序。它将流数据作为输入(来自 USB/CSI 摄像机、来自 RTSP 的文件或流的视频),并使用AI和计算机视觉从像素中产生见解,以更好地理解环境。DeepStream SDK 可以成为许多视频分析解决方案的基础层,如了解智慧城市中的交通和行人、医院中的健康和安全监控、零售中的自助结账和分析、检测制造设施中的组件缺陷等。在这里阅读有关DeepStream的更多信息。
DeepStream通过Python绑定支持C/C++和Python中的应用程序开发。为了更容易上手,DeepStream附带了几个C/C++和Python中的参考应用程序。请参阅C/C++示例应用程序源详细信息和Python示例应用程序和绑定源详细信息部分以了解有关可用应用程序的更多信息。有关一些示例DeepStream参考应用程序,请参阅NVIDIA-AI-IOTGitHub页面。
核心 SDK 由几个硬件加速器插件组成,这些插件使用VIC、GPU、DLA、NVDEC和NVENC等加速器。通过在专用加速器中执行所有计算繁重的操作,DeepStream可以为视频分析应用程序实现最高性能。DeepStream的关键功能之一是边缘和云之间的安全双向通信。DeepStream附带了几个开箱即用的安全协议,例如使用用户名/密码的SASL/Plain身份验证和2路TLS身份验证。要了解有关这些安全功能的更多信息,请阅读物联网章节。要了解有关双向功能的更多信息,请参阅本指南中的双向消息传递部分。
DeepStream 建立在CUDA-X 堆栈中的几个NVIDIA库之上,如 CUDA、TensorRT、NVIDIA®Triton™推理服务器和多媒体库。TensorRT加速了NVIDIA GPU上的人工智能推理。DeepStream 将这些库抽象到 DeepStream 插件中,使开发人员无需学习所有单独的库即可轻松构建视频分析管道。
DeepStream针对NVIDIA GPU进行了优化;该应用程序可以部署在运行Jetson平台的嵌入式边缘设备上,也可以部署在更大的边缘或数据中心GPU(如T4)上。DeepStream应用程序可以使用NVIDIA容器运行时部署在容器中。这些容器可在NGC、NVIDIA GPU云注册表上获得。要了解有关使用docker部署的更多信息,请参阅Docker容器章节。DeepStream应用程序可以在边缘使用GPU上的库伯内特斯进行编排。NGC上提供了部署DeepStream应用程序的 示例 Helm 图表。
DeepStream 图形架构
DeepStream 是使用开源 GStreamer 框架构建的优化图形架构。下图显示了一个典型的视频分析应用程序,从输入视频到输出见解。所有单独的块都是使用的各种插件。底部是整个应用程序中使用的不同硬件引擎。插件之间零内存复制的最佳内存管理和各种加速器的使用确保了最高性能。
DeepStream 以 GStreamer 插件的形式提供构建块,可用于构建高效的视频分析管道。有20多个插件为各种任务进行了硬件加速。
- 流数据可以通过RTSP通过网络传输,也可以直接从本地文件系统或摄像机传输。流是使用CPU捕获的。一旦帧进入内存,它们就会被发送到NVDEC加速器进行解码。解码插件称为Gst-nvvideo o4linux2。
- 解码后是可选的图像预处理步骤,输入图像可以在推理前进行预处理。预处理可以是图像去翘曲或颜色空间转换。
这些插件使用GPU或VIC(视觉图像合成器)。
- 下一步是批处理帧以获得最佳推理性能。批处理是使用Gst-nvstream mux插件完成的。
- 将批处理帧进行推理。推理可以使用NVIDIA的推理加速器运行时TensorRT完成,也可以使用Triton推理服务器在原生框架(如TensorFlow或PyTorch)中完成。原生TensorRT推理使用Gst-nvinfer插件执行,使用Triton的推理使用Gst-nvinferserver插件完成。推理可以使用Jetson AGX Xavier和NX的GPU或DLA(深度学习加速器)。
- 推理后,下一步可能涉及跟踪对象。SDK中有几个内置的参考跟踪器,从高性能到高精度不等。使用Gst-nvtracker插件执行对象跟踪。
- 为了创建可视化产品件,如边界框、分割蒙版、标签,有一个名为Gst-nvdsosd的可视化插件。
- 最后为了输出结果,DeepStream提供了各种选项:
在屏幕上使用边界框渲染输出,
将输出保存到本地磁盘,
通过RTSP流式传输或仅将元数据发送到云端。
对于将元数据发送到云端,DeepStream使用Gst-nvmsgconv和Gst-nvmsgbrob插件。 将元数据转换为模式有效负载,并Gst-nvmsgbrob建立与云的连接并发送遥测数据。有几个内置的代理协议,如Kafka、MQTT、AMQP和Azure IoT。可以创建自定义代理适配器。
DeepStream参考应用
首先,开发人员可以使用提供的参考应用程序。还包括这些应用程序的源代码。端到端应用程序称为深度流应用程序。这个应用程序是完全可配置的——它允许用户配置任何类型和数量的源。用户还可以选择运行推理的网络类型。它预先构建了一个推理插件来进行目标检测,由推理插件级联来进行图像分类。有一个配置跟踪器的选项。对于输出,用户可以选择在屏幕上渲染、保存输出文件或通过RTSP流式传输视频。
这是一个很好的参考应用程序,可以开始学习DeepStream的功能。此应用程序在DeepStream参考应用程序-深度流-app章节中有更详细的介绍。此应用程序的源代码可在/opt/nvidia/deepstream/deepstream-6.3/sources/apps/sample_apps/deepstream-app中获得。此应用程序将适用于所有AI模型,并在各个README中提供详细说明。性能基准测试也使用此应用程序运行。
开始构建应用程序
对于希望构建定制应用程序的开发人员来说,深度流应用程序开始开发可能有点不知所措。SDK附带了几个简单的应用程序,开发人员可以在其中了解DeepStream的基本概念,构建一个简单的管道,然后继续构建更复杂的应用程序。
开发人员可以从深度流-test1开始,这几乎就像一个DeepStream hello world。在这个应用程序中,开发人员将学习如何使用各种DeepStream插件构建GStreamer管道。他们将从文件中获取视频,解码,批处理,然后进行目标检测,然后最终在屏幕上渲染框。深度流-test2从test1进行,并将二级网络级联到主网络。深度流-test3展示了如何添加多个视频源,然后最后test4将展示如何使用消息代理插件进行物联网服务。这4个入门应用程序在原生C/C++和Python中都可用。要阅读有关这些应用程序和DeepStream中其他示例应用程序的更多信息,请参阅C/C++示例应用程序源详细信息和Python示例应用程序和绑定源详细信息。
无需使用Graph Composer编码即可创建DeepStream应用程序。有关详细信息,请参阅Graph Composer简介。
Python中的DeepStream
Python易于使用,并在创建人工智能模型时被数据科学家和深度学习专家广泛采用。英伟达引入了Python绑定,帮助您使用Python构建高性能人工智能应用程序。DeepStream管道可以使用Gst-Python构建,GStreamer框架的Python绑定。
DeepStream Python应用程序使用Gst-PythonAPI操作来构建管道,并使用探测函数访问管道中各个点的数据。数据类型都是原生C语言,需要一个shim层通过PyBindings或NumPy从Python应用程序访问它们。张量数据是推理后出来的原始张量输出。如果您试图检测一个对象,这个张量数据需要通过解析和聚类算法进行后处理,以创建检测到的对象周围的边界框。要开始使用Python,请参阅Python示例应用程序和绑定源详细信息在本指南和DeepStream Python API指南中的“DeepStream Python”。