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.
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:
- 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.
- 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
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
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.csv
Dit 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
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
- Hyperparameter optimalisatie in Wikipedia
- YOLOv5 Hyperparameter evolutiegids
- 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.