NVIDIA DeepStream 5.0构建智能视频分析应用程序

摘要:
NVIDIA创建了DeepStreamSDK,以消除这些障碍,并使每个人都能轻松高效地创建基于AI、GPU加速的视频分析应用程序。DeepStreamSDK是一个可扩展框架,用于为边缘构建高性能、托管的IVA应用程序。借助DeepStream,从智能城市和建筑到零售、制造和医疗保健的人工智能应用程序可以跨多个行业构建。本文的其余部分将深入探讨DeepStream 5.0版本的主要特性。DeepStream5.0功能借助DeepStream 5.0,NVIDIA比以往任何时候都更容易在边缘构建和部署基于AI的IVA应用程序。DeepStream 5.0直接从应用程序集成Triton Server。

NVIDIA DeepStream 5.0构建智能视频分析应用程序

无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就可以实现高级智能视频分析(IVA)有用。

在基础层,全球在城市,体育馆,工厂和医院中部署了数十亿个摄像头和IoT传感器,每天生成数PB的数据。随着数据的爆炸式增长,必须使用AI来简化和执行有效的IVA。

许多公司和开发人员都在努力构建可管理的IVA管道,因为这些工作需要AI专业知识,高效的硬件,可靠的软件以及广泛的资源才能进行大规模部署。NVIDIA打造了DeepStream SDK,以消除这些障碍,并使每个人都能轻松,高效地创建基于AI的,GPU加速的应用程序,以进行视频分析。

DeepStream SDK是一个可扩展的框架,用于为边缘构建高性能,托管的IVA应用程序。借助DeepStream,可以跨多个行业构建从智慧城市和建筑到零售,制造业和医疗保健的AI应用程序。

DeepStream运行时系统已通过流水线化,以支持深度学习推理,图像和传感器处理,并在流应用程序中将见解发送到云。为了进行大规模部署,可以使用容器构建本机云,DeepStream应用程序,并使用Kubernetes平台对所有这些进行编排。在边缘上部署时,应用程序可以在IoT设备和云标准消息代理(例如Kafka和MQTT)之间进行通信,以进行大规模,广域部署。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第1张

 1. DeepStream –边缘到云

DeepStream应用程序可以在由NVIDIA Jetson提供支持的边缘设备或由NVIDIA T4提供支持的本地服务器上运行。来自边缘的数据可以发送到云,以进行更高级别的分析和可视化。

本文其余部分深入探讨了DeepStream 5.0发行的主要功能。

DeepStream 5.0功能

借助DeepStream 5.0,NVIDIA使在边缘上构建和部署基于AI的IVA应用程序的工作变得前所未有的轻松。以下是新功能:

对Triton Inference Server的支持

创建AI是一个反复的实验过程,数据科学家在其中花费大量时间在不同的架构上进行实验和制作原型。在此阶段,重点更多地放在如何最好地解决问题上,而不是AI模型的效率上。希望花费更多的时间来获得其用例的高精度,而不是花费优化推理的周期。希望在实际场景中快速创建原型并查看模型的性能。

过去,使用DeepStream执行视频分析涉及将模型转换为NVIDIA TensorRT(推理运行时)。从DeepStream 5.0开始,可以选择在训练框架中本地运行模型。这使可以快速构建端到端系统的原型。

DeepStream 5.0直接从应用程序集成了Triton Server。Triton Server为提供了将任何深度学习框架与DeepStream结合使用的灵活性。推理服务Gst-nvinferserver通过可用的API从DeepStream插件()本地集成。该插件接收NV12 / RGBA缓冲区,并将其发送到较低级的库。该库对图像进行预处理,并转换为模型可接受的所需张量大小。张量通过CUDA共享内存发送到Triton Server库。

推断后,Triton Server将输出张量返回到共享库,在共享库中对其进行后处理以生成元数据。该元数据被附加回现有的元数据并向下游发送。通过集成推理服务器,可以使用DeepStream中的所有构建块来构建有效的IVA管道,并在的训练框架上本地执行推理。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第2张

 2. DeepStream 5.0中的Triton Server推理插件。

