Meet YOLO26: next-gen vision AI.

Link to this sectionAssemblage de modèles YOLOv5#

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

D'après l'apprentissage ensembliste :

La modélisation ensembliste est un processus où plusieurs modèles diversifiés 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 pour aboutir à une prédiction finale pour les données non vues. La motivation derrière l'utilisation de modèles ensemblistes 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 établir une prédiction. Bien que le modèle d'ensemble contienne 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, en incluant PyTorch>=1.8. Les modèles et les datasets se téléchargent automatiquement depuis la dernière release de YOLOv5.

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

Link to this sectionTest normal#

Avant l'assemblage, établis la performance de référence 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 point de contrôle 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 points de contrôle 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'assemblage#

Plusieurs modèles pré-entraînés peuvent être assemblés lors des tests et de l'inférence en ajoutant simplement des modèles supplémentaires à l'argument --weights dans n'importe quelle commande existante val.py ou detect.py. 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 points de contrôle 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 par image et calculera 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'assemblage#

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

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'assemblage de modèles#

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

  1. Précision améliorée : Comme démontré dans les exemples ci-dessus, l'assemblage 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 : La combinaison de modèles diversifiés aide à réduire le surapprentissage et améliore les performances sur des données variées.
  3. Robustesse accrue : 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 modèle unique contre 39,5 ms pour l'ensemble).

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

Envisage d'utiliser l'assemblage 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 complexes avec un éclairage varié, des occlusions ou des changements d'échelle
  • 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 sectionÉtat du projet#

YOLOv5 CI

Ce badge indique que tous les tests d'intégration continue (CI) des GitHub Actions de 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, export 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.

Commentaires