DeepStream9.0 masktracker
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 提供例如IOUNvSORTNvDCFNvDeepSORTMaskTrackerMaskTracker 通过同一个 tracker 插件接入source→ streammux→ primary-gie detector→ nvtracker with MaskTracker config→ nvdsosd→ sink在deepstream-masktracker示例中检测模型使用 PeopleNettracker 使用 MaskTracker 配置[primary-gie] config-fileconfig_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.ymlOSD 里打开了 mask 显示[osd] display-mask1所以最终画面中可以看到segmentation maskbounding boxtracking ID为什么需要检测器MaskTracker 不是完全脱离检测器工作的。示例中仍然先用 PeopleNet 做目标检测PGIE / PeopleNet → 检测 personMaskTracker → 跟踪并分割这些目标检测器负责告诉 tracker “当前帧有哪些候选目标”。MaskTracker 再结合 SAM2 的视觉跟踪能力在帧间维护目标状态、更新 mask并自动添加或移除 target。示例里的config_infer_primary.txt使用 PeopleNet ONNXonnx-file../models/PeopleNet/resnet34_peoplenet.onnxnum-detected-classes3filter-out-class-ids1;2这里过滤掉 class 1 和 2意味着示例主要关注person类目标。SAM2 在这里做什么根据示例 READMEMaskTracker 使用 SAM2 来 visually track and segment targets across frames。可以简单理解为检测器提供初始目标SAM2 在后续帧中帮助定位和分割目标MaskTracker 管理目标 ID、目标生命周期和 mask 输出它还会维护 memory bank用前面帧的视觉特征帮助在新帧中定位目标。这也是它相比仅依赖 bbox 的 tracker 更适合复杂场景的原因。输出结果MaskTracker 的输出有两类。第一类是可视化输出。示例中 DeepStream 会显示叠加结果并保存out.mp4mask bbox tracking ID第二类是元数据输出。示例会在track_results目录下生成 KITTI 风格文本文件每帧一个文件里面包含labeltracking IDbbox left/top/right/bottomconfidenceREADME 中也说明visibility 和 foot position 对 MaskTracker 不适用这些更多属于 3D tracking / SV3DT 场景。如何运行示例示例的基本步骤是使用 DeepStream 9.0 container。下载deepstream_tools其中包含sam2-onnx-tensorrt。下载 PeopleNet 模型。在容器内转换 SAM2 模型。运行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]urifile://../streams/bodypose.mp4例如换成 retail 视频urifile://../streams/Retail02_short.mp4如下图是masktracker的运行结果。适用场景MaskTracker 适合这些场景需要精准目标轮廓而不是只需要 bbox多目标之间有遮挡目标运动复杂目标类别多样后续处理需要 mask例如隐私保护、目标区域分析、分割质量评估典型应用包括人员跟踪零售场景分析工业安全监控复杂遮挡场景下的目标跟踪需要目标 mask 的视频分析性能与资源开销官方文档的 tracker 对比中MaskTracker 的优势和代价都很明确。优势使用 SAM2分割质量高对遮挡和复杂运动更鲁棒适合多类别目标同时输出 tracking 和 segmentation 信息代价计算开销最高需要更多 GPU memoryJetson 上可能受资源限制不一定适合跑完整 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又要目标轮廓”的视频分析任务。 它的价值不是最低延迟或最低资源占用而是在复杂场景中提供更精细、更鲁棒的目标级视频理解能力。