DeepStream本身仍支持TensorRT。如果正在寻找最高的推理吞吐量或资源受限以部署完整的框架和大型模型,则这是首选的方法。如果正在寻找灵活性,并且可以在性能方面做出取舍,那么Triton Server是最佳途径。

下表总结了这两种方法的优缺点。

NVIDIA DeepStream 5.0构建智能视频分析应用程序第3张

表1. TensorRT和Triton Server的权衡。

以下是带有DeepStream的Triton Server的主要功能:

  • 支持以下模型格式:
  • 在Jetson和T4上的TensorRT,TensorFlow GraphDef和SavedModel以及TensorFlow-TensorRT模型
  • 仅T4上的ONNX,PyTorch和Caffe2 NetDef
  • 多个模型(或同一模型的多个实例)可以在同一GPU上同时运行。

要开始使用带有DeepStream的Triton Server,提供了几个示例配置文件和一个脚本来检索开源模型。有同时运行TensorRT和TensorFlow模型的示例。对于本文,将DeepStream安装目录称为$DEEPSTREAM_DIR。实际的安装目录取决于使用的是裸机版本还是容器版本。

如果在x86平台上的NVIDIA GPU上运行,请nvcr.io/nvidia/deepstream:5.0-20.04-tritonNVIDIA NGC中拉出容器。在x86上带有DeepStream的Triton Server仅适用于-triton容器。如果在Jetson上运行,则Triton Server共享库作为DeepStream的一部分预先安装。可以与任何Jetson容器一起使用。 

转到/ samples目录:

cd $ DEEPSTREAM_DIR / deepstream-5.0 / samples

在该目录中执行bash脚本。该脚本下载所有必需的开源模型,并将提供的Caffe和UFF模型转换为TensorRT引擎文件。此步骤将所有模型转换为引擎文件,因此可能需要几分钟或更长时间。

bash脚本中指定了所生成引擎文件的最大批处理大小。要修改默认批处理大小,必须修改此脚本。这也将下载TensorFlowssd-inception_v2模型。

./prepare_ds_trtis_model_repo.sh

模型已生成或复制到/trtis_model_repo目录中。这是运行ssd-inception_v2模型的方法。首先进入 /trtis_model_repo/ssd_inception_v2_coco_2018_01_28目录并找到config.pbtxt文件。如果bash脚本成功运行,还应该看到1/model.graphdef。这是TensorFlow冻结的graphdef。

这是config.pbtxt模型库中提供的示例文件。首先,使用platform关键字指定深度学习框架。可用选项如下:

  • tensorrt_plan
  • tensorflow_graphdef
  • tensorflow_savedmodel
  • caffe2_netdef
  • onnxruntime_onnx
  • pytorch_libtorch
  • custom

接下来,指定输入维,数据类型和数据格式。然后,指定所有输出张量的所有输出尺寸和数据类型。有关配置文件中所有选项的更多信息,请参见模型配置

名称:“ ssd_inception_v2_coco_2018_01_28”
平台:“ tensorflow_graphdef”
max_batch_size:128
输入 [
  {
    名称:“ image_tensor”
    数据类型:TYPE_UINT8
    格式:FORMAT_NHWC
    昏暗:[300,300,3]
  }
]
输出 [
  {
    名称:“ detection_boxes”
    数据类型:TYPE_FP32
    昏暗:[100,4]
    重塑{形状:[100,4]}
  },
  {
    名称:“ detection_classes”
    数据类型:TYPE_FP32
    昏暗:[100]
  },
  {
    名称:“ detection_scores”
    数据类型:TYPE_FP32
    昏暗:[100]
  },
  {
    名称:“ num_detections”
    数据类型:TYPE_FP32
    昏暗:[1]
    重塑{形状:[]}
  }
]

接下来,使用ssd_inception_v2模型运行deepstream-app 。Triton Server的示例配置文件位于中/configs/deepstream-app-trtis。通常需要运行两个或更多配置文件deepstream-app。一个是顶级配置文件,为整个管道设置参数,其他是用于推理的配置文件。

为了提高可用性和简化性,每个推理引擎都需要一个唯一的配置文件。如果级联多个推理,则需要多个配置文件。对于此示例,使用以下文件:

  • source1_primary_detector.txt
  • config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt
[primary-gie]
启用= 1
(0):nvinfer; (1):nvinferserver
插件类型= 1
推断原始输出dir = trtis输出
批量大小= 1
间隔= 0
gie-unique-id = 1
config-file = config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt

source1_primary_detector.txt文件是顶级配置文件。如果使用本机TensorRT或Triton Server进行推理,这很常见。在这个配置文件,更改插件式下[primary-gie],以1使用推理服务器。

config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt文件用于指定推理选项,例如预处理,后处理和模型存储库。有关不同选项的更多信息,请参见《NVIDIA DeepStream SDK快速入门指南》和《NVIDIA DeepStream插件手册》

为了将张量数据后处理到边界框中,本示例使用一个名为的自定义边界框解析器,该解析器NvDsInferParseCustomTfSSDcustom_parse_bbox_funcconfig文件中的键指定。此自定义函数custom_lib在以下配置文件的部分下指定的库中编译。的源代码在NvDsInferParseCustomTfSSD中提供$DEEPSTREAM_DIR/sources/libs/nvdsinfer_customparser/

infer_config {
  unique_id:5
  gpu_ids:[0]
  max_batch_size:4
  后端{
    trt_is {
      型号名称:“ ssd_inception_v2_coco_2018_01_28”
      版本:-1
      model_repo {
        根目录:“ ../../ trtis_model_repo”
        log_level:2
        tf_gpu_memory_fraction:0.6
        tf_disable_soft_placement:0
      }
    }
  }
 
  预处理{
    网络格式:IMAGE_FORMAT_RGB
    张量顺序:TENSOR_ORDER_NONE
    maintain_aspect_ratio:0
    规范化{
      scale_factor:1.0
      channel_offsets:[0,0,0]
    }
  }
 
  后期过程 {
    labelfile_path:“ ../../ trtis_model_repo / ssd_inception_v2_coco_2018_01_28 / labels.txt”
    检测{
      num_detected_classes:91
      custom_parse_bbox_func:“ NvDsInferParseCustomTfSSD”
      nms {
        置信度阈值:0.3
        iou_threshold:0.4
        最高纪录:20
      }
    }
  }
 
  额外的 {
    copy_input_to_host_buffers:否
  }
 
  custom_lib {
    路径:“ / opt / nvidia / deepstream / deepstream-5.0 / lib / libnvds_infercustomparser.so”
  }
}
input_control {
  进程模式:PROCESS_MODE_FULL_FRAME
  间隔:0
}

现在,使用以下命令运行该应用程序:

deepstream-app -c source1_primary_detector.txt

应打开一个带有示例视频的弹出窗口,其中显示了行人,汽车和自行车周围的边界框。

应用程序需要花费几分钟来构建TensorFlow图。如果应用程序无法运行并返回“已杀死”,则很可能是系统内存不足。检查系统内存使用情况以确认问题。如果是内存问题,则根据tf_gpu_memory_fraction模型修改infer_configin中的参数config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt,或其他nvinferserver适用的配置文件。此参数为TF模型分配每个进程的GPU内存份额。将其更改为0.4可能会有所帮助。有关如何使用此参数的更多信息,请参阅DS插件手册– Gst-inferserver

该模型最多可以检测91个类别,包括各种动物,食物和运动器材。有关可以检测到的类的更多信息,请参见trtis-model-repo/ssd_inception_v2_coco_2018_01_28/labels.txt文件。

尝试将这个应用程序与其他视频一起运行,看看该模型是否可以检测到其他类。使用海卫服务器与的自定义DeepStream管道,检查出的源代码deepstream-app$DEEPSTREAM_DIR/sources/apps/sample-apps/deepstream-app

Python绑定

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

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第4张

 3. Python绑定堆栈。

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

利用张量数据的可用性,可以在Python应用程序内部创建解析算法。这很重要,因为张量数据的大小和尺寸以及解析数据所需的解析和聚类算法取决于AI模型的类型。如果希望能够将新的模型或新的后处理技术引入DeepStream,则将发现非常有用。

