Benchmark · 10 GPUs · 6 trackers

YOLO tracker benchmarks

Six trackers, one clip, the same detector, timed on 10 NVIDIA GPUs for speed and ID-stability. Quick pick by use case:

  • Real-time videoByteTrack / FastTrack
  • Moving camera (drone, dashcam)BoT-SORT
  • Crowded or occluded scenesDeep OC-SORT
  • Offline, maximum accuracyTrackTrack
Fastest raw FPS
Deep OC-SORT

Led raw FPS on 8 of the 10 GPU tiers. ByteTrack tops the H100, FastTrack the T4.

Most stable IDs
TrackTrack

Only 4 ID fragmentations, the fewest track breaks of any tracker, though it is the slowest to run.

Best real-time balance
ByteTrack

Past 100 FPS on modern GPUs with no Re-ID model to load and few ID fragmentations, the practical default for live video.

Trackers
6

ByteTrack, FastTrack, Deep OC-SORT, BoT-SORT, TrackTrack, OC-SORT.

GPU tiers
10

NVIDIA hardware from the NVIDIA T4 up to the NVIDIA B200.

Timed runs
60

Every tracker on every GPU, same clip and same detector each time.

Peak throughput
155 FPS

Deep OC-SORT on the NVIDIA RTX PRO 6000, end to end including detection.

Steadiest IDs
4

Track breaks from TrackTrack, the fewest of any tracker here.

Head-to-heads
15

Every pair of trackers compared on its own page, linked below.

ID-stability: what a fragmentation actually looks like

How well a tracker holds a single, consistent ID on each object is a property of the algorithm, not the GPU, so these numbers barely move across hardware; we report them once (measured on the NVIDIA H100). This clip has no MOT ground truth, so instead of MOTA/IDF1 we report the raw stability signals: how many distinct IDs the tracker created, how many times a track was broken (fragmentations), and the average track length. Fewer IDs and fewer fragmentations mean steadier identities.

TrackerApproachUnique IDsFragmentationsAvg track length
TrackTrackMotion + Re-ID7467.4
BoT-SORTMotion + camera comp.141661.7
ByteTrackMotion only141766.9
FastTrackMotion + Re-ID122483.8
Deep OC-SORTMotion + Re-ID124280.4
OC-SORTMotion only7911329.6

Speed by GPU

Speed is the number that actually changes with the hardware. Choose a GPU to rank every tracker fastest-first. The bars re-sort instantly so you can see how much your hardware and tracker choice matter. End-to-end detection + tracking throughput (frames per second, higher is better) for all 6 trackers across all 10 GPU tiers. GPUs are ordered flagship-first.

Show GPUs
Frames per second for 6 trackers across 10 GPU tiers. ByteTrack ranges 57 to 147 FPS; FastTrack ranges 61 to 147 FPS; Deep OC-SORT ranges 60 to 155 FPS; BoT-SORT ranges 6 to 15 FPS; TrackTrack ranges 9 to 22 FPS; OC-SORT ranges 41 to 62 FPS.04080120160FPSB200H200H100RTX PRO 6000A100 80GBA100 40GBL40SA10L4T4
  • ByteTrack
  • FastTrack
  • Deep OC-SORT
  • BoT-SORT
  • TrackTrack
  • OC-SORT

How to choose the right tracker

You need real-time speed

ByteTrack or FastTrack. Both pass 100 FPS on modern GPUs with no Re-ID model to load.

Your camera moves

BoT-SORT. Its motion compensation was built for drones, dashcams and handheld footage.

Scenes are crowded or occluded

Deep OC-SORT. Appearance Re-ID recovers an ID after an object is briefly hidden.

Correctness beats speed

TrackTrack. The fewest ID breaks here, for offline analytics, labeling and research.

Methodology

  • Same input for everyone. Every tracker ran on the identical 200-frame test clip with the same yolo26n.pt detector, so only the tracker changes.
  • Speed, per GPU. FPS and ms/frame are the end-to-end detection + tracking rate measured on each of the 10 GPU tiers, so you can match a tracker to the hardware you actually run.
  • Stability, measured once. ID-stability is hardware-independent, so unique-ID, fragmentation and track-length figures are reported from a single GPU. We do not publish MOTA/IDF1 because this clip has no MOT ground truth; those belong on a labeled dataset like MOT17.
  • Reproducible. All six trackers ship inside Ultralytics; the same run works on your own footage by pointing the code below at a different clip.

