Overslaan naar inhoud

Efficiënt afstemmen van hyperparameters met Ray Tune en YOLOv8

Het afstemmen van hyperparameters is van vitaal belang voor het bereiken van topprestaties van het model door de optimale set hyperparameters te ontdekken. Hiervoor worden proeven uitgevoerd met verschillende hyperparameters en wordt de prestatie van elke proef geëvalueerd.

Versnel Tuning met Ultralytics YOLOv8 en Ray Tune

Ultralytics YOLOv8 bevat Ray Tune voor hyperparameter tuning, waardoor de optimalisatie van YOLOv8 model hyperparameters wordt gestroomlijnd. Met Ray Tune kun je gebruik maken van geavanceerde zoekstrategieën, parallellisme en vroegtijdig stoppen om het afstemmingsproces te versnellen.

Ray Tune

Overzicht Ray Tune

Ray Tune is een hyperparameter tuning bibliotheek ontworpen voor efficiëntie en flexibiliteit. Het ondersteunt verschillende zoekstrategieën, parallellisme en vroege stopstrategieën, en integreert naadloos met populaire machine learning frameworks, waaronder Ultralytics YOLOv8 .

Integratie met Weights & Biases

YOLOv8 maakt ook optionele integratie met Weights & Biases voor het bewaken van het tuningsproces.

Installatie

Voer het volgende uit om de vereiste pakketten te installeren:

Installatie

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

Gebruik

Gebruik

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO('yolov8n.pt')

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data='coco8.yaml', use_ray=True)

tune() Methode Parameters

De tune() methode in YOLOv8 biedt een eenvoudig te gebruiken interface voor het afstemmen van hyperparameters met Ray Tune. Het accepteert verschillende argumenten waarmee je het tuningsproces kunt aanpassen. Hieronder volgt een gedetailleerde uitleg van elke parameter:

Parameter Type Beschrijving Standaardwaarde
data str Het configuratiebestand van de dataset (in YAML formaat) om de tuner op uit te voeren. Dit bestand moet de trainings- en validatiegegevenspaden specificeren, evenals andere datasetspecifieke instellingen.
space dict, optional Een woordenboek dat de hyperparameter zoekruimte voor Ray Tune definieert. Elke sleutel correspondeert met een hyperparameter naam, en de waarde specificeert het bereik van waarden om te onderzoeken tijdens het afstemmen. Indien niet opgegeven, gebruikt YOLOv8 een standaard zoekruimte met verschillende hyperparameters.
grace_period int, optional De respijtperiode in epochs voor de ASHA planner in Ray Tune. De planner zal geen enkele proef beëindigen voordat dit aantal epochs is bereikt, zodat het model een minimum aan training heeft voordat het een beslissing neemt om vroegtijdig te stoppen. 10
gpu_per_trial int, optional Het aantal GPU's dat per proef moet worden toegewezen tijdens tuning. Dit helpt bij het beheren van het GPU-gebruik, vooral in multi-GPU omgevingen. Als dit niet wordt opgegeven, gebruikt de tuner alle beschikbare GPU's. Geen
iterations int, optional Het maximale aantal proeven dat wordt uitgevoerd tijdens het afstemmen. Deze parameter helpt om het totale aantal geteste hyperparametercombinaties te regelen, zodat het afstemproces niet oneindig doorloopt. 10
**train_args dict, optional Extra argumenten om door te geven aan de train() methode tijdens het afstemmen. Deze argumenten kunnen instellingen bevatten zoals het aantal trainingsepochs, de batchgrootte en andere trainingsspecifieke configuraties. {}

Door deze parameters aan te passen, kun je het hyperparameter optimalisatieproces afstemmen op je specifieke behoeften en beschikbare rekenkracht.

Standaard zoekruimte Beschrijving

De volgende tabel toont de standaard zoekruimteparameters voor hyperparameter tuning in YOLOv8 met Ray Tune. Elke parameter heeft een specifiek waardebereik gedefinieerd door tune.uniform().

