Meet YOLO26: next-gen vision AI.

Link to this sectionGuía de ajuste de hiperparámetros de Ultralytics YOLO#

Link to this sectionIntroducción#

El ajuste de hiperparámetros no es solo una configuración única, sino un proceso iterativo destinado a optimizar las métricas de rendimiento del modelo de aprendizaje automático, como la exactitud, la precisión y la recuperación. En el contexto de Ultralytics YOLO, estos hiperparámetros pueden variar desde la tasa de aprendizaje hasta detalles arquitectónicos, como el número de capas o los tipos de funciones de activación utilizados. Ultralytics Platform también admite entrenamiento en la nube con hiperparámetros configurables y seguimiento de métricas en tiempo real.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

Link to this section¿Qué son los hiperparámetros?#

Los hiperparámetros son configuraciones estructurales de alto nivel para el algoritmo. Se establecen antes de la fase de entrenamiento y permanecen constantes durante la misma. Aquí tienes algunos hiperparámetros que se ajustan habitualmente en Ultralytics YOLO:

  • Tasa de aprendizaje lr0: determina el tamaño del paso en cada iteración mientras te mueves hacia un mínimo en la función de pérdida.
  • Tamaño del lote batch: número de imágenes procesadas simultáneamente en una pasada hacia adelante.
  • Número de épocas epochs: una época es una pasada completa hacia adelante y hacia atrás de todos los ejemplos de entrenamiento.
  • Especificaciones de la arquitectura: tales como conteos de canales, número de capas, tipos de funciones de activación, etc.

Hyperparameter optimization search space visualization

Para obtener una lista completa de los hiperparámetros de aumento utilizados en YOLO26, consulta la página de configuraciones.

Link to this sectionEvolución genética y mutación#

Ultralytics YOLO utiliza algoritmos genéticos para optimizar los hiperparámetros. Los algoritmos genéticos se inspiran en el mecanismo de la selección natural y la genética.

  • Cruce: cada iteración combina genes de hasta nueve de las configuraciones con mejor aptitud observadas hasta el momento, utilizando el cruce BLX-α con selección de padres ponderada por aptitud.
  • Mutación: el candidato recombinado es entonces perturbado por un factor multiplicativo log-normal aplicado a cada hiperparámetro (con una probabilidad de 0.5 por parámetro). La fuerza de mutación sigma decae linealmente de 0.2 a 0.1 durante las primeras 300 iteraciones, por lo que el algoritmo explora ampliamente al principio y refina a medida que converge. La iteración 1 no tiene padres de los cuales realizar cruces y utiliza los hiperparámetros de entrenamiento predeterminados como línea base.

Link to this sectionPreparación para el ajuste de hiperparámetros#

Antes de comenzar el proceso de ajuste, es importante:

  1. Identificar las métricas: determina las métricas que utilizarás para evaluar el rendimiento del modelo. Esto podría ser AP50, F1-score u otras.
  2. Establecer el presupuesto de ajuste: define cuántos recursos computacionales estás dispuesto a asignar. El ajuste de hiperparámetros puede ser computacionalmente intensivo.

Link to this sectionPasos involucrados#

Link to this sectionInicializar hiperparámetros#

Comienza con un conjunto razonable de hiperparámetros iniciales. Esto podría ser los hiperparámetros predeterminados establecidos por Ultralytics YOLO o algo basado en tu conocimiento del dominio o experimentos previos.

Link to this sectionMutar hiperparámetros#

Utiliza el método _mutate para producir un nuevo conjunto de hiperparámetros basado en el conjunto existente. La clase Tuner maneja este proceso automáticamente.

Link to this sectionEntrenar modelo#

El entrenamiento se realiza utilizando el conjunto mutado de hiperparámetros. El rendimiento del entrenamiento se evalúa entonces utilizando tus métricas elegidas.

Link to this sectionEvaluar modelo#

Utiliza métricas como AP50, F1-score o métricas personalizadas para evaluar el rendimiento del modelo. El proceso de evaluación ayuda a determinar si los hiperparámetros actuales son mejores que los anteriores.

Link to this sectionRegistrar resultados#

Es crucial registrar tanto las métricas de rendimiento como los hiperparámetros correspondientes para futuras referencias. Ultralytics YOLO guarda automáticamente estos resultados en formato NDJSON.

