给检测模型装上连续 ID:BoxMOT 多目标追踪实战指南
2026/9/20 7:00:33 网站建设 项目流程

给检测模型装上连续 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
boosttrack69.25375.91483.20625
botsort68.88578.22281.34446
hybridsort68.21676.38281.16425
strongsort68.0576.18580.76317
deepocsort67.79675.86880.51412
bytetrack67.6878.03979.1571265
ocsort66.44174.54877.8991483

按场景一句话选型:

  • 要速度: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改成BotSortByteTrack等即可,接口一致。完整可运行版本见 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询