NVIDIA DeepStream5.0官方总结(改动版)

时间:2024-03-13 06:59:07

一、DeepStream综述

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

 

NVIDIA DeepStream5.0官方总结(改动版)

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 /普通身份验证和2路TLS身份验证。要了解有关这些安全功能的更多信息,请阅读IoT章节。要了解有关双向功能的更多信息,请参阅本指南中的“双向消息传递”部分。

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

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

二、DeepStream图架构

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

NVIDIA DeepStream5.0官方总结(改动版)

 

DeepStream以GStreamer插件的形式提供了构建基块,可用于构建有效的视频分析管道。有15个以上的插件可以通过硬件加速完成各种任务。

  • 流数据可以通过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-nvmsgconvGst-nvmsgbroker插件。Gst-nvmsgconv将元数据转换为架构有效负载,而Gst-nvmsgbroker建立与云的连接并发送遥测数据。有几种内置的代理协议,例如Kafka,MQTT,AMQP和Azure IoT。可以创建自定义代理适配器。

三、参考应用

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

NVIDIA DeepStream5.0官方总结(改动版)

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

四、灵活灵用

对于希望构建其自定义应用程序的开发人员而言,deepstream-app对于开始开发可能会有些不知所措。该SDK附带了几个简单的应用程序,开发人员可以在其中学习DeepStream的基本概念,构造一个简单的管道,然后逐步构建更复杂的应用程序。

NVIDIA DeepStream5.0官方总结(改动版)

 

开发人员可以从deepstream-test1开始,它几乎像DeepStream的hello世界。在此应用程序中,开发人员将学习如何使用各种DeepStream插件构建GStreamer管道。他们将从文件中获取视频,进行解码,批处理,然后进行对象检测,最后在屏幕上呈现这些框。deepstream-test2从test1进行,并将级联网络级联到主网络。deepstream-test3显示了如何添加多个视频源,然后最后test4将显示如何使用消息代理插件为IoT服务。这4个入门应用程序在本机C / C ++和Python中均可用。要了解有关DeepStream中这些应用程序和其他示例应用程序的更多信息,请参见C / C ++示例应用程序源详细信息Python示例应用程序源详细信息

五、Python中的DeepStream

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

NVIDIA DeepStream5.0官方总结(改动版)

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