DeepStream:下一代智慧城市的视频分析

文章翻译自:https://devblogs.nvidia.com/deepstream-video-analytics-smart-cities/

想象一下每个父母最糟糕的噩梦:一个孩子在一个拥挤的购物中心迷路了。现在想象一下这样一个场景:使用部署在建筑物内的摄像机网络在几分钟内找到并救出该孩子 - 并且实时记录,检索和分析所有视频。这仅代表视频分析领域提供的众多可能性之一。

传统视频分析使用基于计算机视觉的方法,而下一代解决方案越来越依赖于深度学习技术。在GPU上运行这些技术可提供前所未有的准确性、功能和速度。实现视频分析潜力的关键是构建以经济高效的方式扩展的应用程序。

NVIDIA的新DeepStream SDK通过使用NVIDIA Tesla GPU的硬件功能,帮助开发人员快速构建高效,高性能的视频分析应用程序,包括卓越的解码性能,通过降低精度的高速推理和低功耗。在这篇博文中,我将概述DeepStream SDK,说明其用于满足性能和可伸缩性要求,并根据对象检测示例用例强调其易于部署。

1 什么是DeepStream

视频分析的核心是标准计算机视觉任务,包括图像分类,对象检测,识别和跟踪。图1显示了每个任务在图像中的应用。

在这里插入图片描述图1.(左)基于类概率识别的对象。 (中)基于边界框检测到的对象。 (右)跨帧跟踪对象。

常使用卷积神经网络,有效地解决这些任务的网络数量激增。连续的数据帧通常通过这些网络运行以产生感兴趣的结果。高性能应用程序构建在流水线上,以最佳方式为神经网络提供所需分辨率和格式的解码视频帧,以最大化吞吐量。可扩展性要求并行处理多个视频流以获得优越的信道密度(在给定(机架)空间中处理的视频信道的数量)。使用深度学习进行视频分析在计算上非常昂贵,并且对于实时视频的要求更加严格,因为它通常涉及使用自定义逻辑和灵活工作流程的实时分析。

DeepStream的关键价值在于使视频的深度学习易于使用,使您能够专注于快速构建和定制高效且可扩展的视频分析应用程序。 DeepStream是NVIDIA Metropolis平台的一部分,该平台为构建智能边缘到云视频分析系统提供统一的架构。

2 DeepStream视频智能分析工作流

流水线2显示了使用DeepStream的典型应用程序l。 SDK提供的阶段以绿色显示,与用户实现的阶段不同,以蓝色显示。流水线户仅负责解析视频并将其注入l,提供深度学习网络并使用流水线中的推断结果

在这里插入图片描述图2 DeepStream工作流

DeepStream SDK提供的模块包含输入视频流的解码,预处理和推理,所有模块都经过精细设计,以提供最大的帧吞吐量。解码模块接受以H.264,H.265和MPEG-4编码的视频以及其他格式,并对它们进行解码以渲染NV12颜色格式的原始帧。视频解码使用硬件加速的NVIDIA Video Codec SDK

预处理阶段将颜色格式从NV12转换为BGR,并且还将帧的大小调整为所使用的神经网络所需的分辨率。色彩空间转换和缩放使用自定义CUDA内核和NVIDIA Performance Primitives(NPP)库函数的组合

推理模块使用TensorRT导入和执行的神经网络批量处理帧,TensorRT优化了它们以实现高吞吐量和低延迟,并具有同类最佳的功效。 DeepStream目前支持基于Caffe的网络; TensorFlow支持将在不久的将来添加。

这些模块紧密集成,以确保合理使用数据传输和软件同步,同时实现最大的硬件并发性。

3 DeepStream用户API

DeepStream提供了一个C ++ API,其核心是三个实体:作为流水线的独立构建块的模块,封装整个流水线本身的设备计算器,以及模块之间通信的张量。模块表示流水线中的阶段,可以分为预定义(解码器,预处理和推理)或添加自定义逻辑的用户定义模块。

要构建流水线,可以通过调用createDeviceWorker()来创建设备计算器的实例:

// Create a deviceWorker on a GPU device, the user needs to set the channel number. 
IDeviceWorker *pDeviceWorker = createDeviceWorker(g_nChannels, g_devID);

然后,通过定义用于解码的输入编解码器类型,预处理阶段要输出的颜色格式以及推理模型的网络详细信息,启用和配置流水线的预定义阶段。

