This guide explains how to benchmark motcpp trackers on the MOT (Multi-Object Tracking) dataset.
The easiest way to run benchmarks is using the auto-benchmark script:
./scripts/auto_benchmark.sh --allThis will:
- Download benchmark data from GitHub Releases
- Build the project
- Run unit tests
- Execute tracking benchmarks
- Calculate metrics with TrackEval
- Generate a benchmark report
Benchmark data is hosted in GitHub Releases to keep the repository lightweight.
# Download from releases
./scripts/auto_benchmark.sh --download
# Or manually download
wget https://github.com/Geekgineer/motcpp/releases/download/benchmark-data-v1.0/MOT17-mini.tar.gz
wget https://github.com/Geekgineer/motcpp/releases/download/benchmark-data-v1.0/yolox_dets.tar.gz
tar -xzf MOT17-mini.tar.gz -C benchmark_data/
tar -xzf yolox_dets.tar.gz -C benchmark_data/cmake -B build -DCMAKE_BUILD_TYPE=Release -DMOTCPP_BUILD_TOOLS=ON
cmake --build build -j$(nproc)./build/tools/motcpp_eval \
--tracker bytetrack \
--dataset benchmark_data/MOT17-mini/train \
--dets yolox \
--output results/bytetrack_yolox/python3 -m pip install trackeval
python3 -m trackeval.eval_mot \
--GT_FOLDER benchmark_data/MOT17-mini/train \
--TRACKERS_FOLDER results/ \
--BENCHMARK MOT17 \
--METRICS HOTA CLEAR Identity| Tracker | Command | Type |
|---|---|---|
| SORT | --tracker sort |
Motion |
| ByteTrack | --tracker bytetrack |
Motion |
| OC-SORT | --tracker ocsort |
Motion |
| UCMCTrack | --tracker ucmctrack |
Motion |
| DeepOC-SORT | --tracker deepocsort |
ReID |
| StrongSORT | --tracker strongsort |
ReID |
| BoT-SORT | --tracker botsort |
ReID |
| BoostTrack | --tracker boosttrack |
ReID |
| HybridSORT | --tracker hybridsort |
ReID |
benchmark_data/
├── MOT17-mini/
│ └── train/
│ ├── MOT17-02-FRCNN/
│ │ ├── det/det.txt
│ │ ├── gt/gt.txt
│ │ ├── img1/
│ │ └── seqinfo.ini
│ └── ...
├── yolox_dets/
│ └── train/
│ ├── MOT17-02.txt
│ └── ...
└── reid_embs/ (optional, for ReID trackers)
└── train/
├── MOT17-02.txt
└── ...
Input detections file format (one detection per line):
<frame>,<id>,<bb_left>,<bb_top>,<bb_width>,<bb_height>,<conf>,<x>,<y>,<z>
For 2D tracking, set x, y, z to -1.
Example:
1,-1,912,484,97,109,0.95,-1,-1,-1
1,-1,1256,420,85,91,0.87,-1,-1,-1
Tracking results follow the MOT Challenge format:
<frame>,<id>,<bb_left>,<bb_top>,<bb_width>,<bb_height>,<conf>,<x>,<y>,<z>
| Metric | Description |
|---|---|
| HOTA | Higher Order Tracking Accuracy (primary metric) |
| MOTA | Multiple Object Tracking Accuracy |
| MOTP | Multiple Object Tracking Precision |
| IDF1 | ID F1 Score |
| MT | Mostly Tracked trajectories |
| ML | Mostly Lost trajectories |
| FP | False Positives |
| FN | False Negatives |
| IDSw | ID Switches |
If you want to benchmark on your own dataset:
-
Organize your data following the MOT format structure above
-
Generate detections using your detector (YOLO, etc.)
-
Save as text files in the detection format
-
Run the benchmark:
./build/tools/motcpp_eval \ --tracker bytetrack \ --dataset /path/to/your/dataset \ --dets custom \ --output results/
Maintainers can prepare release data:
./scripts/prepare_release_data.shThen upload the generated files to GitHub Releases with tag benchmark-data-v1.0.
On MOT17 with YOLOX detections:
| Tracker | HOTA | MOTA | IDF1 |
|---|---|---|---|
| SORT | ~62 | ~75 | ~69 |
| ByteTrack | ~66 | ~76 | ~77 |
| OC-SORT | ~64 | ~74 | ~74 |
| UCMCTrack | ~64 | ~75 | ~74 |
Results may vary based on detection quality and parameter tuning.