Meet YOLO26: next-gen vision AI.

Link to this sectionEnsemble de modèles YOLOv5#

📚 Ce guide t'explique comment utiliser l'ensemble de modèles Ultralytics YOLOv5 🚀 pendant les tests et l'inférence pour améliorer le mAP et le Recall.

Issu de l'apprentissage ensembliste :

La modélisation ensembliste est un processus où plusieurs modèles divers sont créés pour prédire un résultat, soit en utilisant de nombreux algorithmes de modélisation différents, soit en utilisant différents jeux de données d'entraînement. Le modèle d'ensemble agrège ensuite la prédiction de chaque modèle de base et aboutit à une prédiction finale pour les données inédites. La motivation pour utiliser des modèles d'ensemble est de réduire l'erreur de généralisation de la prédiction. Tant que les modèles de base sont diversifiés et indépendants, l'erreur de prédiction du modèle diminue lorsque l'approche ensembliste est utilisée. L'approche recherche la sagesse de la foule pour effectuer une prédiction. Même si le modèle d'ensemble contient plusieurs modèles de base, il agit et fonctionne comme un modèle unique.

Link to this sectionAvant de commencer#

Clone le dépôt et installe requirements.txt dans un environnement Python>=3.8.0, y compris PyTorch>=1.8. Les modèles et les jeux de données se téléchargent automatiquement depuis la dernière version de YOLOv5.

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

Link to this sectionTester normalement#

Avant d'utiliser l'ensemble, établis les performances de base d'un seul modèle. Cette commande teste YOLOv5x sur COCO val2017 à une taille d'image de 640 pixels. yolov5x.pt est le modèle le plus grand et le plus précis disponible. Les autres options sont yolov5s.pt, yolov5m.pt et yolov5l.pt, ou ton propre checkpoint issu de l'entraînement sur un jeu de données personnalisé ./weights/best.pt. Pour plus de détails sur tous les modèles disponibles, consulte le tableau des checkpoints pré-entraînés.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Sortie :

val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients

val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00,  1.05it/s]
                 all       5000      36335      0.746      0.626       0.68       0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640)  # <--- baseline speed

Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.504  # <--- baseline mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.688
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.546
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.382
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.681  # <--- baseline mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826

Link to this sectionTest d'ensemble#

Plusieurs modèles pré-entraînés peuvent être regroupés en ensemble lors des phases de test et d'inférence en ajoutant simplement des modèles supplémentaires à l'argument --weights dans n'importe quelle commande val.py ou detect.py existante. Cet exemple teste un ensemble de 2 modèles ensemble :

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

Tu peux lister autant de checkpoints que tu le souhaites, y compris des poids personnalisés tels que runs/train/exp-5/weights/best.pt. YOLOv5 exécutera automatiquement chaque modèle, alignera les prédictions image par image et fera la moyenne des sorties avant d'effectuer la NMS.

Sortie :

val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients  # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients  # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']  # Ensemble notice

val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00,  1.52s/it]
                 all       5000      36335      0.747      0.637      0.692      0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640)  # <--- ensemble speed

Evaluating pycocotools mAP... saving runs/val/exp-3/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.515  # <--- ensemble mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.699
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.557
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.387
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.638
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.689  # <--- ensemble mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844

Link to this sectionInférence d'ensemble#

Ajoute des modèles supplémentaires à l'argument --weights pour exécuter une inférence en ensemble :

python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images

Sortie :

YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']

image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp-2
Done. (0.223s)
YOLO inference result

Link to this sectionAvantages de l'ensemble de modèles#

L'ensemble de modèles avec YOLOv5 offre plusieurs avantages :

  1. Précision améliorée : Comme démontré dans les exemples ci-dessus, l'ensemble de plusieurs modèles augmente le mAP de 0,504 à 0,515 et le mAR de 0,681 à 0,689.
  2. Meilleure généralisation : Combiner des modèles divers aide à réduire le surapprentissage et améliore les performances sur des données variées.
  3. Robustesse renforcée : Les ensembles sont généralement plus robustes face au bruit et aux valeurs aberrantes dans les données.
  4. Forces complémentaires : Différents modèles peuvent exceller dans la détection de différents types d'objets ou dans des conditions environnementales variées.

Le principal compromis est l'augmentation du temps d'inférence, comme le montrent les mesures de vitesse (22,4 ms pour un seul modèle contre 39,5 ms pour l'ensemble).

Link to this sectionQuand utiliser l'ensemble de modèles#

Envisage d'utiliser l'ensemble de modèles dans ces scénarios :

  • Lorsque la précision est plus importante que la vitesse d'inférence
  • Pour les applications critiques où les faux négatifs doivent être minimisés
  • Lors du traitement d'images difficiles avec des éclairages, des occlusions ou des échelles variés
  • Pendant des compétitions ou des benchmarks où une performance maximale est requise

Pour les applications en temps réel avec des exigences strictes en matière de latence, l'inférence avec un modèle unique peut être plus appropriée.

Link to this sectionEnvironnements pris en charge#

Ultralytics propose une gamme d'environnements prêts à l'emploi, chacun pré-installé avec les dépendances essentielles telles que CUDA, CUDNN, Python et PyTorch, pour lancer tes projets.

Link to this sectionStatut du projet#

YOLOv5 CI

Ce badge indique que tous les tests d'intégration continue (CI) de GitHub Actions YOLOv5 réussissent. Ces tests CI vérifient rigoureusement la fonctionnalité et les performances de YOLOv5 sous divers aspects clés : entraînement, validation, inférence, exportation et benchmarks. Ils garantissent un fonctionnement cohérent et fiable sur macOS, Windows et Ubuntu, avec des tests effectués toutes les 24 heures et à chaque nouveau commit.

Contributeurs

Commentaires