Overslaan naar inhoud

Ultralytics YOLO Hyperparameter afstelgids

Inleiding

Het afstemmen van hyperparameters is niet een eenmalige instelling, maar een iteratief proces gericht op het optimaliseren van de prestatiecijfers van het model voor machinaal leren, zoals nauwkeurigheid, precisie en terughalen. In de context van Ultralytics YOLO kunnen deze hyperparameters variëren van leersnelheid tot architecturale details, zoals het aantal lagen of de gebruikte typen activeringsfuncties.

Wat zijn hyperparameters?

Hyperparameters zijn structurele instellingen op hoog niveau voor het algoritme. Ze worden voorafgaand aan de trainingsfase ingesteld en blijven constant tijdens de trainingsfase. Hier zijn enkele veelgebruikte hyperparameters in Ultralytics YOLO :

  • Leertempo lr0: Bepaalt de stapgrootte bij elke iteratie terwijl naar een minimum in de verliesfunctie wordt bewogen.
  • Partijgrootte batch: Aantal beelden dat tegelijkertijd wordt verwerkt in een voorwaartse doorgang.
  • Aantal tijdperken epochs: Een epoch is één volledige voorwaartse en achterwaartse passage van alle trainingsvoorbeelden.
  • Architectuurspecificaties: Zoals kanaaltellingen, aantal lagen, soorten activeringsfuncties, enz.

Hyperparameter afstemmen Visueel

Voor een volledige lijst van augmentatie-hyperparameters die worden gebruikt in YOLOv8 kun je terecht op de configuraties pagina.

Genetische evolutie en mutatie

Ultralytics YOLO gebruikt genetische algoritmen om hyperparameters te optimaliseren. Genetische algoritmen zijn geïnspireerd op het mechanisme van natuurlijke selectie en genetica.

  • Mutatie: In de context van Ultralytics YOLO helpt mutatie bij het lokaal doorzoeken van de hyperparameterruimte door kleine, willekeurige veranderingen toe te passen op bestaande hyperparameters, waardoor nieuwe kandidaten voor evaluatie ontstaan.
  • Crossover: Hoewel crossover een populaire genetische algoritme techniek is, wordt deze momenteel niet gebruikt in Ultralytics YOLO voor hyperparameter tuning. De nadruk ligt voornamelijk op mutatie voor het genereren van nieuwe hyperparametersets.

Voorbereiden op het afstemmen van de hyperparameters

Voordat je begint met afstemmen, is het belangrijk om:

  1. Identificeer de metriek: Bepaal de metrieken die je gaat gebruiken om de prestaties van het model te evalueren. Dit kan AP50, F1-score of andere zijn.
  2. Stel het tuningbudget in: Bepaal hoeveel rekenkracht je bereid bent toe te wijzen. Hyperparameter tuning kan rekenintensief zijn.

Betrokken stappen

Hyperparameters initialiseren

Begin met een redelijke set initiële hyperparameters. Dit kunnen de standaard hyperparameters zijn die zijn ingesteld door Ultralytics YOLO of iets gebaseerd op je domeinkennis of eerdere experimenten.

Hyperparameters muteren

Gebruik de _mutate methode om een nieuwe set hyperparameters te produceren op basis van de bestaande set.

Trein Model

Er wordt getraind met de gemuteerde set hyperparameters. Vervolgens worden de trainingsprestaties beoordeeld.

Model evalueren

Gebruik metrieken zoals AP50, F1-score of aangepaste metrieken om de prestaties van het model te evalueren.

Resultaten logboek

Het is cruciaal om zowel de prestatiecijfers als de bijbehorende hyperparameters te loggen voor toekomstig gebruik.

Herhaal

Het proces wordt herhaald totdat het ingestelde aantal iteraties is bereikt of de prestatiemeting bevredigend is.

Gebruiksvoorbeeld

Hier lees je hoe je de model.tune() methode om de Tuner klasse voor hyperparameter tuning van YOLOv8n op COCO8 voor 30 epochs met een AdamW optimizer en het overslaan van plotten, checkpointing en validatie anders dan op de laatste epoch voor snellere tuning.

Voorbeeld

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO('yolov8n.pt')

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data='coco8.yaml', epochs=30, iterations=300, optimizer='AdamW', plots=False, save=False, val=False)

Resultaten

Nadat je het afstemmen van de hyperparameters succesvol hebt afgerond, krijg je verschillende bestanden en mappen die de resultaten van het afstemmen bevatten. Hieronder wordt elk bestand beschreven:

Bestandsstructuur

