Ultralytics YOLO27:
Get Started

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

El ajuste de hiperparámetros es esencial para lograr el máximo rendimiento del modelo, ya que permite encontrar el conjunto óptimo de hiperparámetros. Para ello, se ejecutan pruebas con distintos hiperparámetros y se evalúa el rendimiento de cada una.

Acelera el ajuste con Ultralytics YOLO26 y Ray Tune#

Ultralytics YOLO26 incorpora Ray Tune para ajustar los hiperparámetros y agilizar la optimización de los hiperparámetros de los modelos YOLO26. Con Ray Tune, puedes utilizar estrategias de búsqueda avanzadas, paralelismo y detención 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 detención temprana, y se integra a la perfección con los populares marcos de aprendizaje automático, 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

# Carga un modelo YOLO26n
model = YOLO("yolo26n.pt")

# Empieza a ajustar los hiperparámetros del entrenamiento de YOLO26n con el conjunto de datos COCO8
result_grid = model.tune(data="coco8.yaml", use_ray=True)

Parámetros del método tune()#

El método tune() de YOLO26 ofrece 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 cada parámetro en detalle:

ParámetroTipoDescripciónValor predeterminado
datastrEl YAML del conjunto de datos que utilizará el ajustador, donde se especifican las rutas a los datos de entrenamiento y validación y otros ajustes específicos del conjunto de datos. Para la clasificación, se utiliza en su lugar un directorio del conjunto de datos o el nombre de un conjunto de datos integrado (p. ej., imagenet10).
spacedict, optionalDiccionario 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 intervalo 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 planificador ASHA de Ray Tune. El planificador no finalizará ninguna prueba antes de que transcurra este número de épocas, lo que permite que el modelo complete un entrenamiento mínimo antes de decidir si se detiene de forma temprana.10
gpu_per_trialint, optionalNúmero de GPU que Ray asigna a cada prueba. Establécelo explícitamente para utilizar el entrenamiento con GPU; si se omite, las pruebas no recibirán recursos de GPU.None
iterationsint, optionalNú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 y evita que el proceso de ajuste 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 utilizar una cadena compatible, como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax o random. Los buscadores especificados mediante cadenas utilizan automáticamente la métrica predeterminada de la tarea y mode="max". De forma predeterminada, se utiliza TPE multivariante de Optuna con sugerencias adaptadas al paralelismo."optuna"
**train_argsdict, optionalArgumentos adicionales que se pasarán al método train() durante el ajuste. Estos argumentos pueden incluir opciones como el número de épocas de entrenamiento, el tamaño del lote y otras configuraciones específicas del entrenamiento.{}

Personaliza estos parámetros para adaptar 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 ajustar hiperparámetros en YOLO26 con Ray Tune. Cada parámetro tiene un intervalo de valores específico definido por tune.uniform(), excepto close_mosaic, que utiliza tune.randint().

ParámetroIntervaloDescripció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 provocar inestabilidad.
lrftune.uniform(0.01, 1.0)Factor de la tasa de aprendizaje final que determina cuánto disminuye la tasa de aprendizaje al final del entrenamiento.
momentumtune.uniform(0.7, 0.98)Factor de momentum del optimizador que ayuda a acelerar el entrenamiento y a 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 pesos elevados.
warmup_epochstune.uniform(0.0, 5.0)Número de épocas durante las que la tasa de aprendizaje 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 los cuadros delimitadores, 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 la distancia del cuadro, que prioriza una localización precisa de los cuadros delimitadores.
hsv_htune.uniform(0.0, 0.1)Intervalo de aumento del tono que introduce variabilidad cromática para ayudar al modelo a generalizar.
hsv_stune.uniform(0.0, 0.9)Intervalo de aumento de la saturación que varía la intensidad del color para mejorar la robustez.
hsv_vtune.uniform(0.0, 0.9)Intervalo de aumento del valor (brillo) que ayuda al modelo a funcionar en distintas condiciones de iluminación.
degreestune.uniform(0.0, 45.0)Intervalo de aumento de rotación en grados, que mejora el reconocimiento de objetos girados.
translatetune.uniform(0.0, 0.9)Intervalo de aumento de traslación que desplaza las imágenes horizontal y verticalmente.
scaletune.uniform(0.0, 0.95)Intervalo de aumento de escala que simula objetos a distintas distancias.
sheartune.uniform(0.0, 10.0)Intervalo de aumento de cizallamiento en grados, que simula cambios de perspectiva.
perspectivetune.uniform(0.0, 0.001)Intervalo de aumento de perspectiva que simula cambios de punto de vista en 3D.
flipudtune.uniform(0.0, 1.0)Probabilidad de aumento de volteo vertical, que incrementa la diversidad del conjunto de datos.
fliplrtune.uniform(0.0, 1.0)Probabilidad de aumento de volteo horizontal, útil para objetos simétricos.
bgrtune.uniform(0.0, 1.0)Probabilidad de aumento mediante intercambio de canales BGR, que ayuda a lograr invariancia cromática.
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 mezcla dos imágenes y sus etiquetas.
cutmixtune.uniform(0.0, 1.0)Probabilidad de aumento CutMix, que combina regiones de imágenes y conserva las características locales.
copy_pastetune.uniform(0.0, 1.0)En el modo flip, fracción de objetos aptos que se copian en una imagen; en el modo mixup, también es la probabilidad de ejecutarlo.
close_mosaictune.randint(0, 11)Desactiva Mosaic durante las últimas N épocas para estabilizar el entrenamiento antes de finalizar.

