Ultralytics YOLO27 :

Réglage efficace des hyperparamètres avec Ray Tune et YOLO26#

Le réglage des hyperparamètres est essentiel pour atteindre les performances maximales d'un modèle en identifiant l'ensemble optimal d'hyperparamètres. Il consiste à exécuter des essais avec différents hyperparamètres et à évaluer les performances de chaque essai.

Accélérer le réglage avec Ultralytics YOLO26 et Ray Tune#

Ultralytics YOLO26 intègre Ray Tune pour le réglage des hyperparamètres, ce qui simplifie l'optimisation des hyperparamètres des modèles 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 être efficace et flexible. Elle prend en charge différentes stratégies de recherche, le parallélisme et les stratégies d'arrêt anticipé, et s'intègre parfaitement aux frameworks populaires de machine learning, notamment Ultralytics YOLO26.

Intégration avec Weights & Biases#

YOLO26 permet également une intégration facultative 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]" optuna

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

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() de YOLO26 fournit une interface simple à 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. Voici une explication détaillée de chaque paramètre :

ParamètreTypeDescriptionValeur par défaut
datastrLe fichier YAML du jeu de données sur lequel exécuter le tuner, qui indique les chemins des données d'entraînement et de validation ainsi que d'autres paramètres propres au jeu de données. Pour la classification, il faut plutôt fournir un répertoire de jeu de données ou le nom d'un jeu de données intégré (par exemple, imagenet10).
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 indique la plage de valeurs à explorer pendant le réglage. Si ce paramètre n'est pas fourni, YOLO26 utilise un espace de recherche par défaut contenant différents hyperparamètres.
grace_periodint, optionalLa période de grâce, en époques, du planificateur ASHA dans Ray Tune. Le planificateur ne mettra fin à aucun essai avant ce nombre d'époques, ce qui permet au modèle de bénéficier d'un entraînement minimal avant de décider d'un arrêt anticipé.10
gpu_per_trialint, optionalLe nombre de GPU que Ray alloue à chaque essai. Définis-le explicitement pour utiliser l'entraînement sur GPU ; s'il est omis, les essais ne reçoivent aucune ressource GPU.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 afin d'éviter que le processus de réglage ne s'exécute indéfiniment.300
search_algstr or Searcher, optionalStratégie de recherche Ray Tune à utiliser. Tu peux transmettre directement un objet de recherche Ray ou utiliser une chaîne prise en charge telle que optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax ou random. Les moteurs de recherche basés sur des chaînes utilisent automatiquement la métrique de tâche par défaut et mode="max". Par défaut, Optuna TPE multivarié est utilisé avec des suggestions tenant compte du parallélisme."optuna"
**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 des lots et d'autres configurations propres à l'entraînement.{}

En personnalisant ces paramètres, tu peux affiner le processus d'optimisation des hyperparamètres en fonction de tes besoins spécifiques et des ressources de calcul 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 du 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 d'impulsion de l'optimiseur qui aide à accélérer l'entraînement et à sortir des minima locaux.
weight_decaytune.uniform(0.0, 0.001)Paramètre de régularisation qui évite le surapprentissage en pénalisant les valeurs de poids élevées.
warmup_epochstune.uniform(0.0, 5.0)Nombre d'époques durant lesquelles le taux d'apprentissage augmente progressivement afin de stabiliser le début de l'entraînement.
warmup_momentumtune.uniform(0.0, 0.95)Valeur initiale de l'impulsion qui augmente progressivement pendant la période de préchauffage.
boxtune.uniform(1.0, 20.0)Poids de la composante de perte de la BBox, qui équilibre la précision de la localisation dans le modèle.
clstune.uniform(0.1, 4.0)Poids de la composante de perte de classification, qui équilibre la précision de prédiction des classes dans le modèle.
cls_pwtune.uniform(0.0, 1.0)Puissance de pondération des classes, de désactivée (0.0) à une pondération complète par fréquence inverse (1.0).
dfltune.uniform(0.4, 12.0)Poids de la composante de régression de la distance aux boîtes, qui accentue la précision de la localisation des BBox.
hsv_htune.uniform(0.0, 0.1)Plage d'augmentation de la teinte qui introduit une variabilité des couleurs pour aider le modèle à généraliser.
hsv_stune.uniform(0.0, 0.9)Plage d'augmentation de la saturation qui fait varier l'intensité des couleurs afin d'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 de rotation en degrés, qui améliore la reconnaissance des objets tournés.
translatetune.uniform(0.0, 0.9)Plage de translation qui décale les images horizontalement et verticalement.
scaletune.uniform(0.0, 0.95)Plage de mise à l'échelle qui simule des objets situés à différentes distances.
sheartune.uniform(0.0, 10.0)Plage de cisaillement en degrés, qui simule des changements de perspective.
perspectivetune.uniform(0.0, 0.001)Plage de perspective qui simule des changements de point de vue en 3D.
flipudtune.uniform(0.0, 1.0)Probabilité d'augmentation par retournement vertical, qui accroît 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 permutation des canaux BGR, qui aide à obtenir une invariance aux 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 annotations.
cutmixtune.uniform(0.0, 1.0)Probabilité d'augmentation CutMix, qui combine des régions d'image tout en préservant les caractéristiques locales.
copy_pastetune.uniform(0.0, 1.0)En mode flip, fraction des objets admissibles copiés dans une image ; en mode mixup, également la probabilité d'exécuter cette opération.
close_mosaictune.randint(0, 11)Désactive Mosaic pendant les N dernières époques afin de stabiliser l'entraînement avant son achèvement.

