给检测模型装上连续 ID:BoxMOT 多目标追踪实战指南
【免费下载链接】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
检测模型每帧只吐一堆框,人物换一次位置 ID 就变。BoxMOT 把多目标追踪做成即插即用组件:一条 pip 命令装好,一行命令跑通,追踪算法还能随时换。
🎯 痛点:单帧检测为什么不够
你在做目标检测、实例分割或姿态估计时,模型输出的是"这一帧"的框,没有跨帧身份。做人流统计、行人追踪、行为分析,都需要给每个目标一个稳定 ID。
BoxMOT 的定位就是一个追踪插件层:检测、分割、姿态模型照常出框,BoxMOT 负责把框串成轨迹。追踪器是可插拔的,BoostTrack、BotSort 等实现集中在 boxmot/trackers/ 下,换算法只改一个参数,不用动检测代码。
🚀 快速上手:安装与第一次跑通
要求 Python 3.10–3.13,装包一行:
pip install boxmot跑第一次追踪,--source 0指摄像头,图片、视频、目录都能替换:
boxmot track --source 0 --detector yolo26n --tracker occluboost --save --show预期效果:窗口里实时显示每个目标的轨迹和固定 ID 号,结果存到runs/目录。跑摄像头需要检测相关依赖,用boxmot install --extra yolo补上 Ultralytics 等组件。
📊 选型指南:7 种追踪器,MOT 基准测试数据说话
先说两种性能模式:
- 纯运动:只靠卡尔曼滤波 + IoU 关联,轻量、高 FPS,CPU 就能跑
- 运动 + 外观:额外提取 ReID 特征(OSNet、LightMBN 等模型)做外观匹配,遮挡场景下 ID 更稳,代价是推理开销
下表数据来自 MOT17-ablation 分割的基准测试(HOTA 越高越好,综合衡量检测与身份):
| 追踪器 | HOTA↑ | MOTA↑ | IDF1↑ | FPS |
|---|---|---|---|---|
| boosttrack | 69.253 | 75.914 | 83.206 | 25 |
| botsort | 68.885 | 78.222 | 81.344 | 46 |
| hybridsort | 68.216 | 76.382 | 81.164 | 25 |
| strongsort | 68.05 | 76.185 | 80.763 | 17 |
| deepocsort | 67.796 | 75.868 | 80.514 | 12 |
| bytetrack | 67.68 | 78.039 | 79.157 | 1265 |
| ocsort | 66.441 | 74.548 | 77.899 | 1483 |
按场景一句话选型:
- 要速度:bytetrack / ocsort 纯运动模式,上千 FPS,适合大画面低延迟
- 要均衡:botsort,运动 + 外观组合,指标与速度折中最稳
- 要精度:boosttrack / strongsort,带 ReID 的 HOTA 第一梯队,适合离线分析
🛠 进阶玩法:CLI 速查
五个子命令覆盖完整工作流,boxmot --help可随时查细节。
track:跑追踪
boxmot track --source vid.mp4 --detector yolo26n --tracker botsort --reid lmbn-n-duke --classes 0 --save四个常用参数:--source指定摄像头/图片/视频/目录;--detector指定检测模型;--tracker换追踪算法;--classes按类别索引过滤,0就是只追人。
eval:MOT17 / MOT20 / DanceTrack 消融评估
boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort在标准 MOT 基准测试集上量化你选定的"检测器 + ReID + 追踪器"组合,输出 HOTA/MOTA/IDF1。仓库内置的消融实验配置见 boxmot/configs/datasets/。
generate:预存检测与嵌入
把检测结果和外观嵌入一次性落盘。之后换追踪器重跑时无需再推理,节省大量重复计算。
tune:目标追踪参数调优
boxmot tune --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort --n-trials 200用多目标遗传算法搜索追踪器超参数,默认同时优化 HOTA、MOTA、IDF1,最优参数写回该追踪器的配置文件(boxmot/configs/trackers/)。
export:ReID 模型导出
boxmot export --weights osnet_x0_25_msmt17.pt --include onnx支持 ONNX、OpenVINO、TensorRT、TorchScript 等格式,导出后部署到边缘设备,--dynamic可开动态输入。
🐍 代码集成:挂进自己的检测模型
把追踪接进 torchvision 的 FasterRCNN,核心就是逐帧循环"检测 → 追踪 → 画结果":
import cv2, torch, numpy as np from torchvision.models.detection import fasterrcnn_resnet50_fpn_v2 from torchvision.models.detection.faster_rcnn import FasterRCNN_ResNet50_FPN_V2_Weights from boxmot import BoostTrack, ReIDConfig device = "cuda" if torch.cuda.is_available() else "cpu" w = FasterRCNN_ResNet50_FPN_V2_Weights.DEFAULT det = fasterrcnn_resnet50_fpn_v2(weights=w, box_score_thresh=0.5).to(device).eval() tr = BoostTrack(reid=ReIDConfig(device="cpu")).to(device) cap = cv2.VideoCapture(0) with torch.inference_mode(): while True: ok, frame = cap.read() if not ok: break # 检测:输出框 [x1, y1, x2, y2, 置信度, 类别] out = det([w.transforms()( torch.from_numpy(frame[:, :, ::-1]).permute(2, 0, 1).to(device))])[0] keep = out["scores"] >= 0.5 dets = np.concatenate([out["boxes"], out["scores"][:, None], out["labels"][:, None]], 1)[keep].cpu().numpy() # 追踪 + 绘制 tracks = tr.update(dets, frame) cv2.imshow("BoxMOT", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release()update返回和输入同形状的数组,多出来的 ID 列取用即可;想换算法,把BoostTrack改成BotSort、ByteTrack等即可,接口一致。完整可运行版本见 examples/det/torchvision_boxmot.ipynb。
❓ 常见坑 FAQ
Q:ReID 模型一加载就显存不足?A:外观模型走 CPU:CLI 加--device cpu,Python 侧ReIDConfig(device="cpu")。检测放 GPU、ReID 放 CPU 是常见且合理的搭配。
Q:只想追踪行人,怎么过滤类别?A:--classes传类别索引,COCO 中人是0。注意 CLI 里写--classes 0,Python 代码里则在自己的检测输出上按 label 过滤。
Q:怎么换 ReID 模型?A:CLI 用--reid指定模型名,如lmbn-n-duke(LightMBN 系列)或osnet-x0-25-msmt17;代码里通过ReIDConfig(model=...)切换。各模型的参数量与输入尺寸对比见 docs/config/reid-models.md。
📚 收尾:资源链接
- 官方文档:docs/
- 入门与安装:docs/getting-started/installation.md
- 评估工作流:docs/guides/evaluation.md
- 追踪器文档索引:docs/trackers/
- 项目说明:README.md
- 示例 notebooks:examples/det/torchvision_boxmot.ipynb、examples/seg/torchvision_boxmot.ipynb、examples/pose/torchvision_boxmot.ipynb
BoxMOT 多目标追踪这条链路到此就闭环了:装包、选追踪器、跑通、调参、导出,每个环节都有对应子命令。建议先用仓库里的 MOT17-mini 小数据集(assets/MOT17-mini/)练手,再迁移到自己的数据源。
【免费下载链接】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),仅供参考