欢迎来到 DeepStream 文档#

重要提示

在开始之前,请确保您了解如何将 DeepStream 7.0 自定义模型迁移到 DeepStream 7.1。

重要提示

DeepStream 7.1 是支持 NVIDIA® T4、NVIDIA® Hopper、NVIDIA® Ampere、NVIDIA® ADA、NVIDIA® Jetson™ Orin NX、NVIDIA® Jetson™ AGX Orin 和 NVIDIA® Jetson™ Orin Nano 新功能的版本。它是支持 Ubuntu 22.04 LTS 的版本。

重要提示

对于 NVAIE 客户,仅支持 x86 平台。

NVIDIA DeepStream 概述#

DeepStream 是一个流分析工具包,用于构建 AI 驱动的应用程序。它以流数据作为输入 - 来自 USB/CSI 摄像头、文件或 RTSP 流的视频,并使用 AI 和计算机视觉从像素生成洞察,以更好地理解环境。DeepStream SDK 可以成为多种视频分析解决方案的基础层,例如了解智慧城市的交通和行人、医院的健康和安全监控、零售业的自助结账和分析、检测制造工厂的组件缺陷等等。在此处阅读有关 DeepStream 的更多信息:此处

DeepStream Overview

DeepStream 支持使用 C/C++ 和 Python 绑定进行 Python 应用程序开发。为了让入门更轻松,DeepStream 附带了 C/C++ 和 Python 的多个参考应用程序。请参阅C/C++ 示例应用程序源代码详情Python 示例应用程序和绑定源代码详情部分,了解有关可用应用程序的更多信息。请参阅 NVIDIA-AI-IOT GitHub 页面,了解一些 DeepStream 参考应用程序示例。

核心 SDK 由多个硬件加速器插件组成,这些插件使用 VIC、GPU、DLA、NVDEC 和 NVENC 等加速器。通过在专用加速器中执行所有计算密集型操作,DeepStream 可以为视频分析应用程序实现最高性能。DeepStream 的主要功能之一是边缘和云之间的安全双向通信。DeepStream 附带了多种开箱即用的安全协议,例如使用用户名/密码的 SASL/Plain 身份验证和双向 TLS 身份验证。要了解有关这些安全功能的更多信息,请阅读物联网 (IoT)章节。要了解有关双向功能的更多信息,请参阅本指南中的双向消息传递部分。

DeepStream 构建于 CUDA-X 堆栈中的多个 NVIDIA 库之上,例如 CUDA、TensorRT、NVIDIA® Triton 推理服务器和多媒体库。TensorRT 加速 NVIDIA GPU 上的 AI 推理。DeepStream 在 DeepStream 插件中抽象了这些库,使开发人员可以轻松构建视频分析管道,而无需学习所有单独的库。

DeepStream 针对 NVIDIA GPU 进行了优化;该应用程序可以部署在运行 Jetson 平台的嵌入式边缘设备上,也可以部署在更大的边缘或数据中心 GPU(如 T4)上。DeepStream 应用程序可以使用 NVIDIA 容器运行时部署在容器中。这些容器可在 NGC、NVIDIA GPU 云注册表中找到。要了解有关使用 Docker 部署的更多信息,请参阅 Docker 容器章节。DeepStream 应用程序可以使用 GPU 上的 Kubernetes 在边缘进行编排。NGC 上提供了部署 DeepStream 应用程序的示例 Helm chart

DeepStream 图形架构#

DeepStream 是使用开源 GStreamer 框架构建的优化图形架构。下图显示了一个典型的视频分析应用程序,从输入视频到输出洞察。所有单独的块都是使用的各种插件。底部是整个应用程序中使用的不同硬件引擎。插件之间零内存拷贝的最佳内存管理以及各种加速器的使用确保了最高性能。

DeepStream Overview

