Réglage efficace des hyperparamètres avec Ray Tune et YOLO26#
Le réglage des hyperparamètres est essentiel pour atteindre des performances de modèle optimales 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érez le réglage avec Ultralytics YOLO26 et Ray Tune#
Ultralytics YOLO26 intègre Ray Tune pour le réglage des hyperparamètres, simplifiant ainsi 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 précoce pour accélérer le processus de réglage.
Ray Tune#
Ray Tune est une bibliothèque de réglage d'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 précoce, et s'intègre de manière transparente aux frameworks de machine learning populaires, 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 paquets requis, exécute :
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=TrueUtilisation#
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 offre une interface simple d'utilisation 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ètre | Type | Description | Valeur par défaut |
|---|---|---|---|
data | str | Le fichier YAML du dataset pour exécuter le tuneur, spécifiant les chemins d'accès aux données de validation et d'entraînement ainsi que d'autres paramètres spécifiques au dataset. La classification prend plutôt un répertoire de dataset ou un nom de dataset intégré (par exemple, imagenet10). | |
space | dict, optional | Un 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. S'il n'est pas fourni, YOLO26 utilise un espace de recherche par défaut avec divers hyperparamètres. | |
grace_period | int, optional | La période de grâce en epochs pour le ASHA scheduler dans Ray Tune. Le planificateur ne mettra fin à aucun essai avant ce nombre d'epochs, permettant au modèle d'avoir un entraînement minimal avant de prendre une décision sur l'arrêt précoce. | 10 |
gpu_per_trial | int, optional | Le nombre de GPU que Ray alloue à chaque essai. Définis cette valeur explicitement 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 maximum 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_alg | str or Searcher, optional | Stratégie de recherche Ray Tune à utiliser. Tu peux passer 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 textuels 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_args | dict, optional | Arguments supplémentaires à passer à la méthode train() pendant le réglage. Ces arguments peuvent inclure des paramètres tels que le nombre d'epochs d'entraînement, le batch size 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 a une plage de valeurs spécifique définie par tune.uniform().
| 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 de taux d'apprentissage final qui détermine à quel point le taux d'apprentissage diminue à la fin de l'entraînement. |
momentum | tune.uniform(0.7, 0.98) | Facteur de momentum pour l'optimiseur qui aide à accélérer l'entraînement et à surmonter les minima locaux. |
weight_decay | tune.uniform(0.0, 0.001) | Paramètre de régularisation qui empêche le surapprentissage en pénalisant les grandes valeurs de poids. |
warmup_epochs | tune.uniform(0.0, 5.0) | Nombre d'époques avec un taux d'apprentissage progressivement croissant pour stabiliser l'entraînement initial. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valeur de momentum initiale qui augmente progressivement pendant la période d'échauffement. |
box | tune.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. |
cls | tune.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. |
cls_pw | tune.uniform(0.0, 1.0) | Puissance de pondération des classes, de désactivée (0.0) à une pondération complète par la fréquence inverse (1.0). |
dfl | tune.uniform(0.4, 12.0) | Poids pour le composant de régression de la distance de la boîte, mettant l'accent sur la localisation précise de la BBox. |
hsv_h | tune.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_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, améliorant la reconnaissance des objets tourné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 à différentes distances. |
shear | tune.uniform(0.0, 10.0) | Plage d'augmentation du cisaillement en degrés, simulant 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 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilité d'augmentation du retournement vertical, augmentant la diversité du jeu de données. |
fliplr | tune.uniform(0.0, 1.0) | Probabilité d'augmentation du retournement horizontal, utile pour les objets symétriques. |
bgr | tune.uniform(0.0, 1.0) | Probabilité d'augmentation de l'échange de canaux BGR, aidant à l'invariance des couleurs. |
mosaic | tune.uniform(0.0, 1.0) | Probabilité d'augmentation mosaïque 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 ensemble. |
cutmix | tune.uniform(0.0, 1.0) | Probabilité d'augmentation Cutmix qui combine des régions d'image tout en conservant les caractéristiques locales. |
copy_paste | tune.uniform(0.0, 1.0) | En mode flip, la fraction des objets éligibles copiés dans une image, et en mode mixup, également la probabilité de l'exécuter. |
close_mosaic | tune.randint(0, 11) | Désactive la mosaïque dans les N dernières é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.
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 dataset 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'epochs, directement à la méthode de réglage sous forme de 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 textuels, 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.
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, passe un objet de recherche Ray Tune instancié au lieu d'une chaîne.
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 de réglage des hyperparamètres interrompue avec Ray Tune#
Tu peux reprendre une session Ray Tune interrompue en passant resume=True. Tu peux éventuellement passer le répertoire name utilisé par Ray Tune sous runs/{task} pour reprendre. Sinon, il reprendra 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.
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 pourrais vouloir effectuer diverses analyses sur les résultats obtenus. Ce guide te présentera les flux de travail courants pour traiter et analyser ces résultats.
Chargement des résultats de l'expérience Tune 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, en particulier si tu effectues l'analyse après la fin 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 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 comment elles 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 depuis un répertoire, la réalisation d'une analyse de base au niveau de l'expérience et de l'essai, ainsi que le traçage des métriques.
Explore davantage en consultant la page de documentation de Ray Tune sur l' Analyze Results pour tirer le meilleur parti de tes expériences de réglage d'hyperparamètres.
FAQ#
Ultralytics YOLO26 utilise les hyperparamètres par défaut suivants pour l'ajustement 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 de taux d'apprentissage final momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Weight decay warmup_epochstune.uniform(0.0, 5.0)Époques de préchauffage (warmup) boxtune.uniform(1.0, 20.0)Poids de la perte BBox clstune.uniform(0.1, 4.0)Poids de la perte de classe 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 de la boîte hsv_htune.uniform(0.0, 0.1)Plage d'augmentation de la teinte (hue) translatetune.uniform(0.0, 0.9)Plage d'augmentation de la translation Ces hyperparamètres peuvent être personnalisés pour répondre à tes besoins spécifiques. Pour une liste complète et plus de détails, réfère-toi au guide Hyperparameter Tuning.
Pour intégrer Weights & Biases (W&B) à ton processus d'ajustement Ultralytics YOLO26 :
-
Installe W&B :
pip install wandb wandb login yolo settings wandb=True -
Exécute 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 d'ajustement, 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 une recherche de paramètres efficace.
- Parallélisme : Prend en charge l'exécution parallèle de plusieurs essais, accélérant considérablement le processus d'ajustement.
- Arrêt précoce (Early Stopping) : Emploie des stratégies comme ASHA pour arrêter prématurément les essais sous-performants, économisant ainsi des ressources computationnelles.
Ray Tune s'intègre de manière transparente à Ultralytics YOLO26, fournissant une interface simple d'utilisation pour régler efficacement les hyperparamètres. Pour commencer, consulte le guide Hyperparameter Tuning.
Pour définir un espace de recherche personnalisé pour l'ajustement 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 permet de personnaliser la plage d'hyperparamètres tels que le taux d'apprentissage initial et le moment à explorer pendant le processus de réglage. Pour des configurations avancées, réfère-toi à la section Custom Search Space Example.
Pour ajuster les hyperparamètres de ton modèle Ultralytics YOLO26 avec Ray Tune, suis ces étapes :
Installe les paquets requis :
Charge ton modèle YOLO26 et commence l'ajustement :
Ceci 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 Ray Tune.