shaoshengsong/DeepSORT
A real-time multi-object tracking application in C++17 with Qt and ONNX Runtime that runs a YOLO detector with four pluggable trackers — ByteTrack, OC-SORT, Deep OC-SORT, and DeepSORT.
What it solves
DeepTracker is a real-time multi-object tracking (MOT) system for video. It allows a user to identify and maintain the identity of multiple objects (like people) across video frames, handling challenges such as occlusions, motion blur, and moving cameras.
How it works
The system uses a YOLO detector to find objects in each frame. It then applies one of four tracking algorithms to associate these detections with existing tracks. All trackers share a common C++ interface (ITracker) and a constant-velocity Kalman filter for motion prediction.
Depending on the chosen algorithm, the system associates objects using different methods:
- ByteTrack: Uses motion (IoU and confidence) to recover tracks lost to occlusion.
- OC-SORT: Focuses on motion (observation-centric) to handle blur and occlusion without needing appearance models.
- Deep OC-SORT: Combines motion and appearance features, adding Global Motion Compensation (GMC) for moving cameras.
- DeepSORT: Uses a combination of appearance embeddings (ReID) and squared-Mahalanobis motion gating to maintain identities.
Inference is handled via ONNX Runtime, allowing the use of .onnx models for detection and appearance encoding without needing to be recompiled.
Who it’s for
This project is for developers and researchers who need a high-performance C++ implementation of classic multi-object tracking algorithms for video analysis.
Highlights
- Multiple Algorithms: Supports ByteTrack, OC-SORT, Deep OC-SORT, and DeepSORT.
- Flexible Inference: Uses ONNX Runtime to support CPU, CUDA, DirectML, and OpenVINO providers.
- Harnesses YOLO: Integrates a YOLO detector for the initial object detection phase.
- Interactive GUI: Includes a Qt-based desktop application for interactive tracking and a command-line tool for scripting.
- Modular Architecture: All trackers implement a shared interface, making it easy to switch between algorithms with a single line of change.
Related
- Project
- Project
- Project
- Project