Optimisation efficace des hyperparamètres avec Ray Tune et YOLOv8
Le réglage des hyperparamètres est essentiel pour atteindre les 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è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
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
Utilisation
Utilisation
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 lors de la mise au point. Cela permet de gérer l'utilisation des GPU, en particulier dans les environnements multi-GPU. 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
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.
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.