DeepStream 以 GStreamer 插件的形式提供构建块,可用于构建高效的视频分析管道。有超过 20 个插件针对各种任务进行了硬件加速。

  • 流数据可以通过 RTSP 通过网络传输,也可以来自本地文件系统或直接来自摄像头。流使用 CPU 捕获。帧进入内存后,将发送以使用 NVDEC 加速器进行解码。用于解码的插件称为Gst-nvvideo4linux2

  • 解码后,有一个可选的图像预处理步骤,可以在推理之前对输入图像进行预处理。预处理可以是图像去畸变或颜色空间转换。Gst-nvdewarper插件可以对来自鱼眼或 360 度摄像头的图像进行去畸变。Gst-nvvideoconvert插件可以对帧执行颜色格式转换。这些插件使用 GPU 或 VIC(视觉图像合成器)。

  • 下一步是批量处理帧,以获得最佳推理性能。批量处理是使用Gst-nvstreammux插件完成的。

  • 帧批量处理完成后,将发送进行推理。可以使用 TensorRT(NVIDIA 的推理加速器运行时)进行推理,也可以使用本机框架(如 TensorFlow 或 PyTorch)通过 Triton 推理服务器进行推理。本机 TensorRT 推理是使用Gst-nvinfer插件执行的,而使用 Triton 进行推理是使用Gst-nvinferserver插件完成的。推理可以使用 GPU 或 DLA(Jetson AGX Orin 和 Orin NX 的深度学习加速器)。

  • 推理之后,下一步可能涉及跟踪对象。SDK 中有几个内置的参考跟踪器,范围从高性能到高精度。对象跟踪是使用Gst-nvtracker插件执行的。

  • 为了创建可视化工件,例如边界框、分割掩码、标签,有一个名为Gst-nvdsosd的可视化插件。

  • 最后,为了输出结果,DeepStream 提供了多种选项:在屏幕上渲染带有边界框的输出,将输出保存到本地磁盘,通过 RTSP 流式传输输出,或者仅将元数据发送到云端。为了将元数据发送到云端,DeepStream 使用Gst-nvmsgconvGst-nvmsgbroker插件。Gst-nvmsgconv将元数据转换为模式负载,而Gst-nvmsgbroker建立与云端的连接并发送遥测数据。有几种内置的代理协议,例如 Kafka、MQTT、AMQP 和 Azure IoT。可以创建自定义代理适配器。

DeepStream 参考应用程序#

为了开始使用,开发人员可以使用提供的参考应用程序。还包括这些应用程序的源代码。端到端应用程序称为deepstream-app。此应用程序是完全可配置的 - 它允许用户配置任何类型和数量的源。用户还可以选择要运行推理的网络类型。它预先构建了一个推理插件来执行对象检测,并由推理插件级联以执行图像分类。可以选择配置跟踪器。对于输出,用户可以在屏幕上渲染、保存输出文件或通过 RTSP 流式传输视频输出之间进行选择。

DeepStream Overview

这是一个开始学习 DeepStream 功能的良好参考应用程序。在DeepStream 参考应用程序 - deepstream-app章节中更详细地介绍了此应用程序。此应用程序的源代码位于/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-app中。此应用程序将适用于所有 AI 模型,并在各个 README 中提供了详细说明。性能基准测试也使用此应用程序运行。

开始构建应用程序#

对于希望构建其自定义应用程序的开发人员来说,deepstream-app可能有点让人不知所措,难以开始开发。SDK 附带了几个简单的应用程序,开发人员可以在其中了解 DeepStream 的基本概念、构建简单的管道,然后逐步构建更复杂的应用程序。

DeepStream Overview

开发人员可以从 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 简介

Python 中的 DeepStream#

Python 易于使用,并且在数据科学家和深度学习专家创建 AI 模型时被广泛采用。NVIDIA 引入了 Python 绑定,以帮助您使用 Python 构建高性能 AI 应用程序。可以使用 Gst-Python(GStreamer 框架的 Python 绑定)构建 DeepStream 管道。

DeepStream Overview

DeepStream Python 应用程序使用 Gst-Python API 操作来构建管道,并使用探针函数来访问管道中各个点的数据。数据类型均为本机 C 语言,需要通过 PyBindings 或 NumPy 垫片层才能从 Python 应用程序访问它们。张量数据是推理后输出的原始张量输出。如果您尝试检测对象,则需要通过解析和聚类算法对该张量数据进行后处理,以在检测到的对象周围创建边界框。要开始使用 Python,请参阅本指南中的Python 示例应用程序和绑定源代码详情以及 DeepStream Python API 指南中的“DeepStream Python”。