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 种多目标跟踪算法(ByteTrack、BoT-SORT、OccluBoost 等)放在同一套接口下,支持轴对齐框(AABB)和旋转框(OBB)两条跟踪路径,Python 和 C++ 双后端可选。
BoxMOT 是什么:一个定位与核心数据
BoxMOT 是一个基于"检测加关联"思路的跟踪工具包:检测器、外观编码器(ReID)、跟踪器是可独立替换的组件,由管线和 CLI 把它们组装起来。它内置 11 种跟踪器实现,并在 MOT17 ablation、SportsMOT val、MMOT OBB test 三个基准上公布了 HOTA/MOTA/IDF1 对比数据——例如 OccluBoost 在 MOT17 上的 HOTA 为 71.10,HybridSORT 在 MMOT OBB 上的 HOTA 为 54.64。项目支持 Python 3.10 到 3.13,可通过pip install boxmot安装。
如何选对跟踪器:一张表看懂 11 种算法
各算法的差异主要在"用了哪些关联线索"。下表按输入需求从少到多排列,数据来自 docs/trackers/index.md:
| 名称 | 适用场景 | 特点 | 局限 |
|---|---|---|---|
| bytetrack | 快速基线、轻量部署 | 纯运动关联,不依赖图像像素,速度最快 | 无外观信息,遮挡后 ID 切换多(MOT17 IDF1 79.16) |
| ocsort | 低成本基线 | 在线关联策略,输入要求与 ByteTrack 相当 | 同样不用外观线索 |
| sfsort | 目标尺寸变化明显的场景 | 利用尺寸与速度信息做关联 | 需要帧尺寸或配置frame_width/height |
| botsort | 相机运动、行人重识别场景 | 相机运动补偿(CMC)加可选外观嵌入,支持 OBB | 启用 CMC/ReID 时需要像素 |
| strongsort | 对 ID 稳定性要求高 | 强制外观加 ECC 像素关联 | 必须提供图像,开销较大 |
| deepocsort | 想在上表基线上叠加深度特征 | 外观嵌入可配置 | 依赖 ReID 模型质量 |
| hybridsort | 运动与外观要兼顾的复杂场景 | 多策略融合,SportsMOT val IDF1 达 81.88,MMOT OBB HOTA 54.64 为表中最高 | 综合开销高于纯运动方案 |
| boosttrack | 需要自适应滤波的场景 | 创新量自适应卡尔曼,MOT17 HOTA 69.25 | 参数面较多,需调参 |
| occluboost | 遮挡频繁、追求综合精度 | MOT17 HOTA/MOTA/IDF1 三项均为表中最高(71.10/78.50/85.28) | 依赖外观线索时同样需要像素 |
| maf_hda | 有全帧实例掩码的 KITTI 类任务 | 运动加掩码相关滤波外观 | 仅支持 AABB,必须提供掩码 |
| eagermot | 2D/3D 传感器融合(KITTI) | 支持 3D 检测、相机标定与自车位姿 | 输入链路最重,仅 Python 后端 |
三条选型建议:只要速度、场景简单,从bytetrack起步;遮挡和重识别压力大,直接上occluboost或hybridsort;手头有 3D 检测和标定文件,才考虑eagermot。所有框类跟踪器都支持--tracker-backend cpp切换到同指标的原生 C++ 实现(ByteTrack、BoT-SORT、OcSort、OccluBoost、SFSORT 五个有原生后端)。
三步跑通你的第一条轨迹
仓库是只读的,本地验证即可:
- 克隆仓库(Python 3.10~3.13):
git clone https://gitcode.com/GitHub_Trending/bo/boxmot - 安装:发布包用
pip install boxmot;源码开发用uv sync --extra cpu --extra yolo(yolo额外安装 Ultralytics 和 YOLOX 检测后端)。 - 运行跟踪,输入替换成你的视频:
boxmot track --source video.mp4 --detector yolov8n --tracker bytetrack --save
--source也支持图片目录、摄像头编号和 URL;--save落盘带标注的视频,加--show可实时预览。
它适合谁
刚接触多目标跟踪的新手:不用再自己拼卡尔曼滤波和匈牙利匹配。跑通上面的命令就能看到带 ID 的框,再对照 docs/trackers/ 里每个算法的说明页理解各组件作用。
做算法对比的研究者:boxmot eval配合固定数据集跑分。例如boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort可在统一感知结果下比较不同跟踪器,避免检测误差干扰结论。
要把跟踪服务化的人:boxmot install --extra service后可以用boxmot-service起 HTTP 服务,接收外部检测帧输出轨迹;CPU 服务镜像支持 ByteTrack、OcSort、SFSORT 三个无像素依赖的跟踪器,适合检测器与跟踪器分开的架构。
C++ 工程侧的开发者:原生跟踪库可通过 CMake 嵌入独立 C++ 项目,编译细节见 docs/native/。
两个真正有用的调参入口
--tracker-backend cpp:给支持原生后端的跟踪器加上这个参数,同一条轨迹改由 C++ 实现计算。效果是推理链路更短、指标与 Python 路径一致,适合对帧率敏感的部署场景。跟踪器 YAML 配置:每个算法在 boxmot/configs/trackers/ 下都有一个同名 YAML,声明了参数的调优范围。例如
track_buffer(目标丢失后保留 ID 的帧数)在搜索空间里是[10, 61, 10],track_thresh(检出置信度门槛)是[0.4, 0.7]。用--tracker-config传入一个只写要改字段的 YAML 即可局部覆盖默认值——遮挡多就调大track_buffer,漏检多就把track_thresh往下压。presets/子目录还存放了按数据集调好的命名参数组,可直接参考。
动手清单
- 先用
bytetrack加一段 30 秒左右的视频跑通boxmot track --save,确认输出视频里 ID 连续。 - 换成
occluboost并在--tracker-config里只改track_buffer对比一次,观察遮挡帧前后的 ID 变化。 - 需要量化结论时,用
boxmot eval --dataset mot17在内置 MOT17 配置上复现一个跟踪器的 HOTA,再替换成自己的数据做基准。
【免费下载链接】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),仅供参考