Vai al contenuto

Efficient Hyperparameter Tuning with Ray Tune and YOLO11

L'ottimizzazione degli iperparametri è fondamentale per ottenere le massime prestazioni del modello individuando il set ottimale di iperparametri. Ciò comporta l'esecuzione di prove con iperparametri diversi e la valutazione delle prestazioni di ciascuna prova.

Accelerate Tuning with Ultralytics YOLO11 and Ray Tune

Ultralytics YOLO11 incorporates Ray Tune for hyperparameter tuning, streamlining the optimization of YOLO11 model hyperparameters. With Ray Tune, you can utilize advanced search strategies, parallelism, and early stopping to expedite the tuning process.

Ray Tune

Panoramica di Ray Tune

Ray Tune is a hyperparameter tuning library designed for efficiency and flexibility. It supports various search strategies, parallelism, and early stopping strategies, and seamlessly integrates with popular machine learning frameworks, including Ultralytics YOLO11.

Integrazione con Weights & Biases

YOLO11 also allows optional integration with Weights & Biases for monitoring the tuning process.

Installazione

Per installare i pacchetti necessari, esegui:

Installazione

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

# Optionally install W&B for logging
pip install wandb

Utilizzo

Utilizzo

from ultralytics import YOLO

# Load a YOLO11n model
model = YOLO("yolo11n.pt")

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

tune() Parametri del metodo

Il tune() method in YOLO11 provides an easy-to-use interface for hyperparameter tuning with Ray Tune. It accepts several arguments that allow you to customize the tuning process. Below is a detailed explanation of each parameter:

ParametroTipoDescrizioneValore predefinito
datastrThe dataset configuration file (in YAML format) to run the tuner on. This file should specify the training and validation data paths, as well as other dataset-specific settings.
spacedict, optionalA dictionary defining the hyperparameter search space for Ray Tune. Each key corresponds to a hyperparameter name, and the value specifies the range of values to explore during tuning. If not provided, YOLO11 uses a default search space with various hyperparameters.
grace_periodint, optionalThe grace period in epochs for the ASHA scheduler in Ray Tune. The scheduler will not terminate any trial before this number of epochs, allowing the model to have some minimum training before making a decision on early stopping.10
gpu_per_trialint, optionalIl numero di GPU da allocare per prova durante la messa a punto. Questo aiuta a gestire l'uso di GPU , in particolare in ambienti multiGPU . Se non viene fornito, il tuner utilizzerà tutte le GPU disponibili.Nessuno
iterationsint, optionalIl numero massimo di prove da eseguire durante la sintonizzazione. Questo parametro aiuta a controllare il numero totale di combinazioni di iperparametri testati, assicurando che il processo di sintonizzazione non si svolga all'infinito.10
**train_argsdict, optionalArgomenti aggiuntivi da passare al metodo train() method during tuning. These arguments can include settings like the number of training epochs, batch size, and other training-specific configurations.{}

Personalizzando questi parametri, puoi mettere a punto il processo di ottimizzazione degli iperparametri in base alle tue esigenze specifiche e alle risorse computazionali disponibili.

Spazio di ricerca predefinito Descrizione

The following table lists the default search space parameters for hyperparameter tuning in YOLO11 with Ray Tune. Each parameter has a specific value range defined by tune.uniform().

