Optimisation efficace des hyperparamètres avec Ray Tune et YOLO26

Le réglage des hyperparamètres est essentiel pour atteindre des performances optimales du modèle en découvrant l'ensemble optimal d'hyperparamètres. Cela implique d'exécuter des essais avec différents hyperparamètres et d'évaluer les performances de chaque essai.

Accélère le réglage avec Ultralytics YOLO26 et Ray Tune

Ultralytics YOLO26 intègre Ray Tune pour le réglage des hyperparamètres, rationalisant l'optimisation des hyperparamètres du modèle YOLO26. Avec Ray Tune, tu peux utiliser des stratégies de recherche avancées, le parallélisme et l'arrêt anticipé pour accélérer le processus de réglage.

Ray Tune

Ray Tune hyperparameter optimization workflow

Ray Tune est une bibliothèque de réglage des hyperparamètres conçue pour l'efficacité et la flexibilité. Elle prend en charge diverses stratégies de recherche, le parallélisme et des stratégies d'arrêt anticipé, et s'intègre parfaitement aux frameworks d'apprentissage automatique populaires, y compris Ultralytics YOLO26.

Intégration avec Weights & Biases

YOLO26 permet également une intégration optionnelle avec Weights & Biases pour surveiller le processus de réglage.

Installation

Pour installer les packages requis, exécute :

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

# Optionally install W&B for logging
pip install wandb

Utilisation

Utilisation
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

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

Paramètres de la méthode tune()

La méthode tune() dans YOLO26 fournit une interface facile à utiliser pour le réglage des hyperparamètres avec Ray Tune. Elle accepte plusieurs arguments qui te permettent de personnaliser le processus de réglage. Tu trouveras ci-dessous une explication détaillée de chaque paramètre :

ParamètreTypeDescriptionValeur par défaut
datastrLe fichier de configuration du jeu de données (au format YAML) sur lequel exécuter le tuner. Ce fichier doit spécifier les chemins d'entraînement et de données de validation, ainsi que d'autres paramètres spécifiques au jeu de données.
spacedict, optionalUn dictionnaire définissant l'espace de recherche des hyperparamètres pour Ray Tune. Chaque clé correspond au nom d'un hyperparamètre, et la valeur spécifie la plage de valeurs à explorer pendant le réglage. Si rien n'est fourni, YOLO26 utilise un espace de recherche par défaut avec divers hyperparamètres.
grace_periodint, optionalLa période de grâce en époques pour le planificateur ASHA dans Ray Tune. Le planificateur ne terminera aucun essai avant ce nombre d'époques, permettant au modèle d'avoir un entraînement minimal avant de prendre une décision sur l'arrêt anticipé.10
gpu_per_trialint, optionalLe nombre de GPU à allouer par essai pendant le réglage. Cela aide à gérer l'utilisation des GPU, particulièrement dans les environnements multi-GPU. Si rien n'est fourni, le tuner utilisera tous les GPU disponibles.None
iterationsint, optionalLe nombre maximal d'essais à exécuter pendant le réglage. Ce paramètre aide à contrôler le nombre total de combinaisons d'hyperparamètres testées, garantissant que le processus de réglage ne s'exécute pas indéfiniment.10
search_algstr or Searcher, optionalStratégie de recherche Ray Tune à utiliser. Tu peux transmettre un objet de recherche Ray directement, ou utiliser une chaîne prise en charge telle que optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax, ou random. Les chercheurs basés sur des chaînes utilisent automatiquement la métrique de tâche par défaut et mode="max". Si rien n'est fourni, Ray Tune revient à sa stratégie de recherche aléatoire par défaut, BasicVariantGenerator.None
**train_argsdict, optionalArguments supplémentaires à transmettre à la méthode train() pendant le réglage. Ces arguments peuvent inclure des paramètres tels que le nombre d'époques d'entraînement, la taille de lot et d'autres configurations spécifiques à l'entraînement.{}

