Condados
← All posts The Computer Vision Metrics Handbook · Chapter 5 of 6 View all →

Object Tracking Metrics: MOTA, MOTP, IDF1, and HOTA

Tracking adds identity over time, so its metrics score two things at once — detecting objects and keeping their IDs consistent. MOTA, MOTP, ID switches, IDF1, and the modern HOTA that balances detection against association — on one running door-cam example, with the equations and motmetrics.

Luis Condados · · Updated June 6, 2026
Object Tracking Metrics: MOTA, MOTP, IDF1, and HOTA

A tracker can detect every object perfectly and still be useless if it keeps swapping their IDs. That’s why tracking needs metrics that score detection and association together — and why no single number did it well until HOTA. We’ll watch one door camera make exactly one identity mistake and see how differently each metric reacts.

Multi-object tracking (MOT) outputs boxes with consistent IDs across frames. Per frame it’s detection — match hypotheses to ground truth by IoU — but the new axis is whether an object keeps the same ID over its whole trajectory.

The running example: DoorCam, two people, one slip

DoorCam films a doorway for 5 frames. Two people, A and B, are present the whole time — so there are 2×5=102 \times 5 = 10 ground-truth boxes. DoorCam detects every box perfectly (no misses, no ghosts) with one flaw: halfway through, it loses person A for a beat and re-labels them with a new ID. One identity slip, otherwise flawless.

frame12345AID switch ✂Beach colour = one predicted ID · A’s colour changes at the switch · B keeps one ID
DoorCam’s 5 frames. B holds one ID (green) the whole way; A’s ID flips from blue to pink after frame 2 — a single ID switch on otherwise-perfect detection.

MOTA — the classic detection-centric score

Intuition: add up everything that went wrong per frame — misses, false alarms, ID switches — and divide by how many objects there were.

From the CLEAR MOT metrics [1]:

MOTA=1t(FNt+FPt+IDSWt)tGTt.\text{MOTA} = 1 - \frac{\sum_t \big(FN_t + FP_t + \text{IDSW}_t\big)}{\sum_t GT_t}.

MOTP — localization quality

Intuition: of the boxes you did match, how tightly do they fit? — average overlap, nothing about identity.

MOTP=t,iIoU(pt,i,gt,i)tct,\text{MOTP} = \frac{\sum_{t,i} \text{IoU}(p_{t,i}, g_{t,i})}{\sum_t c_t},

where ctc_t is the number of matches in frame tt. For DoorCam, if the 10 matched boxes average IoU 0.82, then MOTP = 0.82 — a quality-of-fit number orthogonal to everything else, and silent about the ID slip.

IDF1 — the identity-centric score

Intuition: forget per-frame counting — ask “for how much of each person’s life did we keep one consistent ID on them?”

IDF1 [2] solves one global assignment between predicted and true trajectories, then takes an F1 over identity matches:

IDF1=2IDTP2IDTP+IDFP+IDFN.\text{IDF1} = \frac{2\,\text{IDTP}}{2\,\text{IDTP} + \text{IDFP} + \text{IDFN}}.

HOTA — the modern, balanced standard

Intuition: score detection and association separately, then take their geometric mean — so a tracker must be good at both; being great at one can’t paper over the other.

HOTA [3]:

HOTA=DetAAssA,\text{HOTA} = \sqrt{\text{DetA} \cdot \text{AssA}},

where DetA is detection accuracy (Jaccard over matched detections) and AssA is association accuracy averaged over correctly-matched pairs (HOTA is itself averaged over localization thresholds α\alpha).

0.90MOTA0.87HOTA0.80IDF1
Same tracker, one ID switch: MOTA shrugs (0.90), IDF1 punishes (0.80), HOTA balances (0.87). The spread is the disagreement about how much identity matters.

Now you try

Three calculators, one per metric. Push IDSW up in the MOTA panel and watch how little it moves — then drop AssA in the HOTA panel and watch HOTA fall hard. That contrast is the whole reason the field moved to HOTA.

MOTA detection-centric
1 − (FN + FP + IDSW) / GT
IDF1 identity-centric
2·IDTP / (2·IDTP + IDFP + IDFN)
HOTA balanced
√(DetA · AssA)

In code

For MOTA / MOTP / IDF1, the motmetrics library is the standard:

import motmetrics as mm

acc = mm.MOTAccumulator(auto_id=True)

# For each frame, give GT ids, hypothesis ids, and a cost matrix (e.g. 1 - IoU).
acc.update(
    [1, 2],                      # ground-truth object ids present this frame
    ["a", "b"],                  # tracker hypothesis ids
    [[0.1, 0.9],                 # cost (1 - IoU), shape: n_gt x n_hyp
     [0.8, 0.2]],
)

mh = mm.metrics.create()
summary = mh.compute(
    acc,
    metrics=["mota", "motp", "idf1", "num_switches", "mostly_tracked", "mostly_lost"],
    name="seq1",
)
print(summary)

For HOTA specifically, use the official TrackEval toolkit — it’s the reference implementation the benchmarks score against.

Caveats & common pitfalls

  • No single classic number is enough. MOTA is detection-dominated (DoorCam: 0.90) and IDF1 association-dominated (0.80); reporting only one hides half the story. HOTA exists exactly because of this [3] — quote it, but keep DetA/AssA visible.
  • MOTA can go negative and isn’t a percentage. Treat it as an error budget, not an accuracy you can compare loosely across datasets [1].
  • Everything rides on the matching threshold and the detector. Tracking metrics inherit the IoU-matching choices from detection; a different threshold reshuffles ID switches and FPs.
  • Use the reference implementations. MOTA/MOTP/IDF1 from motmetrics, HOTA from TrackEval — hand-rolled global assignment gets the edge cases (gaps, re-entries, crowd regions) subtly wrong.

Takeaways

  • Tracking scores two things: detection and identity. No single classic metric captured both — DoorCam’s one ID switch scored 0.90, 0.80, or 0.87 depending on who’s asking.
  • MOTA = detection-centric (FN + FP + ID switches), can be negative; MOTP = localization quality only.
  • IDF1 = identity-centric via global trajectory matching; MT/ML summarize trajectory coverage.
  • HOTA = √(DetA · AssA) balances the two and is the current standard — report it, and read DetA vs AssA to see which half failed.

Next, the hardest to pin down — scoring images that have no ground truth → Image generation metrics: FID, IS, KID, LPIPS.

Further reading

References

[1] Bernardin, K., & Stiefelhagen, R. (2008). Evaluating Multiple Object Tracking Performance: The CLEAR MOT Metrics. EURASIP Journal on Image and Video Processing, 2008, 246309. DOI:10.1155/2008/246309.

[2] Ristani, E., Solera, F., Zou, R., Cucchiara, R., & Tomasi, C. (2016). Performance Measures and a Data Set for Multi-Target, Multi-Camera Tracking. ECCV Workshops. arXiv:1609.01775. (Defines IDF1.)

[3] Luiten, J., Os̆ep, A., Dendorfer, P., Torr, P., Geiger, A., Leal-Taixé, L., & Leibe, B. (2021). HOTA: A Higher Order Metric for Evaluating Multi-Object Tracking. International Journal of Computer Vision, 129, 548–578. DOI:10.1007/s11263-020-01375-2.

[4] Dendorfer, P., et al. (2021). MOTChallenge: A Benchmark for Single-Camera Multiple Target Tracking. International Journal of Computer Vision, 129, 845–881. Tooling: motmetrics, TrackEval.

[5] Forsyth, D. A., & Ponce, J. (2012). Computer Vision: A Modern Approach (2nd ed.), ch. 11 (tracking). Pearson.