BoxMOT多目标跟踪器如何选:11种算法对比与最小验证
【免费下载链接】boxmotBoxMOT: Pluggable Python and C++ SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes项目地址: https://gitcode.com/GitHub_Trending/bo/boxmot
做视频多目标跟踪时,检测器只负责"找到目标",跟踪器才负责"认出是谁"。BoxMOT 是一个开源的多目标跟踪工具箱,内置 11 种跟踪算法(覆盖从纯运动关联到深度重识别的方案),用同一套 Python API 和 CLI 接口调用,并附带 MOT17 等公开基准上的实测分数,方便你按场景选型而不是凭感觉猜。
跟踪里最常见的三个坑
选算法之前,先确认你的场景卡在哪一个问题上:
- 遮挡:人绕到柱子后面再出现,跟踪器要判断"是同一个目标回来了"。
- ID 切换:两个穿相似衣服的人,轨迹标签被互换,后续统计全错。
- 背景运动:镜头自身在移动,画面里所有目标都在"漂移",纯位置匹配会失效。
- 算力开销:用外观特征(重识别,即给每个目标算一个"身份指纹")更抗遮挡,但推理成本更高。
11种跟踪算法基准对照表(MOT17)
BoxMOT 的 README 里给出了同一检测器下各跟踪器的实测分数,节选如下(HOTA/MOTA/IDF1 均为 Python 后端结果):
| 算法 | HOTA | MOTA | IDF1 | 需要外观特征 | 支持旋转框(OBB) |
|---|---|---|---|---|---|
| occluboost | 71.10 | 78.50 | 85.28 | 可选 | 是 |
| botsort | 69.68 | 78.23 | 82.33 | 可选 | 是 |
| strongsort | 68.05 | 76.19 | 80.76 | 必须 | 是 |
| deepocsort | 67.95 | 75.83 | 80.54 | 可选 | 是 |
| bytetrack | 67.68 | 78.04 | 79.16 | 否 | 是 |
| hybridsort | 67.31 | 74.09 | 78.87 | 可选 | 是 |
| ocsort | 66.44 | 74.55 | 77.90 | 否 | 是 |
| sfsort | 62.65 | 76.87 | 69.18 | 否 | 是 |
| maf_hda | — | — | — | 需掩码输入 | 否 |
| eagermot | — | — | — | 需3D检测+相机标定 | 否 |
这张表是选型的主要依据:IDF1 高说明 ID 切换少,HOTA 高说明整体定位与身份保持都好。
三步选定你的跟踪器 🧭
第一问:目标会不会被认错?目标之间外观差异大、遮挡少,用纯运动关联的bytetrack(最快)或ocsort(带相机运动补偿,适合车载/移动镜头),两者都不读图像像素,推理开销最低。遮挡多或行人密集,选带外观特征的botsort、deepocsort、hybridsort、boosttrack、occluboost之一;对运动画质差、帧间畸变明显的场景可试strongsort,它额外用模板匹配兜底,但必须提供图像帧。
第二问:目标倾斜吗?航拍、斜角拍摄的目标需要旋转框(OBB)。上表中 9 种盒式算法都支持 AABB/OBB 切换,maf_hda和eagermot只接轴对齐框,涉及 OBB 时直接排除。
第三问:在哪运行?默认走 Python 后端,全部 11 种算法可用;追求延迟可给 5 种算法(bytetrack、botsort、ocsort、occluboost、sfsort)加--tracker-backend cpp切到 C++ 实现,代价是不支持掩码和可变帧间隔。
选完后按名字改一行配置即可,各算法的默认值与可调范围在 boxmot/configs/trackers/ 的对应 YAML 里;每种算法的输入要求(哪些必须要像素、哪些要特征)见 docs/trackers/。
三步安装并跑通最小验证
git clone https://gitcode.com/GitHub_Trending/bo/boxmot # 拉取源码 pip install boxmot # 安装CLI与Python API boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --show # 从摄像头实时跟踪不想走 CLI,也可以用 Python API 直接喂检测结果(dets为x1,y1,x2,y2,置信度,类别的 NumPy 数组):
from boxmot import OccluBoost tracker = OccluBoost() tracks = tracker.update(dets, frame) # 返回带稳定ID的轨迹跑通后把--tracker换成上一节选中的算法,同一份视频对比 ID 切换次数,比看基准表更贴近你的真实场景。
边界与局限:先知道它不擅长什么
- 纯运动算法(bytetrack/ocsort/sfsort)没有外观信息,长遮挡后几乎必然切 ID。
- strongsort 对输入帧质量敏感,低码率流上收益会缩水。
- C++ 后端只覆盖 5 种算法,且不支持掩码输入与可变时间戳。
maf_hda、eagermot依赖掩码或 3D 检测+标定,普通 2D 监控流用不上。- 基准分数来自 MOT17/SportsMOT/MMOT,换成你自己的镜头和数据,排名可能变化。
最稳的验证方式:挑两个候选算法,用内置的boxmot eval在你的一段有标注视频上跑一遍,以实测分数定夺。
【免费下载链接】boxmotBoxMOT: Pluggable Python and C++ SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes项目地址: https://gitcode.com/GitHub_Trending/bo/boxmot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考