Ultralytics YOLO27:

Ajuste eficiente de hiperparámetros con Ray Tune y YOLO26#

El ajuste de hiperparámetros es fundamental para lograr el máximo rendimiento del modelo mediante el descubrimiento del conjunto óptimo de hiperparámetros. Esto implica ejecutar pruebas con diferentes hiperparámetros y evaluar el rendimiento de cada una.

Acelera el ajuste con Ultralytics YOLO26 y Ray Tune#

Ultralytics YOLO26 incorpora Ray Tune para el ajuste de hiperparámetros, lo que agiliza 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 hyperparameter optimization workflow

Ray Tune es una biblioteca de ajuste de hiperparámetros diseñada para ofrecer eficiencia y flexibilidad. Admite diversas estrategias de búsqueda, paralelismo y estrategias de parada temprana, y se integra perfectamente con frameworks populares de machine learning, incluido Ultralytics YOLO26.

Integración con Weights & Biases#

YOLO26 también permite la integración opcional con Weights & Biases para supervisar el proceso de ajuste.

Instalación#

Para instalar los paquetes necesarios, ejecuta:

Instalación
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

Uso#

Uso
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() de YOLO26 proporciona una interfaz fácil de usar para ajustar hiperparámetros con Ray Tune. Acepta varios argumentos que te permiten personalizar el proceso de ajuste. A continuación se explica detalladamente cada parámetro:

ParámetroTipoDescripciónValor predeterminado
datastrEl YAML del conjunto de datos sobre el que se ejecutará el ajustador, que especifica las rutas a los datos de entrenamiento y validación, así como otros ajustes específicos del conjunto de datos. En clasificación, se usa un directorio del conjunto de datos o el nombre de un conjunto de datos integrado (por ejemplo, imagenet10).
spacedict, optionalUn 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 que se explorará durante el ajuste. Si no se proporciona, YOLO26 utiliza un espacio de búsqueda predeterminado con varios hiperparámetros.
grace_periodint, optionalEl periodo de gracia, en épocas, para el programador ASHA en Ray Tune. El programador no finalizará ninguna prueba antes de este número de épocas, lo que permite que el modelo complete un mínimo de entrenamiento antes de decidir si se realiza una parada temprana.10
gpu_per_trialint, optionalEl número de GPU que Ray asigna a cada prueba. Establécelo explícitamente para usar entrenamiento en GPU; si se omite, las pruebas no recibirán recursos de GPU.None
iterationsint, optionalEl número máximo de pruebas que se ejecutarán durante el ajuste. Este parámetro ayuda a controlar el número total de combinaciones de hiperparámetros evaluadas, garantizando que el proceso de ajuste no se ejecute indefinidamente.300
search_algstr or Searcher, optionalEstrategia de búsqueda de Ray Tune que se utilizará. Puedes pasar directamente un objeto buscador de Ray o usar una cadena compatible, 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". De forma predeterminada, se utiliza TPE multivariante de Optuna con sugerencias conscientes del paralelismo."optuna"
**train_argsdict, optionalArgumentos adicionales que se pasarán al método train() durante el ajuste. Estos argumentos pueden incluir ajustes como el número de épocas de entrenamiento, el 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 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ámetroRangoDescripción
lr0tune.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.
lrftune.uniform(0.01, 1.0)Factor de la tasa de aprendizaje final que determina cuánto disminuye la tasa de aprendizaje al finalizar el entrenamiento.
momentumtune.uniform(0.7, 0.98)Factor de momentum del optimizador que ayuda a acelerar el entrenamiento y superar los mínimos locales.
weight_decaytune.uniform(0.0, 0.001)Parámetro de regularización que evita el sobreajuste penalizando los valores de peso elevados.
warmup_epochstune.uniform(0.0, 5.0)Número de épocas con una tasa de aprendizaje que aumenta gradualmente para estabilizar las primeras fases del entrenamiento.
warmup_momentumtune.uniform(0.0, 0.95)Valor inicial del momentum que aumenta gradualmente durante el periodo de calentamiento.
boxtune.uniform(1.0, 20.0)Peso del componente de pérdida de la caja delimitadora, que equilibra la precisión de localización del modelo.
clstune.uniform(0.1, 4.0)Peso del componente de pérdida de clasificación, que equilibra la precisión de predicción de clases del modelo.
cls_pwtune.uniform(0.0, 1.0)Potencia de ponderación de clases, desde desactivada (0.0) hasta la ponderación inversa completa por frecuencia (1.0).
dfltune.uniform(0.4, 12.0)Peso del componente de regresión de distancia de la caja, que prioriza una localización precisa de las cajas delimitadoras.
hsv_htune.uniform(0.0, 0.1)Rango de aumento del tono que introduce variabilidad de color para ayudar al modelo a generalizar.
hsv_stune.uniform(0.0, 0.9)Rango de aumento de la saturación que varía la intensidad del color para mejorar la robustez.
hsv_vtune.uniform(0.0, 0.9)Rango de aumento del valor (brillo) que ayuda al modelo a funcionar con distintas condiciones de iluminación.
degreestune.uniform(0.0, 45.0)Rango de aumento de rotación en grados, que mejora el reconocimiento de objetos rotados.
translatetune.uniform(0.0, 0.9)Rango de aumento de traslación que desplaza las imágenes horizontal y verticalmente.
scaletune.uniform(0.0, 0.95)Rango de aumento de escala que simula objetos a distintas distancias.
sheartune.uniform(0.0, 10.0)Rango de aumento de cizallamiento en grados, que simula cambios de perspectiva.
perspectivetune.uniform(0.0, 0.001)Rango de aumento de perspectiva que simula cambios del punto de vista en 3D.
flipudtune.uniform(0.0, 1.0)Probabilidad de aumento mediante volteo vertical, que incrementa la diversidad del conjunto de datos.
fliplrtune.uniform(0.0, 1.0)Probabilidad de aumento mediante volteo horizontal, útil para objetos simétricos.
bgrtune.uniform(0.0, 1.0)Probabilidad de aumento mediante intercambio de canales BGR, que ayuda a conseguir invariancia del color.
mosaictune.uniform(0.0, 1.0)Probabilidad de aumento Mosaic, que combina cuatro imágenes en una muestra de entrenamiento.
mixuptune.uniform(0.0, 1.0)Probabilidad de aumento Mixup, que combina dos imágenes y sus etiquetas.
cutmixtune.uniform(0.0, 1.0)Probabilidad de aumento CutMix, que combina regiones de imágenes manteniendo las características locales.
copy_pastetune.uniform(0.0, 1.0)En el modo flip, la fracción de objetos aptos que se copian en una imagen; en el modo mixup, también la probabilidad de ejecutarlo.
close_mosaictune.randint(0, 11)Desactiva Mosaic en las últimas N épocas para estabilizar el entrenamiento antes de finalizar.

