BoT-SORT : associations robustes de suivi multi-piétons
Nir Aharon, Roy Orfaig, Ben-Zion Bobrovsky
https://arxiv.org/abs/2206.14651
L'objectif du suivi multi-objets (MOT) est de détecter et de suivre tous les objets d'une scène, tout en conservant un identifiant unique pour chaque objet. Dans cet article, nous présentons un nouveau tracker robuste de pointe, capable de combiner les avantages des informations de mouvement et d'apparence, ainsi que la compensation du mouvement de la caméra et un vecteur d'état de filtre de Kalman plus précis. Nos nouveaux trackers BoT-SORT et BoT-SORT-ReID se classent au premier rang dans les ensembles de données de MOTChallenge [29, 11] sur les ensembles de tests MOT17 et MOT20, en termes de toutes les principales métriques MOT : MOTA, IDF1 et HOTA. Pour MOT17 : 80,5 MOTA, 80,2 IDF1 et 65,0 HOTA sont atteints.
Traqueur | MOTA | Tsahal1 | HOTA |
---|---|---|---|
Tri BoT | 80,6 | 79,5 | 64,6 |
BoT-SORT-ReID | 80,5 | 80,2 | 65,0 |
Traqueur | MOTA | Tsahal1 | HOTA |
---|---|---|---|
Tri BoT | 77,7 | 76,3 | 62,6 |
BoT-SORT-ReID | 77,8 | 77,5 | 63,3 |
Le code a été testé sur Ubuntu 20.04
Le code BoT-SORT est basé sur ByteTrack et FastReID.
Consultez leurs guides d'installation pour plus d'options de configuration.
Étape 1. Créez un environnement Conda et installez pytorch.
conda create -n botsort_env python=3.7
conda activate botsort_env
Étape 2. Installez la torche et la torchvision correspondante depuis pytorch.org.
Le code a été testé avec torch 1.11.0+cu113 et torchvision==0.12.0
Étape 3. Installez BoT-SORT.
git clone https://github.com/NirAharon/BoT-SORT.git
cd BoT-SORT
pip3 install -r requirements.txt
python3 setup.py develop
Étape 4. Installez pycocotools.
pip3 install cython ; pip3 install ' git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI '
Étape 5. Autres
# Cython-bbox
pip3 install cython_bbox
# faiss cpu / gpu
pip3 install faiss-cpu
pip3 install faiss-gpu
Téléchargez MOT17 et MOT20 depuis le site officiel. Et mettez-les dans la structure suivante :
<dataets_dir>
│
├── MOT17
│ ├── train
│ └── test
│
└── MOT20
├── train
└── test
Pour entraîner le ReID, les correctifs de détection doivent être générés comme suit :
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
Lier l'ensemble de données à export FASTREID_DATASETS=<BoT-SORT_dir>/fast_reid/datasets
. S'il n'est pas défini, la valeur par défaut est fast_reid/datasets
Téléchargez et stockez les modèles entraînés dans le dossier « pré-entraînés » comme suit :
<BoT-SORT_dir>/pretrained
Nous avons utilisé le zoo modèle ByteTrack accessible au public, formé sur MOT17, MOT20 et l'étude d'ablation pour la détection d'objets YOLOX.
Nos modèles ReID formés peuvent être téléchargés à partir de MOT17-SBS-S50, MOT20-SBS-S50.
Pour le MOT multiclasse, utilisez YOLOX ou YOLOv7 formé sur COCO (ou tout poids personnalisé).
Après avoir généré l'ensemble de données MOT ReID comme décrit dans la section « Préparation des données ».
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 "
Reportez-vous au référentiel FastReID pour des explications et des options supplémentaires.
En soumettant les fichiers txt produits dans cette partie au site Web MOTChallenge et vous pouvez obtenir les mêmes résultats que dans l'article.
Un réglage minutieux des paramètres de suivi pourrait conduire à des performances plus élevées. Dans cet article, nous appliquons le calibrage de ByteTrack.
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
D'autres paramètres peuvent être utilisés sans passer l'indicateur --default-parameters.
Pour évaluer le train et les ensembles de validation, nous vous recommandons d'utiliser le code d'évaluation officiel MOTChallenge de TrackEval.
# For all the available tracking parameters, see:
python3 tools/track.py -h
D'autres paramètres peuvent être utilisés sans passer l'indicateur --default-parameters.
Pour évaluer le train et les ensembles de validation, nous vous recommandons d'utiliser le code d'évaluation officiel MOTChallenge de TrackEval.
# For all the available tracking parameters, see:
python3 tools/track_yolov7.py -h
Démo avec YOLOX basé sur BoT-SORT(-ReID) et multi-classe.
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
Démo avec YOLOv7 basé sur BoT-SORT(-ReID) et multi-classes.
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)
Notre module de compensation de mouvement de caméra est basé sur la version OpenCV contrib C++ de VideoStab Global Motion Estimation, qui n'a actuellement pas de version Python.
Les fichiers de mouvement peuvent être générés à l'aide du projet C++ appelé « VideoCameraCorrection » dans le dossier GMC.
Les fichiers générés peuvent être utilisés à partir du tracker.
De plus, des techniques d'estimation de mouvement basées sur Python sont disponibles et peuvent être choisies en passant
'--cmc-method' <fichiers | orbe | ecc> vers demo.py ou 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}
}
Une grande partie des codes, idées et résultats sont empruntés à ByteTrack, StrongSORT, FastReID, YOLOX et YOLOv7. Merci pour leur excellent travail!