另一个有用的数据源是图像数据。这可用于捕获AI模型拾取对象的异常,并且想要保存图像以供将来参考。现在通过该应用程序支持访问此框架。

DeepStream元数据的Python绑定与示例应用程序一起可用,以演示其用法。可以从GitHub存储库NVIDIA-AI-IOT / deepstream_python_apps下载Python示例应用程序。Python绑定模块现已作为DeepStream SDK软件包的一部分提供。

远程管理和控制应用程序

从边缘向云发送元数据很有用,但能够从云接收和控制消息到边缘也很重要。

DeepStream 5.0现在支持双向通信,以发送和接收云到设备的消息。这对于各种用例来说尤其重要,例如触发应用程序记录重要事件,更改操作参数和应用程序配置,空中(OTA)更新或请求系统日志和其他重要信息。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第5张

 4.双向消息传递体系结构。

DeepStream应用程序可以订阅Apache Kafka主题,以从云中接收消息。设备到云的消息传递当前是通过Gstnvmsgbroker(MSGBROKER)插件进行的。默认情况下,Gstnvmsgbroker插件使用适当的协议调用较低级的适配器库。可以在Kafka,AMQP,MQTT或Azure IoT之间进行选择,甚至可以创建自定义适配器。DeepStream 5.0引入了新的低级msgbroker库,以提供统一的接口,用于跨各种协议的双向消息传递。Gstnvmsgbroker插件可以选择与此新库进行接口连接,而不必直接调用协议适配器库,这是使用配置选项控制的。

对于云到边缘消息传递,DeepStream 5.0中受支持的协议是Kafka,使用新的低级msgbroker库,可直接与DeepStream应用程序进行交互。

DeepStream 5.0支持其他几种IoT功能,这些功能可以与双向消息传递结合使用。DeepStream现在提供了一个API,可根据异常消息或可能发送给设备的消息进行智能记录。此外,在应用程序运行时,DeepStream还支持AI模型的OTA更新。

智能录像

通常需要进行基于事件的视频录制。代替连续记录内容,智能记录可以节省宝贵的磁盘空间并可以提供更快的可搜索性。

智能记录仅在满足特定规则或条件时记录事件。发出记录信号的触发器可以来自应用程序本地,来自边缘运行的某些服务或来自云。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第6张

 5.智能记录架构。

提供了丰富的API以构建智能录制事件管理器。这些操作可随时用于开始和停止记录。当必须记录事件时,在触发器之前开始保存剪辑很有用。通过智能记录API操作,可以将其配置为记录事件发生前的时间。这非常有用,因为在检测到并触发异常时,在异常发生与录制事件管理器开始录制之间存在一定的延迟。在记录开始提供整个事件序列之前,记录一段有限的时间。

为了演示此功能,在deepstream-test5应用程序中内置了一个智能录制事件管理器。智能记录模块保留视频缓存,以便记录的视频不仅在事件生成后具有帧,而且还可以在事件之前具有帧。可以根据使用情况配置视频缓存的大小。事件管理器启动智能记录模块的开始和停止选项。

可以通过从云接收到的JSON消息来触发记录。消息格式如下:

{
      命令:字符串// <开始记录/停止记录>
      开始:字符串//“ 2020-05-18T20:02:00.051Z”
      结束:字符串//“ 2020-05-18T20:02:02.851Z”,
      传感器: {
        id:字符串
      }
    }

deepstream-test5示例应用程序演示了如何从云中接收和处理此类消息。目前支持Kafka。要激活此功能,请在应用程序配置文件中填充并启用以下块:

配置该组以启用云消息使用者。
[message-consumer0]
启用= 1
proto-lib = / opt / nvidia / deepstream / deepstream-5.0 / lib / libnvds_kafka_proto.so
conn-str =;
config-file =
subscription-topic-list = ;;
如果消息的传感器名称为id而不是索引(0、1,2等),请使用此选项。
传感器列表文件= dstest5_msgconv_sample_config.txt

在应用程序运行时,使用Kafka代理在主题中发布上述JSON消息subscribe-topic-list以开始和停止记录。

有关如何在应用程序中使用此功能的更多信息,请参见《NVIDIA DeepStream插件手册》的“智能视频记录”部分。可以在以下目录中找到deepstream-test5的源代码:

