Skip to content

mikel-brostrom/boxmot

Repository files navigation

BoxMOT logo

Pluggable Python and C++ multi-object tracking modules for axis-aligned and oriented bounding box detections from any model.

CI PyPI version downloads license python-version docker pulls DOI colab discord Ask DeepWiki

mikel-brostrom%2Fboxmot | Trendshift


DocsInstallationModesAPI ReferenceTrackersContributing

BoxMOT demo

BoxMOT gives you one CLI and one Python API for running modern multi-object tracking workflows. It covers direct tracking, cached benchmark evaluation, tuning, research loops, ReID training and evaluation, and ReID export without forcing you to rebuild the detector and tracker stack for each experiment.

Why BoxMOT

  • One interface for track, generate, eval, tune, research, train, eval-reid, and export.
  • Swappable trackers with shared detector and ReID plumbing.
  • Benchmark-oriented workflows with reusable detections and embeddings.
  • Support for both AABB and OBB tracking paths.
  • Optional production-ready native C++ tracker implementations with the same metrics as the Python path, opted into via --tracker-backend cpp and embeddable in standalone C++ projects via CMake (see Native C++ Integration).
  • Public Python API for embedding the same workflows in applications and notebooks.

Installation

BoxMOT supports Python 3.10 through 3.13.

pip install boxmot
boxmot --help

For mode-specific extras such as yolo, evolve, research, onnx, openvino, and tflite, see the installation guide.

Benchmark Results

Tracker Status MOT17 ablation SportsMOT val MMOT test OBB
HOTA MOTA IDF1 HOTA MOTA IDF1 HOTA MOTA IDF1
occluboost 70.47
(70.48)
78.32
(78.31)
84.14
(84.14)
83.17 97.48 89.36
botsort 69.44
(69.43)
78.24
(78.26)
81.94
(82.00)
76.93 98.11 78.30 51.79 46.05 60.85
boosttrack 69.25
(—)
75.91
(—)
83.20
(—)
76.32 97.08 77.82
strongsort 68.05
(—)
76.19
(—)
80.76
(—)
79.80 97.31 80.27
deepocsort 67.95
(—)
75.83
(—)
80.54
(—)
79.51 97.94 79.59
bytetrack 67.68
(67.75)
78.04
(78.03)
79.16
(79.38)
67.93 97.25 76.90 33.97 33.72 39.74
hybridsort 67.31
(—)
74.09
(—)
78.87
(—)
81.14 98.07 81.88
ocsort 66.44
(66.44)
74.55
(74.55)
77.90
(77.90)
76.34 96.60 75.64 28.57 26.19 29.95
sfsort 62.65
(62.66)
76.87
(76.74)
69.18
(69.18)
75.73 98.39 72.99 44.19 44.27 46.25

Py (C++); unavailable. See Benchmark Workflows.

Related guides:

Minimal Usage

CLI:

boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show

Python:

import numpy as np
from boxmot.trackers import OccluBoost

tracker = OccluBoost()

# dets: (N, 6) array with [x1, y1, x2, y2, conf, cls] per detection
dets = np.array([[100, 200, 300, 400, 0.9, 0]], dtype=np.float32)
img = np.zeros((480, 640, 3), dtype=np.uint8)  # current frame

# tracks: (M, 8) array with [x1, y1, x2, y2, id, conf, cls, det_ind] per track
tracks = tracker.update(dets, img)
print(tracks)

Contributing

Start with CONTRIBUTING.md and the contributor docs.

Contributors

BoxMOT contributors

Support and Citation

Sponsor this project

Packages

 
 
 

Contributors

Languages