Zo ziet de mappenstructuur van de resultaten eruit. Trainingsmappen zoals train1/ bevatten individuele afstem iteraties, d.w.z. één model getraind met één set hyperparameters. De tune/ De map bevat de afstemmingsresultaten van alle individuele modeltrainingen:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── best_fitness.png
        ├── tune_results.csv
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Bestandsbeschrijvingen

beste_hyperparameters.yaml

Dit YAML-bestand bevat de best presterende hyperparameters die zijn gevonden tijdens het afstemmingsproces. Je kunt dit bestand gebruiken om toekomstige trainingen te initialiseren met deze geoptimaliseerde instellingen.

  • Formaat: YAML
  • Gebruik: Hyperparameter resultaten
  • Voorbeeld:
      # 558/900 iterations complete ✅ (45536.81s)
      # Results saved to /usr/src/ultralytics/runs/detect/tune
      # Best fitness=0.64297 observed at iteration 498
      # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
      # Best fitness model is /usr/src/ultralytics/runs/detect/train498
      # Best fitness hyperparameters are printed below.
    
      lr0: 0.00269
      lrf: 0.00288
      momentum: 0.73375
      weight_decay: 0.00015
      warmup_epochs: 1.22935
      warmup_momentum: 0.1525
      box: 18.27875
      cls: 1.32899
      dfl: 0.56016
      hsv_h: 0.01148
      hsv_s: 0.53554
      hsv_v: 0.13636
      degrees: 0.0
      translate: 0.12431
      scale: 0.07643
      shear: 0.0
      perspective: 0.0
      flipud: 0.0
      fliplr: 0.08631
      mosaic: 0.42551
      mixup: 0.0
      copy_paste: 0.0
    

beste_fitness.png

Dit is een grafiek die de fitness (meestal een prestatiemeting zoals AP50) weergeeft tegen het aantal iteraties. Het helpt je te visualiseren hoe goed het genetische algoritme presteerde in de loop van de tijd.

  • Formaat: PNG
  • Gebruik: Prestatievisualisatie

Hyperparameter afstemmen Fitness vs Iteratie

afstemmen_resultaten.csv

Een CSV-bestand met gedetailleerde resultaten van elke iteratie tijdens het afstemmen. Elke rij in het bestand vertegenwoordigt één iteratie en bevat meetgegevens zoals fitnessscore, precisie, recall en de gebruikte hyperparameters.

  • Formaat: CSV
  • Gebruik: Per-iteratie resultaten bijhouden.
  • Voorbeeld:
      fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste
      0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0
      0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0
      0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
    

afstemmen_scatter_plots.png

Dit bestand bevat scatterplots gegenereerd uit tune_results.csvDit helpt je bij het visualiseren van relaties tussen verschillende hyperparameters en prestatiecijfers. Merk op dat hyperparameters die zijn geïnitialiseerd op 0 niet worden getuned, zoals degrees en shear hieronder.

  • Formaat: PNG
  • Gebruik: Verkennende gegevensanalyse

Hyperparameter afstemmen spreidingsdiagrammen

gewichten/

Deze map bevat de opgeslagen PyTorch modellen voor de laatste en de beste iteraties tijdens het afstemmen van de hyperparameters.

  • last.pt: De last.pt zijn de gewichten van het laatste epoch van de training.
  • best.pt: De best.pt gewichten voor de iteratie die de beste fitnessscore heeft behaald.

Met behulp van deze resultaten kun je beter geïnformeerde beslissingen nemen voor je toekomstige modeltrainingen en -analyses. Raadpleeg deze artefacten gerust om te begrijpen hoe goed je model presteerde en hoe je het verder zou kunnen verbeteren.

Conclusie

Het proces voor het afstellen van hyperparameters in Ultralytics YOLO is vereenvoudigd maar toch krachtig, dankzij de op genetische algoritmen gebaseerde aanpak die is gericht op mutatie. Door de stappen in deze handleiding te volgen, kun je je model systematisch afstemmen om betere prestaties te bereiken.

Verder lezen

  1. Hyperparameter optimalisatie in Wikipedia
  2. YOLOv5 Hyperparameter evolutiegids
  3. Efficiënt afstemmen van hyperparameters met Ray Tune en YOLOv8

Voor diepere inzichten kun je de Tuner klasse broncode en bijbehorende documentatie. Als je vragen of verzoeken hebt, of meer hulp nodig hebt, kun je ons bereiken op GitHub of Discord.



Gemaakt op 2023-11-12, Bijgewerkt op 2024-03-03
Auteurs: glenn-jocher (7)

Reacties