Skip to main content

SORT

A simple online and realtime tracking algorithm for 2D multiple object tracking in video sequences. See an example video here.

By Alex Bewley

Introduction

SORT is a barebones implementation of a visual multiple object tracking framework based on rudimentary data association and state estimation techniques. It is designed for online tracking applications where only past and current frames are available and the method produces object identities on the fly. While this minimalistic tracker doesn't handle occlusion or re-entering objects its purpose is to serve as a baseline and testbed for the development of future trackers.

SORT was initially described in this paper. At the time of the initial publication, SORT was ranked the best open source multiple object tracker on the MOT benchmark.

Note: A significant proportion of SORT's accuracy is attributed to the detections. For your convenience, this repo also contains Faster RCNN detections for the MOT benchmark sequences in the benchmark format. To run the detector yourself please see the original Faster RCNN project or the python reimplementation of py-faster-rcnn by Ross Girshick.

Also see: A new and improved version of SORT with a Deep Association Metric implemented in tensorflow is available at https://github.com/nwojke/deep_sort .

License

SORT is released under the GPL License (refer to the LICENSE file for details) to promote the open use of the tracker and future improvements. If you require a permissive license contact Alex (alex@bewley.ai).

Citing SORT

If you find this repo useful in your research, please consider citing:

@inproceedings{Bewley2016_sort,
  author={Bewley, Alex and Ge, Zongyuan and Ott, Lionel and Ramos, Fabio and Upcroft, Ben},
  booktitle={2016 IEEE International Conference on Image Processing (ICIP)},
  title={Simple online and realtime tracking},
  year={2016},
  pages={3464-3468},
  keywords={Benchmark testing;Complexity theory;Detectors;Kalman filters;Target tracking;Visualization;Computer Vision;Data Association;Detection;Multiple Object Tracking},
  doi={10.1109/ICIP.2016.7533003}
}

Dependencies:

To install required dependencies run:

$ pip install -r requirements.txt

Demo:

To run the tracker with the provided detections:

$ cd path/to/sort
$ python sort.py

To display the results you need to:

  1. Download the 2D MOT 2015 benchmark dataset
  2. Create a symbolic link to the dataset
$ ln -s /path/to/MOT2015_challenge/data/2DMOT2015 mot_benchmark
  1. Run the demo with the --display flag
$ python sort.py --display

Main Results

Using the MOT challenge devkit the method produces the following results (as described in the paper).

Sequence Rcll Prcn FAR GT MT PT ML FP FN IDs FM MOTA MOTP MOTAL
TUD-Campus 68.5 94.3 0.21 8 6 2 0 15 113 6 9 62.7 73.7 64.1
ETH-Sunnyday 77.5 81.9 0.90 30 11 16 3 319 418 22 54 59.1 74.4 60.3
ETH-Pedcross2 51.9 90.8 0.39 133 17 60 56 330 3014 77 103 45.4 74.8 46.6
ADL-Rundle-8 44.3 75.8 1.47 28 6 16 6 959 3781 103 211 28.6 71.1 30.1
Venice-2 42.5 64.8 2.75 26 7 9 10 1650 4109 57 106 18.6 73.4 19.3
KITTI-17 67.1 92.3 0.26 9 1 8 0 38 225 9 16 60.2 72.3 61.3
Overall 49.5 77.5 1.24 234 48 111 75 3311 11660 274 499 34.0 73.3 35.1

Using SORT in your own project

Below is the gist of how to instantiate and update SORT. See the 'main' section of sort.py for a complete example.

from sort import *

#create instance of SORT
mot_tracker = Sort() 

# get detections
...

# update SORT
track_bbs_ids = mot_tracker.update(detections)

# track_bbs_ids is a np array where each row contains a valid bounding box and track_id (last column)
...

Metadata

Release files for sort-tracker-py 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for sort-tracker-py 1.0.2
File Interpreter ABI Platform Actions
sort_tracker_py-1.0.2-py3-none-any.whl Python 3 none any Details for sort_tracker_py-1.0.2-py3-none-any.whl

Release files / sort_tracker_py-1.0.2-py3-none-any.whl

Download URL sort_tracker_py-1.0.2-py3-none-any.whl
Size 19.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bccc64c1ebf699bc4e934e22811716ed221b0a68e3674e1f5ca76ddcee41452d
BLAKE2b-256 checksum
How to use checksums
8b51a0c0558cc4938ddda88a1f9d8b061ff7ad7683c31649391a3fa142b6005d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.25.1 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.6

Security for sort-tracker-py 1.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.2 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page