TrackEval
HOTA (and other) evaluation metrics for Multi-Object Tracking (MOT).
Install / Use
/learn @JonathonLuiten/TrackEvalREADME
TrackEval
Code for evaluating object tracking.
This codebase provides code for a number of different tracking evaluation metrics (including the HOTA metrics), as well as supporting running all of these metrics on a number of different tracking benchmarks. Plus plotting of results and other things one may want to do for tracking evaluation.
NEW: RobMOTS Challenge 2021
Call for submission to our RobMOTS Challenge (Robust Multi-Object Tracking and Segmentation) held in conjunction with our RVSU CVPR'21 Workshop. Robust tracking evaluation against 8 tracking benchmarks. Challenge submission deadline June 15th. Also check out our workshop call for papers.
Official Evaluation Code
The following benchmarks use TrackEval as their official evaluation code, check out the links to see TrackEval in action:
- RobMOTS (Official Readme)
- KITTI Tracking
- KITTI MOTS
- MOTChallenge (Official Readme)
- Open World Tracking (Official Readme)
- PersonPath22
If you run a tracking benchmark and want to use TrackEval as your official evaluation code, please contact Jonathon (contact details below).
Currently implemented metrics
The following metrics are currently implemented:
Metric Family | Sub metrics | Paper | Code | Notes | |----- | ----------- |----- | ----------- | ----- | | | | | | | |HOTA metrics|HOTA, DetA, AssA, LocA, DetPr, DetRe, AssPr, AssRe|paper|code|Recommended tracking metric| |CLEARMOT metrics|MOTA, MOTP, MT, ML, Frag, etc.|paper|code| | |Identity metrics|IDF1, IDP, IDR|paper|code| | |VACE metrics|ATA, SFDA|paper|code| | |Track mAP metrics|Track mAP|paper|code|Requires confidence scores| |J & F metrics|J&F, J, F|paper|code|Only for Seg Masks| |ID Euclidean|ID Euclidean|paper|code| |
Currently implemented benchmarks
The following benchmarks are currently implemented:
Benchmark | Sub-benchmarks | Type | Website | Code | Data Format | |----- | ----------- |----- | ----------- | ----- | ----- | | | | | | | | |RobMOTS|Combination of 8 benchmarks|Seg Masks|website|code|format| |Open World Tracking|TAO-OW|OpenWorld / Seg Masks|website|code|format| |MOTChallenge|MOT15/16/17/20|2D BBox|website|code|format| |KITTI Tracking| |2D BBox|website|code|format| |BDD-100k| |2D BBox|website|code|format| |TAO| |2D BBox|website|code|format| |MOTS|KITTI-MOTS, MOTS-Challenge|Seg Mask|website|code and code|format| |DAVIS|Unsupervised|Seg Mask|website|code|format| |YouTube-VIS| |Seg Mask|website|code|format| |Head Tracking Challenge| |2D BBox|website|code|format| |PersonPath22| |2D BBox|website|code|format| |BURST| {Common, Long-tail, Open-world} Class-guided, {Point, Box, Mask} Exemplar-guided |Seg Mask|website|format|
HOTA metrics
This code is also the official reference implementation for the HOTA metrics:
HOTA: A Higher Order Metric for Evaluating Multi-Object Tracking. IJCV 2020. Jonathon Luiten, Aljosa Osep, Patrick Dendorfer, Philip Torr, Andreas Geiger, Laura Leal-Taixe and Bastian Leibe.
HOTA is a novel set of MOT evaluation metrics which enable better understanding of tracking behavior than previous metrics.
For more information check out the following links:
- Short blog post on HOTA - HIGHLY RECOMMENDED READING
- IJCV version of paper (Open Access)
- ArXiv version of paper
- Code
Properties of this codebase
The code is written 100% in python with only numpy and scipy as minimum requirements.
The code is designed to be easily understandable and easily extendable.
The code is also extremely fast, running at more than 10x the speed of the both MOTChallengeEvalKit, and py-motmetrics (see detailed speed comparison below).
The implementation of CLEARMOT and ID metrics aligns perfectly with the MOTChallengeEvalKit.
By default the code prints results to the screen, saves results out as both a summary txt file and a detailed results csv file, and outputs plots of the results. All outputs are by default saved to the 'tracker' folder for each tracker.
Running the code
The code can be run in one of two ways:
- From the terminal via one of the scripts here. See each script for instructions and arguments, hopefully this is self-explanatory.
- Directly by importing this package into your code, see the same scripts above for how.
Quickly evaluate on supported benchmarks
To enable you to use TrackEval for evaluation as quickly and easily as possible, we provide ground-truth data, meta-data and example trackers for all currently supported benchmarks. You can download this here: data.zip (~150mb).
The data for RobMOTS is separate and can be found here: rob_mots_train_data.zip (~750mb).
The data for PersonPath22 is separate and can be found here: person_path_22_data.zip (~3mb).
The easiest way to begin is to extract this zip into the repository root folder such that the file paths look like: TrackEval/data/gt/...
This then corresponds to the default paths in the code. You can now run each of the scripts here without providing any arguments and they will by default evaluate all trackers present in the supplied file structure. To evaluate your own tracking results, simply copy your files as a new tracker folder into the file structure at the same level as the example trackers (MPNTrack, CIWT, track_rcnn, qdtrack, ags, Tracktor++, STEm_Seg), ensuring the same file structure for your trackers as in the example.
Of course, if your ground-truth and tracker files are located somewhere else you can simply use the script arguments to point the code toward your data.
To ensure your tracker outputs data in the correct format, check out our format guides for each of the supported benchmarks here, or check out the example trackers provided.
Evaluate on your own custom benchmark
To evaluate on your own data, you have two options:
- Write custom dataset code (more effort, rarely worth it).
- Convert your current dataset and trackers to the same format of an already implemented benchmark.
To convert formats, check out the format specifications defined here.
By default, we would recommend the MOTChallenge format, although any implemented format should work. Note that for many cases you will want to use the argument --DO_PREPROC False unless you want to run preprocessing to remove distractor objects.
Requirements
Code tested on Python 3.7.
- Minimum requirements: numpy, scipy
- For plotting: matplot
Related Skills
node-connect
331.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
81.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
331.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
81.5kCommit, push, and open a PR
