Optimisation efficace des hyperparamètres avec Ray Tune et YOLO26#
L’optimisation des hyperparamètres est essentielle pour obtenir les meilleures performances du modèle en déterminant l’ensemble optimal d’hyperparamètres. Elle consiste à exécuter des essais avec différents hyperparamètres et à évaluer les performances de chaque essai.
Accélère l’optimisation avec Ultralytics YOLO26 et Ray Tune#
Ultralytics YOLO26 intègre Ray Tune pour optimiser les hyperparamètres et simplifier 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 d’optimisation.
Ray Tune#
Ray Tune est une bibliothèque d’optimisation des hyperparamètres conçue pour être efficace et flexible. Elle prend en charge différentes stratégies de recherche, le parallélisme et l’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 suivre le processus d’optimisation.
Installation#
Pour installer les paquets requis, exécute :
# 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=TrueUtilisation#
from ultralytics import YOLO
# Charger un modèle YOLO26n
model = YOLO("yolo26n.pt")
# Lancer l’optimisation des hyperparamètres pour entraîner YOLO26n sur le jeu de données COCO8
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 facile à utiliser pour optimiser les hyperparamètres avec Ray Tune. Elle accepte plusieurs arguments qui te permettent de personnaliser le processus d’optimisation. Voici une explication détaillée de chaque paramètre :
| Paramètre | Type | Description | Valeur par défaut |
|---|---|---|---|
data | str | Le fichier YAML du jeu de données sur lequel exécuter l’optimiseur, qui indique les chemins des données de validation et d’entraînement, ainsi que d’autres paramètres propres au jeu de données. Pour la classification, indique plutôt un répertoire de jeu de données ou le nom d’un jeu de données intégré (par exemple, imagenet10). | |
space | dict, optional | Un dictionnaire qui définit l’espace de recherche des hyperparamètres pour Ray Tune. Chaque clé correspond au nom d’un hyperparamètre, et la valeur indique l’intervalle de valeurs à explorer pendant l’optimisation. Si aucun espace n’est fourni, YOLO26 utilise un espace de recherche par défaut couvrant plusieurs hyperparamètres. | |
grace_period | int, optional | La période de grâce en époques pour le planificateur ASHA dans Ray Tune. Le planificateur ne mettra fin à aucun essai avant que ce nombre d’époques ne soit atteint, ce qui permet au modèle de bénéficier d’un entraînement minimal avant toute décision d’arrêt anticipé. | 10 |
gpu_per_trial | int, optional | Le nombre de GPU que Ray alloue à chaque essai. Définis explicitement cette valeur pour utiliser l’entraînement sur GPU ; si elle est omise, les essais ne reçoivent aucune ressource GPU. | None |
iterations | int, optional | Le nombre maximal d’essais à exécuter pendant l’optimisation. Ce paramètre permet de limiter le nombre total de combinaisons d’hyperparamètres testées et d’éviter que le processus d’optimisation ne s’exécute indéfiniment. | 300 |
search_alg | str or Searcher, optional | Straté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 chaînes de recherche utilisent automatiquement la métrique de tâche par défaut et mode="max". Par défaut, Optuna utilise TPE multivarié avec des suggestions adaptées au parallélisme. | "optuna" |
**train_args | dict, optional | Arguments supplémentaires à transmettre à la méthode train() pendant l’optimisation. Ils peuvent inclure des paramètres comme le nombre d’époques d’entraînement, la taille de lot et d’autres configurations propres à l’entraînement. | {} |
En personnalisant ces paramètres, tu peux adapter précisément le processus d’optimisation des hyperparamètres à tes besoins et aux 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 optimiser les hyperparamètres de YOLO26 avec Ray Tune. Chaque paramètre possède un intervalle de valeurs défini par tune.uniform(), à l’exception de close_mosaic, qui utilise tune.randint().
| Paramètre | Plage | Description |
|---|---|---|
lr0 | tune.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é. |
lrf | tune.uniform(0.01, 1.0) | Facteur final du taux d’apprentissage qui détermine la diminution du taux d’apprentissage à la fin de l’entraînement. |
momentum | tune.uniform(0.7, 0.98) | Facteur d’inertie de l’optimiseur qui contribue à accélérer l’entraînement et à sortir des minima locaux. |
weight_decay | tune.uniform(0.0, 0.001) | Paramètre de régularisation qui évite le surapprentissage en pénalisant les valeurs de poids élevées. |
warmup_epochs | tune.uniform(0.0, 5.0) | Nombre d’époques pendant lesquelles le taux d’apprentissage augmente progressivement afin de stabiliser le début de l’entraînement. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valeur initiale de l’inertie, qui augmente progressivement pendant la période de préchauffage. |
box | tune.uniform(1.0, 20.0) | Poids de la composante de perte des boîtes englobantes, qui équilibre la précision de localisation du modèle. |
cls | tune.uniform(0.1, 4.0) | Poids de la composante de perte de classification, qui équilibre la précision de prédiction des classes du modèle. |
cls_pw | tune.uniform(0.0, 1.0) | Puissance de pondération des classes, de la désactivation (0.0) à la pondération complète selon l’inverse de la fréquence (1.0). |
dfl | tune.uniform(0.4, 12.0) | Poids de la composante de régression de la distance des boîtes, qui favorise une localisation précise des boîtes englobantes. |
hsv_h | tune.uniform(0.0, 0.1) | Plage d’augmentation de la teinte, qui introduit une variabilité des couleurs pour aider le modèle à mieux généraliser. |
hsv_s | tune.uniform(0.0, 0.9) | Plage d’augmentation de la saturation, qui fait varier l’intensité des couleurs pour améliorer la robustesse. |
hsv_v | tune.uniform(0.0, 0.9) | Plage d’augmentation de la valeur (luminosité), qui aide le modèle à fonctionner dans diverses conditions d’éclairage. |
degrees | tune.uniform(0.0, 45.0) | Plage d’augmentation de la rotation en degrés, qui améliore la reconnaissance des objets pivotés. |
translate | tune.uniform(0.0, 0.9) | Plage d’augmentation de la translation, qui déplace les images horizontalement et verticalement. |
scale | tune.uniform(0.0, 0.95) | Plage d’augmentation de l’échelle, qui simule des objets situés à différentes distances. |
shear | tune.uniform(0.0, 10.0) | Plage d’augmentation du cisaillement en degrés, qui simule des changements de perspective. |
perspective | tune.uniform(0.0, 0.001) | Plage d’augmentation de la perspective, qui simule des changements de point de vue en 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilité d’augmentation par retournement vertical, qui accroît la diversité du jeu de données. |
fliplr | tune.uniform(0.0, 1.0) | Probabilité d’augmentation par retournement horizontal, utile pour les objets symétriques. |
bgr | tune.uniform(0.0, 1.0) | Probabilité d’augmentation par permutation des canaux BGR, qui contribue à l’invariance des couleurs. |
mosaic | tune.uniform(0.0, 1.0) | Probabilité d’augmentation Mosaic, qui combine quatre images en un seul échantillon d’entraînement. |
mixup | tune.uniform(0.0, 1.0) | Probabilité d’augmentation Mixup, qui mélange deux images et leurs étiquettes. |
cutmix | tune.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_paste | tune.uniform(0.0, 1.0) | En mode flip, fraction des objets éligibles copiés dans une image ; en mode mixup, probabilité d’exécuter également l’opération. |
close_mosaic | tune.randint(0, 11) | Désactive Mosaic pendant les N dernières époques afin de stabiliser l’entraînement avant son terme. |
Exemple d’espace de recherche personnalisé#
Dans cet exemple, nous montrons comment utiliser un espace de recherche personnalisé pour optimiser les hyperparamètres avec Ray Tune et YOLO26. En fournissant un espace de recherche personnalisé, tu peux concentrer le processus d’optimisation sur certains hyperparamètres.
from ray import tune
from ultralytics import YOLO
# Définir un modèle YOLO
model = YOLO("yolo26n.pt")
# Exécuter Ray Tune sur le modèle
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 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 au moyen 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, comme le nombre d’époques, directement à la méthode d’optimisation 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 désignés par une chaîne, Ultralytics utilise automatiquement la métrique d’optimisation par défaut de la tâche en cours et mode="max". Si search_alg n’est pas fourni, Ultralytics utilise TPE multivarié d’Optuna avec des suggestions adaptées au parallélisme.
from ultralytics import YOLO
# Définir un modèle YOLO
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 de l’outil de recherche ou remplacer sa métrique et son mode d’optimisation, transmets un objet d’outil de recherche Ray Tune instancié plutôt qu’une chaîne.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Définir un modèle YOLO
model = YOLO("yolo26n.pt")
# Définir un outil de recherche
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 d’optimisation des hyperparamètres interrompue 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. Il n’est pas nécessaire de fournir à nouveau iterations et space, mais tu dois fournir à nouveau les autres arguments d’entraînement, y compris data et epochs.
from ultralytics import YOLO
# Définir un modèle YOLO
model = YOLO("yolo26n.pt")
# Reprendre l’exécution précédente
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Reprendre l’exécution Ray Tune avec le nom 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)Traiter les résultats de Ray Tune#
Après avoir exécuté une expérience d’optimisation des hyperparamètres avec Ray Tune, tu peux vouloir effectuer différentes analyses des résultats obtenus. Ce guide te présente des flux de travail 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 objet Ray ResultGrid et enregistre l’expérience dans runs/{task}/tune, ou dans le name que tu as indiqué. Pour charger ces résultats après la fermeture du script d’origine, reprends la session ; les essais enregistrés seront restaurés et le même ResultGrid sera renvoyé :
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 un aperçu des performances des essais. Tu peux vérifier rapidement s’ils ont rencontré des erreurs.
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 de chaque essai 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é des flux de travail 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 des analyses de base au niveau de l’expérience et des essais, puis à tracer les métriques.
Pour approfondir le sujet, consulte la page de documentation Analyser les résultats de Ray Tune afin de tirer le meilleur parti de tes expériences d’optimisation des hyperparamètres.
FAQ#
Pour optimiser les hyperparamètres de ton modèle Ultralytics YOLO26 avec Ray Tune, suis ces étapes :
-
Installer les paquets requis :
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
Charger ton modèle YOLO26 et lancer l’optimisation :
from ultralytics import YOLO # Charger un modèle YOLO26 model = YOLO("yolo26n.pt") # Lancer l’optimisation avec le jeu de données COCO8 result_grid = model.tune(data="coco8.yaml", use_ray=True)
Cela exploite 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 en savoir plus, consulte la documentation Ray Tune.
-
Ultralytics YOLO26 utilise les hyperparamètres par défaut suivants pour l’optimisation avec Ray Tune :
Paramètre Plage de valeurs Description lr0tune.uniform(1e-5, 1e-2)Taux d’apprentissage initial lrftune.uniform(0.01, 1.0)Facteur final du taux d’apprentissage momentumtune.uniform(0.7, 0.98)Inertie 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 boîtes 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 des boîtes 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 Tu peux personnaliser ces hyperparamètres selon tes besoins. Pour obtenir la liste complète et plus de détails, consulte le guide Optimisation des hyperparamètres.
Pour intégrer Weights & Biases (W&B) au processus d’optimisation de ton modèle Ultralytics YOLO26 :
-
Installer W&B :
pip install wandb wandb login yolo settings wandb=True -
Exécuter l’optimiseur :
from ultralytics import YOLO # Charger le modèle YOLO model = YOLO("yolo26n.pt") # Chaque essai Ray crée sa propre exécution W&B dans ce projet result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
Cette configuration te permettra de suivre le processus d’optimisation, de suivre les configurations des 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 comme l’optimisation bayésienne et HyperOpt pour rechercher efficacement les paramètres.
- Parallélisme : permet d’exécuter plusieurs essais en parallèle, ce qui accélère considérablement le processus d’optimisation.
- Arrêt anticipé : utilise des stratégies comme ASHA pour arrêter rapidement les essais peu performants et économiser des ressources de calcul.
Ray Tune s’intègre parfaitement à Ultralytics YOLO26 et fournit une interface facile à utiliser pour optimiser efficacement les hyperparamètres. Pour commencer, consulte le guide Optimisation des hyperparamètres.
Pour définir un espace de recherche personnalisé pour optimiser les hyperparamètres de 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 permet de personnaliser la plage des hyperparamètres, comme le taux d’apprentissage initial et la quantité de mouvement, à explorer pendant l’optimisation. Pour les configurations avancées, consulte la section Exemple d’espace de recherche personnalisé.