// Add decode task, the parameter is the format of codec. 
pDeviceWorker->addDecodeTask(cudaVideoCodec_H264);

// Add post processing task and define color format for inference
pDeviceWorker->addColorSpaceConvertorTask(BGR_PLANAR);

// Enable inference module and define model details
pDeviceWorker->addInferenceTask(preModule_infer, deployFile, modelFile, meanFile,
                                   inputLayerName, outputLayerNames);

该应用程序现在可以运行了。

//finally, start the pipeline!
pDeviceWorker->start();

4 常见的处理流程

您可以通过将用户定义的模块添加到流水线来扩展此模型。创建模块涉及定义其输入,执行过程和输出张量。您可以通过将输出张量连接到后续模块中的适当输入来扩展和配置流水线。张量具有形状和数据类型属性,以及CPU或GPU的“存储器类型”,允许相应地处理和复制与它们相关联的数据。输入张量的数据类型必须与模块预期的类型匹配。

自定义模块通过将自定义内核、OpenCV算法等插入流水线来补充深层神经网络,从而实现更复杂的多阶段分析。图3中的示例说明了基于OpenCV的对象跟踪算法与DeepStream流水线的集成。推理模块将包含边界框的张量输出到对象跟踪模块中,然后跟踪后续帧中的检测到的对象。跟踪和边界框信息在屏幕上一起显示上以实现可视化。

在这里插入图片描述图3 常见的模块集成

5 为Tesla P4/P40开发

虽然DeepStream可以在任何最近具有支持相关CUDA和TensorRT版本的计算功能的GPU上运行,但它的设计目的是利用基于Pascal系列的Tesla P4和P40 GPU的卓越推理和视频功能。结合高浮点吞吐量和效率,这些GPU支持最新(H265)编码格式,并可同时解码30多路高清视频。这使软件能够为这些GPU上执行的深度神经网络提供帧,以前所未有的速度进行推理。DeepStream软件架构利用此硬件解码功能,通过解码模块的多线程实现与逐通道数据包缓存相结合,为NVDECODE API提供信息。这导致最大化硬件解码器(NVDEC)利用率和解码性能。

增加的解码吞吐量实现了更大的推理批量大小,从而提高了推理吞吐量。GPU支持8位整数(INT8)操作,为提高系统吞吐量提供了更大的机会。TensorRT 2.1引入了将单精度浮点(FP32)深度学习网络(CNN)转换为使用INT8精度而无需任何调整或再训练的能力。通过使用校准技术,尽管INT8的范围和精度降低,但在推理过程中没有明显的精度损失。。DeepStream提供校准表和API,以在运行时启用或禁用INT8。这允许TensorRT在执行网络时以最佳方式在FP32和INT8精度之间进行转换。

Tesla P4是一款紧凑型加速器板,最大功率为75W,专为高密度数据中心部署而设计,每台服务器具有多块卡。基于此要求,DeepStream支持在不同GPU上执行多个流水线,每个GPU上一个,以实现卓越的通道密度。您可以通过deviceID参数将流水线的GPU ID传递给createDevice Worker()。

目的是让上层软件根据用例、利用率和服务质量等考虑因素创建和管理各种流水线,并在适当的GPU上安排视频流。

6 目标检测示例

DeepStream版本包含一个基于未剪枝的Resnet-18网络的名为nvDecInfer_detection的对象检测示例。该示例重点介绍了DeepStream使用的所有方面,包括流水线创建和配置,H264流解析和注入,自定义模块的添加以及推理结果的使用。大部分代码都是可重用的,可以很容易地应用于用户项目。

6.1 示例流水线

图4显示了目标检测的端到端流水线。

在这里插入图片描述
图4:目标检测流水线

和以前一样,SDK提供的块为绿色,用户提供的逻辑为蓝色。为了补充DeepStream中解码模块的多线程实现,示例中的用户逻辑使用单独的线程将数据包注入到流水线中的相应通道输入,使用以下代码实现。

//per thread injection of packets into pipeline
pDeviceWorker->pushPacket(pBuf, nBuf, laneID);

虽然该示例使用基于文件的视频输入,但该概念可以类似地扩展到其他情况,例如相机馈送或网络流。推理模块使用的Resnet-18网络输出两个包含每个帧中检测到的各类对象的边界框和IOU信息的张量。这些结果由解析器模块聚合,该解析器模块通过基于IOU阈值进行过滤并聚类其余边界框来输出合并的边界框信息。这些由演示者模块呈现在原始帧上并显示在显示器上。

