Optimisation efficace des hyperparamètres à l'aide de Ray Tune et de YOLO11
Le réglage des hyperparamètres est essentiel pour obtenir des performances maximales du modèle en découvrant l'ensemble optimal d'hyperparamètres. Il s'agit d'effectuer des essais avec différents hyperparamètres et d'évaluer les performances de chaque essai.
Accélérer le réglage avec Ultralytics YOLO11 et Ray Tune
Ultralytics YOLO11 intègre Ray Tune pour le réglage des hyperparamètres, rationalisant ainsi l'optimisation des hyperparamètres du modèle YOLO11 . Avec Ray Tune, vous pouvez 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 est une bibliothèque de réglage des hyperparamètres conçue pour être efficace et flexible. Elle prend en charge diverses stratégies de recherche, le parallélisme et les stratégies d'arrêt précoce, et s'intègre de manière transparente aux cadres d'apprentissage automatique les plus répandus, y compris Ultralytics YOLO11 .
Intégration avec Weights & Biases
YOLO11 permet également une intégration optionnelle avec Weights & Biases pour le suivi du processus de réglage.
Installation
Pour installer les paquets nécessaires, exécutez :
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 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()
Paramètres de la méthode
Le tune()
dans YOLO11 fournit une interface facile à utiliser pour le réglage des hyperparamètres avec Ray Tune. Elle accepte plusieurs arguments qui vous permettent de personnaliser le processus de réglage. Vous trouverez ci-dessous une explication détaillée de chaque paramètre :
Paramètres | Type | Description | Valeur par défaut |
---|---|---|---|
data |
str |
Le fichier de configuration du jeu de données (au format YAML) sur lequel l'accordeur doit être exécuté. Ce fichier doit spécifier les chemins d'accès aux données d' apprentissage et de validation, ainsi que d'autres paramètres spécifiques au jeu de données. | |
space |
dict, optional |
Dictionnaire définissant l'espace de recherche des hyperparamètres pour Ray Tune. Chaque clé correspond à un nom d'hyperparamètre, et la valeur spécifie la plage de valeurs à explorer lors de la mise au point. S'il n'est pas fourni, YOLO11 utilise un espace de recherche par défaut avec différents hyperparamètres. | |
grace_period |
int, optional |
Le délai de grâce en époques pour le planificateur ASHA dans Ray Tune. Le programmateur ne met fin à aucun essai avant ce nombre d'époques, ce qui permet au modèle d'avoir un minimum d'entraînement avant de prendre une décision sur l'arrêt prématuré. | 10 |
gpu_per_trial |
int, optional |
Le nombre de GPU à allouer par essai lors de la mise au point. Cela permet de gérer l'utilisation de GPU , en particulier dans les environnements multiGPU . S'il n'est pas fourni, l'accordeur utilisera tous les GPU disponibles. | None |
iterations |
int, optional |
Le nombre maximum d'essais à effectuer pendant la mise au point. Ce paramètre permet de contrôler le nombre total de combinaisons d'hyperparamètres testées, en veillant à ce que le processus de réglage ne se poursuive pas indéfiniment. | 10 |
**train_args |
dict, optional |
Arguments supplémentaires à transmettre à la fonction train() lors de la mise au point. Ces arguments peuvent inclure des paramètres tels que le nombre d'époques d'apprentissage, taille du lotet d'autres configurations spécifiques à la formation. |
{} |
En personnalisant ces paramètres, vous pouvez affiner le processus d'optimisation des hyperparamètres en fonction de vos besoins spécifiques et des ressources informatiques disponibles.
Espace de recherche par défaut Description
Le tableau suivant répertorie les paramètres de l'espace de recherche par défaut pour l'ajustement des hyperparamètres dans YOLO11 avec Ray Tune. Chaque paramètre a une plage de valeurs spécifique définie par tune.uniform()
.
Paramètres | Gamme | Description |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Taux d'apprentissage initial qui contrôle la taille du pas pendant l'optimisation. Des valeurs plus élevées accélèrent l'apprentissage mais peuvent entraîner une instabilité. |
lrf |
tune.uniform(0.01, 1.0) |
Facteur du taux d'apprentissage final qui détermine de combien le taux d'apprentissage diminue à la fin de la formation. |
momentum |
tune.uniform(0.6, 0.98) |
Facteur d'impulsion pour l'optimiseur qui permet d'accélérer la formation et de surmonter les minima locaux. |
weight_decay |
tune.uniform(0.0, 0.001) |
Paramètre de régularisation qui empêche l'ajustement excessif en pénalisant les valeurs de poids élevées. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Nombre d'époques avec augmentation progressive du taux d'apprentissage pour stabiliser le début de l'apprentissage. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Valeur initiale de l'élan qui augmente progressivement pendant la période d'échauffement. |
box |
tune.uniform(0.02, 0.2) |
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.2, 4.0) |
Poids de la composante de perte de classification, équilibrant la précision de prédiction des classes dans le modèle. |
hsv_h |
tune.uniform(0.0, 0.1) |
Gamme d'augmentation de la teinte qui introduit la variabilité de la couleur pour aider le modèle à se généraliser. |
hsv_s |
tune.uniform(0.0, 0.9) |
La gamme 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 différentes 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) |
Gamme d'augmentation de la traduction qui déplace les images horizontalement et verticalement. |
scale |
tune.uniform(0.0, 0.9) |
Gamme d'augmentation d'échelle qui simule des objets à différentes distances. |
shear |
tune.uniform(0.0, 10.0) |
L'augmentation du cisaillement se fait en degrés, ce qui simule les changements de perspective. |
perspective |
tune.uniform(0.0, 0.001) |
Gamme d'augmentation de la perspective qui simule les changements de point de vue en 3D. |
flipud |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation du retournement vertical, augmentant la diversité des ensembles de données. |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation du retournement horizontal, utile pour les objets symétriques. |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation de la mosaïque qui combine quatre images en un seul échantillon d'apprentissage. |
mixup |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation du mélange qui mélange deux images et leurs étiquettes. |
cutmix |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation du cutmix qui combine les régions de l'image tout en conservant les caractéristiques locales, ce qui améliore la détection des objets partiellement occultés. |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilité d'augmentation du copier-coller qui transfère des objets entre les images pour augmenter la diversité des instances. |
Exemple d'espace de recherche personnalisé
Dans cet exemple, nous montrons comment utiliser un espace de recherche personnalisé pour l'ajustement des hyperparamètres avec Ray Tune et YOLO11. En fournissant un espace de recherche personnalisé, vous pouvez 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("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,
)
Dans l'extrait de code ci-dessus, nous créons un modèle YOLO avec les poids pré-entraînés "yolo11n.pt". Ensuite, nous appelons la fonction 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-1)
. Enfin, nous transmettons des arguments d'apprentissage supplémentaires, tels que le nombre d'époques, directement à la méthode d'ajustement sous la forme suivante epochs=50
.
Reprise d'une session de réglage des hyperparamètres interrompue avec Ray Tune
Vous pouvez reprendre une session Ray Tune interrompue en passant la commande resume=True
. Vous pouvez optionnellement passer le répertoire name
utilisé par Ray Tune sous runs/{task}
pour reprendre. Dans le cas contraire, il reprendrait la dernière session interrompue. Il n'est pas nécessaire de fournir le code iterations
et space
mais vous devez à nouveau fournir le reste des arguments de formation, y compris data
et epochs
.
Utilisation resume=True
avec model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.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 l'analyse des rayons
Après avoir réalisé une expérience d'ajustement d'hyperparamètres avec Ray Tune, vous souhaiterez peut-être effectuer diverses analyses sur les résultats obtenus. Ce guide vous guidera à travers les flux de travail courants pour le traitement et l'analyse de ces résultats.
Chargement des résultats d'une expérience de syntonisation à partir d'un répertoire
Après avoir effectué l'expérience de réglage avec tuner.fit()
vous pouvez charger les résultats à partir d'un répertoire. Cette fonction est utile, en particulier si vous effectuez l'analyse après que le script d'apprentissage initial s'est interrompu.
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
Obtenez une vue d'ensemble de la manière dont les essais se sont déroulés. Vous pouvez rapidement vérifier 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 du procès
Accéder aux configurations des hyperparamètres des essais individuels et aux dernières mesures 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 mesures rapportées pour un essai
Vous pouvez tracer l'historique des mesures rapportées pour chaque essai afin de voir comment les mesures ont évolué dans le 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 cette documentation, nous avons abordé les flux de travail courants pour analyser les résultats des expériences réalisées avec Ray Tune à l'aide de Ultralytics. Les étapes clés comprennent le chargement des résultats de l'expérience à partir d'un répertoire, l'exécution d'une analyse de base au niveau de l'expérience et de l'essai et le traçage des métriques.
Pour aller plus loin, consultez la page de documentation de Ray Tune sur l 'analyse des résultats afin de tirer le meilleur parti de vos expériences de réglage des hyperparamètres.
FAQ
Comment ajuster les hyperparamètres de mon modèle YOLO11 à l'aide de Ray Tune ?
Pour ajuster les hyperparamètres de votre modèle Ultralytics YOLO11 à l'aide de Ray Tune, procédez comme suit :
-
Installez les paquets nécessaires :
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Chargez votre modèle YOLO11 et commencez à le régler :
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)
Il utilise les stratégies de recherche avancées et le parallélisme de Ray Tune pour optimiser efficacement les hyperparamètres de votre modèle. Pour plus d'informations, consultez la documentation de Ray Tune.
Quels sont les hyperparamètres par défaut pour YOLO11 avec Ray Tune ?
Ultralytics YOLO11 utilise les hyperparamètres par défaut suivants pour l'accord avec Ray Tune :
Paramètres | Plage de valeurs | Description |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Taux d'apprentissage initial |
lrf |
tune.uniform(0.01, 1.0) |
Facteur du taux d'apprentissage final |
momentum |
tune.uniform(0.6, 0.98) |
L'élan |
weight_decay |
tune.uniform(0.0, 0.001) |
Baisse de poids |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Époques d'échauffement |
box |
tune.uniform(0.02, 0.2) |
Boîte perte de poids |
cls |
tune.uniform(0.2, 4.0) |
Perte de poids de la classe |
hsv_h |
tune.uniform(0.0, 0.1) |
Plage d'augmentation de la teinte |
translate |
tune.uniform(0.0, 0.9) |
Plage d'augmentation de la traduction |
Ces hyperparamètres peuvent être personnalisés pour répondre à vos besoins spécifiques. Pour une liste complète et plus de détails, se référer au guide Hyperparameter Tuning.
Comment puis-je intégrer Weights & Biases à mon modèle de mise au point YOLO11 ?
Pour intégrer Weights & Biases (W&B) à votre processus de réglage Ultralytics YOLO11 :
-
Installer W&B :
pip install wandb
-
Modifiez votre script de réglage :
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)
Cette configuration vous permettra de surveiller le processus de réglage, de suivre les configurations des hyperparamètres et de visualiser les résultats dans W&B.
Pourquoi utiliser Ray Tune pour l'optimisation des hyperparamètres avec YOLO11?
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 efficace des paramètres.
- Parallélisme : Permet l'exécution en parallèle de plusieurs essais, ce qui accélère considérablement le processus de mise au point.
- Arrêt précoce : Des stratégies telles que ASHA permettent d'interrompre rapidement les essais peu performants, ce qui permet d'économiser des ressources informatiques.
Ray Tune s'intègre parfaitement à Ultralytics YOLO11, offrant une interface facile à utiliser pour régler efficacement les hyperparamètres. Pour commencer, consultez le guide de réglage des hyperparamètres.
Comment puis-je définir un espace de recherche personnalisé pour YOLO11 ?
Pour définir un espace de recherche personnalisé pour l'ajustement des hyperparamètres sur YOLO11 avec 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)
Cela permet de personnaliser la gamme d'hyperparamètres tels que le taux d'apprentissage initial et l'élan à explorer au cours du processus de réglage. Pour les configurations avancées, reportez-vous à la section Exemple d'espace de recherche personnalisé.