Ejemplo de espacio de búsqueda personalizado#

En este ejemplo, mostramos cómo utilizar 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 los hiperparámetros que te interesen.

Uso
from ray import tune

from ultralytics import YOLO

# Define un modelo YOLO
model = YOLO("yolo26n.pt")

# Ejecuta Ray Tune en el modelo
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() y especificamos 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 de ajuste 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 especificados mediante 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 adaptadas al paralelismo.

Uso de la cadena `search_alg` con `model.tune()`
from ultralytics import YOLO

# Define un modelo YOLO
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 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 un modelo YOLO
model = YOLO("yolo26n.pt")

# Define un buscador
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Reanudar una sesión interrumpida de ajuste de hiperparámetros 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 la sesión. De lo contrario, se reanudará la última sesión interrumpida. No es necesario volver a proporcionar iterations ni space, pero sí debes volver a proporcionar el resto de los argumentos de entrenamiento, incluidos data y epochs.

Uso de `resume=True` con `model.tune()`
from ultralytics import YOLO

# Define un modelo YOLO
model = YOLO("yolo26n.pt")

# Reanuda la ejecución anterior
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Reanuda la ejecución de Ray Tune con el nombre '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, quizá quieras analizar de distintas formas los resultados obtenidos. En esta guía, veremos flujos de trabajo habituales para procesar y analizar estos resultados.

Carga los resultados del experimento de Tune desde un directorio#

model.tune(use_ray=True) devuelve un ResultGrid de Ray y guarda el experimento en runs/{task}/tune o en el directorio name que hayas indicado. Para cargar esos resultados después de que se haya cerrado el script original, reanuda la sesión; así se restauran las pruebas guardadas y se 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 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#

Accede a las configuraciones de hiperparámetros de cada prueba y a las últimas métricas registradas.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

Representación gráfica del historial completo de métricas registradas de una prueba#

Puedes representar gráficamente el historial de métricas registradas de cada prueba para ver cómo han evolucionado 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 repasado flujos de trabajo habituales para analizar los resultados de experimentos ejecutados con Ray Tune mediante Ultralytics. Los pasos principales son cargar los resultados del experimento desde un directorio, realizar análisis básicos a nivel de experimento y de prueba, y representar gráficamente las métricas.

Para sacar el máximo partido a tus experimentos de ajuste de hiperparámetros, consulta la página de documentación Analizar resultados de Ray Tune.

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 y empieza el ajuste:

      from ultralytics import YOLO
      
      # Carga un modelo YOLO26
      model = YOLO("yolo26n.pt")
      
      # Empieza el ajuste con el conjunto de datos COCO8
      result_grid = model.tune(data="coco8.yaml", use_ray=True)

    Esto aprovecha las estrategias de búsqueda avanzadas y el paralelismo de Ray Tune para optimizar eficazmente los hiperparámetros del 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 los cuadros
    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 los cuadros
    hsv_htune.uniform(0.0, 0.1)Intervalo de aumento del tono
    translatetune.uniform(0.0, 0.9)Intervalo de aumento de traslación

    Puedes personalizar estos hiperparámetros para adaptarlos a tus necesidades específicas. Consulta la guía Ajuste de hiperparámetros para ver la lista completa y obtener más información.

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

    1. Instala W&B:

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

      from ultralytics import YOLO
      
      # Cargar modelo YOLO
      model = YOLO("yolo26n.pt")
      
      # Cada prueba de Ray crea su propia ejecución de W&B en este proyecto
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    Esta configuración te permitirá supervisar el proceso de ajuste, hacer 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 considerablemente el proceso de ajuste.
    • Parada temprana: Emplea estrategias como ASHA para detener pronto las pruebas con bajo rendimiento y ahorrar recursos computacionales.

    Ray Tune se integra a la perfección con Ultralytics YOLO26 y ofrece una interfaz fácil de usar para ajustar los 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 ver configuraciones avanzadas, consulta la sección Ejemplo de espacio de búsqueda personalizado.

Comentarios