Measure it yourself

The exact local recipe behind these numbers: load a YOLO model once, run one tracker frame by frame, and collect FPS, latency and ID-stability. Swap the single tracker line to compare any of the six.

import time
from collections import defaultdict

import cv2
from ultralytics import YOLO

# 1. Load the detector once, then reuse it for every tracker you compare.
model = YOLO("yolo26n.pt")

# swap: botsort / fasttrack / deepocsort / ocsort / tracktrack
tracker = "bytetrack.yaml"

# 2. Read a short clip into memory (128-300 frames is plenty).
cap = cv2.VideoCapture("clip.mp4")
frames = []
while cap.isOpened() and len(frames) < 200:
    ok, frame = cap.read()
    if not ok:
        break
    frames.append(frame)
cap.release()

# 3. Run the tracker frame by frame, timing only the track() call.
unique_ids, last_seen, track_len = set(), {}, defaultdict(int)
fragmentations, total_time = 0, 0.0

for i, frame in enumerate(frames):
    t0 = time.perf_counter()
    preds = model.track(frame,
                        tracker=tracker,
                        persist=True,
                        verbose=False)
    total_time += time.perf_counter() - t0

    boxes = preds[0].boxes
    if boxes is None or boxes.id is None:
        continue

    for tid in boxes.id.int().tolist():
        # A fragmentation = an ID that
        # vanished for >=1 frame, then came back.
        if tid in last_seen and i - last_seen[tid] > 1:
            fragmentations += 1
        last_seen[tid] = i
        unique_ids.add(tid)
        track_len[tid] += 1

# 4. The metrics reported on this page.
print(f"FPS:            {len(frames) / total_time:.1f}")
print(f"ms/frame:       {total_time / len(frames) * 1000:.1f}")
print(f"unique IDs:     {len(unique_ids)}")
print(f"fragmentations: {fragmentations}")
print(f"avg track len:  {sum(track_len.values()) / len(track_len):.1f}")

Install once with pip install ultralytics opencv-python, then run it on your own clip.

Blog

From the blog

Tutorials, code, and notes on computer vision, deep learning, and applied AI.

Frequently asked questions

Which YOLO tracker is the fastest?
Deep OC-SORT posted the highest FPS on most GPUs in this benchmark, leading on 8 of the 10 tiers, with ByteTrack fastest on the H100 and FastTrack on the T4. All three clear roughly 100 FPS on an H100 with YOLO26n. TrackTrack and BoT-SORT (with Re-ID and camera-motion compensation enabled) were the slowest, often under 15 FPS.
Which tracker keeps object IDs the most stable?
TrackTrack produced the fewest ID fragmentations of any tracker, followed by BoT-SORT, ByteTrack and FastTrack. Motion-only OC-SORT produced by far the most unique IDs and fragmentations on this clip, because without an appearance model it starts a new ID whenever an object is briefly occluded. ID-stability is a property of the algorithm, so it is essentially the same on every GPU.
Does a more expensive GPU make tracking more accurate?
No. A faster GPU only makes tracking run faster; it does not change how accurately the tracker follows objects. Accuracy and ID-stability depend on the tracking algorithm and your detector, not the hardware. That is why this page reports speed per GPU, but ID-stability only once.
How was this YOLO tracker benchmark run?
Every tracker ran on the same 200-frame clip with the same yolo26n.pt detector, on each of the 10 GPU tiers. FPS is the end-to-end detection-plus-tracking rate. All six trackers are built into Ultralytics, so results are reproducible with a single script.
Which tracker should I use for a real-time application?
For real-time or edge deployments, ByteTrack and FastTrack are the safe defaults: they run well past real time (100+ FPS on modern GPUs) and stay lightweight with no Re-ID model to load. Deep OC-SORT actually posted the highest raw FPS on most GPUs here, so test it too if you want its Re-ID for steadier IDs through occlusion. If your camera moves (drones, dashcams), BoT-SORT's motion compensation is worth the extra compute. Reserve TrackTrack for offline analysis where identity correctness matters more than speed.