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