一、导言
..;fxxx?.
.^1xf;. .fn.
.jx:. .r.
.fj ' .?n.
'f) . ..trf`.
.'.' >x. !xn} .
:r';" }j .`x)'
. ..rx ..j. .)x.. .fx`.
.rux. . fn. ..n` .x` . .jf
.n.tj.. .f{. .x. .'x^ 'ff.
/j. nurc1-.. ./f/ . :r. :r.
fl.zcJJJJY ...!j1 .j! .x..
fczJJJJJJU . in~. .x.. .\j
. xXJJYCJUJC .fx. .>j .'n.
.jYJJCli!?!i.. .jr. .xj ..rj.
./XJJJJi!!!!i! .jf' .n' .x'
'cJJJJLi!!!!i. 'n^. .x. jt.
tzJJU!!!!!i!. 'tjf(. '.^)jrrrrx|; . 'x'. .;n.
'nYJJQii`iii .`|..nnzzzJCJUUJJU[rnux/ ..lr". ln .
.nJJL. l. .j<zcJJJJUJJJJJJC!!!!iilnv\ .\n..
nn` ,vr. ../tYJJJJJJJJJililli!!!!!!i>jf...nj .
.n. .jn. ..}.YCJJUCJCJ!!!!!!!!!!!!!!!!I'zx .
xl. .. .'t...i!!!tJJ!!!!!!!!!!!!!!!!!!..fj..
.x\.' `)(+. . . f .i!!!i .!!!!!!!!!!i:.i!!!! . x^.
.j .j ;<; .. .t" . .. .' ..`i'!;"'.^' .'l;... x~.
.j...t. ' .. .../ ..x'.
/f..- .`t.. .). 日期: 20240115 ,r.
.xj .- '.. 'x
. xj.. j.
'txxj~ ^. ...?xrrr`'
.'.`ff/.. 二狗大爷出品 MEOW! .. .!!!!!,.`jt.
.^|f'. .UJJJJc!!!!!!i. .fr..
.t' x:. .UJJJJJ!i!!!!!!I . xr.
.'f[. .j\..... JJJJJJJ!X>!!!i. .^fx..
.,r .:j!/. '.. .../\YJJJJJJJCv!l'.... f.
. j). .<r ./t^ . .!rvxf. ixzcXXYUYzcr^>xncx}'.?j.
.)r. .vt' .~n-..... ."~\jjxnxxxxfI' .. . . . .'. I?;.
.xI. .')nX,. ',xj...'l_]_<".....
`j/ . ..<rxrr.. ..nr.
.\j.. ..jrl\n.. .>xj.'
\jf. .jnj..j\'. ../xf'.
t'. '.]xn. `rx .xn-.
.{^+tj.. .rx' ..tnx...
/f'.. '{xj
"jl. .~jj..
..)))"..
本专栏介绍从0开始学习DeepStream的主要内容,学习的思维导图如下:
DeepStream SDK学习历程
概述
SDK是什么
特点和优势
支持的平台和语言
基础概念
架构和模块
第二篇:DeepStream安装和配置
系统要求
下载和安装SDK
配置开发环境
API文档
接口列表
方法和参数说明
返回值和错误处理
示例代码
基础示例
集成到项目中的示例
重点
常见用例示例
调试和错误处理
常见错误类型
调试工具和技巧
日志记录
进阶主题
高级功能和特性
定制和扩展
最佳实践
社区和资源
官方文档链接
开发者社区论坛
博客、教程和视频资源
常见问题FAQ
版本管理
SDK版本管理
升级和迁移指南
实际项目应用
项目案例分析
实际应用场景
学习路径
入门阶段
中级阶段
高级阶段
DeepStream 6.4 支持 NVIDIA (®) Jetson™ Orin NX、NVIDIA (®) Jetson™ AGX Orin 和 NVIDIA (®) Jetson™ Orin Nano 的新功能。该版本支持 Ubuntu 22.04 LTS。
二、NVIDIA DeepStream 概述
DeepStream 是一个流分析工具包,用于构建人工智能驱动的应用程序。它将来自 USB/CSI 摄像头的流数据、来自文件的视频或通过 RTSP 的流作为输入,并使用人工智能和计算机视觉从像素中生成见解,以便更好地了解环境。DeepStream SDK 可以成为许多视频分析解决方案的基础层,例如了解智能城市中的交通和行人、医院中的健康和安全监控、零售中的自助结账和分析、检测制造工厂中的组件缺陷等。请在此处阅读有关 DeepStream 的更多信息。
DeepStream 通过 Python 绑定支持 C/C++ 和 Python 中的应用程序开发。为了更容易上手,DeepStream 附带了多个 C/C++ 和 Python 语言的参考应用程序。请参阅C/C++ 示例应用程序源详细信息和Python 示例应用程序和绑定源详细信息部分,了解有关可用应用程序的更多信息。请参阅NVIDIA-AI-IOT GitHub 页面,了解一些示例 DeepStream 参考应用程序。
核心SDK由多个硬件加速器插件组成,这些插件使用VIC、GPU、DLA、NVDEC和NVENC等加速器。通过在专用加速器中执行所有计算密集型操作,DeepStream 可以实现视频分析应用程序的最高性能。DeepStream 的关键功能之一是边缘和云之间的安全双向通信。DeepStream 附带多种开箱即用的安全协议,例如使用用户名/密码的 SASL/Plain 身份验证和 2 路 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框架构建的优化图架构。下图显示了从输入视频到输出见解的典型视频分析应用程序。所有单独的块都是使用的各种插件。底部是整个应用程序中使用的不同硬件引擎。插件之间零内存复制的最佳内存管理以及各种加速器的使用确保了最高性能。
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 Orin 和 Orin 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 参考应用程序
首先,开发人员可以使用提供的参考应用程序。还包括这些应用程序的源代码。端到端应用程序称为deepstream-app。该应用程序是完全可配置的 - 它允许用户配置任何类型和数量的源。用户还可以选择运行推理的网络类型。它预先构建了一个推理插件,用于通过推理插件级联进行对象检测以进行图像分类。有一个配置跟踪器的选项。对于输出,用户可以选择在屏幕上渲染、保存输出文件或通过 RTSP 流式传输视频。
这是开始学习 DeepStream 功能的一个很好的参考应用程序。DeepStream 参考应用程序 - deepstream-app章节更详细地介绍了此应用程序。此应用程序的源代码位于/opt/nvidia/deepstream/deepstream-6.3/sources/apps/sample_apps/deepstream-app中。该应用程序适用于所有人工智能模型,并在各个自述文件中提供了详细说明。性能基准测试也是使用此应用程序运行的。
五、开始构建应用程序
对于想要构建自定义应用程序的开发人员来说,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 示例应用程序和绑定源详细信息。
六、Python 使用DeepStream
Python 易于使用,在创建人工智能模型时被数据科学家和深度学习专家广泛采用。NVIDIA 引入了 Python 绑定来帮助您使用 Python 构建高性能 AI 应用程序。DeepStream 管道可以使用GStreamer 框架的 Python 绑定Gst-Python来构建。
DeepStream Python 应用程序使用Gst-Python API 操作来构建管道,并使用探测函数来访问管道中各个点的数据。数据类型均采用本机 C 语言,需要通过PyBindings或 NumPy 的填充层才能从 Python 应用程序访问它们。张量数据是推理后得出的原始张量输出。如果您尝试检测对象,则需要通过解析和聚类算法对该张量数据进行后处理,以在检测到的对象周围创建边界框。要开始使用 Python,请参阅本指南中的Python 示例应用程序和绑定源详细信息以及 DeepStream Python API 指南中的“DeepStream Python” 。