This is an implementation of MOT (Multiple Object Tracking) tracking algorithm deep sort. Deep sort is basically the same with sort but has an added CNN model to extract features in image of human part bounded by a detector.
This CNN model is indeed a RE-ID model and the detector used in PAPER using FasterRCNN, and the original source code is HERE.
This implementation replaces the tensorflow-based CNN modle with a PyTorch implementation, and replaces FasterRCNN with YOLOv3 for bbox generation.
- python 3
- numpy
- scipy
- opencv-python
- sklearn
- torch >= 0.4
- torchvision >= 0.1
- pillow
- vizer
- edict
Pre-requisites:
- Check all dependencies installed
pipenv install
# configure pre-commit hooks (black, isort)
pre-commit install
-
Download YOLOv3 parameters
make get-yolov3-weights
OR
cd detector/YOLOv3/weights/
wget https://pjreddie.com/media/files/yolov3.weights
wget https://pjreddie.com/media/files/yolov3-tiny.weights
cd ../../../
- Download deepsort parameters ckpt.t7
cd deep_sort/deep/checkpoint
# download ckpt.t7 from
https://drive.google.com/drive/folders/1xhG0kRH1EX5B9_Iz8gQJb7UNnn_riXi6 to this folder
cd ../../../
- Compile nms module
cd detector/YOLOv3/nms
sh build.sh
cd ../../..
Notice:
If compiling failed, the simplist way is to **Upgrade your pytorch >= 1.1 and torchvision >= 0.3" and you can avoid the troublesome compiling problems which are most likely caused by either gcc version too low
or libraries missing
.
- Run demo
usage: python yolov3_deepsort.py VIDEO_PATH
[--help]
[--frame_interval FRAME_INTERVAL]
[--config_detection CONFIG_DETECTION]
[--config_deepsort CONFIG_DEEPSORT]
[--ignore_display]
[--display_width DISPLAY_WIDTH]
[--display_height DISPLAY_HEIGHT]
[--save_path SAVE_PATH]
[--cpu]
# yolov3 + deepsort
python yolov3_deepsort.py [VIDEO_PATH]
# yolov3_tiny + deepsort
python yolov3_deepsort.py [VIDEO_PATH] --config_detection ./configs/yolov3_tiny.yaml
# yolov3 + deepsort on webcam
python3 yolov3_deepsort.py /dev/video0 --camera 0
# yolov3_tiny + deepsort on webcam
python3 yolov3_deepsort.py /dev/video0 --config_detection ./configs/yolov3_tiny.yaml --camera 0
If you dont support X server, use --ignore_display
to disable display.
Results will be saved to ./demo/demo.avi
.
All files above can also be accessed from BaiduDisk!
linker:BaiduDisk
passwd:fbuw
The original model used in paper is in original_model.py, and its parameter here original_ckpt.t7.
To train the model, first you need download Market1501 dataset or Mars dataset.
Then you can try train.py to train your own parameter and evaluate it using test.py and evaluate.py.
-
paper: Simple Online and Realtime Tracking with a Deep Association Metric
-
code: nwojke/deep_sort
-
paper: YOLOv3
-
code: Joseph Redmon/yolov3