Link to this sectionRepetir#

El proceso se repite hasta que se alcance el número establecido de iteraciones o la métrica de rendimiento sea satisfactoria. Cada iteración se basa en el conocimiento obtenido de las ejecuciones anteriores.

Link to this sectionDescripció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. Cada parámetro tiene un rango de valores específico definido por una tupla (min, max).

ParámetroTipoRango de valoresDescripción
lr0float(1e-5, 1e-2)Tasa de aprendizaje inicial al comienzo del entrenamiento. Los valores más bajos proporcionan un entrenamiento más estable pero una convergencia más lenta
lrffloat(0.01, 1.0)Factor de tasa de aprendizaje final como una fracción de lr0. Controla cuánto disminuye la tasa de aprendizaje durante el entrenamiento
momentumfloat(0.7, 0.98)Factor de momentum de SGD. Los valores más altos ayudan a mantener una dirección de gradiente consistente y pueden acelerar la convergencia
weight_decayfloat(0.0, 0.001)Factor de regularización L2 para evitar el sobreajuste. Los valores más grandes imponen una regularización más fuerte
warmup_epochsfloat(0.0, 5.0)Número de épocas para el calentamiento lineal de la tasa de aprendizaje. Ayuda a prevenir la inestabilidad del entrenamiento inicial
warmup_momentumfloat(0.0, 0.95)Momentum inicial durante la fase de calentamiento. Aumenta gradualmente hasta el valor final de momentum
boxfloat(1.0, 20.0)Peso de la pérdida de la caja delimitadora en la función de pérdida total. Equilibra la regresión de la caja frente a la clasificación
clsfloat(0.1, 4.0)Peso de la pérdida de clasificación en la función de pérdida total. Los valores más altos enfatizan la predicción correcta de la clase
cls_pwfloat(0.0, 1.0)Potencia de ponderación de clase para manejar el desequilibrio de clases. Los valores más altos aumentan el peso en las clases raras
dflfloat(0.4, 12.0)Peso de DFL (Distribution Focal Loss) en la función de pérdida total. Los valores más altos enfatizan la localización precisa de la caja delimitadora
hsv_hfloat(0.0, 0.1)Rango de aumento de tono aleatorio en el espacio de color HSV. Ayuda al modelo a generalizar a través de variaciones de color
hsv_sfloat(0.0, 0.9)Rango de aumento de saturación aleatorio en el espacio HSV. Simula diferentes condiciones de iluminación
hsv_vfloat(0.0, 0.9)Rango de aumento de valor (brillo) aleatorio. Ayuda al modelo a manejar diferentes niveles de exposición
degreesfloat(0.0, 45.0)Aumento máximo de rotación en grados. Ayuda al modelo a volverse invariante a la orientación del objeto
translatefloat(0.0, 0.9)Aumento máximo de traslación como fracción del tamaño de la imagen. Mejora la robustez a la posición del objeto
scalefloat(0.0, 0.95)Rango de aumento de escala aleatorio. Ayuda al modelo a detectar objetos en diferentes tamaños
shearfloat(0.0, 10.0)Aumento máximo de corte (shear) en grados. Añade distorsiones tipo perspectiva a las imágenes de entrenamiento
perspectivefloat(0.0, 0.001)Rango de aumento de perspectiva aleatorio. Simula diferentes ángulos de visión
flipudfloat(0.0, 1.0)Probabilidad de inversión vertical de la imagen durante el entrenamiento. Útil para imágenes aéreas o cenitales
fliplrfloat(0.0, 1.0)Probabilidad de inversión horizontal de la imagen. Ayuda al modelo a volverse invariante a la dirección del objeto
bgrfloat(0.0, 1.0)Probabilidad de utilizar el aumento BGR, que intercambia los canales de color. Puede ayudar con la invarianza al color
mosaicfloat(0.0, 1.0)Probabilidad de utilizar el aumento mosaic, que combina 4 imágenes. Especialmente útil para la detección de objetos pequeños
mixupfloat(0.0, 1.0)Probabilidad de utilizar el aumento mixup, que mezcla dos imágenes. Puede mejorar la robustez del modelo
cutmixfloat(0.0, 1.0)Probabilidad de utilizar el aumento cutmix. Combina regiones de la imagen mientras mantiene las características locales
copy_pastefloat(0.0, 1.0)Probabilidad de utilizar el aumento copy-paste. Ayuda a mejorar el rendimiento de la segmentación de instancias
close_mosaicfloat(0.0, 10.0)Deshabilita mosaic en las últimas N épocas para estabilizar el entrenamiento antes de la finalización

