Ajuste eficiente de hiperparámetros con Ray Tune y YOLO11
El ajuste de hiperparámetros es vital para lograr el máximo rendimiento del modelo descubriendo el conjunto óptimo de hiperparámetros. Para ello, se realizan pruebas con distintos hiperparámetros y se evalúa el rendimiento de cada una de ellas.
Acelere el ajuste con Ultralytics YOLO11 y Ray Tune
Ultralytics YOLO11 incorpora Ray Tune para el ajuste de hiperparámetros, agilizando la optimización de los hiperparámetros del modelo YOLO11 . Con Ray Tune, puede utilizar estrategias de búsqueda avanzadas, paralelismo y detención temprana para agilizar el proceso de ajuste.
Ray Tune
Ray Tune es una biblioteca de ajuste de hiperparámetros diseñada para ofrecer eficiencia y flexibilidad. Admite varias estrategias de búsqueda, paralelismo y estrategias de parada temprana, y se integra a la perfección con marcos de aprendizaje automático populares, como Ultralytics YOLO11 .
Integración con Weights & Biases
YOLO11 también permite la integración opcional con Weights & Biases para supervisar el proceso de ajuste.
Instalación
Para instalar los paquetes necesarios, ejecute
Instalación
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandb
Utilización
Utilización
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()
Parámetros del método
En tune()
en YOLO11 proporciona una interfaz fácil de usar para el ajuste de hiperparámetros con Ray Tune. Acepta varios argumentos que permiten personalizar el proceso de ajuste. A continuación encontrará una explicación detallada de cada parámetro:
Parámetro | Tipo | Descripción | Valor por defecto |
---|---|---|---|
data |
str |
El archivo de configuración del conjunto de datos (en formato YAML) en el que se ejecutará el sintonizador. Este archivo debe especificar las rutas de los datos de entrenamiento y validación, así como otros ajustes específicos del conjunto de datos. | |
space |
dict, optional |
Un diccionario que define el espacio de búsqueda de hiperparámetros para Ray Tune. Cada clave corresponde a un nombre de hiperparámetro, y el valor especifica el rango de valores a explorar durante el ajuste. Si no se proporciona, YOLO11 utiliza un espacio de búsqueda predeterminado con varios hiperparámetros. | |
grace_period |
int, optional |
El periodo de gracia en épocas para el programador ASHA en Ray Tune. El programador no terminará ningún ensayo antes de este número de épocas, permitiendo que el modelo tenga un mínimo de entrenamiento antes de tomar una decisión sobre la parada temprana. | 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 GPU disponibles. | None |
iterations |
int, optional |
El número máximo de pruebas a realizar durante el ajuste. Este parámetro ayuda a controlar el número total de combinaciones de hiperparámetros probadas, asegurando que el proceso de ajuste no se ejecute indefinidamente. | 10 |
**train_args |
dict, optional |
Argumentos adicionales para pasar al train() durante el ajuste. Estos argumentos pueden incluir ajustes como el número de épocas de entrenamiento, tamaño del lotey otras configuraciones específicas de la formación. |
{} |
Al personalizar estos parámetros, puede ajustar el proceso de optimización de hiperparámetros para adaptarlo a sus necesidades específicas y a los recursos informáticos disponibles.
Espacio de búsqueda por defecto Descripción
La siguiente tabla enumera los parámetros del espacio de búsqueda por defecto para el ajuste de hiperparámetros en YOLO11 con Ray Tune. Cada parámetro tiene un rango de valores específico definido por tune.uniform()
.
Parámetro | Gama | Descripción |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Tasa de aprendizaje inicial que controla el tamaño del paso durante la optimización. Los valores más altos aceleran el entrenamiento pero pueden causar inestabilidad. |
lrf |
tune.uniform(0.01, 1.0) |
Factor de tasa de aprendizaje final que determina cuánto disminuye la tasa de aprendizaje al final del entrenamiento. |
momentum |
tune.uniform(0.6, 0.98) |
Factor de impulso para el optimizador que ayuda a acelerar el entrenamiento y superar los mínimos locales. |
weight_decay |
tune.uniform(0.0, 0.001) |
Parámetro de regularización que evita el sobreajuste penalizando los valores de peso grandes. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Número de épocas con aumento gradual de la tasa de aprendizaje para estabilizar el entrenamiento inicial. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Valor de impulso inicial que aumenta gradualmente durante el periodo de calentamiento. |
box |
tune.uniform(0.02, 0.2) |
Ponderación del componente de pérdida del cuadro delimitador, que equilibra la precisión de la localización en el modelo. |
cls |
tune.uniform(0.2, 4.0) |
Ponderación del componente de pérdida de clasificación, que equilibra la precisión de la predicción de clase en el modelo. |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono que introduce variabilidad de color para ayudar al modelo a generalizar. |
hsv_s |
tune.uniform(0.0, 0.9) |
Gama de aumento de saturación que varía la intensidad del color para mejorar la robustez. |
hsv_v |
tune.uniform(0.0, 0.9) |
Rango de aumento del valor (brillo) que ayuda al modelo a rendir en distintas condiciones de iluminación. |
degrees |
tune.uniform(0.0, 45.0) |
Rango de aumento de la rotación en grados, que mejora el reconocimiento de objetos rotados. |
translate |
tune.uniform(0.0, 0.9) |
Gama de aumento de traducción que desplaza las imágenes horizontal y verticalmente. |
scale |
tune.uniform(0.0, 0.9) |
Rango de aumento de escala que simula objetos a diferentes distancias. |
shear |
tune.uniform(0.0, 10.0) |
Rango de aumento de cizalladura en grados, simulando cambios de perspectiva. |
perspective |
tune.uniform(0.0, 0.001) |
Gama de aumento de perspectiva que simula los cambios de punto de vista en 3D. |
flipud |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo vertical, aumentando la diversidad del conjunto de datos. |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo horizontal, útil para objetos simétricos. |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del mosaico que combina cuatro imágenes en una muestra de entrenamiento. |
mixup |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento mixto que mezcla dos imágenes y sus etiquetas. |
cutmix |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento Cutmix que combina regiones de la imagen manteniendo las características locales, mejorando la detección de objetos parcialmente ocluidos. |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento copia-pega que transfiere objetos entre imágenes para aumentar la diversidad de instancias. |
Ejemplo de espacio de búsqueda personalizado
En este ejemplo, demostramos cómo utilizar un espacio de búsqueda personalizado para el ajuste de hiperparámetros con Ray Tune y YOLO11. Al proporcionar un espacio de búsqueda personalizado, puede centrar el proceso de ajuste en hiperparámetros específicos de interés.
Utilización
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,
)
En el fragmento de código anterior, creamos un modelo YOLO con las ponderaciones preentrenadas "yolo11n.pt". A continuación, llamamos a la función 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 tune como epochs=50
.
Reanudación de una sesión interrumpida de ajuste de hiperparámetros con Ray Tune
Puede reanudar una sesión Ray Tune interrumpida pasando resume=True
. Puede pasar opcionalmente el directorio name
utilizado por Ray Tune bajo runs/{task}
para reanudar. En caso contrario, reanudaría la última sesión interrumpida. No es necesario proporcionar el iterations
y space
de nuevo, pero tiene que proporcionar el resto de los argumentos de formación de nuevo incluyendo data
y epochs
.
Utilizando resume=True
con 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)
Procesamiento de los resultados de Ray Tune
Después de ejecutar un experimento de ajuste de hiperparámetros con Ray Tune, es posible que desee realizar diversos análisis de los resultados obtenidos. Esta guía le llevará a través de flujos de trabajo comunes para procesar y analizar estos resultados.
Carga de los resultados de un experimento Tune desde un directorio
Tras realizar el experimento de ajuste con tuner.fit()
puede cargar los resultados desde un directorio. Esto es útil, especialmente si está realizando el análisis después de que el script de entrenamiento inicial haya salido.
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
Obtenga una visión general del rendimiento de las pruebas. Puede comprobar rápidamente si se ha producido algún error durante las pruebas.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")
Análisis básico a nivel de prueba
Acceda a las configuraciones individuales de los hiperparámetros de los ensayos y a las últimas métricas notificadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Trazado de todo el historial de métricas notificadas para un ensayo
Puede trazar el historial de las métricas notificadas 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 flujos de trabajo comunes para analizar los resultados de experimentos ejecutados 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.
Explore más a fondo la página de documentación de Ray Tune Analyze Results para sacar el máximo partido a sus experimentos de ajuste de hiperparámetros.
PREGUNTAS FRECUENTES
¿Cómo sintonizo los hiperparámetros de mi modelo YOLO11 utilizando Ray Tune?
Para sintonizar los hiperparámetros de su modelo Ultralytics YOLO11 utilizando Ray Tune, siga estos pasos:
-
Instale los paquetes necesarios:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Cargue su modelo YOLO11 y empiece a afinar:
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)
Utiliza las estrategias de búsqueda avanzada y el paralelismo de Ray Tune para optimizar eficazmente los hiperparámetros de su modelo. Para obtener más información, consulte la documentación de Ray Tune.
¿Cuáles son los hiperparámetros por defecto para la sintonización de YOLO11 con Ray Tune?
Ultralytics YOLO11 utiliza los siguientes hiperparámetros por defecto para la sintonización con 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) |
Caída de peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de calentamiento |
box |
tune.uniform(0.02, 0.2) |
Box pérdida de peso |
cls |
tune.uniform(0.2, 4.0) |
Clase de pérdida de peso |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono |
translate |
tune.uniform(0.0, 0.9) |
Gama de aumento de traducción |
Estos hiperparámetros pueden personalizarse para adaptarlos a sus necesidades específicas. Para obtener una lista completa y más detalles, consulte la guía de ajuste de hiperparámetros.
¿Cómo puedo integrar Weights & Biases en la puesta a punto de mi modelo YOLO11 ?
Para integrar Weights & Biases (W&B) en su proceso de ajuste Ultralytics YOLO11 :
-
Instalar W&B:
pip install wandb
-
Modifique su script de ajuste:
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)
Esta configuración le permitirá supervisar el proceso de ajuste, realizar un seguimiento de las configuraciones de hiperparámetros y visualizar los resultados en W&B.
¿Por qué debería utilizar Ray Tune para la optimización de hiperparámetros con YOLO11?
Ray Tune ofrece numerosas ventajas para la optimización de hiperparámetros:
- Estrategias de búsqueda avanzadas: Utiliza algoritmos como Bayesian Optimization e HyperOpt para la búsqueda eficiente de parámetros.
- Paralelismo: Admite la ejecución en paralelo de múltiples ensayos, lo que acelera significativamente el proceso de ajuste.
- Detención temprana: Emplea estrategias como ASHA para terminar antes los ensayos de bajo rendimiento, ahorrando recursos computacionales.
Ray Tune se integra a la perfección con Ultralytics YOLO11, proporcionando una interfaz fácil de usar para ajustar hiperparámetros de forma eficaz. Para empezar, consulte la guía de ajuste de hiperparámetros.
¿Cómo puedo definir un espacio de búsqueda personalizado para el ajuste de hiperparámetros en YOLO11 ?
Para definir un espacio de búsqueda personalizado para su YOLO11 ajuste de hiperparámetros con 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 a explorar durante el proceso de ajuste. Para configuraciones avanzadas, consulte la sección Ejemplo de espacio de búsqueda personalizado.