NVOFA Tracker
给定一组连续帧中的对象,对象跟踪的挑战在于设计一种算法,该算法可以准确地跟踪从帧到帧的每个已识别对象。典型的对象跟踪算法通过为每个检测到的对象分配唯一的 ID,并在对象在帧内时返回每个对象在后续帧中的位置来实现此跟踪。虽然有多种技术可以实现此跟踪,但本文档介绍了一种基于 NVIDIA® Optical Flow 硬件加速器的高效且高度准确的对象跟踪算法。
什么是对象跟踪?
经典对象跟踪解决方案
图 1 表示典型的智能视频分析场景中的经典对象跟踪解决方案。现场摄像头生成多个流,这些流被馈送到视频解码器(在本例中为 NVDEC),并且解码后的帧通过对象检测器和特征提取器/处理器。跟踪器结合对象边界和对象特征的知识,跨帧跟踪感兴趣的对象。
图 1. 经典对象跟踪解决方案

基于光流的对象跟踪解决方案
NVIDIA Turing™ 及更高版本的 GPU 具有专用的硬件加速器来计算帧之间的光流。图 2 表示我们提出的解决方案,其中特征跟踪器/提取器部分被替换为基于 GPU 的光流引擎返回的光流矢量的算法。在经典技术中,特征提取器/处理器在 CPU 上运行,或者在某些情况下在 GPU 上运行(例如,通过使用 CUDA)。在此解决方案中,此步骤在光流引擎上完成,这使 CPU/GPU 从主要的计算密集型操作中解放出来,并使 CPU/GPU 可以自由地执行其他任务。
图 2. 基于光流的对象跟踪解决方案

Optical Flow SDK 中的对象跟踪器
NVIDIA Optical Flow SDK 包含一个端到端的对象跟踪应用程序和一个可以轻松集成到您的自定义应用程序中的库。为了便于集成,NvOFTracker.h
文件中提供了 API。应用程序和库的源代码也包含在 SDK 中。
该应用程序使用 GPU 的 NVDEC 解码输入视频码流,一个基于 yolov3 的对象检测器(在 GPU 上运行)检测感兴趣的对象,一个光流硬件加速器计算连续帧之间的光流,以及各种算法的组合来跟踪连续视频帧中的对象。
- 将传入的码流解码为帧。
- 将解码后的帧馈送到对象检测器。我们在应用程序中使用基于 yolov3 的对象检测器,但此对象可以替换为您选择的任何对象检测器。
- 此步骤检测感兴趣区域 (ROI) 及其各自的类别。
- 对象检测器每 Kth 帧运行一次,其中 0 ≤ K ≤ 4。
- 将解码后的帧馈送到光流引擎。
- 此步骤提供帧之间的流矢量,例如,帧 (P-1) 和帧 P。
- 跟踪器完成以下任务:
- 维护 ROI 存储。此存储不断使用检测器 ROI 进行更新。
- 计算每个 ROI 的代表性流。
- 使用代表性流扭曲 ROI 存储中存在的 ROI。
- 基于以下算法,在当前帧 ROI 中找到扭曲 ROI 的最佳匹配:
- 计算当前帧 ROI 和扭曲 ROI 之间的质心距离。
- 计算当前帧 ROI 和扭曲 ROI 的交并比 (IOU)。
- 使用上述加权平均值作为匈牙利算法的成本,以找到帧之间的 ROI 匹配。
- 将 ROI 添加到输出列表。
- 如果没有匹配项,则跟踪器会扭曲 ROI 存储中的 ROI,并使用现有 ID 将其添加到输出列表。
- 当前帧中未找到匹配项的 ROI 将被赋予新 ID 并添加到输出列表
- 随后更新 ROI 存储,以适应当前帧 ROI
- 对比特流中的帧重复步骤 1-4。
图 3. 使用 NVOFTRACKER 的示例跟踪管道的高级概述

