NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述

重要提示
       在开始之前,请确保您了解如何将DeepStream 6.1自定义模型迁移到DeepStream 6.2。详细信息请参见本文档的Readme First部分。

重要提示
       DeepStream 6.2版本支持NVIDIA ®Jetson ™Xavier、NVIDIA ®Jetson ™NX、NVIDIA ®Jetson ™Orin NX和NVIDIA ®Jetson ™AGX Orin的新功能。它是支持Ubuntu 20.04 LTS的版本。

NVIDIA DeepStream概述

       DeepStream是一个用于构建人工智能应用程序的流分析工具包。它将来自USB/CSI摄像头的流数据、来自文件或RTSP流的视频作为输入,并使用人工智能和计算机视觉从像素中生成洞察,以便更好地了解环境。DeepStream SDK可以成为许多视频分析解决方案的基础层,如了解智能城市中的交通和行人、医院中的健康和安全监控、零售中的自助检查和分析、检测制造设施中的组件缺陷等。点击这里阅读更多关于DeepStream的信息。

NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述_第1张图片

       DeepStream支持在C/ C++和Python中通过Python绑定开发应用程序。为了便于入门,DeepStream附带了几个C/ C++和Python版本的参考应用程序。请参阅C/ c++示例应用程序源详细信息和Python示例应用程序和绑定源详细信息部分,以了解更多关于可用应用程序的信息。有关一些DeepStream参考应用示例,请参阅NVIDIA-AI-IOT GitHub页面。

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

       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图样本。

DeepStream图形架构

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

NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述_第2张图片

       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插件完成。

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

       为了创建可视化工件,如包围框,分割掩码,标签,有一个可视化插件称为Gst-nvdsosd。

       最后,为了输出结果,DeepStream提供了多种选项:用屏幕上的包围框呈现输出,将输出保存到本地磁盘,通过RTSP输出,或者直接将元数据发送到云端。对于向云端发送元数据,DeepStream使用Gst-nvmsgconv和Gst-nvmsgbroker插件。Gst-nvmsgconv将元数据转换为模式有效负载,Gst-nvmsgbroker建立到云的连接并发送遥测数据。有几个内置的代理协议,如Kafka, MQTT, AMQP和Azure IoT。可以创建自定义代理适配器。

DeepStream参考应用

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

NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述_第3张图片

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

开始构建应用程序

       对于希望构建自定义应用程序的开发人员来说,deepstream应用程序可能会让他们难以开始开发。SDK附带了几个简单的应用程序,开发人员可以在其中学习DeepStream的基本概念,构建一个简单的管道,然后继续构建更复杂的应用程序。

NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述_第4张图片

       开发人员可以从DeepStream-test1开始,它几乎像一个DeepStream hello world。在这个应用程序中,开发人员将学习如何使用各种DeepStream插件构建GStreamer管道。他们将从文件中获取视频,解码,批处理,然后进行对象检测,最后将盒子呈现在屏幕上。deepstream-test2从test1开始,级联二级网络到主网络。deepstream-test3展示了如何添加多个视频源,最后test4将展示如何使用消息代理插件进行物联网服务。这4个入门应用程序可以在原生C/ C++和Python中使用。要阅读DeepStream中关于这些应用程序和其他示例应用程序的更多信息,请参阅C/ C++示例应用程序源代码细节和Python示例应用程序和绑定源代码细节。

       DeepStream应用程序无需使用Graph Composer编写代码即可创建。请参阅图形编写器介绍了解详细信息。

Python DeepStream

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

NVIDIA DeepStream SDK 开发指南-NVIDIA DeepStream概述_第5张图片

       DeepStream Python应用程序使用Gst-Python API操作构建管道,并使用探测函数访问管道中各个点的数据。数据类型都在原生C中,需要通过PyBindings或NumPy来从Python应用程序访问它们。张量数据是推断后输出的原始张量输出。如果您试图检测一个对象,则需要通过解析和聚类算法对这个张量数据进行后处理,以在检测到的对象周围创建边界框。要开始使用Python,请参阅本指南中的Python示例应用程序和绑定源详细信息以及DeepStream Python API指南中的“DeepStream Python”。

你可能感兴趣的:(边缘计算,目标检测,深度学习,边缘计算,c语言,python)