En personnalisant ces paramètres, tu peux affiner le processus d'optimisation des hyperparamètres pour répondre à tes besoins spécifiques et aux ressources informatiques disponibles.

Description de l'espace de recherche par défaut

Le tableau suivant répertorie les paramètres de l'espace de recherche par défaut pour le réglage des hyperparamètres dans YOLO26 avec Ray Tune. Chaque paramètre possède une plage de valeurs spécifique définie par tune.uniform().

ParamètrePlageDescription
lr0tune.uniform(1e-5, 1e-2)Taux d'apprentissage initial qui contrôle la taille du pas pendant l'optimisation. Des valeurs plus élevées accélèrent l'entraînement mais peuvent provoquer une instabilité.
lrftune.uniform(0.01, 1.0)Facteur de taux d'apprentissage final qui détermine dans quelle mesure le taux d'apprentissage diminue à la fin de l'entraînement.
momentumtune.uniform(0.7, 0.98)Facteur de moment pour l'optimiseur qui aide à accélérer l'entraînement et à surmonter les minima locaux.
weight_decaytune.uniform(0.0, 0.001)Paramètre de régularisation qui empêche le surapprentissage en pénalisant les grandes valeurs de poids.
warmup_epochstune.uniform(0.0, 5.0)Nombre d'époques avec un taux d'apprentissage augmentant progressivement pour stabiliser l'entraînement initial.
warmup_momentumtune.uniform(0.0, 0.95)Valeur de moment initiale qui augmente progressivement pendant la période de préchauffage.
boxtune.uniform(1.0, 20.0)Poids pour la composante de perte de la boîte englobante, équilibrant la précision de la localisation dans le modèle.
clstune.uniform(0.1, 4.0)Poids pour la composante de perte de classification, équilibrant la précision de la prédiction de classe dans le modèle.
dfltune.uniform(0.4, 12.0)Poids pour la composante Distribution Focal Loss, mettant l'accent sur une localisation précise de la boîte englobante.
hsv_htune.uniform(0.0, 0.1)Plage d'augmentation de la teinte qui introduit une variabilité de couleur pour aider le modèle à se généraliser.
hsv_stune.uniform(0.0, 0.9)Plage d'augmentation de la saturation qui fait varier l'intensité des couleurs pour améliorer la robustesse.
hsv_vtune.uniform(0.0, 0.9)Plage d'augmentation de la valeur (luminosité) qui aide le modèle à fonctionner dans diverses conditions d'éclairage.
degreestune.uniform(0.0, 45.0)Plage d'augmentation de la rotation en degrés, améliorant la reconnaissance des objets tournés.
translatetune.uniform(0.0, 0.9)Plage d'augmentation de la translation qui déplace les images horizontalement et verticalement.
scaletune.uniform(0.0, 0.95)Plage d'augmentation de l'échelle qui simule des objets à différentes distances.
sheartune.uniform(0.0, 10.0)Plage d'augmentation du cisaillement en degrés, simulant des changements de perspective.
perspectivetune.uniform(0.0, 0.001)Plage d'augmentation de la perspective qui simule des changements de point de vue 3D.
flipudtune.uniform(0.0, 1.0)Probabilité d'augmentation par retournement vertical, augmentant la diversité du jeu de données.
fliplrtune.uniform(0.0, 1.0)Probabilité d'augmentation par retournement horizontal, utile pour les objets symétriques.
bgrtune.uniform(0.0, 1.0)Probabilité d'augmentation par échange de canaux BGR, aidant à l'invariance des couleurs.
mosaictune.uniform(0.0, 1.0)Probabilité d'augmentation Mosaic qui combine quatre images en un seul échantillon d'entraînement.
mixuptune.uniform(0.0, 1.0)Probabilité d'augmentation Mixup qui mélange deux images et leurs étiquettes ensemble.
cutmixtune.uniform(0.0, 1.0)Probabilité d'augmentation Cutmix qui combine des régions d'images tout en conservant les caractéristiques locales.
copy_pastetune.uniform(0.0, 1.0)Probabilité d'augmentation Copy-paste qui transfère des objets entre les images pour augmenter la diversité des instances.
close_mosaictune.randint(0.0, 11)Désactive Mosaic lors des dernières N époques pour stabiliser l'entraînement avant la fin.