导出 ROI 代表性流
如第 4 页第 4b 步中所述,NvOFTracker 计算 ROI 存储中每个 ROI 的代表性流。NVIDIA Optical Flow 引擎生成的流需要转换为每个 ROI 的稀疏单流矢量。NvOFTracker 根据某些阈值将流矢量域中的 ROI 分割为相似流的区域,并将主导区域的中值用作 ROI 代表性流。有关更多信息,请参阅 CConnectedRegionGenerator
类中的 CConnectedRegionGenerator.h
文件。
本文档仅供参考,不得视为对产品的特定功能、条件或质量的保证。NVIDIA Corporation(“NVIDIA”)不对本文档中包含的信息的准确性或完整性做出任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。NVIDIA 对使用此类信息或因使用此类信息而可能导致的侵犯专利或第三方的其他权利的后果不承担任何责任。本文档不构成开发、发布或交付任何材料(以下定义)、代码或功能的承诺。
NVIDIA 保留随时修改、修正、增强、改进和任何其他更改本文档的权利,恕不另行通知。
客户在下订单前应获取最新的相关信息,并应验证此类信息是否为最新且完整。
NVIDIA 产品的销售受订单确认时提供的 NVIDIA 标准销售条款和条件的约束,除非 NVIDIA 和客户的授权代表签署的单独销售协议(“销售条款”)另有约定。NVIDIA 特此明确反对将任何客户通用条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档不直接或间接地形成任何合同义务。
NVIDIA 产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于 NVIDIA 产品的故障或故障可能合理预期会导致人身伤害、死亡或财产或环境损害的应用。NVIDIA 对在上述设备或应用中包含和/或使用 NVIDIA 产品不承担任何责任,因此,此类包含和/或使用由客户自行承担风险。
NVIDIA 不对基于本文档的产品适用于任何特定用途做出任何陈述或保证。NVIDIA 不一定会对每个产品的所有参数进行测试。客户全权负责评估和确定本文档中包含的任何信息的适用性,确保产品适合且适用于客户计划的应用,并为该应用执行必要的测试,以避免应用或产品的默认设置。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同条件和/或要求。对于可能基于或归因于以下原因的任何默认设置、损坏、成本或问题,NVIDIA 不承担任何责任:(i) 以任何违反本文档的方式使用 NVIDIA 产品或 (ii) 客户产品设计。
本文档未授予任何 NVIDIA 专利权、版权或其他 NVIDIA 知识产权的明示或暗示的许可。NVIDIA 发布的有关第三方产品或服务的信息不构成 NVIDIA 授予使用此类产品或服务的许可,也不构成对其的保证或认可。使用此类信息可能需要获得第三方专利或第三方其他知识产权的许可,或获得 NVIDIA 专利或 NVIDIA 其他知识产权的许可。
只有在事先获得 NVIDIA 书面批准的情况下,才允许复制本文档中的信息,复制时不得进行更改,并应完全遵守所有适用的出口法律和法规,并附带所有相关的条件、限制和注意事项。
本文档和所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”,单独称为“材料”)均按“原样”提供。NVIDIA 不对材料做出任何明示、暗示、法定或其他方面的保证,并明确否认所有关于不侵权、适销性和特定用途适用性的暗示保证。在法律未禁止的范围内,在任何情况下,NVIDIA 均不对因使用本文档而引起的任何损害(包括但不限于任何直接、间接、特殊、偶然、惩罚性或后果性损害,无论如何引起,也无论责任理论如何)承担责任,即使 NVIDIA 已被告知可能发生此类损害。尽管客户可能因任何原因遭受任何损害,但 NVIDIA 对本文所述产品的面向客户的累积总责任应根据产品的销售条款进行限制。
VESA DisplayPort
DisplayPort 和 DisplayPort Compliance Logo、DisplayPort Compliance Logo for Dual-mode Sources 以及 DisplayPort Compliance Logo for Active Cables 是视频电子标准协会在美国和其他国家/地区拥有的商标。
HDMI
HDMI、HDMI 徽标和 High-Definition Multimedia Interface 是 HDMI Licensing LLC 的商标或注册商标。
OpenCL
OpenCL 是 Apple Inc. 的商标,已获得 Khronos Group Inc. 的许可使用。
商标
NVIDIA、NVIDIA 徽标和 cuBLAS、CUDA、CUDA Toolkit、cuDNN、DALI、DIGITS、DGX、DGX-1、DGX-2、DGX Station、DLProf、GPU、Jetson、Kepler、Maxwell、NCCL、Nsight Compute、Nsight Systems、NVCaffe、NVIDIA Deep Learning SDK、NVIDIA Developer Program、NVIDIA GPU Cloud、NVLink、NVSHMEM、PerfWorks、Pascal、SDK Manager、Tegra、TensorRT、TensorRT 推理服务器、Tesla、TF-TRT、Triton 推理服务器、Turing 和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。