Ejemplo de espacio de búsqueda personalizado#

En este ejemplo, mostramos cómo usar un espacio de búsqueda personalizado para ajustar 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.

Uso
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". A continuación, llamamos al método 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 mediante un diccionario con la clave "lr0" y el valor tune.uniform(1e-5, 1e-2). Por último, 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 los 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, Ultralytics utiliza TPE multivariante de Optuna con sugerencias conscientes del paralelismo.

Uso de `search_alg` como cadena con `model.tune()`
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 sustituir su métrica y modo de optimización, pasa un objeto buscador de Ray Tune instanciado en lugar de una cadena.

Uso del objeto `OptunaSearch` con `model.tune()`
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 interrumpida de ajuste de hiperparámetros con Ray Tune#

Puedes reanudar una sesión interrumpida de Ray Tune pasando resume=True. Opcionalmente, puedes pasar el directorio name utilizado por Ray Tune en runs/{task} para reanudarla. De lo contrario, se reanudará la última sesión interrumpida. No es necesario volver a proporcionar iterations ni space, pero sí debes proporcionar de nuevo el resto de argumentos de entrenamiento, incluidos data y epochs.

Usar `resume=True` con `model.tune()`
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 quieras realizar distintos análisis sobre los resultados obtenidos. Esta guía te mostrará los flujos de trabajo habituales para procesar y analizar estos resultados.

Carga de los resultados de un experimento de Tune desde un directorio#

