Ajuste eficiente de hiperparámetros con Ray Tune y YOLO26
El ajuste de hiperparámetros es vital para alcanzar el máximo rendimiento del modelo al descubrir el conjunto óptimo de hiperparámetros. Esto implica ejecutar pruebas con diferentes hiperparámetros y evaluar el rendimiento de cada prueba.
Acelera el ajuste con Ultralytics YOLO26 y Ray Tune
Ultralytics YOLO26 incorpora Ray Tune para el ajuste de hiperparámetros, optimizando la optimización de los hiperparámetros del modelo YOLO26. Con Ray Tune, puedes utilizar estrategias de búsqueda avanzadas, paralelismo y parada temprana para acelerar el proceso de ajuste.
Ray Tune
Ray Tune es una biblioteca de ajuste de hiperparámetros diseñada para la eficiencia y la flexibilidad. Admite diversas estrategias de búsqueda, paralelismo y estrategias de parada temprana, y se integra a la perfección con marcos populares de machine learning, incluyendo Ultralytics YOLO26.
Integración con Weights & Biases
YOLO26 también permite una integración opcional con Weights & Biases para supervisar el proceso de ajuste.
Instalación
Para instalar los paquetes necesarios, ejecuta:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandbUso
from ultralytics import YOLO
# Load a YOLO26n model
model = YOLO("yolo26n.pt")
# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)Parámetros del método tune()
El método tune() en YOLO26 proporciona una interfaz fácil de usar para el ajuste de hiperparámetros con Ray Tune. Acepta varios argumentos que te permiten personalizar el proceso de ajuste. A continuación, se presenta una explicación detallada de cada parámetro:
| Parámetro | Tipo | Descripción | Valor predeterminado |
|---|---|---|---|
data | str | El archivo de configuración del dataset (en formato YAML) para ejecutar el sintonizador. Este archivo debe especificar las rutas de entrenamiento y datos de validación, así como otros ajustes específicos del dataset. | |
space | dict, optional | Un diccionario que define el espacio de búsqueda de hiperparámetros para Ray Tune. Cada clave corresponde al nombre de un hiperparámetro y el valor especifica el rango de valores a explorar durante el ajuste. Si no se proporciona, YOLO26 utiliza un espacio de búsqueda predeterminado con varios hiperparámetros. | |
grace_period | int, optional | El periodo de gracia en epochs para el programador ASHA en Ray Tune. El programador no terminará ninguna prueba antes de este número de épocas, permitiendo que el modelo tenga una formación mínima 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 multi-GPU. Si no se proporciona, el sintonizador utilizará todas las GPUs disponibles. | None |
iterations | int, optional | El número máximo de pruebas a ejecutar 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 |
search_alg | str or Searcher, optional | Estrategia de búsqueda de Ray Tune a utilizar. Puedes pasar un objeto de buscador de Ray directamente o utilizar una cadena soportada como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax o random. Los buscadores basados en cadenas utilizan automáticamente la métrica de tarea predeterminada y mode="max". Si no se proporciona, Ray Tune recurre a su estrategia de búsqueda aleatoria predeterminada, BasicVariantGenerator. | None |
**train_args | dict, optional | Argumentos adicionales para pasar al método train() durante el ajuste. Estos argumentos pueden incluir configuraciones como el número de épocas de entrenamiento, tamaño del lote y otras configuraciones específicas del entrenamiento. | {} |
Al personalizar estos parámetros, puedes ajustar el proceso de optimización de hiperparámetros para adaptarlo a tus necesidades específicas y a los recursos computacionales disponibles.
Descripción del espacio de búsqueda predeterminado
La siguiente tabla enumera los parámetros del espacio de búsqueda predeterminado para el ajuste de hiperparámetros en YOLO26 con Ray Tune. Cada parámetro tiene un rango de valores específico definido por tune.uniform().
| Parámetro | Rango | Descripción |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | 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.7, 0.98) | Factor de momentum 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 previene el sobreajuste al penalizar los valores grandes de los pesos. |
warmup_epochs | tune.uniform(0.0, 5.0) | Número de épocas con tasa de aprendizaje gradualmente creciente para estabilizar el entrenamiento temprano. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valor de momentum inicial que aumenta gradualmente durante el periodo de calentamiento. |
box | tune.uniform(1.0, 20.0) | Peso para el componente de pérdida de la caja delimitadora, equilibrando la precisión de la localización en el modelo. |
cls | tune.uniform(0.1, 4.0) | Peso para el componente de pérdida de clasificación, equilibrando la precisión de la predicción de clases en el modelo. |
dfl | tune.uniform(0.4, 12.0) | Peso para el componente de pérdida de enfoque de distribución (Distribution Focal Loss), enfatizando la localización precisa de la caja delimitadora. |
hsv_h | tune.uniform(0.0, 0.1) | Rango de aumento de tono (hue) que introduce variabilidad de color para ayudar al modelo a generalizar. |
hsv_s | tune.uniform(0.0, 0.9) | Rango 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 de valor (brillo) que ayuda al modelo a funcionar bajo diversas condiciones de iluminación. |
degrees | tune.uniform(0.0, 45.0) | Rango de aumento de rotación en grados, mejorando el reconocimiento de objetos rotados. |
translate | tune.uniform(0.0, 0.9) | Rango de aumento de traslación que desplaza las imágenes horizontal y verticalmente. |
scale | tune.uniform(0.0, 0.95) | Rango de aumento de escala que simula objetos a diferentes distancias. |
shear | tune.uniform(0.0, 10.0) | Rango de aumento de cizallamiento (shear) en grados, simulando cambios de perspectiva. |
perspective | tune.uniform(0.0, 0.001) | Rango de aumento de perspectiva que simula cambios de punto de vista en 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilidad de aumento de volteo vertical, aumentando la diversidad del dataset. |
fliplr | tune.uniform(0.0, 1.0) | Probabilidad de aumento de volteo horizontal, útil para objetos simétricos. |
bgr | tune.uniform(0.0, 1.0) | Probabilidad de aumento de intercambio de canales BGR, ayudando con la invariancia de color. |
mosaic | tune.uniform(0.0, 1.0) | Probabilidad de aumento de mosaico que combina cuatro imágenes en una muestra de entrenamiento. |
mixup | tune.uniform(0.0, 1.0) | Probabilidad de aumento de Mixup que combina dos imágenes y sus etiquetas juntas. |
cutmix | tune.uniform(0.0, 1.0) | Probabilidad de aumento de Cutmix que combina regiones de imágenes mientras mantiene las características locales. |
copy_paste | tune.uniform(0.0, 1.0) | Probabilidad de aumento de copiar y pegar (copy-paste) que transfiere objetos entre imágenes para aumentar la diversidad de instancias. |
close_mosaic | tune.randint(0.0, 11) | Desactiva el mosaico en las últimas N épocas para estabilizar el entrenamiento antes de completarlo. |
Ejemplo de espacio de búsqueda personalizado
En este ejemplo, demostramos cómo usar un espacio de búsqueda personalizado para el ajuste de hiperparámetros con Ray Tune y YOLO26. Al proporcionar un espacio de búsqueda personalizado, puedes centrar el proceso de ajuste en hiperparámetros específicos de interés.
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-2)},
epochs=50,
use_ray=True,
)En el fragmento de código anterior, creamos un modelo YOLO con los pesos preentrenados "yolo26n.pt". Luego, llamamos al método tune(), especificando la configuración del dataset con "coco8.yaml". Proporcionamos un espacio de búsqueda personalizado para la tasa de aprendizaje inicial lr0 usando un diccionario con la clave "lr0" y el valor tune.uniform(1e-5, 1e-2). Finalmente, pasamos argumentos de entrenamiento adicionales, como el número de épocas directamente al método tune como epochs=50.
Ejemplo de algoritmo de búsqueda
Puedes seleccionar una estrategia de búsqueda de Ray Tune por nombre. Para algoritmos de búsqueda basados en cadenas, Ultralytics utilizará automáticamente la métrica de optimización predeterminada de la tarea actual y mode="max". Si no se proporciona search_alg, Ray Tune utiliza su estrategia de búsqueda aleatoria predeterminada, BasicVariantGenerator.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg="optuna",
use_ray=True,
)Si necesitas personalizar el muestreador del buscador o anular su métrica y modo de optimización, pasa un objeto de buscador de Ray Tune instanciado en lugar de una cadena.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define a searcher
searcher = OptunaSearch(
metric="metrics/mAP50-95(B)",
mode="max",
)
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg=searcher,
use_ray=True,
)Reanudación de una sesión de ajuste de hiperparámetros interrumpida con Ray Tune
Puedes reanudar una sesión de Ray Tune interrumpida pasando resume=True. Opcionalmente, puedes pasar el directorio name utilizado por Ray Tune en runs/{task} para reanudar. De lo contrario, se reanudará la última sesión interrumpida. No necesitas proporcionar iterations y space nuevamente, pero debes proporcionar el resto de los argumentos de entrenamiento nuevamente, incluyendo data y epochs.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.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 resultados de Ray Tune
Después de ejecutar un experimento de ajuste de hiperparámetros con Ray Tune, es posible que desees realizar varios análisis sobre los resultados obtenidos. Esta guía te llevará a través de los flujos de trabajo comunes para procesar y analizar estos resultados.
Carga de resultados de experimentos de Tune desde un directorio
Después de ejecutar el experimento de ajuste con tuner.fit(), puedes cargar los resultados desde un directorio. Esto es útil, especialmente si estás realizando el análisis después de que el script de entrenamiento inicial haya finalizado.
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 de experimento
Obtén una visión general del rendimiento de las pruebas. Puedes comprobar rápidamente si hubo 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
Accede a las configuraciones individuales de hiperparámetros de cada prueba y a las últimas métricas reportadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Graficar el historial completo de métricas reportadas para una prueba
Puedes graficar el historial de métricas reportadas para cada prueba para ver cómo evolucionaron 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 guía, cubrimos los flujos de trabajo comunes para analizar los resultados de los 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 de prueba, y la representación gráfica de métricas.
Explora más consultando la página de documentación Analizar resultados de Ray Tune para aprovechar al máximo tus experimentos de ajuste de hiperparámetros.
Preguntas frecuentes
¿Cómo ajusto los hiperparámetros de mi modelo YOLO26 usando Ray Tune?
Para ajustar los hiperparámetros de tu modelo Ultralytics YOLO26 usando Ray Tune, sigue estos pasos:
-
Instala los paquetes requeridos:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging -
Carga tu modelo YOLO26 y comienza el ajuste:
from ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
Esto utiliza las estrategias de búsqueda avanzadas y el paralelismo de Ray Tune para optimizar eficientemente los hiperparámetros de tu modelo. Para obtener más información, consulta la documentación de Ray Tune.
¿Cuáles son los hiperparámetros predeterminados para el ajuste de YOLO26 con Ray Tune?
Ultralytics YOLO26 utiliza los siguientes hiperparámetros predeterminados para el ajuste con Ray Tune:
| Parámetro | Rango de valores | Descripción |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Tasa de aprendizaje inicial |
lrf | tune.uniform(0.01, 1.0) | Factor de tasa de aprendizaje final |
momentum | tune.uniform(0.7, 0.98) | Momentum |
weight_decay | tune.uniform(0.0, 0.001) | Decaimiento de peso |
warmup_epochs | tune.uniform(0.0, 5.0) | Épocas de calentamiento |
box | tune.uniform(1.0, 20.0) | Peso de pérdida de cuadro (box) |
cls | tune.uniform(0.1, 4.0) | Peso de pérdida de clase |
dfl | tune.uniform(0.4, 12.0) | Peso de pérdida DFL |
hsv_h | tune.uniform(0.0, 0.1) | Rango de aumento de tono (hue) |
translate | tune.uniform(0.0, 0.9) | Rango de aumento de traslación |
Estos hiperparámetros se pueden personalizar para adaptarse a tus necesidades específicas. Para obtener una lista completa y más detalles, consulta la guía de Ajuste de Hiperparámetros.
¿Cómo puedo integrar Weights & Biases con el ajuste de mi modelo YOLO26?
Para integrar Weights & Biases (W&B) con tu proceso de ajuste de YOLO26 en Ultralytics:
-
Instala W&B:
pip install wandb -
Modifica tu script de ajuste:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo26n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
Esta configuración te permitirá monitorear el proceso de ajuste, realizar un seguimiento de las configuraciones de hiperparámetros y visualizar los resultados en W&B.
¿Por qué debería usar Ray Tune para la optimización de hiperparámetros con YOLO26?
Ray Tune ofrece numerosas ventajas para la optimización de hiperparámetros:
- Estrategias de búsqueda avanzadas: Utiliza algoritmos como Optimización Bayesiana y HyperOpt para una búsqueda eficiente de parámetros.
- Paralelismo: Admite la ejecución en paralelo de múltiples pruebas, lo que acelera significativamente el proceso de ajuste.
- Detención temprana: Emplea estrategias como ASHA para finalizar las pruebas de bajo rendimiento de forma temprana, ahorrando recursos computacionales.
Ray Tune se integra perfectamente con YOLO26 de Ultralytics, proporcionando una interfaz fácil de usar para ajustar hiperparámetros de manera efectiva. Para empezar, consulta la guía de Ajuste de Hiperparámetros.
¿Cómo puedo definir un espacio de búsqueda personalizado para el ajuste de hiperparámetros de YOLO26?
Para definir un espacio de búsqueda personalizado para tu ajuste de hiperparámetros de YOLO26 con Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 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 momento para explorar durante el proceso de ajuste. Para configuraciones avanzadas, consulta la sección de Ejemplo de espacio de búsqueda personalizado.