Exemple d'espace de recherche personnalisé

Dans cet exemple, nous démontrons comment utiliser un espace de recherche personnalisé pour le réglage des hyperparamètres avec Ray Tune et YOLO26. En fournissant un espace de recherche personnalisé, tu peux concentrer le processus de réglage sur des hyperparamètres spécifiques d'intérêt.

Utilisation
from ray import tune

from ultralytics import YOLO

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

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

Dans l'extrait de code ci-dessus, nous créons un modèle YOLO avec les poids pré-entraînés "yolo26n.pt". Ensuite, nous appelons la méthode tune(), en spécifiant la configuration du jeu de données avec "coco8.yaml". Nous fournissons un espace de recherche personnalisé pour le taux d'apprentissage initial lr0 en utilisant un dictionnaire avec la clé "lr0" et la valeur tune.uniform(1e-5, 1e-2). Enfin, nous passons des arguments d'entraînement supplémentaires, tels que le nombre d'époques directement à la méthode tune comme epochs=50.

Exemple d'algorithme de recherche

Tu peux sélectionner une stratégie de recherche Ray Tune par son nom. Pour les algorithmes de recherche basés sur des chaînes, Ultralytics utilisera automatiquement la métrique d'optimisation par défaut de la tâche actuelle et mode="max". Si search_alg n'est pas fourni, Ray Tune utilise sa stratégie de recherche aléatoire par défaut, BasicVariantGenerator.

Utilisation de `search_alg` en chaîne avec `model.tune()`
from ultralytics import YOLO

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

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

Si tu dois personnaliser l'échantillonneur du chercheur ou remplacer sa métrique et son mode d'optimisation, transmets un objet chercheur Ray Tune instancié au lieu d'une chaîne.

Utilisation de l'objet `OptunaSearch` avec `model.tune()`
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

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

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Reprise d'une session de réglage des hyperparamètres interrompue avec Ray Tune

Tu peux reprendre une session Ray Tune interrompue en transmettant resume=True. Tu peux éventuellement transmettre le name du répertoire utilisé par Ray Tune sous runs/{task} pour reprendre. Sinon, cela reprendrait la dernière session interrompue. Tu n'as pas besoin de fournir à nouveau iterations et space, mais tu dois fournir à nouveau le reste des arguments d'entraînement, y compris data et epochs.

Utiliser `resume=True` avec `model.tune()`
from ultralytics import YOLO

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

# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

Traitement des résultats de Ray Tune

Après avoir exécuté une expérience de réglage des hyperparamètres avec Ray Tune, tu souhaiteras peut-être effectuer diverses analyses sur les résultats obtenus. Ce guide te guidera à travers les flux de travail courants pour traiter et analyser ces résultats.

Chargement des résultats de l'expérience de réglage depuis un répertoire

Après avoir exécuté l'expérience de réglage avec tuner.fit(), tu peux charger les résultats à partir d'un répertoire. C'est utile, surtout si tu effectues l'analyse après la fermeture du script d'entraînement initial.

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

Analyse de base au niveau de l'expérience

Obtiens une vue d'ensemble de la performance des essais. Tu peux vérifier rapidement s'il y a eu des erreurs pendant les essais.

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

Analyse de base au niveau de l'essai

Accède aux configurations individuelles des hyperparamètres de l'essai et aux dernières métriques signalées.

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

Traçage de l'historique complet des métriques signalées pour un essai

Tu peux tracer l'historique des métriques signalées pour chaque essai afin de voir comment les métriques ont évolué au fil du temps.

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

Résumé

