NVIDIA英伟达嵌入式系统 · 8月20日 · 北京

借助多摄像头追踪工作流优化大型空间内的流程

Weixin Screenshot_20240820110449.png

为提高安全性并优化运营,仓库、工厂、体育场、机场等大型区域通常会有数百个摄像头进行监控。多摄像头追踪指的是通过这些摄像头追踪对象,并精确测量其活动,以此实现对空间的有效监控和管理。

例如,零售店可以使用多摄像头追踪了解顾客如何在过道中穿行,通过改进店铺布局,为顾客提供更好的购物体验;仓库可以通过监控设备、材料和人员的流动,来提高安全性、加快交付速度和降低成本;机场可以通过追踪人流来加强安保和提升旅行体验。

但落实多摄像头追踪系统可能具有一定的挑战性。

第一,要匹配多个摄像头从不同角度和视野所拍摄的对象,需要有经过数月精准训练的先进算法和 AI 模型,尤其是基准真相训练数据集非常稀缺。数据集的标记工作需要由一个人或一小群人对来自众多摄像头的所有数据流进行审查,以保证识别与追踪的一致性,这就延迟了 AI 模型的训练。

第二,多摄像头实时追踪需要建立专门的实时数据流、多流融合、行为分析和异常检测模块,实现亚秒级的延迟和高吞吐量。

第三,要扩展到工厂、机场等更大的空间,就必须采用分布式计算和云原生架构来处理成千上万个摄像头和对象。

因此,我们发布了全新的多摄像头追踪参考工作流,推动新一代视觉 AI 的发展,使其能够测量并帮助管理大型空间的基础设施和运营。

NVIDIA 多摄像头追踪

NVIDIA 多摄像头追踪是一个可自定义的工作流。您可以放心地从这里开始,无需从头启动开发工作,这将节省您数月的开发时间。

该工作流还提供一条经过验证的生产路径,并且包含在真实和合成数据集上预训练的高级 AI 模型,您可以根据自己的用例对这些模型进行自定义。该流程也已包含实时视频流模块。

  • 基础层:通过融合多摄像头视频,为对象创建全局 ID 及其全局和局部坐标的生产就绪功能。
  • 分析层:唯一对象计数和本地轨迹。
  • 可视化和 UI:作为进一步开发基础的示例热图、直方图和路径。

借助该工作流的这些组件,您就可以对业务逻辑进行编码,并构建端到端视觉 AI 应用,实现对空间的优化与管理。

无需支付额外费用,只需基础设施和工具许可证即可。此外,您还能通过 NVIDIA AI Enterprise 获得专家支持以及多摄像头追踪工作流的最新产品更新。

开始使用多摄像头追踪工作流

如要开始使用,请参见多摄像头追踪快速入门指南,了解如何在本地开发或云中部署该参考工作流:

https://docs.nvidia.com/mms/t...

有关仿真和微调用例的更多信息,请参见从仿真到部署的全套方法:

https://docs.nvidia.com/mms/t...

在以下章节中,我们将引导您了解该工作流的应用架构,以及开发、配置和部署工作流的各个步骤。

端到端多摄像头追踪工作流

Weixin Screenshot_20240820110617.png
图 1. 从仿真到部署的多摄像头追踪工作流

多摄像头追踪参考工作流(图 1)从媒体管理微服务获取实时或录制的数据流,并在多摄像头视图中输出对象的行为和全局 ID。行为可定义为对象在任何给定时间的位置、方向、速度或轨迹。

对象元数据(如边界框、追踪 ID 和带有时间戳的行为数据等)存储在 Elasticsearch 索引中,行为数据也经过排序并存储在 Milvus 向量数据库中。工作流结束时会运行一项网络 UI 微服务,使您能够生成行为的可视化图,并点击任何对象查找其在任何时刻的位置(时间戳)。可通过网络 API 微服务从 ELK 或 Milvus 获取数据。

在视频 1 中,右侧窗格显示了叠加对象全局 ID 及其行为的建筑地图。左侧的摄像头视图显示对象的当前位置。在该窗口中,您可以使用对象的全局 ID 对其进行查询,查看其在特定时间段内的位置。例如,如果用全局 id-2 查询对象,就可以获得与该对象 ID 相关的元数据。

基础模块

该应用由多个 NVIDIA Metropolis 微服务构建而成:

  • 媒体管理
  • 感知
  • 多摄像头融合
  • 行为分析
  • 网络 API
  • 网络 UI
  • 数据流分发和路由(SDR)

它还包含第三方微服务:

  • 消息代理(Kafka)
  • Elasticsearch Logstash Kibana 堆栈(ELK)
  • 矢量数据库(Milvus)

使用了多个 NVIDIA Metropolis 工具:

  • 摄像机校准工具
  • Pipetuner 自动参数追踪工具

使用了以下感知模型:

  • 人物检测和重新识别嵌入

从仿真到部署的全套方法