$ DEEPSTREAM_DIR / sources / apps / sample_apps / deepstream-test5 /

智能记录事件管理器的实现可以在以下文件中找到:

$ DEEPSTREAM_DIR / sources / apps / apps-common / src / deepstream_source_bin.c

OTA模型更新

边缘IVA应用程序的理想要求之一是随着AI模型的增强以实现更高的准确性,实时修改或更新AI模型。使用DeepStream 5.0,现在可以在应用程序运行时更新模型。这意味着可以使用零停机时间来更新模型。这对于不能接受任何延迟的关键任务应用程序很重要。

当需要连续交换模型时,此功能也很有用。例如,可以根据一天中的时间交换模型。通常,一个模型在光线充足的白天可能效果很好,但是另一种模型在光线不足的情况下效果会更好。在这种情况下,需要根据一天中的时间轻松地交换模型,而无需重新启动应用程序。假设要更新的模型应具有相同的网络参数。

在示例应用程序中,模型更新由用户修改配置文件启动。DeepStream应用程序监视配置文件中所做的更改并进行验证。在确认更改之后,DeepStream OTA处理程序将交换到新模型,从而完成该过程。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第7张

 6. OTA模型更新工作流程。

在Deepstream-test5应用程序中使用提供的源代码演示了此功能。要运行OTA模型更新,请使用-o选项运行该应用程序。这是OTA覆盖文件。要交换模型时,请使用新的模型引擎文件更新此文件。

deepstream-test5 -c <DS配置> -o <OTA覆盖>

更新后的模型必须是TensorRT引擎文件,并且在更改OTA覆盖文件之前先离线完成。要创建TensorRT引擎文件,请运行trtexec

trtexec --model = --maxBatch = --saveEngine = --deploy = --buildOnly

生成模型后,更新OTA覆盖文件。当应用程序检测到此更改时,将自动启动模型更新过程。在实际环境中,将需要边缘上的守护程序或服务来更新边缘上的文件或从云中更新文件。

安全通讯

对于大规模成功部署IoT设备而言,最重要且被忽略的方面之一是安全性:能够在边缘设备与云之间安全地通信。对于公司而言,保护物联网设备以及在受信任位置之间收发敏感数据至关重要。

使用DeepStream 5.0,Kafka适配器支持使用基于TLS的加密的安全通信,从而确保数据的机密性。TLS(传输层安全性)是SSL的后继产品,但是这两个术语在文献中仍可互换使用。TLS / SSL通常用于在连接到Web上的服务器(例如HTTPS)时进行安全通信。TLS使用公共密钥密码术来建立会话密钥,DeepStream应用程序和代理均对称使用该会话密钥来加密在会话期间传输的数据,从而即使在公共网络上发送数据时也可以保持机密。

DeepStream 5.0支持两种形式的客户端身份验证:基于SSL证书的双向TLS身份验证和基于用户名/密码机制的SASL / Plain身份验证。客户端身份验证使代理能够验证连接到客户端的客户端,并根据其身份有选择地提供访问控制。虽然SASL / Plain使用熟悉的密码身份验证隐喻并且易于设置,但是双向TLS使用客户端证书进行身份验证,并提供了一些优点,这些优点使得可以实现可靠的安全机制。

有关实现安全连接的更多信息,请参见《NVIDIA DeepStream插件手册》

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第8张

 7.使用SSL证书的安全身份验证。

使用Mask R-CNN进行实例分割

为了感知导致可行见解的像素,计算机视觉依赖于深度学习来提供对环境的理解。对象检测是一种常用的技术,用于识别框架中的单个对象,例如人或汽车。尽管对象检测对于某些应用程序很有用,但是当想要了解像素级别的对象时,就不足。

实例分割可在识别对象时提供像素级的准确性。对于需要在对象及其背景之间划定界限的应用程序(例如在AI驱动的绿屏中),希望在其中模糊或更改框架的背景或在框架中分割道路或天空时,分段功能非常有用。也可以用于通过输出中的实例蒙版来提高跟踪器的准确性。

