Tracking-by-detection (MOT) package
Project description
Motrack: Multi-Object Tracking Library
Introduction
Motrack is a versatile multi-object tracking library designed to leverage the tracking-by-detection paradigm. It supports a range of tracker algorithms and object detections, making it ideal for applications in various domains.
Usage
Pseudocode for tracker utilization:
from motrack.object_detection import YOLOv8Inference
from motrack.tracker import ByteTracker, TrackletState
tracker = ByteTracker() # Default parameters
tracklets = []
yolo = YOLOv8Inference(...)
video_frames = read_video(video_path)
for i, image in enumerate(video_frames):
detections = yolo.predict_bboxes(image)
tracklets = tracker.track(tracklets, detections, i)
active_tracklets = [t for t in tracklets if t.state == TrackletState.ACTIVE]
foo_bar(active_tracklets)
This library offers flexibility to use any custom object detector.
Implementation of custom tracker:
from typing import List, Tuple
from motrack.library.cv.bbox import PredBBox
from motrack.tracker import Tracker, Tracklet
class MyTracker(Tracker):
def track(
self,
tracklets: List[Tracklet],
detections: List[PredBBox],
frame_index: int
) -> List[Tracklet]:
... Tracker logic ...
return tracklets
Similarly, custom object detection inference, filter, association method or dataset can also be implemented and seamlessly combined with other components.
Features
Supported tracker algorithms
| Method Name | Description |
|---|---|
| SORT | arxiv: Simple Online and Realtime Tracking |
| DeepSORT | arxiv: SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC |
| MoveSORT | SORT with improved association method |
| ByteTrack | arxiv: ByteTrack: Multi-Object Tracking by Associating Every Detection Box |
| Bot-SORT | arxiv: BoT-SORT: Robust Associations Multi-Pedestrian Tracking |
| SparseTrack | arxiv: SparseTrack: Multi-Object Tracking by Performing Scene Decomposition based on Pseudo-Depth |
Evaluation of these methods on different datasets can be found in evaluation.md
Supported object detection algorithms
| Method Name | Description |
|---|---|
| YOLOX | arxiv: Simple Online and Realtime Tracking |
| YOLOv8 | github: Ultralytics YOLOv8 |
Use tools/detection/create_yolo_format.py to create a YOLOv8 training dataset and
tools/detection/create_coco_format.py to create a YOLOX training dataset.
FastReID integration
Any FastReID model for appearance matching can be used.
Model has to be exported in ONNX. Please check deploy documentation for mode info.
Use tools/reid/create_fastreid_patches.py to create a FastReID dataset for training an appearance model.
Supported datasets
Currently supported datasets are: MOT17, MOT20, DanceTrack and SportsMOT.
Any custom dataset can be added by extending the base dataset.
Tools
After installation, three console scripts are available from any directory:
motrack-inference: Run tracker inference. Outputs are stored under a deterministic hash-based directory.motrack-eval: Evaluate tracker outputs with HOTA, CLEAR, Identity, and Count metrics. Results are logged and saved as JSON.motrack-optimize: Run hyperparameter optimization over a tracker's search space. Supports Optuna samplers (random,tpe,warm_tpe,gp,warm_gp) with optional HyperbandPruner rungs, plus the in-house MFGCS multi-fidelity optimizer.
Equivalent invocations:
uv run motrack-inference # console script via uv
uv run python -m motrack.cli.inference # module run via uv
python tools/inference.py # legacy (still works)
If your venv is already activated (source .venv/bin/activate), drop the uv run prefix.
Two additional tools are available as scripts in the repo:
- Postprocess (
tools/postprocess.py): Offline postprocessing (linear interpolation, etc.). - Visualize (
tools/visualize_inference.py): Visualize tracker inference.
Optimization study comparison and figures: python -m tools.analysis.report_optimization --config-name optimization/report_per_family (see docs/optimization/report.md).
Library API
The CLI is a thin Hydra wrapper around the library API. Anything the CLI does can be called directly:
from motrack.tools import run_inference, run_eval, run_optimize
run_inference(cfg) # build dataset/detector/tracker and run
results = run_eval(cfg) # HOTA / CLEAR / Identity / Count
run_optimize(cfg) # full Optuna study
Dataset construction is pluggable — pass a custom builder if your library wraps a different dataset layer:
from motrack.tools import run_optimize, DatasetBuilder
from motrack.datasets import BaseDataset
def my_dataset_builder(cfg) -> BaseDataset:
return MyCustomDataset(cfg.dataset.params)
run_optimize(cfg, dataset_builder=my_dataset_builder)
Evaluation
Motrack includes a built-in evaluation module (motrack/eval) that computes
HOTA, CLEAR (MOTA/MOTP), Identity (IDF1), and Count metrics — no external
TrackEval installation required. Run evaluation after inference:
uv run motrack-eval
Results are saved as eval_results.json inside the tracker run directory.
Evaluation of different supported methods can be found here.
Installation
Motrack is developed and tested with uv. Adding it to a uv-managed project:
uv add motrack
Or installing into the current environment:
uv pip install motrack
Pip works too if you prefer:
pip install motrack
Package page can be found on PyPI.
Working from a clone
git clone https://github.com/Robotmurlock/Motrack.git
cd Motrack
uv sync
This installs all runtime dependencies and registers the motrack-inference, motrack-eval, and motrack-optimize console scripts in the project venv.
Optional extras
| Extra | Provides |
|---|---|
yolov8 |
ultralytics (YOLOv8 inference) |
reid |
onnxruntime (FastReID inference) |
optuna |
optuna (hyperparameter search) |
mlflow |
mlflow (experiment tracking) |
Install one or more:
uv add 'motrack[yolov8,reid]'
# or
uv pip install 'motrack[yolov8,reid]'
# or (pip)
pip install 'motrack[yolov8,reid]'
For GPU onnxruntime, replace the reid extra with a direct install:
uv add onnxruntime-gpu # or: pip install onnxruntime-gpu
Changelog
Package changelog can be found here
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file motrack-0.8.0.tar.gz.
File metadata
- Download URL: motrack-0.8.0.tar.gz
- Upload date:
- Size: 147.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01ed39ae4673c219399446c11fef68a1e7e97486b53902ed21defadf378f6361
|
|
| MD5 |
e5ef72b61d7c11c7373b82d20d84e45f
|
|
| BLAKE2b-256 |
8cb09374823c5460e2b368964c523516cfae461afd4272bc7e87493c2eef34aa
|
File details
Details for the file motrack-0.8.0-py3-none-any.whl.
File metadata
- Download URL: motrack-0.8.0-py3-none-any.whl
- Upload date:
- Size: 201.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c77e74f6dc77bcb37f442756ed6c7f1620f2c25a5c9bdcca2910796b3b76d110
|
|
| MD5 |
defa51c2e06bea5ec22f07f6d81b5879
|
|
| BLAKE2b-256 |
3ee5867d9ff3d94226e402cbbdb81be00e16d7fbedd5e8f56f3eabd99712e3ee
|