Multi-object tracking
ByteTrack
Motion-only tracker that holds IDs through short occlusions.
About this model
ByteTrack is a pure C++ multi-object tracker. There is no ONNX file: a Kalman motion model and two-stage IoU association rescue low-confidence detections to keep tracks alive across short occlusions.
Feed it a YOLO DetectionResult per frame. The tracker assigns a stable trackId to each surviving detection. The tracker itself adds under 1 ms per frame; the rest of the budget goes to the upstream detector.
What you can build
- Count unique people walking past a camera over an hour.
- Hold IDs across brief occlusions in a retail aisle scene.
- Drive simple analytics from a single-camera live feed.
- Run a low-cost tracker when no appearance embedding is available.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17 (per frame, includes YOLO)
See original catalog hardware notes · CPU
87.5 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/pipelines/tracking/tracking_pipeline.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("yolo.model", "weights/yolo11n.onnx");
config.set("tracking.algorithm", "bytetrack");
config.set("tracking.maxAge", 30);
config.set("tracking.minHits", 1);
config.set("tracking.iouThreshold", 0.3);
imaged::SDK::TrackingPipeline pipeline;
pipeline.load(config);
for (auto& frame : frames) {
auto tracked = pipeline.update(frame);
// tracked.detections[i].trackId is stable across frames
}