Parameter Waarde Bereik Beschrijving
lr0 tune.uniform(1e-5, 1e-1) Initiële leersnelheid
lrf tune.uniform(0.01, 1.0) Factor voor uiteindelijke leersnelheid
momentum tune.uniform(0.6, 0.98) Momentum
weight_decay tune.uniform(0.0, 0.001) Gewichtsverlies
warmup_epochs tune.uniform(0.0, 5.0) Opwarmingsepochs
warmup_momentum tune.uniform(0.0, 0.95) Opwarm momentum
box tune.uniform(0.02, 0.2) Gewicht verliezen
cls tune.uniform(0.2, 4.0) Gewichtsverlies klasse
hsv_h tune.uniform(0.0, 0.1) Tintvergrotingsbereik
hsv_s tune.uniform(0.0, 0.9) Bereik verzadigingsvergroting
hsv_v tune.uniform(0.0, 0.9) Waarde (helderheid) Vergrotingsbereik
degrees tune.uniform(0.0, 45.0) Rotatievergrotingsbereik (graden)
translate tune.uniform(0.0, 0.9) Vertaalverbreding bereik
scale tune.uniform(0.0, 0.9) Schaalvergrotingsbereik
shear tune.uniform(0.0, 10.0) Schuifvergrotingsbereik (graden)
perspective tune.uniform(0.0, 0.001) Perspectiefvergrotingsbereik
flipud tune.uniform(0.0, 1.0) Verticale flip-vergrotingskans
fliplr tune.uniform(0.0, 1.0) Horizontale flip-vergrotingskans
mosaic tune.uniform(0.0, 1.0) Waarschijnlijkheid van mozaïekvergroting
mixup tune.uniform(0.0, 1.0) Mengselvergrotingskans
copy_paste tune.uniform(0.0, 1.0) Copy-paste vergroting waarschijnlijkheid

Voorbeeld aangepaste zoekruimte

In dit voorbeeld laten we zien hoe je een aangepaste zoekruimte kunt gebruiken voor het afstemmen van hyperparameters met Ray Tune en YOLOv8. Door een aangepaste zoekruimte op te geven, kun je het afstemmingsproces richten op specifieke hyperparameters die van belang zijn.

Gebruik

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(data="coco8.yaml",
                         space={"lr0": tune.uniform(1e-5, 1e-1)},
                         epochs=50,
                         use_ray=True)

In het bovenstaande codefragment maken we een YOLO model met de "yolov8n.pt" voorgetrainde gewichten. Vervolgens roepen we de tune() methode, waarbij we de configuratie van de dataset specificeren met "coco8.yaml". We bieden een aangepaste zoekruimte voor de initiële leersnelheid lr0 met behulp van een woordenboek met de sleutel "lr0" en de waarde tune.uniform(1e-5, 1e-1). Tot slot geven we extra trainingsargumenten, zoals het aantal epochs, direct door aan de afstemmethode als epochs=50.

Resultaten van Ray Tune verwerken

Na het uitvoeren van een hyperparameter tuning experiment met Ray Tune, wil je misschien verschillende analyses uitvoeren op de verkregen resultaten. Deze handleiding neemt je mee door veelgebruikte workflows voor het verwerken en analyseren van deze resultaten.

Resultaten van afstemexperimenten laden vanuit een directory

Na het afstemexperiment met tuner.fit()kun je de resultaten uit een map laden. Dit is handig, vooral als je de analyse uitvoert nadat het initiële trainingsscript is afgesloten.

experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")

restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()

Basale analyse op experimentniveau

Een overzicht krijgen van hoe de proeven hebben gepresteerd. Je kunt snel controleren of er fouten zijn gemaakt tijdens de proeven.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Basisanalyse op proefniveau

Toegang tot individuele trial hyperparameter configuraties en de laatst gerapporteerde metriek.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

De hele geschiedenis van gerapporteerde statistieken voor een proef plotten

Je kunt de geschiedenis van de gerapporteerde statistieken voor elk onderzoek uitzetten om te zien hoe de statistieken zich in de loop van de tijd ontwikkelden.

import matplotlib.pyplot as plt

for result in result_grid:
    plt.plot(result.metrics_dataframe["training_iteration"], result.metrics_dataframe["mean_accuracy"], label=f"Trial {i}")

plt.xlabel('Training Iterations')
plt.ylabel('Mean Accuracy')
plt.legend()
plt.show()

Samenvatting

In deze documentatie hebben we veelvoorkomende workflows behandeld om de resultaten van experimenten uitgevoerd met Ray Tune te analyseren met Ultralytics. De belangrijkste stappen zijn het laden van de experimentresultaten uit een map, het uitvoeren van basisanalyses op experiment- en proefniveau en het plotten van metrieken.

Kijk verder op de pagina Resultaten analyseren van Ray Tune om het meeste uit je hyperparameter tuning experimenten te halen.



Gemaakt op 2023-11-12, Bijgewerkt op 2024-05-06
Auteurs: glenn-jocher (5)

Reacties