BoxMOT 多目标追踪教程5 分钟跑通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/boxmotBoxMOT 是一个插件式多目标追踪框架任意能输出边界框的分割、目标检测或姿态估计模型接上它就能给画面里的每个目标分配稳定 ID。本文带你从安装、首次追踪到追踪器选型、评估与调参一次走通。两个绕不开的多目标追踪痛点多目标追踪落地时有两件事最耗时间。第一追踪算法和检测模型是两摊代码换一个检测器关联、卡尔曼、外观特征那套逻辑要么重写要么重调。第二想对比 ByteTrack 和 BoT-SORT 谁更合适就得把两套仓库各自克隆、各自配环境。BoxMOT 的解法是把检测器、ReID 编码器、追踪器拆成互不绑定的组件追踪器统一接收同一份检测输入换算法只需改一个类名或一个命令行参数。十种追踪器实现都在 boxmot/trackers/一次接入、任意切换。 BoxMOT 安装与首次追踪环境要求 Python 3.10 至 3.13。pip install boxmot # 安装 BoxMOT 及依赖装完先跑这条命令几秒后就能看到带 ID 的追踪画面# 用摄像头实时追踪yolo26n 检测 lmbn_n_duke 外观 occluboost 追踪 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show--source接受四种写法分别对应网络摄像头、图片、视频、目录boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 # 摄像头 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source img.jpg # 单张图片 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source vid.mp4 # 视频文件 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source path/ # 图片目录--show实时预览--save把结果视频写到 runs 目录--device可在cpu、mps、cuda:0之间切换。下面是 MOT17 测试帧上多目标追踪的画面效果 按场景挑选追踪器MOT17 基准测试对照这张表回答一个问题十种追踪器我该怎么选。以下数据来自 README.md 的 MOT17 消融基准官方消融检测器分数越高越好追踪器状态HOTA↑MOTA↑IDF1↑occluboost✅71.1078.5085.28botsort✅69.6878.2382.33boosttrack✅69.2575.9183.20strongsort✅68.0576.1980.76deepocsort✅67.9575.8380.54bytetrack✅67.6878.0479.16hybridsort✅67.3174.0978.87ocsort✅66.4474.5577.90sfsort✅62.6576.8769.18选型先分清两种性能模式。纯运动类bytetrack、ocsort只靠位置和速度关联CPU 上帧率最高适合目标很少交叉遮挡的实时场景。运动外观类botsort、occluboost、strongsort、deepocsort、boosttrack、hybridsort、sfsort会额外给每个目标拍一张身份照——外观嵌入描述目标长什么样目标被挡住或短暂丢失后仍能靠长相找回正确 ID代价是每帧多一次 ReID 推理。追求极限帧率选 bytetrack精度优先尤其 IDF1 身份一致性选 occluboost平衡项看 botsort它的 IDF1 达 82.33也是评估命令的默认示例。 五个子命令逐个拆解boxmot --help列出的能力很多日常最常用的五个如下。# track对任意源摄像头/图片/视频/目录跑检测追踪 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show输出带 ID 框的实时画面或视频。# eval在 MOT17 消融集上评估检测器ReID追踪器组合的 HOTA/MOTA/IDF1 boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort首次运行会自动物化检测结果与外观嵌入之后换追踪器直接复用详见进阶部分。# materialize一次性生成不可变的检测嵌入构建供 eval/tune 反复复用 boxmot materialize --experiment mot17/ablation-yolox-lmbn.yaml --data-root datasets/mot --device mps检测只算一次后续对比任意追踪器都不用重跑检测器。# tune用进化式搜索在 MOT17 上自动调追踪器超参数 boxmot tune --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort --n-trials 9最优超参数集写回 boxmot/configs/trackers/ 对应的配置。# export把 ReID 模型导出为部署格式 boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --include engine --device cuda:0 --dynamic支持 TorchScript、ONNX、OpenVINO、TensorRT、Core ML、TFLite 等格式。两个高频参数ReID 模型选择--reid决定外观特征来源osnet_x0_25_msmt17轻量、适合实时lmbn_n_duke精度更高是 MOT17 基准的默认搭配。可选模型见 boxmot/configs/reid/。类别过滤默认追踪全部 COCO 类别--classes只保留你要的索引# 只追踪 COCO 第 16猫、17狗两类 boxmot track --detector yolov8s --tracker botsort --source 0 --classes 16,17 Python 集成检测器接追踪器的最小闭环在代码里BoxMOT 的追踪器直接吃标准检测数组x1, y1, x2, y2, 置信度, 类别 ID无需中间适配层import numpy as np from boxmot import OccluBoost # OccluBoost 为开箱即用的默认追踪器含外观 tracker OccluBoost() dets np.array([[100, 200, 300, 400, 0.9, 0]]) # x1,y1,x2,y2,score,class frame np.zeros((480, 640, 3), dtypenp.uint8) # BGR 图像 tracks tracker.update(dets, frame) print(tracks[:, 4].astype(int)) # 每个目标的轨迹 ID想换其他算法只需换掉导入的类BoxMOT 包根导出了BoostTrack、BotSort、ByteTrack、DeepOcSort、HybridSort、MafHda、OccluBoost、OcSort、SFSORT、StrongSort、EagerMot接口保持一致。⚙️ 进阶玩法评估管线、调参、导出本地评估管线。评估的核心是检测只算一次。boxmot eval首次运行会把检测结果和 ReID 嵌入物化下来之后换追踪器、甚至换 ReID 模型检测推理都会跳过、直接复用已有构建跨 CPU/MPS/CUDA 同样可复用。跑完想再打磨轨迹加后处理参数# 评估后先做 tracklet 关联再做高斯平滑插值补洞 boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort \ --postprocessing gta --postprocessing gsi--postprocessing gsi用高斯平滑插值把轨迹断点补成平滑轨迹--postprocessing gta先把碎片轨迹重新关联再接 GSI处理后指标取新结果原始结果保留在输出目录的raw/下。一条命令完成调参。boxmot tune用进化式搜索自动试追踪器超参数每个试验重放同一份不可变构建结果按指标排序最优参数组合写回追踪器配置下一轮直接用默认配置就是调过的版本。ReID 模型多格式导出。同一份外观权重部署到哪就导到哪ONNX 给跨框架推理OpenVINO 给 Intel 硬件TensorRT 给 GPU 极致吞吐TorchScript/Core ML/TFLite 各有对应场景。--dynamic允许动态输入批量导出时可用--batch-size指定批大小。 上手资源示例笔记本与文档三个官方 notebook 演示现成 torchvision 模型 BoxMOT的完整写法examples/det/torchvision_boxmot.ipynb边界框检测接追踪examples/pose/torchvision_boxmot.ipynb姿态估计接追踪examples/seg/torchvision_boxmot.ipynb分割接追踪更多入口官方文档完整指南与 API 参考、安装指南、追踪器总览、评估与后处理指南以及项目 README。写在最后BoxMOT 把多目标追踪从每个算法一套环境变成了一个接口换参数检测、ReID、追踪器各自可插拔评估与调参共享同一份检测结果。先跑通一条boxmot track再用 MOT17 基准对照表做选型剩下的交给tune和eval。核心链接README.md · docs/【免费下载链接】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),仅供参考