model.tune(use_ray=True) devuelve un Ray ResultGrid y guarda el experimento en runs/{task}/tune, o en el name que hayas pasado. Para cargar esos resultados después de que el script original haya terminado, reanuda la sesión, lo que restaura los ensayos guardados y devuelve el mismo ResultGrid:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)

Análisis básico a nivel de experimento#

Obtén una visión general del rendimiento de las pruebas. Puedes comprobar rápidamente si se produjeron errores 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 de hiperparámetros de cada prueba 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}")

Representación del historial completo de métricas notificadas de una prueba#

Puedes representar el historial de métricas notificadas de cada prueba para ver cómo evolucionaron con el tiempo.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["metrics/mAP50-95(B)"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()

Resumen#

En esta guía, hemos cubierto los flujos de trabajo habituales para analizar los resultados de experimentos ejecutados con Ray Tune mediante Ultralytics. Los pasos clave incluyen cargar los resultados del experimento desde un directorio, realizar análisis básicos a nivel de experimento y de prueba, y representar las métricas.

Profundiza consultando la página de documentación Analyze Results de Ray Tune para sacar el máximo partido a tus experimentos de ajuste de hiperparámetros.

Preguntas frecuentes#

  • Para ajustar los hiperparámetros de tu modelo Ultralytics YOLO26 con Ray Tune, sigue estos pasos:

    1. Instala los paquetes necesarios:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. Carga tu modelo YOLO26 e inicia 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 eficazmente los hiperparámetros de tu modelo. Para obtener más información, consulta la documentación de Ray Tune.

  • Ultralytics YOLO26 utiliza los siguientes hiperparámetros predeterminados para el ajuste con Ray Tune:

    ParámetroRango de valoresDescripción
    lr0tune.uniform(1e-5, 1e-2)Tasa de aprendizaje inicial
    lrftune.uniform(0.01, 1.0)Factor de la tasa de aprendizaje final
    momentumtune.uniform(0.7, 0.98)Momentum
    weight_decaytune.uniform(0.0, 0.001)Decaimiento de pesos
    warmup_epochstune.uniform(0.0, 5.0)Épocas de calentamiento
    boxtune.uniform(1.0, 20.0)Peso de la pérdida de la caja
    clstune.uniform(0.1, 4.0)Peso de la pérdida de clasificación
    cls_pwtune.uniform(0.0, 1.0)Potencia de ponderación de clases
    dfltune.uniform(0.4, 12.0)Peso de la pérdida de distancia de la caja
    hsv_htune.uniform(0.0, 0.1)Rango de aumento del tono
    translatetune.uniform(0.0, 0.9)Rango de aumento de traslación

    Puedes personalizar estos hiperparámetros para adaptarlos a tus necesidades específicas. Para consultar la lista completa y obtener más información, visita la guía de ajuste de hiperparámetros.

  • Para integrar Weights & Biases (W&B) en el proceso de ajuste de tu Ultralytics YOLO26:

    1. Instala W&B:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. Ejecuta el ajustador:

      from ultralytics import YOLO
      
      # Load YOLO model
      model = YOLO("yolo26n.pt")
      
      # Each Ray trial creates its own W&B run in this project
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    Esta configuración te permitirá supervisar el proceso de ajuste, realizar un seguimiento de las configuraciones de hiperparámetros y visualizar los resultados en W&B.

  • Ray Tune ofrece numerosas ventajas para la optimización de hiperparámetros:

    • Estrategias de búsqueda avanzadas: Utiliza algoritmos como la optimización bayesiana y HyperOpt para buscar parámetros de forma eficiente.
    • Paralelismo: Admite la ejecución en paralelo de varias pruebas, lo que acelera significativamente el proceso de ajuste.
    • Parada temprana: Emplea estrategias como ASHA para finalizar pronto las pruebas con bajo rendimiento y ahorrar recursos computacionales.

    Ray Tune se integra perfectamente con Ultralytics YOLO26 y proporciona una interfaz fácil de usar para ajustar hiperparámetros de forma eficaz. Para empezar, consulta la guía de ajuste de hiperparámetros.

  • Para definir un espacio de búsqueda personalizado para ajustar los 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 momentum, que se explorarán durante el proceso de ajuste. Para configuraciones avanzadas, consulta la sección Ejemplo de espacio de búsqueda personalizado.

Comentarios