Skip to content

Optimisation efficace des hyperparamètres avec Ray Tune et YOLOv8

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 de mener des essais avec différents hyperparamètres et d’évaluer les performances de chaque essai.

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

Ultralytics YOLOv8 intègre Ray Tune pour le réglage des hyperparamètres, ce qui simplifie l'optimisation des hyperparamètres du modèle YOLOv8 . 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

Aperçu de 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 façon transparente aux cadres d'apprentissage automatique les plus populaires, y compris Ultralytics YOLOv8 .

Intégration avec Weights & Biases

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

Installation

Pour installer les paquets nécessaires, 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 YOLOv8n model
model = YOLO("yolov8n.pt")

# Start tuning hyperparameters for YOLOv8n 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 YOLOv8 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ètre 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'entraînement et de validation, ainsi que d'autres paramètres spécifiques au jeu de données.
space dict, optional Un 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 pendant l'accord. S'il n'est pas fourni, YOLOv8 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 pendant le réglage. 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. Aucun
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 s'exécute pas indéfiniment. 10
**train_args dict, optional Arguments supplémentaires à transmettre au train() lors de la mise au point. Ces arguments peuvent inclure des paramètres tels que le nombre d'époques d'entraînement, la taille du 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 en fonction de tes 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 YOLOv8 avec Ray Tune. Chaque paramètre a une plage de valeurs spécifique définie par tune.uniform().

Paramètre 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) Décroissance du poids
warmup_epochs tune.uniform(0.0, 5.0) Époques d'échauffement
warmup_momentum tune.uniform(0.0, 0.95) L'élan de l'é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
hsv_s tune.uniform(0.0, 0.9) Plage d'augmentation de la saturation
hsv_v tune.uniform(0.0, 0.9) Valeur (luminosité) plage d'augmentation
degrees tune.uniform(0.0, 45.0) Plage d'augmentation de la rotation (degrés)
translate tune.uniform(0.0, 0.9) Plage d'augmentation de la traduction
scale tune.uniform(0.0, 0.9) Plage d'augmentation de l'échelle
shear tune.uniform(0.0, 10.0) Plage d'augmentation du cisaillement (degrés)
perspective tune.uniform(0.0, 0.001) Plage d'augmentation de la perspective
flipud tune.uniform(0.0, 1.0) Probabilité d'augmentation du flip vertical
fliplr tune.uniform(0.0, 1.0) Probabilité d'augmentation du retournement horizontal
mosaic tune.uniform(0.0, 1.0) Probabilité d'augmentation de la mosaïque
mixup tune.uniform(0.0, 1.0) Probabilité d'augmentation de la confusion
copy_paste tune.uniform(0.0, 1.0) Probabilité d'augmentation du copier-coller

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 YOLOv8. En fournissant un espace de recherche personnalisé, tu peux concentrer le processus de réglage sur des hyperparamètres spécifiques qui t'intéressent.

Utilisation

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.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 "yolov8n.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 de formation supplémentaires, tels que le nombre d'époques, directement à la méthode de réglage sous la forme suivante epochs=50.

Traitement des résultats de l'accord des rayons

Après avoir effectué une expérience de réglage des hyperparamètres avec Ray Tune, tu voudras peut-être effectuer diverses analyses sur les résultats obtenus. Ce guide te 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()Tu peux charger les résultats à partir d'un répertoire. C'est utile, surtout si tu effectues l'analyse après que le script d'apprentissage initial s'est arrêté.

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 façon dont les essais se sont déroulés. Tu peux 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ède 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

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

import matplotlib.pyplot as plt

for result in 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 permettant d'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, consulte la page de documentation de Ray Tune sur l'analyse des résultats 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 YOLOv8 à l'aide de Ray Tune ?

Pour régler les hyperparamètres de ton modèle Ultralytics YOLOv8 à l'aide de Ray Tune, suis les étapes suivantes :

  1. Installe les paquets nécessaires :

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

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

Cela permet d'utiliser 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 YOLOv8 tuning avec Ray Tune ?

Ultralytics YOLOv8 utilise les hyperparamètres par défaut suivants pour l'accord avec Ray Tune :

Paramètre 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) Décroissance du 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 à tes besoins spécifiques. Pour obtenir une liste complète et plus de détails, reporte-toi au guide de réglage des hyperparamètres.

Comment puis-je intégrer Weights & Biases à mon modèle YOLOv8 ?

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

  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("yolov8n.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 des hyperparamètres et de visualiser les résultats dans W&B.

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

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 : 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 précoce : Utilise des stratégies telles que ASHA pour mettre fin aux essais peu performants de manière anticipée, ce qui permet d'économiser des ressources informatiques.

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

Comment puis-je définir un espace de recherche personnalisé pour YOLOv8 ?

Pour définir un espace de recherche personnalisé pour le réglage des hyperparamètres sur YOLOv8 avec Ray Tune :

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.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 pendant le processus de réglage. Pour les configurations avancées, reporte-toi à la section Exemple d'espace de recherche personnalisé.



Créé le 2023-11-12, Mis à jour le 2024-07-05
Auteurs : glenn-jocher (10)

Commentaires