masktracker是在8.0推出来的,9.0对精度做了优化(Accuracy improvements for Reference Apps - MV3DT, MaskTracker, Pose Estimation)。

        DeepStream 的 Gst-nvtracker 插件负责给检测目标分配稳定的跟踪 ID。传统 tracker 通常基于 bbox、运动模型或 Re-ID 特征来关联目标,而 MaskTracker 更进一步:它把 多目标跟踪 和 目标分割 结合起来,使用 SAM2 这类视觉基础模型,在视频帧之间持续跟踪目标并生成高质量 mask。

        本文基于 NVIDIA 官方 Gst-nvtracker 文档和 deepstream-masktracker 示例,介绍 MaskTracker 的作用、pipeline 配置、运行方式和适用场景。

MaskTracker 是什么

官方文档中对 MaskTracker 的定位是:

MaskTracker simultaneously performs multi-object tracking and segmentation using advanced vision foundation models such as Segment Anything Model 2 (SAM2).

也就是说,MaskTracker 不只是输出:

object_id + bbox

它还可以输出:

object_id + bbox + segmentation mask

它的核心价值是:目标不仅被跟踪,还能以 mask 形式更精确地表示轮廓。

这与普通 bbox tracker 的区别很明显:

普通 tracker:

检测框 → 跟踪 ID → bbox 输出

MaskTracker:

检测框 → SAM2 visual tracking / segmentation → 跟踪 ID + mask + bbox 输出。

它在 DeepStream 里的位置

Gst-nvtracker 是 DeepStream pipeline 中的 tracker 插件。它本身负责和 low-level tracker library 通信。实际跟踪算法由 low-level library 提供,例如:

  • IOU
  • NvSORT
  • NvDCF
  • NvDeepSORT
  • MaskTracker

MaskTracker 通过同一个 tracker 插件接入:

source

→ streammux

→ primary-gie detector

→ nvtracker with MaskTracker config

→ nvdsosd

→ sink

在 deepstream-masktracker 示例中,检测模型使用 PeopleNet,tracker 使用 MaskTracker 配置:

[primary-gie]
config-file=config_infer_primary.txt

[tracker]
ll-lib-file=/opt/nvidia/deepstream/deepstream/lib/libnvds_nvmultiobjecttracker.so
ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_MaskTracker.yml

OSD 里打开了 mask 显示:

[osd]
display-mask=1

所以最终画面中可以看到:

  • segmentation mask
  • bounding box
  • tracking ID

为什么需要检测器

MaskTracker 不是完全脱离检测器工作的。示例中仍然先用 PeopleNet 做目标检测:

PGIE / PeopleNet → 检测 person

MaskTracker → 跟踪并分割这些目标

检测器负责告诉 tracker “当前帧有哪些候选目标”。MaskTracker 再结合 SAM2 的视觉跟踪能力,在帧间维护目标状态、更新 mask,并自动添加或移除 target。

示例里的 config_infer_primary.txt 使用 PeopleNet ONNX:

onnx-file=../models/PeopleNet/resnet34_peoplenet.onnx

num-detected-classes=3

filter-out-class-ids=1;2

这里过滤掉 class 1 和 2,意味着示例主要关注 person 类目标。

SAM2 在这里做什么

根据示例 README,MaskTracker 使用 SAM2 来 visually track and segment targets across frames。可以简单理解为:

检测器提供初始目标

SAM2 在后续帧中帮助定位和分割目标

MaskTracker 管理目标 ID、目标生命周期和 mask 输出

它还会维护 memory bank,用前面帧的视觉特征帮助在新帧中定位目标。这也是它相比仅依赖 bbox 的 tracker 更适合复杂场景的原因。

输出结果

MaskTracker 的输出有两类。

第一类是可视化输出。示例中 DeepStream 会显示叠加结果,并保存 out.mp4

mask + bbox + tracking ID

第二类是元数据输出。示例会在 track_results 目录下生成 KITTI 风格文本文件,每帧一个文件,里面包含:

label

tracking ID

bbox left/top/right/bottom

confidence

README 中也说明:visibility 和 foot position 对 MaskTracker 不适用,这些更多属于 3D tracking / SV3DT 场景。

如何运行示例

示例的基本步骤是:

  1. 使用 DeepStream 9.0 container。
  2. 下载 deepstream_tools,其中包含 sam2-onnx-tensorrt
  3. 下载 PeopleNet 模型。
  4. 在容器内转换 SAM2 模型。
  5. 运行 deepstream-app

README 中的核心运行流程是:

export TRACKER_MODEL_DIR="/opt/nvidia/deepstream/deepstream/samples/models/Tracker"
mkdir -p $TRACKER_MODEL_DIR

cd /opt/nvidia/deepstream/deepstream/sources/tracker_ReID/sam2-onnx-tensorrt
bash run.sh

cd /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-masktracker/configs
mkdir -p track_results
deepstream-app -c deepstream_app_source1.txt

如果要换视频,修改:

[source0]

uri=file://../streams/bodypose.mp4

例如换成 retail 视频:

uri=file://../streams/Retail02_short.mp4

如下图,是masktracker的运行结果。

适用场景

MaskTracker 适合这些场景:

  • 需要精准目标轮廓,而不是只需要 bbox
  • 多目标之间有遮挡
  • 目标运动复杂
  • 目标类别多样
  • 后续处理需要 mask,例如隐私保护、目标区域分析、分割质量评估

典型应用包括:

人员跟踪

零售场景分析

工业安全监控

复杂遮挡场景下的目标跟踪

需要目标 mask 的视频分析

性能与资源开销

        官方文档的 tracker 对比中,MaskTracker 的优势和代价都很明确。

优势:

  • 使用 SAM2,分割质量高
  • 对遮挡和复杂运动更鲁棒
  • 适合多类别目标
  • 同时输出 tracking 和 segmentation 信息

代价:

  • 计算开销最高
  • 需要更多 GPU memory
  • Jetson 上可能受资源限制,不一定适合跑完整 SAM2 网络

        所以 MaskTracker 不是替代所有 tracker 的默认选择。如果只需要轻量跟踪,可以选 IOU 或 NvSORT;如果需要较强 bbox tracking,可以选 NvDCF;如果需要高质量 mask 和复杂场景鲁棒性,MaskTracker 才更合适。

总结

        MaskTracker 是 DeepStream tracker 家族中面向高质量分割跟踪的方案。它把检测器、SAM2、tracker metadata 和 nvdsosd 可视化串起来,让 DeepStream pipeline 可以输出:

稳定 ID + bbox + segmentation mask

一句话总结:

        MaskTracker 适合“既要跟踪 ID,又要目标轮廓”的视频分析任务。        它的价值不是最低延迟或最低资源占用,而是在复杂场景中提供更精细、更鲁棒的目标级视频理解能力。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