Link to this sectionEjemplo de espacio de búsqueda personalizado#

Aquí tienes cómo definir un espacio de búsqueda y usar el método model.tune() para utilizar la clase Tuner para el ajuste de hiperparámetros de YOLO26n en COCO8 durante 30 épocas con un optimizador AdamW y omitiendo el trazado, la creación de puntos de control y la validación, excepto en la última época, para un ajuste más rápido.

Advertencia

Este ejemplo es solo para demostración. Los hiperparámetros derivados de ejecuciones de ajuste cortas o a pequeña escala rara vez son óptimos para un entrenamiento en el mundo real. En la práctica, el ajuste debe realizarse bajo configuraciones similares al entrenamiento completo (incluyendo conjuntos de datos, épocas y aumentos comparables) para garantizar resultados fiables y transferibles. Un ajuste rápido puede sesgar los parámetros hacia una convergencia más rápida o ganancias de validación a corto plazo que no se generalizan.

Ejemplo
from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
    data="coco8.yaml",
    epochs=30,
    iterations=300,
    optimizer="AdamW",
    space=search_space,
    plots=False,
    save=False,
    val=False,
)

Link to this sectionReanudar una sesión de ajuste de hiperparámetros interrumpida#

Puedes reanudar una sesión de ajuste de hiperparámetros interrumpida pasando resume=True. Opcionalmente, puedes pasar el directorio name utilizado bajo runs/{task} para reanudar. De lo contrario, reanudará la última sesión interrumpida. También necesitas proporcionar todos los argumentos de entrenamiento anteriores, incluyendo data, epochs, iterations y space.

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

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

Link to this sectionResults#

Después de haber completado con éxito el proceso de ajuste de hiperparámetros, obtendrás varios archivos y directorios que encapsulan los resultados del ajuste. Lo siguiente describe cada uno:

Link to this sectionEstructura de archivos#

Así es como se verá la estructura del directorio de resultados. Los directorios de entrenamiento como train1/ contienen iteraciones de ajuste individuales, es decir, un modelo entrenado con un conjunto de hiperparámetros. El directorio tune/ contiene los resultados del ajuste de todos los entrenamientos de modelos individuales:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── tune_fitness.png
        ├── tune_results.ndjson
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Link to this sectionDescripciones de archivos#

Link to this sectionbest_hyperparameters.yaml#

Este archivo YAML contiene los hiperparámetros con mejor rendimiento encontrados durante el proceso de ajuste. Puedes utilizar este archivo para inicializar futuros entrenamientos con estos ajustes optimizados.

  • Formato: YAML

  • Uso: Resultados de hiperparámetros

  • Ejemplo:

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
    # Best fitness model is /usr/src/ultralytics/runs/detect/train498
    # Best fitness hyperparameters are printed below.
    
    lr0: 0.00269
    lrf: 0.00288
    momentum: 0.73375
    weight_decay: 0.00015
    warmup_epochs: 1.22935
    warmup_momentum: 0.1525
    box: 18.27875
    cls: 1.32899
    dfl: 0.56016
    hsv_h: 0.01148
    hsv_s: 0.53554
    hsv_v: 0.13636
    degrees: 0.0
    translate: 0.12431
    scale: 0.07643
    shear: 0.0
    perspective: 0.0
    flipud: 0.0
    fliplr: 0.08631
    mosaic: 0.42551
    mixup: 0.0
    copy_paste: 0.0

Link to this sectiontune_fitness.png#

Este es un gráfico que muestra la idoneidad (fitness) frente al número de iteraciones. Te ayuda a visualizar cómo se comportó el algoritmo genético a lo largo del tiempo.

  • Formato: PNG
  • Uso: Visualización del rendimiento

Hyperparameter Tuning Fitness vs Iteration

