当前位置: 首页 > news >正文

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 提供,例如:

  • 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,又要目标轮廓”的视频分析任务。 它的价值不是最低延迟或最低资源占用,而是在复杂场景中提供更精细、更鲁棒的目标级视频理解能力。

http://www.jsqmd.com/news/856257/

相关文章:

  • 告别零散脚本:用Playwright+Pytest+Yaml+Allure搭建一个真正可维护的UI自动化项目
  • 昇腾CANN ascend-boost-comm:M×N 算子复用是怎么做到的
  • BlueStacks 5 instance differences
  • 别再手动解析事件头了!用FastAPI + CloudEvents库5分钟搞定标准化事件接口
  • 用1Panel和Docker给幻兽帕鲁搭个私服,保姆级避坑指南(支持1.4.1/1.5.0)
  • 挖漏洞一个月5000正常吗?挖漏洞入门到精通,收藏这一篇就够
  • 告别Keil!在CLion里优雅地玩转STM32的FFT(附DSP库配置全流程)
  • 用STM32F103和LORA模块,从零搭建一个轮询式本地传感网(附避坑点)
  • 2026年泡沫雕塑优点全面解析:定义、分类及应用领域百科
  • 科研绘图二选一?Origin vs MATLAB 绘制三维荧光光谱与FRI的深度体验对比
  • 深度解析ComfyUI-Impact-Pack V8:专业级AI图像增强与工作流优化完整指南
  • 本地大模型常见异常全解:显存溢出、推理慢、驱动报错、环境冲突调试指南.181
  • CREO新手避坑指南:从拉伸到抽壳,这10个建模细节90%的人都踩过
  • IDEA通义灵码实战:用它生成的JUnit单元测试,真的能直接提交吗?
  • 一文读懂「多进程」与「多线程」通信机制(超详细对比总结)
  • 2026年4月过滤器市场风向标:这些浅层砂厂家受青睐,旁流水处理器/精密过滤器/浅层砂过滤器,过滤器公司推荐 - 品牌推荐师
  • 2026盘古石初赛介质取证部分WriteUp
  • DAC代码干扰分析与硬件设计解决方案
  • 告别‘偏科’模型:用CAST双流架构搞定视频动作识别,兼顾时空理解
  • 从Quill光标到用户头像:手把手教你为Yjs协同编辑器添加完整的在线用户列表(附状态同步技巧)
  • 高并发场景下 Redis 消息队列吞吐量低怎么优化?
  • 科研避坑指南:String+Cytoscape做PPI分析时,CytoNCA计算Betweenness后千万别忘了这步!
  • ROS仿真第一步:搞定Solidworks到URDF的转换(含履带机器人特殊问题探讨)
  • 别再傻傻分不清了!Linux下共享内存(shm)和内存映射(mmap)到底有啥区别?
  • Python 算法基础篇之排序算法(一):冒泡、选择、插入
  • 告别手动核对!用这个ABAP报表一键导出所有物料的库存与需求清单
  • 从Simulink模型到S32K3xx芯片:手把手教你玩转NXP官方MBD工具包(v1.4实战)
  • 告别乱码!手把手教你用FontCvt为STM32的emWin项目定制精简中文字库
  • 别再只会真彩色了!用ENVI玩转波段组合:揭秘植被红、水体蓝背后的遥感密码
  • 实战指南:如何将SPIN的超像素思想,迁移到你的图像修复项目里(附思路)