Dans ce guide, nous avons couvert les flux de travail courants pour analyser les résultats des expériences exécutées avec Ray Tune en utilisant Ultralytics. Les étapes clés incluent le chargement des résultats de l'expérience à partir d'un répertoire, l'exécution d'analyses de base au niveau de l'expérience et de l'essai, et le traçage des métriques.

Explore davantage en consultant la page de documentation Analyser les résultats de Ray Tune pour tirer le meilleur parti de tes expériences de réglage des hyperparamètres.

FAQ

Comment régler les hyperparamètres de mon modèle YOLO26 en utilisant Ray Tune ?

Pour régler les hyperparamètres de ton modèle Ultralytics YOLO26 en utilisant Ray Tune, suis ces étapes :

  1. Installe les packages requis :

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
  2. Charge ton modèle YOLO26 et commence le réglage :

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

Cela utilise les stratégies de recherche avancées et le parallélisme de Ray Tune pour optimiser efficacement les hyperparamètres de ton modèle. Pour plus d'informations, consulte la documentation de Ray Tune.

Quels sont les hyperparamètres par défaut pour le réglage de YOLO26 avec Ray Tune ?

Ultralytics YOLO26 utilise les hyperparamètres par défaut suivants pour le réglage avec Ray Tune :

ParamètrePlage de valeursDescription
lr0tune.uniform(1e-5, 1e-2)Taux d'apprentissage initial
lrftune.uniform(0.01, 1.0)Facteur de taux d'apprentissage final
momentumtune.uniform(0.7, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Décroissance pondérale
warmup_epochstune.uniform(0.0, 5.0)Époques de préchauffage
boxtune.uniform(1.0, 20.0)Poids de la perte de BBox
clstune.uniform(0.1, 4.0)Poids de la perte de classe
dfltune.uniform(0.4, 12.0)Poids de la perte DFL
hsv_htune.uniform(0.0, 0.1)Plage d'augmentation de la teinte
translatetune.uniform(0.0, 0.9)Plage d'augmentation de la translation

Ces hyperparamètres peuvent être personnalisés selon tes besoins spécifiques. Pour une liste complète et plus de détails, consulte le guide Hyperparameter Tuning.

Comment puis-je intégrer Weights & Biases avec mon réglage de modèle YOLO26 ?

Pour intégrer Weights & Biases (W&B) à ton processus de réglage Ultralytics YOLO26 :

  1. Installe W&B :

    pip install wandb
  2. Modifie ton script de réglage :

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

Cette configuration te permettra de surveiller le processus de réglage, de suivre les configurations d'hyperparamètres et de visualiser les résultats dans W&B.

Pourquoi utiliser Ray Tune pour l'optimisation des hyperparamètres avec YOLO26 ?

Ray Tune offre de nombreux avantages pour l'optimisation des hyperparamètres :

  • Stratégies de recherche avancées : Utilise des algorithmes comme l'Bayesian Optimization et HyperOpt pour une recherche efficace des paramètres.
  • Parallélisme : Prend en charge l'exécution parallèle de plusieurs essais, accélérant considérablement le processus de réglage.
  • Arrêt précoce : Emploie des stratégies comme ASHA pour arrêter prématurément les essais peu performants, économisant ainsi des ressources de calcul.

Ray Tune s'intègre parfaitement avec Ultralytics YOLO26, offrant une interface facile à utiliser pour régler efficacement les hyperparamètres. Pour commencer, consulte le guide Hyperparameter Tuning.

Comment puis-je définir un espace de recherche personnalisé pour le réglage des hyperparamètres de YOLO26 ?

Pour définir un espace de recherche personnalisé pour ton réglage d'hyperparamètres YOLO26 avec Ray Tune :

from ray import tune

from ultralytics import YOLO

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

Cela personnalise la plage des hyperparamètres tels que le taux d'apprentissage initial et l'élan à explorer pendant le processus de réglage. Pour des configurations avancées, réfère-toi à la section Custom Search Space Example.

Commentaires