Skip to content

McByte Benchmarks

Run McByte over a complete benchmark test set — MOT17, DanceTrack, SportsMOT, or SoccerNet-tracking — and write one MOTChallenge-format result file per sequence.

What you'll learn:

  • Point the command at your detection and frame directories
  • Select one or more datasets to run
  • Read the output layout, including the MOT17 submission files

Install

Get started by installing the package.

pip install trackers

trackers benchmark mcbyte always builds McByte's full SAM + Cutie mask pipeline (enable_mask_manager=True), so — unlike the default McByteTracker() construction described on the McByte page — both SAM and Cutie must be installed before running this command. See the optional heavyweight dependencies note for install steps. For more general install options, see the install guide.


Supported Datasets

Dataset Detection format Layout note
mot17 xyxy Frame directories use the <sequence>-FRCNN suffix.
dancetrack xyxy
sportsmot xyxy
soccernet mot Detection filenames follow the SoccerNet naming convention.

Each sequence is processed independently with a fresh McByte tracker. If a sequence fails, the error is logged and the run continues with the remaining sequences.


Configure Dataset Roots

Every dataset needs a detection_root (one detection file per sequence) and an image_root (one frame directory per sequence). Neither has a built-in value — supply both per run, either through a --config file or inline as JSON with --dataset_roots.

Supply roots as JSON on the command line.

trackers benchmark mcbyte --dataset_roots='{"mot17": {"detection_root": "/data/dets", "image_root": "/data/frames"}}'

A config file is the readable spelling.

# run.yaml
dataset: [mot17]
dataset_roots:
  mot17:
    detection_root: /data/detections/MOT17/test
    image_root: /data/datasets/MOT17/test
trackers benchmark mcbyte --config run.yaml

Select Datasets

Pass --dataset as a list to choose which datasets to run. Omit it to run every dataset in the table above.

trackers benchmark mcbyte --dataset=[mot17,soccernet] --device=cuda

A bare repeated --dataset overwrites the previous value — use --dataset+ to append instead:

trackers benchmark mcbyte --dataset+ mot17 --dataset+ soccernet

As with every trackers subcommand, hyphens and underscores are interchangeable (--cmc-downscale and --cmc_downscale are the same option), and every boolean flag has a --no_ negation, e.g. --no_enable_cmc.


Expected Directory Layout

detection_root holds one detection .txt file per sequence:

detections/MOT17/test/MOT17-01.txt
detections/dancetrack/test/dancetrack0003.txt
detections/sportsmot/test/v_-9kabh1K8UA_c008.txt
detections/SoccerNet_tracking_2022_test_set_dets/SNMOT-116__det.txt

image_root holds one directory per sequence, each with an img1 subdirectory of frames, for every dataset:

datasets/dancetrack/test/
    dancetrack0003/img1/
    dancetrack0009/img1/
    ...

MOT17, DanceTrack and SportsMOT detections use frame,x1,y1,x2,y2,confidence (XYXY). SoccerNet-tracking detections use the original ground-truth MOT layout, frame,id,left,top,width,height,confidence,... — the identity column is ignored, since tracker identities are produced by McByte.


Output

Results are written under --output_root, in one timestamped directory per run (<timestamp>__isolation or <timestamp>__no_isolation, reflecting --enable_isolated_mask_matching), with one subdirectory per dataset and a run.log capturing progress and failures.

outputs/mcbyte_benchmarks/
└── 20260807_120000__no_isolation/
    ├── run.log
    └── mot17/
        ├── raw/
        │   ├── MOT17-01.txt
        │   └── ...
        └── submission/
            ├── MOT17-01-FRCNN.txt
            ├── MOT17-01-SDP.txt
            ├── MOT17-01-DPM.txt
            └── ...

Each sequence result is first written to a .partial file and only replaces the final file on success; use --skip_existing to skip a sequence whose result file is already present, and --keep_partial_results to keep a failed sequence's .partial file instead of deleting it.

MOT17 submission files

The MOT17 evaluation server expects one result file per detector name (FRCNN, SDP, DPM). Since McByte is detector-agnostic, trackers benchmark mcbyte duplicates each completed sequence's result across all three suffixes under mot17/submission/. The remaining MOT17 sequence numbers this run produces no result for are written as empty placeholder files for all three suffixes, so the submission directory always contains the complete set of names.


CLI Reference

All arguments accepted by trackers benchmark mcbyte.

Argument Description Default
--config Path to a configuration file.
--print_config Print the configuration after applying all other arguments, then exit.
--dataset Datasets to run, as a list: --dataset=[mot17,soccernet]. Repeat as --dataset+ to append instead of overwrite. all datasets
--dataset_roots Where each dataset's files live, keyed by the same names --dataset selects. Each entry holds a detection_root and an image_root; neither has a built-in value.
--device Device for SAM + Cutie, e.g. cuda, cpu, or mps. auto resolves to CUDA when available, otherwise CPU; MPS is never auto-selected and must be requested explicitly. auto
--enable_isolated_mask_matching Match masks in isolation. Negate with --no_enable_isolated_mask_matching. false
--output_root Directory holding one timestamped run directory per run. outputs/mcbyte_benchmarks
--skip_existing Skip a sequence whose result file is already present. Negate with --no_skip_existing. false
--enable_cmc Compensate for camera motion. Negate with --no_enable_cmc. true
--cmc_method Camera-motion compensation method. Options: orb, sift, sparseOptFlow, ecc. sparseOptFlow
--cmc_downscale Frame downscale factor applied before compensation. 6
--keep_partial_results Keep the .partial file a failed sequence leaves behind instead of deleting it. Negate with --no_keep_partial_results. false