El gráfico contiene:

  • Un marcador por iteración por conjunto de datos, por lo que una ejecución con un solo conjunto de datos muestra un punto por iteración, y una ejecución con múltiples conjuntos de datos muestra un punto por conjunto de datos por iteración.
  • Una línea punteada de "media suavizada" calculada como un suavizado gaussiano (sigma=3) sobre los valores de idoneidad (fitness) de nivel superior por iteración.

Link to this sectiontune_results.ndjson#

Un archivo NDJSON que contiene resultados detallados de cada iteración de ajuste. Cada línea es un objeto JSON con la idoneidad (fitness) agregada, los hiperparámetros ajustados y las métricas por conjunto de datos. El ajuste con un solo conjunto de datos y con múltiples utilizan el mismo formato de archivo.

  • Formato: NDJSON
  • Uso: Seguimiento de resultados por iteración.
  • Ejemplo:

A continuación se muestra un ejemplo con formato legible. En el archivo .ndjson real, cada objeto se almacena en una sola línea.

{
    "iteration": 1,
    "fitness": 0.48628,
    "hyperparameters": {
        "lr0": 0.01,
        "lrf": 0.01,
        "momentum": 0.937,
        "weight_decay": 0.0005
    },
    "datasets": {
        "coco8": {
            "metrics/precision(B)": 0.65666,
            "metrics/recall(B)": 0.85,
            "metrics/mAP50(B)": 0.85086,
            "metrics/mAP50-95(B)": 0.64104,
            "val/box_loss": 1.57958,
            "val/cls_loss": 1.04986,
            "val/dfl_loss": 1.32641,
            "fitness": 0.64104
        },
        "coco8-grayscale": {
            "metrics/precision(B)": 0.6582,
            "metrics/recall(B)": 0.51667,
            "metrics/mAP50(B)": 0.59106,
            "metrics/mAP50-95(B)": 0.33152,
            "val/box_loss": 1.95424,
            "val/cls_loss": 1.64059,
            "val/dfl_loss": 1.70226,
            "fitness": 0.33152
        }
    },
    "save_dirs": {
        "coco8": "runs/detect/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

La fitness de nivel superior es la media aritmética de los valores de fitness por conjunto de datos. Para el ajuste con un solo conjunto de datos, el dict datasets tiene una entrada cuya fitness es igual a la fitness de nivel superior. Se registra un objeto JSON por iteración completada. Las rutas reales de save_dirs son absolutas; se han abreviado arriba por legibilidad.

Link to this sectiontune_scatter_plots.png#

Este archivo contiene gráficos de dispersión generados a partir de tune_results.ndjson, lo que te ayuda a visualizar las relaciones entre diferentes hiperparámetros y métricas de rendimiento. Los hiperparámetros cuyo valor predeterminado es 0 (por ejemplo, degrees y shear a continuación) pueden evolucionar solo lentamente desde su semilla inicial porque el factor de mutación multiplicativo tiene muy poco margen para expandirse desde un valor cercano a cero.

  • Formato: PNG
  • Uso: Análisis exploratorio de datos

Hyperparameter tuning results scatter plot analysis

Link to this sectionweights/#

Este directorio contiene los modelos PyTorch guardados para la última y la mejor iteración durante el proceso de ajuste de hiperparámetros.

  • last.pt: last.pt contiene los pesos de la última época de entrenamiento.
  • best.pt: best.pt contiene los pesos de la iteración que logró la mejor puntuación de idoneidad (fitness).

Utilizando estos resultados, puedes tomar decisiones más fundamentadas para tus futuros entrenamientos y análisis de modelos. No dudes en consultar estos artefactos para entender cómo funcionó tu modelo y cómo podrías mejorarlo aún más.

Link to this sectionConclusión#

El proceso de ajuste de hiperparámetros en Ultralytics YOLO es sencillo pero potente, gracias a su enfoque basado en algoritmos genéticos que combina el cruce BLX-α con la mutación log-normal. Seguir los pasos descritos en esta guía te ayudará a ajustar sistemáticamente tu modelo para lograr un mejor rendimiento.

Link to this sectionLecturas adicionales#

  1. Optimización de hiperparámetros en Wikipedia
  2. Guía de evolución de hiperparámetros de YOLOv5
  3. Ajuste eficiente de hiperparámetros con Ray Tune y YOLO26

Para obtener información más detallada, puedes explorar el código fuente de la clase Tuner y su documentación asociada. Si tienes alguna pregunta, solicitud de función o necesitas más ayuda, no dudes en contactarnos en GitHub o Discord.

Link to this sectionPreguntas frecuentes#

Link to this section¿Cómo optimizo la tasa de aprendizaje para Ultralytics YOLO durante el ajuste de hiperparámetros?#

Para optimizar la tasa de aprendizaje para Ultralytics YOLO, comienza estableciendo una tasa de aprendizaje inicial usando el parámetro lr0. Los valores comunes oscilan entre 0.001 y 0.01. Durante el proceso de ajuste de hiperparámetros, este valor mutará para encontrar la configuración óptima. Puedes utilizar el método model.tune() para automatizar este proceso. Por ejemplo:

Ejemplo
from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

Para obtener más detalles, consulta la página de configuración de Ultralytics YOLO.

Link to this section¿Cuáles son los beneficios de utilizar algoritmos genéticos para el ajuste de hiperparámetros en YOLO26?#

Los algoritmos genéticos en Ultralytics YOLO26 proporcionan un método robusto para explorar el espacio de hiperparámetros, lo que conduce a un rendimiento del modelo altamente optimizado. Los beneficios clave incluyen:

  • Búsqueda eficiente: El cruce BLX-α combina genes de los padres con la mayor idoneidad (fitness), mientras que la mutación log-normal perturba el resultado para descubrir nuevos candidatos.
  • Evitar mínimos locales: Al introducir aleatoriedad, ayudan a evitar mínimos locales, asegurando una mejor optimización global.
  • Métricas de rendimiento: Se adaptan basándose en una puntuación de idoneidad (fitness) específica de la tarea (mAP50-95 para detección).

Para ver cómo los algoritmos genéticos pueden optimizar los hiperparámetros, consulta la guía de evolución de hiperparámetros.

Link to this section¿Cuánto tiempo lleva el proceso de ajuste de hiperparámetros para Ultralytics YOLO?#

El tiempo necesario para el ajuste de hiperparámetros con Ultralytics YOLO depende en gran medida de varios factores, como el tamaño del conjunto de datos, la complejidad de la arquitectura del modelo, el número de iteraciones y los recursos computacionales disponibles. Por ejemplo, ajustar YOLO26n en un conjunto de datos como COCO8 durante 30 épocas podría llevar desde varias horas hasta días, dependiendo del hardware.

Para gestionar eficazmente el tiempo de ajuste, define un presupuesto de ajuste claro de antemano (enlace a la sección interna). Esto ayuda a equilibrar la asignación de recursos y los objetivos de optimización.

Link to this section¿Qué métricas debo usar para evaluar el rendimiento del modelo durante el ajuste de hiperparámetros en YOLO?#

Al evaluar el rendimiento del modelo durante el ajuste de hiperparámetros en YOLO, puedes utilizar varias métricas clave:

  • AP50: La precisión media (AP) en un umbral de IoU de 0.50.
  • F1-Score: La media armónica de la precisión y la exhaustividad (recall).
  • Precisión y Recall: Métricas individuales que indican la precisión del modelo al identificar positivos verdaderos frente a falsos positivos y falsos negativos.

Estas métricas te ayudan a comprender diferentes aspectos del rendimiento de tu modelo. Consulta la guía de métricas de rendimiento de Ultralytics YOLO para obtener una visión general completa.

Link to this section¿Puedo usar Ray Tune para una optimización avanzada de hiperparámetros con YOLO26?#

Sí, Ultralytics YOLO26 se integra con Ray Tune para una optimización avanzada de hiperparámetros. Ray Tune ofrece algoritmos de búsqueda sofisticados como la Optimización Bayesiana y Hyperband, junto con capacidades de ejecución en paralelo para acelerar el proceso de ajuste.

Para usar Ray Tune con YOLO26, simplemente establece el parámetro use_ray=True en tu llamada al método model.tune(). Para obtener más detalles y ejemplos, consulta la guía de integración de Ray Tune.

Comentarios