Zum Inhalt springen

Model Ensembling

📚 In diesem Leitfaden wird erklĂ€rt, wie du YOLOv5 🚀 Model Ensembling wĂ€hrend des Testens und der Inferenz zur Verbesserung von mAP und Recall nutzen kannst.

Von https://en.wikipedia.org/wiki/Ensemble_learning:

Bei der Ensemble-Modellierung werden mehrere verschiedene Modelle erstellt, um ein Ergebnis vorherzusagen, indem entweder viele verschiedene Modellierungsalgorithmen oder unterschiedliche TrainingsdatensĂ€tze verwendet werden. Das Ensemble-Modell fasst dann die Vorhersagen der einzelnen Basismodelle zusammen und ergibt eine endgĂŒltige Vorhersage fĂŒr die ungesehenen Daten. Der Grund fĂŒr die Verwendung von Ensemble-Modellen ist die Verringerung des Generalisierungsfehlers der Vorhersage. Solange die Basismodelle unterschiedlich und unabhĂ€ngig sind, sinkt der Vorhersagefehler des Modells, wenn der Ensemble-Ansatz verwendet wird. Bei diesem Ansatz wird die Weisheit der Menge genutzt, um eine Vorhersage zu treffen. Auch wenn das Ensemble-Modell mehrere Basismodelle enthĂ€lt, verhĂ€lt es sich wie ein einziges Modell.

Bevor du anfÀngst

Klone das Repo und installiere die requirements.txt in einem Python>=3.8.0 Umgebung, einschließlich PyTorch>=1.8. Modelle und DatensĂ€tze werden automatisch von der neuesten YOLOv5 Version heruntergeladen.

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

Test Normalerweise

Bevor wir das Ensampling durchfĂŒhren, wollen wir die grundlegende Leistung eines einzelnen Modells ermitteln. Dieser Befehl testet YOLOv5x auf COCO val2017 bei einer BildgrĂ¶ĂŸe von 640 Pixeln. yolov5x.pt ist das grĂ¶ĂŸte und genaueste verfĂŒgbare Modell. Andere Optionen sind yolov5s.pt, yolov5m.pt und yolov5l.ptoder deinen eigenen Kontrollpunkt aus dem Training eines benutzerdefinierten Datensatzes ./weights/best.pt. Details zu allen verfĂŒgbaren Modellen findest du in unserer README Tabelle.

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

Ausgabe:

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_hybrid=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

Ensemble Test

Mehrere vortrainierte Modelle können zur Test- und Inferenzzeit zusammengefĂŒgt werden, indem einfach zusĂ€tzliche Modelle an die --weights Argument in einem bestehenden val.py oder detect.py Befehl. In diesem Beispiel wird ein Ensemble aus 2 Modellen getestet:

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

Ausgabe:

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_hybrid=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/exp3/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

Ensemble-Inferenz

FĂŒge zusĂ€tzliche Modelle an die --weights Argument, um die Ensemble-Inferenz durchzufĂŒhren:

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

Ausgabe:

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/exp2
Done. (0.223s)

YOLO Ableitungsergebnis

UnterstĂŒtzte Umgebungen

Ultralytics bietet eine Reihe gebrauchsfertiger Umgebungen, die jeweils mit wichtigen AbhÀngigkeiten wie CUDA, CUDNN vorinstalliert sind, Python, und PyTorch, um deine Projekte zu starten.

Projektstatus

YOLOv5 CI

Dieses Abzeichen zeigt an, dass alle YOLOv5 GitHub Actions Continuous Integration (CI) Tests erfolgreich bestanden wurden. Diese CI-Tests ĂŒberprĂŒfen die FunktionalitĂ€t und Leistung von YOLOv5 in verschiedenen Bereichen: Training, Validierung, Inferenz, Export und Benchmarks. Sie gewĂ€hrleisten einen konsistenten und zuverlĂ€ssigen Betrieb unter macOS, Windows und Ubuntu. Die Tests werden alle 24 Stunden und bei jeder neuen Übertragung durchgefĂŒhrt.



Erstellt am 2023-11-12, Aktualisiert am 2024-01-07
Autoren: glenn-jocher (5), sergiuwaxmann (1)

Kommentare