Efficient Hyperparameter Tuning with Ray Tune and YOLO11
El ajuste de hiperparámetros es vital para lograr el máximo rendimiento del modelo mediante la detección del conjunto óptimo de hiperparámetros. Esto implica la realización de ensayos con diferentes hiperparámetros y la evaluación del rendimiento de cada ensayo.
Accelerate Tuning with Ultralytics YOLO11 and Ray Tune
Ultralytics YOLO11 incorporates Ray Tune for hyperparameter tuning, streamlining the optimization of YOLO11 model hyperparameters. With Ray Tune, you can utilize advanced search strategies, parallelism, and early stopping to expedite the tuning process.
Ray Tune
Ray Tune is a hyperparameter tuning library designed for efficiency and flexibility. It supports various search strategies, parallelism, and early stopping strategies, and seamlessly integrates with popular machine learning frameworks, including Ultralytics YOLO11.
Integración con Weights & Biases
YOLO11 also allows optional integration with Weights & Biases for monitoring the tuning process.
Instalación
Para instalar los paquetes necesarios, ejecuta
Instalación
Utilización
Utilización
tune()
Parámetros del método
En tune()
method in YOLO11 provides an easy-to-use interface for hyperparameter tuning with Ray Tune. It accepts several arguments that allow you to customize the tuning process. Below is a detailed explanation of each parameter:
Parámetro | Tipo | Descripción | Valor por defecto |
---|---|---|---|
data |
str |
The dataset configuration file (in YAML format) to run the tuner on. This file should specify the training and validation data paths, as well as other dataset-specific settings. | |
space |
dict, optional |
A dictionary defining the hyperparameter search space for Ray Tune. Each key corresponds to a hyperparameter name, and the value specifies the range of values to explore during tuning. If not provided, YOLO11 uses a default search space with various hyperparameters. | |
grace_period |
int, optional |
The grace period in epochs for the ASHA scheduler in Ray Tune. The scheduler will not terminate any trial before this number of epochs, allowing the model to have some minimum training before making a decision on early stopping. | 10 |
gpu_per_trial |
int, optional |
El número de GPUs a asignar por prueba durante el ajuste. Esto ayuda a gestionar el uso de GPU , especialmente en entornos multiGPU . Si no se proporciona, el sintonizador utilizará todas las GPUs disponibles. | Ninguno |
iterations |
int, optional |
El número máximo de pruebas a ejecutar durante la sintonización. Este parámetro ayuda a controlar el número total de combinaciones de hiperparámetros probadas, garantizando que el proceso de ajuste no se ejecute indefinidamente. | 10 |
**train_args |
dict, optional |
Argumentos adicionales para pasar al train() method during tuning. These arguments can include settings like the number of training epochs, batch size, and other training-specific configurations. |
{} |
Personalizando estos parámetros, puedes ajustar el proceso de optimización de hiperparámetros para adaptarlo a tus necesidades específicas y a los recursos informáticos disponibles.
Espacio de búsqueda por defecto Descripción
The following table lists the default search space parameters for hyperparameter tuning in YOLO11 with Ray Tune. Each parameter has a specific value range defined by tune.uniform()
.
Parámetro | Rango de valores | Descripción |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Initial learning rate |
lrf |
tune.uniform(0.01, 1.0) |
Factor de tasa de aprendizaje final |
momentum |
tune.uniform(0.6, 0.98) |
Impulso |
weight_decay |
tune.uniform(0.0, 0.001) |
Decaimiento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de calentamiento |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Momento de calentamiento |
box |
tune.uniform(0.02, 0.2) |
Caja pérdida peso |
cls |
tune.uniform(0.2, 4.0) |
Clase pérdida peso |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono |
hsv_s |
tune.uniform(0.0, 0.9) |
Rango de aumento de la saturación |
hsv_v |
tune.uniform(0.0, 0.9) |
Rango de aumento del valor (luminosidad) |
degrees |
tune.uniform(0.0, 45.0) |
Rango de aumento de la rotación (grados) |
translate |
tune.uniform(0.0, 0.9) |
Alcance del aumento de traducción |
scale |
tune.uniform(0.0, 0.9) |
Rango de aumento de escala |
shear |
tune.uniform(0.0, 10.0) |
Rango de aumento del cizallamiento (grados) |
perspective |
tune.uniform(0.0, 0.001) |
Gama de aumento de perspectiva |
flipud |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo vertical |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo horizontal |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del mosaico |
mixup |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento de la confusión |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento de copia-pega |
Ejemplo de espacio de búsqueda personalizado
In this example, we demonstrate how to use a custom search space for hyperparameter tuning with Ray Tune and YOLO11. By providing a custom search space, you can focus the tuning process on specific hyperparameters of interest.
Utilización
In the code snippet above, we create a YOLO model with the "yolo11n.pt" pretrained weights. Then, we call the tune()
especificando la configuración del conjunto de datos con "coco8.yaml". Proporcionamos un espacio de búsqueda personalizado para la tasa de aprendizaje inicial lr0
utilizando un diccionario con la clave "lr0" y el valor tune.uniform(1e-5, 1e-1)
. Por último, pasamos argumentos de entrenamiento adicionales, como el número de épocas, directamente al método de ajuste como epochs=50
.
Procesamiento de los resultados de la sintonización de rayos
Después de ejecutar un experimento de ajuste de hiperparámetros con Ray Tune, es posible que quieras realizar diversos análisis de los resultados obtenidos. Esta guía te llevará a través de flujos de trabajo comunes para procesar y analizar estos resultados.
Cargar los resultados de un experimento Tune desde un directorio
Después de realizar el experimento de ajuste con tuner.fit()
puedes cargar los resultados desde un directorio. Esto es útil, sobre todo si realizas el análisis después de que haya salido el script de entrenamiento inicial.
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()
Análisis básico a nivel experimental
Obtén una visión general del rendimiento de las pruebas. Puedes comprobar rápidamente si hubo algún error durante las pruebas.
Análisis básico a nivel de prueba
Accede a las configuraciones individuales de los hiperparámetros de los ensayos y a las últimas métricas comunicadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Trazar todo el historial de métricas notificadas de un ensayo
Puedes trazar el historial de las métricas comunicadas de cada ensayo para ver cómo evolucionan las métricas a lo largo del tiempo.
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()
Resumen
En esta documentación, cubrimos los flujos de trabajo habituales para analizar los resultados de los experimentos realizados con Ray Tune utilizando Ultralytics. Los pasos clave incluyen la carga de los resultados del experimento desde un directorio, la realización de análisis básicos a nivel de experimento y a nivel de prueba, y el trazado de métricas.
Explora más a fondo la página de documentación Analizar resultados de Ray Tune para sacar el máximo partido a tus experimentos de ajuste de hiperparámetros.
PREGUNTAS FRECUENTES
How do I tune the hyperparameters of my YOLO11 model using Ray Tune?
To tune the hyperparameters of your Ultralytics YOLO11 model using Ray Tune, follow these steps:
-
Instala los paquetes necesarios:
-
Load your YOLO11 model and start tuning:
Esto utiliza las estrategias de búsqueda avanzada y el paralelismo de Ray Tune para optimizar eficazmente los hiperparámetros de tu modelo. Para más información, consulta la documentación de Ray Tune.
What are the default hyperparameters for YOLO11 tuning with Ray Tune?
Ultralytics YOLO11 uses the following default hyperparameters for tuning with Ray Tune:
Parámetro | Rango de valores | Descripción |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Tasa de aprendizaje inicial |
lrf |
tune.uniform(0.01, 1.0) |
Factor de tasa de aprendizaje final |
momentum |
tune.uniform(0.6, 0.98) |
Impulso |
weight_decay |
tune.uniform(0.0, 0.001) |
Decaimiento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de calentamiento |
box |
tune.uniform(0.02, 0.2) |
Caja pérdida peso |
cls |
tune.uniform(0.2, 4.0) |
Clase pérdida peso |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono |
translate |
tune.uniform(0.0, 0.9) |
Alcance del aumento de traducción |
Estos hiperparámetros pueden personalizarse para adaptarlos a tus necesidades específicas. Para obtener una lista completa y más detalles, consulta la Guía de ajuste de hiperparámetros.
How can I integrate Weights & Biases with my YOLO11 model tuning?
To integrate Weights & Biases (W&B) with your Ultralytics YOLO11 tuning process:
-
Instala W&B:
-
Modifica tu script de ajuste:
Esta configuración te permitirá supervisar el proceso de ajuste, realizar un seguimiento de las configuraciones de los hiperparámetros y visualizar los resultados en W&B.
Why should I use Ray Tune for hyperparameter optimization with YOLO11?
Ray Tune ofrece numerosas ventajas para la optimización de hiperparámetros:
- Estrategias avanzadas de búsqueda: Utiliza algoritmos como la Optimización Bayesiana y HyperOpt para una búsqueda eficiente de parámetros.
- Paralelismo: Admite la ejecución en paralelo de varios ensayos, lo que acelera considerablemente el proceso de ajuste.
- Detención Temprana: Emplea estrategias como ASHA para terminar antes los ensayos de bajo rendimiento, ahorrando recursos computacionales.
Ray Tune seamlessly integrates with Ultralytics YOLO11, providing an easy-to-use interface for tuning hyperparameters effectively. To get started, check out the Efficient Hyperparameter Tuning with Ray Tune and YOLO11 guide.
How can I define a custom search space for YOLO11 hyperparameter tuning?
To define a custom search space for your YOLO11 hyperparameter tuning with 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)
Esto personaliza el rango de hiperparámetros como la tasa de aprendizaje inicial y el impulso que se explorarán durante el proceso de ajuste. Para configuraciones avanzadas, consulta la sección Ejemplo de espacio de búsqueda personalizado.