BoT-SORT: Robust Associations Multi-Pedestrian Tracking
Nir Aharon, Roy Orfaig, Ben-Zion Bobrovsky
https://arxiv.org/abs/2206.14651
Das Ziel des Multi-Object-Trackings (MOT) besteht darin, alle Objekte in einer Szene zu erkennen und zu verfolgen und dabei für jedes Objekt eine eindeutige Kennung beizubehalten. In diesem Artikel stellen wir einen neuen robusten Tracker auf dem neuesten Stand der Technik vor, der die Vorteile von Bewegungs- und Erscheinungsinformationen mit Kamerabewegungskompensation und einem genaueren Kalman-Filter-Zustandsvektor kombinieren kann. Unsere neuen Tracker BoT-SORT und BoT-SORT-ReID belegen in den Datensätzen von MOTChallenge [29, 11] sowohl für MOT17- als auch für MOT20-Testsätze den ersten Platz in Bezug auf alle wichtigen MOT-Metriken: MOTA, IDF1 und HOTA. Für MOT17: 80,5 MOTA, 80,2 IDF1 und 65,0 HOTA werden erreicht.
Tracker | MOTA | IDF1 | HOTA |
---|---|---|---|
BoT-SORT | 80,6 | 79,5 | 64,6 |
BoT-SORT-ReID | 80,5 | 80.2 | 65,0 |
Tracker | MOTA | IDF1 | HOTA |
---|---|---|---|
BoT-SORT | 77,7 | 76,3 | 62,6 |
BoT-SORT-ReID | 77,8 | 77,5 | 63.3 |
Der Code wurde auf Ubuntu 20.04 getestet
Der BoT-SORT-Code basiert auf ByteTrack und FastReID.
Weitere Einrichtungsoptionen finden Sie in den Installationshandbüchern.
Schritt 1. Erstellen Sie eine Conda-Umgebung und installieren Sie Pytorch.
conda create -n botsort_env python=3.7
conda activate botsort_env
Schritt 2. Installieren Sie Torch und passende Torchvision von pytorch.org.
Der Code wurde mit Torch 1.11.0+cu113 und Torchvision==0.12.0 getestet
Schritt 3. BoT-SORT installieren.
git clone https://github.com/NirAharon/BoT-SORT.git
cd BoT-SORT
pip3 install -r requirements.txt
python3 setup.py develop
Schritt 4. Pycocotools installieren.
pip3 install cython ; pip3 install ' git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI '
Schritt 5. Andere
# Cython-bbox
pip3 install cython_bbox
# faiss cpu / gpu
pip3 install faiss-cpu
pip3 install faiss-gpu
Laden Sie MOT17 und MOT20 von der offiziellen Website herunter. Und bringen Sie sie in die folgende Struktur:
<dataets_dir>
│
├── MOT17
│ ├── train
│ └── test
│
└── MOT20
├── train
└── test
Für das Training der ReID müssen Erkennungspatches wie folgt generiert werden:
cd < BoT-SORT_dir >
# For MOT17
python3 fast_reid/datasets/generate_mot_patches.py --data_path < dataets_dir > --mot 17
# For MOT20
python3 fast_reid/datasets/generate_mot_patches.py --data_path < dataets_dir > --mot 20
Datensatz mit FastReID- export FASTREID_DATASETS=<BoT-SORT_dir>/fast_reid/datasets
verknüpfen. Wenn es nicht festgelegt ist, ist der Standardwert fast_reid/datasets
Laden Sie die trainierten Modelle herunter und speichern Sie sie wie folgt im Ordner „pretrained“:
<BoT-SORT_dir>/pretrained
Für die YOLOX-Objekterkennung haben wir den öffentlich verfügbaren ByteTrack-Modellzoo verwendet, der auf MOT17, MOT20 und Ablationsstudien trainiert wurde.
Unsere trainierten ReID-Modelle können unter MOT17-SBS-S50, MOT20-SBS-S50 heruntergeladen werden.
Für Mehrklassen-TÜV verwenden Sie YOLOX oder YOLOv7, das auf COCO (oder beliebigen benutzerdefinierten Gewichten) trainiert wurde.
Nach der Erstellung des MOT-ReID-Datensatzes wie im Abschnitt „Datenvorbereitung“ beschrieben.
cd < BoT-SORT_dir >
# For training MOT17
python3 fast_reid/tools/train_net.py --config-file ./fast_reid/configs/MOT17/sbs_S50.yml MODEL.DEVICE " cuda:0 "
# For training MOT20
python3 fast_reid/tools/train_net.py --config-file ./fast_reid/configs/MOT20/sbs_S50.yml MODEL.DEVICE " cuda:0 "
Weitere Erläuterungen und Optionen finden Sie im FastReID-Repository.
Wenn Sie die in diesem Teil erstellten TXT-Dateien an die MOTChallenge-Website senden, können Sie die gleichen Ergebnisse wie in der Arbeit erhalten.
Eine sorgfältige Abstimmung der Tracking-Parameter könnte zu einer höheren Leistung führen. In der Arbeit wenden wir die Kalibrierung von ByteTrack an.
cd < BoT-SORT_dir >
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --with-reid --benchmark " MOT17 " --eval " test " --fp16 --fuse
python3 tools/interpolation.py --txt_path < path_to_track_result >
cd < BoT-SORT_dir >
python3 tools/track.py < dataets_dir/MOT 20> --default-parameters --with-reid --benchmark " MOT20 " --eval " test " --fp16 --fuse
python3 tools/interpolation.py --txt_path < path_to_track_result >
cd < BoT-SORT_dir >
# BoT-SORT
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --benchmark " MOT17 " --eval " val " --fp16 --fuse
# BoT-SORT-ReID
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --with-reid --benchmark " MOT17 " --eval " val " --fp16 --fuse
Andere Parameter können verwendet werden, ohne das Flag --default-parameters zu übergeben.
Für die Evaluierung der Zug- und Validierungssets empfehlen wir die Verwendung des offiziellen MOTChallenge-Evaluierungscodes von TrackEval.
# For all the available tracking parameters, see:
python3 tools/track.py -h
Andere Parameter können verwendet werden, ohne das Flag --default-parameters zu übergeben.
Für die Evaluierung der Zug- und Validierungssets empfehlen wir die Verwendung des offiziellen MOTChallenge-Evaluierungscodes von TrackEval.
# For all the available tracking parameters, see:
python3 tools/track_yolov7.py -h
Demo mit BoT-SORT(-ReID) basierendem YOLOX und Multi-Class.
cd < BoT-SORT_dir >
# Original example
python3 tools/demo.py video --path < path_to_video > -f yolox/exps/example/mot/yolox_x_mix_det.py -c pretrained/bytetrack_x_mot17.pth.tar --with-reid --fuse-score --fp16 --fuse --save_result
# Multi-class example
python3 tools/mc_demo.py video --path < path_to_video > -f yolox/exps/example/mot/yolox_x_mix_det.py -c pretrained/bytetrack_x_mot17.pth.tar --with-reid --fuse-score --fp16 --fuse --save_result
Demo mit BoT-SORT(-ReID) basierendem YOLOv7 und Multi-Class.
cd < BoT-SORT_dir >
python3 tools/mc_demo_yolov7.py --weights pretrained/yolov7-d6.pt --source < path_to_video/images > --fuse-score --agnostic-nms (--with-reid)
Unser Kamerabewegungskompensationsmodul basiert auf der OpenCV contrib C++-Version von VideoStab Global Motion Estimation, für die es derzeit keine Python-Version gibt.
Bewegungsdateien können mit dem C++-Projekt „VideoCameraCorrection“ im GMC-Ordner generiert werden.
Die generierten Dateien können vom Tracker aus genutzt werden.
Darüber hinaus stehen Python-basierte Techniken zur Bewegungsschätzung zur Verfügung, die durch Vorbeigehen ausgewählt werden können
'--cmc-method' <Dateien | Kugel | ecc> zu demo.py oder track.py.
@article{aharon2022bot,
title={BoT-SORT: Robust Associations Multi-Pedestrian Tracking},
author={Aharon, Nir and Orfaig, Roy and Bobrovsky, Ben-Zion},
journal={arXiv preprint arXiv:2206.14651},
year={2022}
}
Ein großer Teil der Codes, Ideen und Ergebnisse ist von ByteTrack, StrongSORT, FastReID, YOLOX und YOLOv7 entlehnt. Vielen Dank für ihre hervorragende Arbeit!