DeepStream使用新的自定义解析器进行后期处理,屏幕显示(OSD)中的遮罩叠加功能(用于渲染分段遮罩),新的遮罩元数据类型以及新的消息架构来标识管道中的多边形,从而在管道中实现实例分段。消息转换器。可以使用跟踪器中的掩码元数据来改进跟踪,在屏幕上呈现掩码或通过消息代理发送掩码元数据以进行脱机分析。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第9张

 8. Mask R-CNN DeepStream管道。

要开始使用Mask R-CNN,请从NVIDIA-AI-IOT / deepstream_tlt_apps#tlt-models GitHub存储库下载预训练的模型。该模型在NVIDIA内部汽车行车记录仪图像数据集上进行了训练,以识别汽车。有关更多信息,请参阅使用NVIDIA Transfer Learning Toolkit通过MaskRCNN进行实例分割的训练模型

DeepStream SDK包含两个示例应用程序,以演示如何使用预训练的Mask R-CNN模型。Mask R-CNN模型可以从调用deepstream-app。以下目录中提供了用于配置管道和模型的配置:

$ DEEPSTREAM_DIR / samples / configs / tlt_pretrained_models /

这是为Mask R-CNN模型运行的关键配置文件:

$ DEEPSTREAM_DIR / samples / configs / tlt_pretrained_models / deepstream_app_source1_mrcnn.txt 
 
$ DEEPSTREAM_DIR / samples / configs / tlt_pretrained_models / config_infer_primary_mrcnn.txt

/deepstream_app_source1_mrcnn.txt是主要的配置文件,deepstream-app并为整个视频分析管道配置参数。有关更多信息,请参见参考应用程序配置。这是必须根据模型修改的关键参数。在下[OSD],将display-mask选项更改为1,该选项将在对象上覆盖蒙版。

[osd]
启用= 1
gpu-id = 0
border-width = 3
文字大小= 15
text-color = 1; 1; 1; 1;
text-bg-color = 0.3; 0.3; 0.3; 1
font = Serif
display-mask = 1
display-bbox = 0
显示文字= 0

/config_infer_primary_mrcnn.txt文件是一个推理配置文件,用于设置Mask R-CNN推理的参数。本节deepstream_app_source1_mrcnn.txt下的主配置引用了此文件[primary-gie]。这是运行Mask R-CNN所需的关键参数:

[财产]
gpu-id = 0
净比例因子= 0.017507
偏移量= 123.675; 116.280; 103.53
模型颜色格式= 0
tlt-model-key =
tlt-encoded-model =
output-blob-names = generate_detections; mask_head / mask_fcn_logits / BiasAdd
parse-bbox-instance-mask-func-name = NvDsInferParseCustomMrcnnTLT
custom-lib-path = / opt / nvidia / deepstream / deepstream-5.0 / lib / libnvds_infercustomparser.so
network-type = 3 ## 3例如是细分网络
labelfile-path =
int8-calib-file =
推断尺寸=
num-detected-classes = <与默认值不同的类数>
uff-input-blob-name =输入
批量大小= 1
0 = FP32、1 = INT8、2 = FP16模式
网络模式= 2
间隔= 0
gie-unique-id = 1
没有集群
0 =组矩形,1 = DBSCAN,2 = NMS,3 = DBSCAN + NMS混合,4 =无(无聚类)
MRCNN仅支持cluster-mode = 4;聚类由模型本身完成
集群模式= 4
output-instance-mask = 1

parse-bbox-instance-mask-func-name选项设置自定义后处理功能以解析推断的输出。此功能内置到.so文件中custom-lib-path。以下目录中提供了该库的源代码:

$ DEEPSTREAM_DIR / sources / libs / nvdsinfer_customparser / nvdsinfer_custombboxparser.cpp。

要运行该应用程序,请运行以下命令:

deepstream-app -c deepstream_app_source1_mrcnn.txt

在SDK中提供的剪辑上运行。要尝试使用自己的来源,请[source0]在中进行修改/deepstream_app_source1_mrcnn.txt。图9显示了deepstream-app在各种平台上可以预期的端到端性能。性能以每秒处理的帧数(FPS)衡量deepstream-app

  • 在Jetson Nano和DLA上,此批处理大小为1。
  • 在Jetson AGX Xavier和Xavier NX上,此批处理大小为2。
  • 在T4上,此批量运行为4。

 NVIDIA DeepStream 5.0构建智能视频分析应用程序第10张

 9.性能牛逼他面膜R-CNN模型。