Exemple d’espace de recherche personnalisé#

Dans cet exemple, nous 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 les hyperparamètres qui t'intéressent particulièrement.

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". Nous appelons ensuite la méthode tune() en indiquant la configuration du jeu de données avec "coco8.yaml". Nous fournissons un espace de recherche personnalisé pour le taux d'apprentissage initial lr0 à l'aide d'un dictionnaire dont la clé est "lr0" et la valeur tune.uniform(1e-5, 1e-2). Enfin, nous transmettons des arguments d'entraînement supplémentaires, tels que le nombre d'époques, directement à la méthode tune sous la forme 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 utilise automatiquement la métrique d'optimisation par défaut de la tâche actuelle et mode="max". Si search_alg n'est pas fourni, Ultralytics utilise Optuna TPE multivarié avec des suggestions tenant compte du parallélisme.

Utilisation de `search_alg` sous forme de 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 moteur de recherche ou remplacer sa métrique et son mode d'optimisation, transmets plutôt un objet de recherche Ray Tune instancié qu'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,
)

Reprendre une session interrompue de réglage des hyperparamètres avec Ray Tune#

Tu peux reprendre une session Ray Tune interrompue en transmettant resume=True. Tu peux éventuellement transmettre le répertoire name utilisé par Ray Tune sous runs/{task} pour reprendre la session. Sinon, la dernière session interrompue sera reprise. Tu n'as pas besoin de fournir à nouveau iterations et space, mais tu dois fournir à nouveau les autres arguments d'entraînement, notamment 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 voudras peut-être effectuer différentes analyses sur les résultats obtenus. Ce guide présente les workflows courants pour traiter et analyser ces résultats.

Charger les résultats d'une expérience Tune depuis un répertoire#

model.tune(use_ray=True) renvoie un Ray ResultGrid et sauvegarde l'expérience sous runs/{task}/tune, ou sous le name que tu as transmis. Pour charger ces résultats après la fermeture du script d'origine, reprends la session, ce qui restaure les essais sauvegardés et renvoie le même ResultGrid :

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)

Analyse de base au niveau de l'expérience#

Obtiens une vue d'ensemble des performances des essais. Tu peux vérifier rapidement si des erreurs se sont produites pendant les essais.

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

Analyse de base au niveau des essais#

Accède aux configurations d'hyperparamètres individuelles des essais et aux dernières métriques rapportées.

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

Tracer l'historique complet des métriques rapportées pour un essai#

Tu peux tracer l'historique des métriques rapportées pour chaque essai afin de voir leur évolution 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["metrics/mAP50-95(B)"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()

Résumé#

Dans ce guide, nous avons présenté les workflows courants pour analyser les résultats d'expériences exécutées avec Ray Tune et Ultralytics. Les principales étapes consistent à charger les résultats de l'expérience depuis un répertoire, à effectuer une analyse de base au niveau de l'expérience et des essais, puis à tracer les métriques.

Pour aller plus loin, consulte la page de documentation Analyser les résultats de Ray Tune afin de tirer le meilleur parti de tes expériences de réglage des hyperparamètres.

FAQ#

  • Pour régler les hyperparamètres de ton modèle Ultralytics YOLO26 avec Ray Tune, suis les étapes suivantes :

    1. Installer les packages requis :

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. Charger ton modèle YOLO26 et démarrer 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.

  • 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 du taux d'apprentissage final
    momentumtune.uniform(0.7, 0.98)Impulsion
    weight_decaytune.uniform(0.0, 0.001)Décroissance des poids
    warmup_epochstune.uniform(0.0, 5.0)Époques de préchauffage
    boxtune.uniform(1.0, 20.0)Poids de la perte des BBox
    clstune.uniform(0.1, 4.0)Poids de la perte de classification
    cls_pwtune.uniform(0.0, 1.0)Puissance de pondération des classes
    dfltune.uniform(0.4, 12.0)Poids de la perte de distance aux BBox
    hsv_htune.uniform(0.0, 0.1)Plage d'augmentation de la teinte
    translatetune.uniform(0.0, 0.9)Plage d'augmentation de translation

    Ces hyperparamètres peuvent être personnalisés selon tes besoins spécifiques. Pour obtenir la liste complète et plus de détails, consulte le guide Réglage des hyperparamètres.

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

    1. Installer W&B :

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. Exécuter le tuner :

      from ultralytics import YOLO
      
      # Load YOLO model
      model = YOLO("yolo26n.pt")
      
      # Each Ray trial creates its own W&B run in this project
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", 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.

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

    • Stratégies de recherche avancées : utilise des algorithmes tels que l'optimisation bayésienne et HyperOpt pour rechercher efficacement les paramètres.
    • Parallélisme : prend en charge l'exécution parallèle de plusieurs essais, ce qui accélère considérablement le processus de réglage.
    • Arrêt anticipé : utilise des stratégies telles qu'ASHA pour arrêter rapidement les essais peu performants et économiser les ressources de calcul.

    Ray Tune s'intègre parfaitement à Ultralytics YOLO26 et fournit une interface simple à utiliser pour régler efficacement les hyperparamètres. Pour commencer, consulte le guide Réglage des hyperparamètres.

  • Pour définir un espace de recherche personnalisé pour le réglage de tes 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'impulsion, à explorer pendant le processus de réglage. Pour les configurations avancées, consulte la section Exemple d'espace de recherche personnalisé.

Commentaires