Ce repo contient une collection de trackers multi-objets de pointe enfichable pour les modèles de segmentation, de détection d'objets et d'estimation de la pose. Pour les méthodes utilisant la description de l'apparence, les modèles REID lourds (ClipReID) et légers de pointe (LightMBN, OSNET et plus) sont disponibles en téléchargement automatique. Nous fournissons des exemples sur la façon d'utiliser ce package avec des modèles de détection d'objets populaires tels que: yolov8, yolov9 et yolov10
Traqueur | Statut | Hota ↑ | Mota ↑ | IDF1 ↑ |
---|---|---|---|---|
botsort | ✅ | 68.504 | 77.165 | 80.986 |
fort | ✅ | 68.329 | 76.348 | 81.206 |
bytetrack | ✅ | 66.536 | 76.909 | 77.855 |
occort | ✅ | 65.187 | 74.819 | 75.957 |
impressive | ✅ | 64.096 | 76.511 | 71.875 |
deepocsort | ✅ | 62.913 | 74.483 | 73.459 |
hybrides |
Remarques: L'évaluation a été effectuée sur la seconde moitié de l'ensemble de formation MOT17, car l'ensemble de validation n'est pas accessible au public. Les détections et les intérêts pré-générés utilisés, proviennent d'ici. Chaque tracker a été configuré avec les paramètres d'origine fournis dans leurs référentiels officiels.
Les options de suivi multi-objets d'aujourd'hui dépendent fortement des capacités de calcul du matériel sous-traitant. BoxMot offre une grande variété de méthodes de suivi qui respectent différentes limitations matérielles, du CPU uniquement aux GPU plus grands. Morover, nous fournissons des scripts pour une expérimentation ultra rapide en économisant des détections et des intérêts, qui sont ensuite chargés dans tout algorithme de suivi. Éviter les frais généraux de générer à plusieurs reprises ces données.
Commencez par Python> = 3,9 environnement.
Si vous souhaitez exécuter les exemples Yolov8, Yolov9 ou Yolov10:
git clone https://github.com/mikel-brostrom/boxmot.git
cd boxmot
pip install poetry
poetry install --with yolo # installed boxmot + yolo dependencies
poetry shell # activates the newly created environment with the installed dependencies
Mais si vous souhaitez uniquement importer les modules de suivi, vous pouvez simplement:
pip install boxmot
$ python tracking/track.py --yolo-model yolov10n # bboxes only
python tracking/track.py --yolo-model yolov9s # bboxes only
python tracking/track.py --yolo-model yolov8n # bboxes only
yolov8n-seg # bboxes + segmentation masks
yolov8n-pose # bboxes + pose estimation
$ python tracking/track.py --tracking-method deepocsort
strongsort
ocsort
bytetrack
botsort
imprassoc
Le suivi peut être exécuté sur la plupart des formats vidéo
$ python tracking/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
Certaines méthodes de suivi combinent la description de l'apparence et le mouvement dans le processus de suivi. Pour ceux qui utilisent l'apparence, vous pouvez choisir un modèle Reid basé sur vos besoins de ce zoo de modèle Reid. Ces modèles peuvent être encore optimisés pour vos besoins par le script reid_export.py
$ python tracking/track.py --source 0 --reid-model lmbn_n_cuhk03_d.pt # lightweight
osnet_x0_25_market1501.pt
mobilenetv2_x1_4_msmt17.engine
resnet50_msmt17.onnx
osnet_x1_0_msmt17.pt
clip_market1501.pt # heavy
clip_vehicleid.pt
...
Par défaut, le tracker suit toutes les classes MS COCO.
Si vous souhaitez suivre un sous-ensemble des classes que vous modez prédit, ajoutez leur index correspondant après l'indicateur de classes,
python tracking/track.py --source 0 --yolo-model yolov8s.pt --classes 16 17 # COCO yolov8 model. Track cats and dogs, only
Voici une liste de tous les objets possibles qu'un modèle Yolov8 formé sur MS Coco peut détecter. Notez que l'indexation des classes de ce dépôt commence à zéro
Évaluez une combinaison de détecteur, de méthode de suivi et de modèle Reid sur l'ensemble de données MOT standard ou que vous avez personnalisé un par
$ python3 tracking/val.py --benchmark MOT17-mini --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method deepocsort --verbose --source ./assets/MOT17-mini/train
$ python3 tracking/val.py --benchmark MOT17 --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method ocsort --verbose --source ./tracking/val_utils/MOT17/train
Les détections et les incorporations sont stockées pour le modèle YOLO et REID sélectionné respectivement, qui sont ensuite chargés dans n'importe quel algorithme de suivi. Éviter les frais généraux de générer à plusieurs reprises ces données.
Nous utilisons un algorithme génétique multi-objectif rapide et élitiste pour le réglage hyperparamètre du tracker. Par défaut, les objectifs sont: Hota, Mota, IDF1. Courir par
# saves dets and embs under ./runs/dets_n_embs separately for each selected yolo and reid model
$ python tracking/generate_dets_n_embs.py --source ./assets/MOT17-mini/train --yolo-model yolov8n.pt yolov8s.pt --reid-model weights/osnet_x0_25_msmt17.pt
# evolve parameters for specified tracking method using the selected detections and embeddings generated in the previous step
$ python tracking/evolve.py --benchmark MOT17-mini --dets yolov8n --embs osnet_x0_25_msmt17 --n-trials 9 --tracking-method botsort
L'ensemble des hyperparamètres menant au meilleur résultat HOTA est écrit dans le fichier de configuration du tracker.
Nous prenons en charge l'exportation du modèle Reid vers ONNX, OpenVino, TorchScript et Tensorrt
# export to ONNX
$ python3 boxmot/appearance/reid_export.py --include onnx --device cpu
# export to OpenVINO
$ python3 boxmot/appearance/reid_export.py --include openvino --device cpu
# export to TensorRT with dynamic input
$ python3 boxmot/appearance/reid_export.py --include engine --device 0 --dynamic
L'ensemble des hyperparamètres menant au meilleur résultat HOTA est écrit dans le fichier de configuration du tracker.
Exemple description | Carnet de notes |
---|---|
TorchVision Bounding Box Tracking avec boxmot | |
Suivi de la pose de torchvision avec boxmot | |
Suivi de la segmentation de TorchVision avec boxmot |
Pour les bogues de suivi YOLO et les demandes de fonctionnalités, veuillez visiter les problèmes de GitHub. Pour les demandes commerciales ou les demandes de support professionnel, veuillez envoyer un e-mail à: [email protected]