尽管最好直观地看到输出,但实际的用例可能是将元数据发送到其他进程或云。此信息可由边缘或云上的其他应用程序使用,以进行进一步分析。

使用DeepStream,可以使用定义的遮罩多边形模式,使用受支持的消息代理协议之一(例如Kafka或MQTT)发送遮罩元数据。DeepStream附带了MaskRCNN模型的“从云端到云端”的示例。有关如何使用消息代理准备事件元数据和发送掩码信息的更多信息,请参见以下应用程序:

$ DEEPSTREAM_DIR / sources / apps / sample_apps / deepstream-mrcnn-app

建立部署

DeepStream 5.0提供了许多出色的功能,可以轻松地开始开发用于边缘部署的AI应用程序。可以使用Python API操作和Triton Server来快速原型化并创建IVA管道,而无需花费太多精力。

可以使用Triton Server在培训框架中本地部署AI模型,以增加灵活性。可以使用大量强大的物联网功能来创建可管理的IVA应用程序。可以使用双向TLS身份验证将消息从边缘安全地发送到云。边缘和云之间的双向通信提供了更好的应用程序可管理性。这可用于更新边缘的AI模型,记录感兴趣的事件,或用于从设备检索信息。

 

免责声明:文章转载自《NVIDIA DeepStream 5.0构建智能视频分析应用程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇比较Power BI和Tableau,好比用奔驰对比奥迪安卓 service下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java虚拟机14:Java对象大小、对象内存布局及锁状态变化

一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法。不过还好,在JDK1.5之后引入了Instrumentation类,这个类提供了计算对象内存占用量的方法。至于具体Instrumentation类怎么用就不说了,可以参看这篇文章如何精确地测量java对象的大小。 不过有一点不同的...

软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”

去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量。然而,随着集群规模的发展,单组 NameNode 组成的集群也到达了新的瓶颈:因为 NameNode 内存使用和元数据量正相关,在 180GB 堆内存配置下,元数据量...

基于功能树分析(FTA)功能级FIT硬件测试方法

共创力研发咨询/杨学明 1 基于功能树分析(FTA)的功能级FIT测试方法原理介绍 功能FIT分析方法的提出,是基于对FMEA分析方法的如下疑问: a) 利用FMEA分析做FIT测试时,智能控制整个芯片失效,或者控制芯片部分功能的随机失效,但是无法模拟器件单个功能或者是特定组合功能的失效。而对于产品系统而言,对于整体失效有检测和保护,不能等同于部分失效也有...

DataSnap基础

DataSnap基础 1. DATASNAP 历史 作为MIDAS起始于Delphi3,Delphi4是MIDAS II,Delphi5中是MIDASIII,而后基于COM远程数据模块方式使用TCP/IP,HTTP,(D)COM构建出强大的通讯能力.从Delphi6开始改名为DataSnap,直到D2007这个框架一直在使用.D2009重新架构了DataS...

元数据MetaData

1.3.2 元数据 元数据是描述数据的数据。在CLR的上下文中,元数据表示由描述符组成的一套体系,这些操作符包括了在一个模块中被声明或引用的所有项。由于CLR模型是面向对象的,因此在元数据中描述的项是类和它们的成员,以及它们伴随着的特性、属性和关联。本节简单地介绍元数据,与原数据安全相关的内容会在后续章节中继续讲解,元数据的详细内容不在本书的论述范围之内。...

[Python01]Django电商-立项需求分析和结构设计

目录 Django电商第一章:立项需求分析和数据库设计 电商的7种商业模式介绍 项目的工作流程与具体实现 立项 需求分析 原型设计与项目架构 数据库设计 代码实现 简单总结 Django电商第一章:立项需求分析和数据库设计 电商的7种商业模式介绍 电商即电子商务(Electronic Commerce),是是以信息网络技术为手段,以商品交换为...