ParametroIntervallo di valoriDescrizione
lr0tune.uniform(1e-5, 1e-1)Initial learning rate
lrftune.uniform(0.01, 1.0)Fattore di apprendimento finale
momentumtune.uniform(0.6, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Decadimento del peso
warmup_epochstune.uniform(0.0, 5.0)Epoche di riscaldamento
warmup_momentumtune.uniform(0.0, 0.95)Momento di riscaldamento
boxtune.uniform(0.02, 0.2)Box perdita di peso
clstune.uniform(0.2, 4.0)Perdita di peso della classe
hsv_htune.uniform(0.0, 0.1)Gamma di aumento della tonalità
hsv_stune.uniform(0.0, 0.9)Intervallo di aumento della saturazione
hsv_vtune.uniform(0.0, 0.9)Valore (luminosità) intervallo di incremento
degreestune.uniform(0.0, 45.0)Intervallo di aumento della rotazione (gradi)
translatetune.uniform(0.0, 0.9)Gamma di aumento della traduzione
scaletune.uniform(0.0, 0.9)Intervallo di aumento della scala
sheartune.uniform(0.0, 10.0)Intervallo di aumento del taglio (gradi)
perspectivetune.uniform(0.0, 0.001)Gamma di aumento della prospettiva
flipudtune.uniform(0.0, 1.0)Probabilità di aumento del flip verticale
fliplrtune.uniform(0.0, 1.0)Probabilità di aumento del flip orizzontale
mosaictune.uniform(0.0, 1.0)Probabilità di aumento del mosaico
mixuptune.uniform(0.0, 1.0)Probabilità di aumento del mixup
copy_pastetune.uniform(0.0, 1.0)Probabilità di aumento copia-incolla

Esempio di spazio di ricerca personalizzato

In this example, we demonstrate how to use a custom search space for hyperparameter tuning with Ray Tune and YOLO11. By providing a custom search space, you can focus the tuning process on specific hyperparameters of interest.

Utilizzo

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo11n.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 the code snippet above, we create a YOLO model with the "yolo11n.pt" pretrained weights. Then, we call the tune() specificando la configurazione del dataset con "coco8.yaml". Forniamo uno spazio di ricerca personalizzato per il tasso di apprendimento iniziale lr0 utilizzando un dizionario con la chiave "lr0" e il valore tune.uniform(1e-5, 1e-1). Infine, passiamo ulteriori argomenti di addestramento, come il numero di epoche, direttamente al metodo tune come epochs=50.

Elaborazione dei risultati di Ray Tune

Dopo aver eseguito un esperimento di regolazione dell'iperparametro con Ray Tune, potresti voler eseguire diverse analisi sui risultati ottenuti. Questa guida ti illustrerà i flussi di lavoro più comuni per l'elaborazione e l'analisi di questi risultati.

Caricare i risultati dell'esperimento Tune da una directory

Dopo aver eseguito l'esperimento di sintonizzazione con tuner.fit()puoi caricare i risultati da una directory. Questo è utile soprattutto se stai eseguendo l'analisi dopo che lo script di formazione iniziale è uscito.

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()

Analisi di base a livello di esperimento

Ottieni una panoramica sull'andamento delle prove. Puoi verificare rapidamente se ci sono stati errori durante le prove.

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

Analisi di base a livello di processo

Accedi alle configurazioni degli iperparametri delle singole prove e alle ultime metriche riportate.

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

Tracciare l'intera storia delle metriche riportate per una sperimentazione

Puoi tracciare la storia delle metriche riportate per ogni studio per vedere come si sono evolute le metriche nel tempo.

import matplotlib.pyplot as plt

for i, result in enumerate(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()

Sommario

In questa documentazione abbiamo illustrato i flussi di lavoro comuni per analizzare i risultati degli esperimenti eseguiti con Ray Tune utilizzando Ultralytics. I passaggi chiave includono il caricamento dei risultati dell'esperimento da una directory, l'esecuzione di analisi di base a livello di esperimento e di prova e il grafico delle metriche.

Approfondisci l'argomento consultando la pagina dei documenti di Ray Tune dedicata all'analisi dei risultati per ottenere il massimo dai tuoi esperimenti di regolazione degli iperparametri.

DOMANDE FREQUENTI

How do I tune the hyperparameters of my YOLO11 model using Ray Tune?

To tune the hyperparameters of your Ultralytics YOLO11 model using Ray Tune, follow these steps:

  1. Installa i pacchetti necessari:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. Load your YOLO11 model and start tuning:

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

Utilizza le strategie di ricerca avanzate e il parallelismo di Ray Tune per ottimizzare in modo efficiente gli iperparametri del tuo modello. Per maggiori informazioni, consulta la documentazione di Ray Tune.

What are the default hyperparameters for YOLO11 tuning with Ray Tune?

Ultralytics YOLO11 uses the following default hyperparameters for tuning with Ray Tune:

ParametroIntervallo di valoriDescrizione
lr0tune.uniform(1e-5, 1e-1)Tasso di apprendimento iniziale
lrftune.uniform(0.01, 1.0)Fattore di apprendimento finale
momentumtune.uniform(0.6, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Decadimento del peso
warmup_epochstune.uniform(0.0, 5.0)Epoche di riscaldamento
boxtune.uniform(0.02, 0.2)Box perdita di peso
clstune.uniform(0.2, 4.0)Perdita di peso della classe
hsv_htune.uniform(0.0, 0.1)Gamma di aumento della tonalità
translatetune.uniform(0.0, 0.9)Gamma di aumento della traduzione

Questi iperparametri possono essere personalizzati in base alle tue esigenze specifiche. Per un elenco completo e maggiori dettagli, consulta la guida alla regolazione degli iperparametri.

How can I integrate Weights & Biases with my YOLO11 model tuning?

To integrate Weights & Biases (W&B) with your Ultralytics YOLO11 tuning process:

  1. Installa W&B:

    pip install wandb
    
  2. Modifica lo script di sintonizzazione:

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

Questa configurazione ti permetterà di monitorare il processo di messa a punto, di tenere traccia delle configurazioni degli iperparametri e di visualizzare i risultati in W&B.

Why should I use Ray Tune for hyperparameter optimization with YOLO11?

Ray Tune offre numerosi vantaggi per l'ottimizzazione degli iperparametri:

  • Strategie di ricerca avanzate: Utilizza algoritmi come l'Ottimizzazione Bayesiana e l'HyperOpt per una ricerca efficiente dei parametri.
  • Parallelismo: Supporta l'esecuzione parallela di più prove, velocizzando notevolmente il processo di messa a punto.
  • Arresto precoce: Utilizza strategie come ASHA per terminare precocemente le prove che non funzionano bene, risparmiando risorse computazionali.

Ray Tune seamlessly integrates with Ultralytics YOLO11, providing an easy-to-use interface for tuning hyperparameters effectively. To get started, check out the Efficient Hyperparameter Tuning with Ray Tune and YOLO11 guide.

How can I define a custom search space for YOLO11 hyperparameter tuning?

To define a custom search space for your YOLO11 hyperparameter tuning with Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo11n.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)

In questo modo si personalizza la gamma di iperparametri, come il tasso di apprendimento iniziale e il momento, da esplorare durante il processo di sintonizzazione. Per configurazioni avanzate, consulta la sezione Esempio di spazio di ricerca personalizzato.

📅 Created 1 year ago ✏️ Updated 1 month ago

Commenti