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. Dit omvat het uitvoeren van proeven met verschillende hyperparameters en het evalueren van de prestaties van elke proef.

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 The number of GPUs to allocate per trial during tuning. This helps manage GPU usage, particularly in multi-GPU environments. If not provided, the tuner will use all available GPUs. 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.

FAQ

Hoe kan ik de hyperparameters van mijn YOLOv8 model afstemmen met Ray Tune?

Volg deze stappen om de hyperparameters van je Ultralytics YOLOv8 model af te stemmen met Ray Tune:

  1. Installeer de vereiste pakketten:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. Laad je YOLOv8 model en begin met tunen:

    from ultralytics import YOLO
    
    # Load a YOLOv8 model
    model = YOLO("yolov8n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Dit maakt gebruik van de geavanceerde zoekstrategieƫn en het parallellisme van Ray Tune om de hyperparameters van je model efficiƫnt te optimaliseren. Kijk voor meer informatie in de Ray Tune documentatie.

Wat zijn de standaard hyperparameters voor YOLOv8 tuning met Ray Tune?

Ultralytics YOLOv8 gebruikt de volgende standaard hyperparameters voor afstemming met Ray Tune:

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
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
translate tune.uniform(0.0, 0.9) Vertaalverbreding bereik

Deze hyperparameters kunnen worden aangepast aan je specifieke behoeften. Raadpleeg voor een volledige lijst en meer details de gids Hyperparameter aanpassen.

Hoe kan ik Weights & Biases integreren met mijn YOLOv8 model tuning?

Om Weights & Biases (W&B) te integreren met je Ultralytics YOLOv8 afstemproces:

  1. Installeer W&B:

    pip install wandb
    
  2. Pas je tuningscript aan:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolov8n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Met deze instelling kun je het afstemmingsproces monitoren, hyperparameter configuraties volgen en resultaten visualiseren in W&B.

Waarom zou ik Ray Tune gebruiken voor hyperparameteroptimalisatie met YOLOv8?

Ray Tune biedt vele voordelen voor hyperparameter optimalisatie:

  • Geavanceerde zoekstrategieĆ«n: Gebruikt algoritmen zoals Bayesiaanse optimalisatie en HyperOpt voor efficiĆ«nt zoeken naar parameters.
  • Parallellisme: Ondersteunt parallelle uitvoering van meerdere proeven, waardoor het tuningsproces aanzienlijk wordt versneld.
  • Vroegtijdig stoppen: Gebruikt strategieĆ«n zoals ASHA om slecht presterende proeven vroegtijdig te beĆ«indigen, waardoor rekenkracht wordt bespaard.

Ray Tune integreert naadloos met Ultralytics YOLOv8 en biedt een gebruiksvriendelijke interface voor het effectief afstemmen van hyperparameters. Bekijk om te beginnen de gids Efficiƫnt hyperparameters tunen met Ray Tune en YOLOv8.

Hoe kan ik een aangepaste zoekruimte definiƫren voor YOLOv8 hyperparameter tuning?

Om een aangepaste zoekruimte te definiƫren voor je YOLOv8 hyperparameter tuning met Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

Dit past het bereik van hyperparameters aan, zoals de initiƫle leersnelheid en het momentum dat wordt onderzocht tijdens het afstemmingsproces. Raadpleeg voor geavanceerde configuraties de sectie Voorbeeld aangepaste zoekruimte.



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

Reacties