This repository contains a highly configurable two-stage-tracker that adjusts to different deployment scenarios. The detections generated by YOLOv5, a family of object detection architectures and models pretrained on the COCO dataset, are passed to the tracker of your choice. Supported ones at the moment are: StrongSORT OSNet and OCSORT. They can track any object that your Yolov5 model was trained to detect.
- Yolov5 training (link to external repository)
- Deep appearance descriptor training (link to external repository)
- ReID model export to ONNX, OpenVINO, TensorRT and TorchScript
- Clone the repository recursively:
git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet.git
If you already cloned and forgot to use --recurse-submodules
you can run git submodule update --init
- Make sure that you fulfill all the requirements: Python 3.8 or later with all requirements.txt dependencies installed, including torch>=1.7. To install, run:
pip install -r requirements.txt
$ python track.py --tracking-method strongsort
ocsort
Tracking can be run on most video formats
$ python track.py --source 0 # webcam
img.jpg # image
vid.mp4 # video
path/ # directory
path/*.jpg # glob
'https://youtu.be/Zgi9g1ksQHc' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
There is a clear trade-off between model inference speed and accuracy. In order to make it possible to fulfill your inference speed/accuracy needs you can select a Yolov5 family model for automatic download
$ python track.py --source 0 --yolo-weights yolov5n.pt --img 640
yolov5s.tflite
yolov5m.pt
yolov5l.onnx
yolov5x.pt --img 1280
...
The above applies to StrongSORT models as well. Choose a ReID model based on your needs from this ReID model zoo
$ python track.py --source 0 --strong-sort-weights osnet_x0_25_market1501.pt
mobilenetv2_x1_4_msmt17.engine
resnet50_msmt17.onnx
osnet_x1_0_msmt17.pt
...
By default the tracker tracks all MS COCO classes.
If you only want to track persons I recommend you to get these weights for increased performance
python track.py --source 0 --yolo-weights yolov5/weights/crowdhuman_yolov5m.pt --classes 0 # tracks persons, only
If you want to track a subset of the MS COCO classes, add their corresponding index after the classes flag
python track.py --source 0 --yolo-weights yolov5s.pt --classes 16 17 # tracks cats and dogs, only
Here is a list of all the possible objects that a Yolov5 model trained on MS COCO can detect. Notice that the indexing for the classes in this repo starts at zero.
Can be saved to your experiment folder runs/track/<yolo_model>_<deep_sort_model>/
by
python track.py --source ... --save-txt
If you find this project useful in your research, please consider cite:
@misc{yolov5-strongsort-osnet-2022,
title={Real-time multi-camera multi-object tracker using YOLOv5 and StrongSORT with OSNet},
author={Mikel Broström},
howpublished = {\url{https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet}},
year={2022}
}
For Yolov5 DeepSort OSNet bugs and feature requests please visit GitHub Issues. For business inquiries or professional support requests please send an email to: [email protected]