6.2 效率分析

DeepStream提供的分析器可帮助您通过解码和推理模块测量帧吞吐量。每个通道报告解码吞吐量,而推理吞吐量提供组合吞吐量,因为所有通道合并到运行分析的共享缓冲区中。下面的清单显示了解码分析的结果:
在这里插入图片描述您可以通过添加每个通道的吞吐量来确定总解码吞吐量。

分析器报告结果的速率可根据DecodeProfiler类中的定义进行配置,该类实现处理分析结果的逻辑。

6.3 显示

视频分析,通常需要查看叠加在视频上的分析结果。目标检测示例示出了该功能的实现,作为自定义模块,其接受两个输入张量,其递送由预处理模块输出的解码帧和来自推断模块的检测到的边界框的坐标。该示例使用OpenGL过滤库来渲染边界框,这需要底层窗口系统和显示。由于Tesla GPU无法直接驱动显示器,因此样本可以使用单独的图形卡(例如GeForce或Quadro GPU板)进行显示。因此,该示例说明了如何将DeepStream视频管道扩展到第二个GPU。图5显示了带有边界框的目标检测结果。

在这里插入图片描述图5:多通道目标检测可视化。

6.4 性能

与大多数基于GPU的工作负载一样,视频分析应用程序的性能受可用内存大小和带宽(设备内存带宽以及主机到设备内存传输的PCIe带宽)、GPU内核数量和GPU时钟频率的影响。这些因素决定了视频流水线中每个阶段的块级吞吐量。基于DeepStream的应用程序通常是受解码限制或推理(计算)限制,这取决于所使用的深度学习网络的复杂性。使用诸如nvidia-smi之类的工具来识别哪些硬件解码器(NVDEC)或GPU核心接近100%利用率(如果有的话)可以提供关于哪个阶段是瓶颈的快速提示。

当在基于P4的系统上执行时,目标检测示例是推理约束,当处理30fps HD视频时,当频道计数达到16时展现出完全的GPU利用率,如下面的nvidia-smi输出所示。频道数量的任何进一步增加都会导致吞吐量低于视频帧速率,使得实时处理变得不可行。

$ nvidia-smi -i 0 -q -d UTILIZATION 
GPU 0000:05:00.0
    Utilization
        Gpu              : 96 %
        Memory           : 41 %
        Encoder          : 0 %
        Decoder          : 56 %

更改为等效(但更小)的Resnet-10网络,可以30 fps处理多达30个通道。以下nvidia-smi输出显示此时解码器利用率达到100%,表明应用程序受限于解码。

$ nvidia-smi -i 0 -q -d UTILIZATION 
GPU 0000:05:00.0
    Utilization
        Gpu              : 76 %
        Memory           : 56 %
        Encoder          : 0 %
        Decoder          : 100 %

由于较高的计算成本,使用较大网络的应用是在相对较低的信道数下推断的。最佳实践涉及在网络功能和性能方面进行最佳权衡,充分修剪网络,以及使用INT8推断来实现最大通道数并从GPU中提取所有可用性能。

通过达到这种平衡,您可以以前所未有的规模和功率支持激动人心的新用例。图7显示了基于Resnet-10的检测应用程序的解码分析器输出,该应用程序列出了与输入帧速率30fps匹配的所有30个通道的吞吐量。图7还显示了nvidia-smi输出,证明Tesla P4 GPU在执行工作负载期间仅消耗47 W,仅为1.56 W /通道。当在服务器场内部署时,这提供了在可接受的功率预算内实现特殊信道密度的机会。

在这里插入图片描述图7:目标检测的执行指标:(顶部)由nvidia-smi显示的GPU功耗。 (下)每通道帧吞吐量。

8 欢迎尝试DeepStream

Tesla GPU为深度学习驱动的视频分析应用程序带来了机会,而NVIDIA DeepStream SDK使它们更易于构建。 DeepStream使您能够在深度学习中利用尖端概念。您可以在此博客中描述的想法的基础上实现诸如级联网络和实时对象跟踪器之类的功能。DeepStream团队很高兴看到使用SDK实现的创新。

我们欢迎您在DeepStream开发人员论坛中提出问题和意见。我们的目标是根据您的反馈继续扩展和发展DeepStream,让我们知道您的想法。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值