我们将探讨开发这些高级 AI 功能的全套方法,从使用数字孪生进行仿真和合成数据生成开始,一直到部署到云端用于推理为止。

想要构建最为高效、准确的 AI 工作流,就必须使用先进的 NVIDIA 技术,比如使用以下工具创建 3D 数字孪生、生成合成数据和简化模型开发:

  • NVIDIA Omniverse:建立真实世界环境的 3D 数字副本、定位虚拟摄像头以捕获各种合成数据、生成基准真相注释,并在实际部署前验证应用。
  • NVIDIA Isaac Sim:使用 Omni.Replicator.Agent 仿真智能体,包括人和机器人,以简化从场景中生成合成数据。如需了解更多信息,请参见使用 NVIDIA Metropolis 微服务将多摄像头追踪工作流部署到公有云(视频):

https://www.nvidia.com/en-us/...

  • NVIDIA TAO 套件:同时使用真实数据与合成数据,简化训练并优化模型,通过量化和剪枝提高推理性能。

这些工具可共同加强 AI 模型的训练、验证和优化,保证其在真实世界应用中发挥高性能。

构建和部署多摄像头追踪工作流

针对多摄像头追踪应用,NVIDIA 提供了多种构建和部署应用程序的选项。

使用 docker-compose 进行快速部署

现在,任何人都可以开始使用多摄像头追踪应用。NVIDIA 提供了一些在默认设置下就可以使用的示例视频流,这些视频流可以在 nvstreamer 微服务中进行配置。

然后,您可以配置这些 RTSP 流,或将真实摄像头 RTSP 端点添加到 VST 中。除了这些流之外,NVIDIA 还提供了使用 deepstream-app 生成的感知元数据样本,供任何人检查多摄像头数据流。您可以按以下方式部署整个端到端工作流:

$ docker compose -f foundational/mdx-foundational.yml -f mtmc-app/mdx-mtmc-app.yml --profile e2e up -d --pull always --build --force-recreate

这里的 mdx-foundational.yaml 文件是一个 docker-compose 文件,包含 Elasticsearch、Kafka 等基本服务。mdx-mtmc-app.yaml 文件包含感知、媒体管理、行为分析等微服务。

如要试用带有现成感知数据的多摄像头应用,请运行带有播放配置文件参数的 docker compose 命令:

$ docker compose -f foundational/mdx-foundational.yml -f mtmc-app/mdx-mtmc-app.yml --profile playback up -d --pull always --build --force-recreate

使用 Helm 图表在 Kubernetes 的生产环境中进行部署

如要在 Kubernetes 中部署多摄像头追踪应用,首先要创建一个 Kubernetes 服务器。详细信息参见软硬件前提条件。这些应用资源位于 NGC 中:

https://docs.nvidia.com/mms/t...

下文假定您已设置了 Kubernetes 服务器并拥有 NGC 团队访问权限:

https://docs.nvidia.com/mms/t...

下载部署包:

ngc registry resource download-version "nfgnkvuikvjm/mdx-v2-0/metropolis-apps-k8s-deployment:<version>-<mmddyyyy>"

该部署包具有存储、监控服务等基础服务和应用 helm 配置的 Helm values.yaml 文件。

Values 文件是应用的配置文件,您可以在其中定义特定服务的映像、服务副本数量、服务类型、端口、入口、卷、存储等。

该应用 helm 配置为每项微服务提供一个 Values 文件,如感知(wdm-deepstream-mtmc-values.yaml)和多摄像头融合(mtmc-app-override-values.yaml)等。

更多信息,请参见 Values 文件:

https://helm.sh/docs/chart_te...

部署基础服务

helm install mdx-foundation-sys-svcs --wait https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0/charts/mdx-foundation-sys-svcs-v1.3.tgz --username='$oauthtoken' --password=YOUR_API_KEY -f application-helm-configs/foundational-sys/foundational-sys-monitoring-override-values.yaml

这里的 foundational-sys-monitoring-override-values.yaml 文件被 override values.yaml 文件取代,您可以在其中定义任何经过更新的应用设置,例如为 Grafana UI 添加密码等。

部署微服务

除感知微服务外,每个微服务 pod 都可以共享 GPU。GPU 共享通过 NVIDIA_VISIBLE_DEVICES 启用。每个微服务都有一个用于自定义各项配置的 override value.yaml 文件。我们将在后面讨论自定义问题。

与基础服务类似,您可以单独部署每项微服务。例如,如要部署多摄像头融合微服务运行,请使用以下代码:

helm install mdx-mtmc-app https://helm.ngc.nvidia.com/nfgnkvuikvjm/mdx-v2-0/charts/mdx-mtmc-app-1.0.37.tgz --username='$oauthtoken' --password=<NGC API KEY> -f application-helm-configs/MTMC/mtmc-app-override-values.yaml

关于如何部署其他微服务的更多信息,请参见用户指南:

https://docs.nvidia.com/mms/t...

访问多摄像头追踪 UI

在完成部署后,您可以访问多摄像头追踪用户界面:

http://:31080/ui/mtmc/

为了在多摄像头视图中有效追踪对象、最大程度地减少遮挡和提高空间理解能力,NVIDIA 在多摄像头融合和行为分析微服务中采用了摄像头校准技术,其中包括提供示例视频流以及 calibration.json 文件和建筑地图图像。calibration.json 文件包含图像坐标和全局坐标,这些坐标用于将每个摄像头的视图与通用的自上而下的地图视图对齐。

使用一键式部署脚本在云端部署

为了将 Metropolis 应用部署到云端,NVIDIA 向 Microsoft Azure、Google Cloud Platform、亚马逊云科技(AWS)等多家云服务提供商(CSP)提供了一键式脚本。更多信息,参见使用 NVIDIA Metropolis 微服务将多摄像头追踪工作流部署到公有云(视频):

https://www.nvidia.com/en-us/...

以及 NVIDIA Metropolis 用户指南中的云设置专题:

https://docs.nvidia.com/mms/t...

根据您的用例进行配置

如果您已经遵循了所有的构建和部署说明,那么现在您就可以在随版本一起打包的示例数据流上,运行多摄像头追踪工作流,并生成结果的可视化图。

为了根据您的用例扩展应用,NVIDIA 在每个微服务级别和工具中都提供了一些配置选项。可在 override-values.yaml 中添加配置级自定义。

helm install vst-app https://helm.ngc.nvidia.com/rxczgrvsg8nx/<microservice>/charts/<microservice>-<version>.tgz --username='$oauthtoken' --password=<NGC API KEY> -f application-helm-configs/MTMC/override-values.yaml

在媒体管理微服务中使用视频存储套件配置摄像头

您可以在这项微服务中设置您的视频流配置。在有实时摄像头的情况下,可以使用视频存储套件(VST)。VST 提供多种配置,您可以根据自己的需要进行设置:

vst_config.json:
  notifications:
    enable_notification: true
    use_message_broker: "kafka"
  security:
   use_https: false
   use_http_digest_authentication: false
vst_storage.json:
   total_video_storage_size_MB: 100000

现在,您可以使用这些 override-values.yaml 更新来部署微服务:

将经过微调的模型和自定义追踪器整合到感知微服务中

感知微服务提供多种配置选项,例如多摄像头追踪应用带有用于检测人物的默认模型。如果您有自定义模型且必须更新模型参数,可以更新模型配置文件:

https://docs.nvidia.com/mms/t...

感知微服务基于 NVIDIA DeepStream。NVIDIA DeepStream 提供了多种类型的追踪器,来追踪单个摄像头视图内的对象。您可以选择任何一种追踪器并更新配置。

典型的感知微服务管线包含一个检测器和一个多对象追踪器,每个检测器和追踪器的配置文件都列有大量参数。由于需要针对不同的应用来手动调整这些参数,会使达到最佳的准确性具有一定的挑战性,因此 NVIDIA 提供 pipe tuner 工具来帮助您获得最佳参数,并在特定用例中达到最佳的准确性。

使用摄像头校准套件创建校准文件

您必须为新添加的摄像头流创建 calibration.json 文件,才能使用多摄像头融合和行为分析 (Multi-Camera Fusion and Behaviour Analytics) 微服务。为了实现高效、可扩展的摄像头校准,NVIDIA 提供了基于 UI 的摄像头校准套件:

https://www.nvidia.com/en-us/...

监控和记录

NVIDIA 在多摄像头追踪应用中,将 Kibana 控制面板与基础服务整合到一起,以便您对应用进行监控和可视化。

打开 Kibana 控制面板:http:///5601

Weixin Screenshot_20240820110959.png
图 2. 使用 Kibana 面板通过时间戳监控多摄像头追踪对象

从左上方可以看到,在给定的输入流中总共检测到 34 个对象。但在 34 个对象中,只有 6 个唯一人物。图像底部是多摄像头追踪工作流直方图。

立刻开始使用该工作流

多摄像头追踪参考工作流现已全面推出开发者预览版。立刻开始使用快速入门指南,并按照分步说明下载工作流构件,然后就可以在您的专用系统环境或云环境中部署该工作流:

https://docs.nvidia.com/mms/t...

如要使用覆盖整个视觉 AI 生命周期(从仿真到微调和部署)的 NVIDIA 工具自定义和进一步构建该工作流,请参见 Metropolis 多摄像头仿真到部署快速入门指南:

https://docs.nvidia.com/mms/t...

尝试该工作流并通过开发者论坛或您的 NVIDIA 企业支持团队给出您的反馈意见:

https://forums.developer.nvid...

我们迫不及待地想看到您使用多摄像头追踪所构建出的流程,如何将物理空间的安全性与实用性提升到新的水平!

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息