BoxMOT:给检测模型配上 ID 稳定的多目标追踪,10 分钟跑通
【免费下载链接】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 把主流 SOTA 追踪器做成可插拔模块,你只管喂检测框,它负责把每个目标的 ID 稳住。
🚀 快速上手:3 步跑通
第一步,装包。它要求 Python 3.10 到 3.13,一行命令即可:
pip install boxmot跑完boxmot --help就能看到全部子命令,确认装好了。
第二步,用一条命令起追踪。下面这条直接对着默认摄像头(--source 0)跑,occluboost是带外观的追踪器,所以额外指定了--reid:
boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show第三步,看结果。--show会弹出带 ID 框的实时窗口,--save把每段序列存成 MP4,正常结束(或按q、Ctrl-C)后还会打印一份分阶段耗时和 FPS 的收尾报告。
上面这类画面里的行人,就是追踪要在帧与帧之间稳住身份的对象。
🗺️ 能力地图:它到底能做什么
接你自己的检测模型:当你的检测器不是 YOLO 时
任何能输出框的模型都能接。仓库里的 examples/det/ 给了 torchvision 的 FasterRCNN、RT-DETR、YOLOX 等现成 notebook,Python 侧用create_tracker加TrackingPipeline把检测器和追踪器拼起来,不锁定某个具体检测框架。
按场景挑追踪器:运动就够,还是要认脸
追踪器分两档。纯运动的bytetrack、ocsort、sfsort只吃框、不依赖 ReID;需要认脸的botsort、strongsort、deepocsort、occluboost才会加载外观特征。想省算力就选运动档,想抗遮挡、保身份一致就加--reid切到外观档。
检测只跑一次:评估、调参、导出共用缓存
materialize先把检测、嵌入缓存成不可变的 Parquet 构建,之后eval、tune、research都直接回放这份缓存,不再重复过检测器。想离线评测或调超参时,这一步能帮你省掉大量重复推理。
📋 参数与用法速查
下面这张表只收录高频参数,覆盖track、eval、export最常用的几个开关。
| 参数 | 作用 | 示例值 |
|---|---|---|
--source | 追踪输入 | 0(摄像头)/vid.mp4/ 图片目录 |
--detector | 选检测模型 | yolov8n/yolo11n/yolox |
--reid | 外观编码模型 | osnet_x0_25_msmt17/lmbn_n_duke |
--tracker | 选追踪算法 | botsort/deepocsort/bytetrack |
--tracker-backend | 选实现后端 | python/cpp |
--geometry | 框几何类型 | aabb/obb |
--classes | 只追指定类别 | "15,16" |
--show/--save | 预览 / 存视频 | 直接加标志 |
具体取值和可选模型清单,建议以boxmot track --help的实时输出为准。
🎬 实战:换一个场景试试
假设你要做街道监控,只盯猫和狗(COCO 索引 15、16),还想要更快的推理速度。这时候把外观档换回纯运动的bytetrack,并用--classes过滤类别:
# 场景:只追猫/狗,换更快的纯运动追踪器,存成视频 boxmot track \ --source street.mp4 \ --detector yolo11n \ --tracker bytetrack \ --classes "15,16" \ --device 0 \ --save跑完你会在输出目录拿到一条标注视频。如果之后要把外观模型单独部署出去,再用export把 ReID 权重转成目标格式,它会自动把中间需要的.onnx一并处理:
# 把 ReID 权重导出成 ONNX 部署 boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --device cpu这里只改了两个地方——--tracker从occluboost换成bytetrack、加上--classes过滤;把--tracker-backend cpp或--geometry obb换上去,就能切到原生 C++ 或旋转框方案。
⚠️ 常见坑 & 选型建议
- 别给纯运动追踪器白挂 ReID:
strongsort一定用外观+ECC 且需要像素,而bytetrack、ocsort只吃框。运动档不需要--reid,硬给只会多加载一份模型拖慢速度。 - 检测框几何和
--tracker必须对齐:OBB 检测输出要用--geometry obb,但maf_hda、eagermot只吃 AABB。对不上会在启动阶段被校验拒绝。 - 别在评估/调参里反复跑检测:先
materialize一次缓存检测与嵌入,eval、tune再回放;追求低延迟可加--tracker-backend cpp,但原生后端不支持 mask、3D 和变时模式,选型前先看 docs/trackers/index.md 的输入支持矩阵。
📚 延伸资源
- 官方文档:docs/,各模式参数在
boxmot MODE --help里最权威 - 检测器接法 notebook:examples/det/torchvision_boxmot.ipynb
- 贡献与工程约定:CONTRIBUTING.md
把--source换成你自己的视频,跑通第一条命令,追踪这条线就算真正接上了。
【免费下载链接】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),仅供参考