Receta de entrenamiento de YOLO26#
Introducción#
Esta guía documenta la receta exacta de entrenamiento utilizada para generar los puntos de control oficiales preentrenados de YOLO26 con COCO. Cada hiperparámetro que se muestra aquí ya está integrado en los pesos .pt publicados, junto con el registro de entrenamiento por época y la revisión del código de la ejecución; todo ello se puede inspeccionar mediante programación.
Saber qué se incluyó en los puntos de control oficiales —no solo la arquitectura, sino también los programas de tasa de aprendizaje, las canalizaciones de aumento de datos y los pesos de la función de pérdida que determinaron su rendimiento— te ayuda a tomar mejores decisiones al hacer el ajuste fino: qué aumentos de datos mantener, qué pesos de la función de pérdida ajustar y qué configuraciones del optimizador funcionan mejor para el tamaño de tu conjunto de datos.
Esta página describe los hiperparámetros registrados en los puntos de control publicados. Para conocer los motivos que los justifican, incluidos la arquitectura, los cambios en la función de pérdida y la asignación de etiquetas, y los estudios de ablación, lee Ultralytics YOLO26: modelos de visión unificados en tiempo real de extremo a extremo.
Resumen del entrenamiento#
Todos los modelos base de YOLO26 se entrenaron en dos etapas: preentrenamiento con Objects365v1 durante 150 épocas, seguido del ajuste fino con COCO. Ambas etapas se ejecutaron con una resolución de 640x640, el optimizador MuSGD y un tamaño de lote de 128. Ningún punto de control de YOLO26 se entrenó con COCO a partir de pesos aleatorios, por lo que la etapa de COCO es breve para la mayoría de los tamaños; además, los hiperparámetros de esta etapa se determinaron mediante una búsqueda evolutiva. Los registros de entrenamiento completos y las métricas de cada tamaño de modelo se almacenan en los puntos de control publicados y se muestran como gráficos en Ultralytics Platform.
Decisiones de diseño clave comunes a todos los tamaños:
- Preentrenamiento con Objects365 para todos los tamaños antes de la etapa de COCO
- Entrenamiento con doble cabezal con supervisión de uno a muchos y de uno a uno; la inferencia utiliza NMS de forma predeterminada, mientras que
nms=Falseselecciona el cabezal sin NMS - Optimizador MuSGD que combina SGD con actualizaciones ortogonalizadas al estilo de Muon para matrices de pesos (pesos lineales 2D y filtros convolucionales 4D, que se remodelan a 2D)
- Aumento de mosaico intenso (probabilidad ~0.9-1.0), desactivado durante las épocas finales (
close_mosaic=8en el preentrenamiento,close_mosaic=10con COCO) - Aumento de escala agresivo (0.5-0.95) para detectar objetos de distintos tamaños
- Rotación y cizallamiento mínimos para la mayoría de los tamaños, a fin de limitar la distorsión geométrica
Etapa 1: preentrenamiento con Objects365#
Todos los puntos de control de YOLO26 para COCO se ajustaron a partir de un punto de control de Objects365v1 del mismo tamaño. Esos pesos preentrenados también están publicados y se documentan en la página del conjunto de datos Objects365. Cada punto de control de COCO indica los pesos iniciales en la configuración de entrenamiento integrada en el archivo .pt; a continuación se explica cómo leerla en Inspección de los argumentos de entrenamiento de los puntos de control de YOLO26:
| Punto de control de COCO | Pesos iniciales |
|---|---|
yolo26n.pt | yolo26n-objv1-150.pt |
yolo26s.pt | yolo26s-objv1-150.pt |
yolo26m.pt | yolo26m-objv1-150.pt |
yolo26l.pt | yolo26l-objv1-150.pt |
yolo26x.pt | yolo26x-objv1-150.pt |
El preentrenamiento utilizó principalmente la configuración predeterminada, en lugar de valores obtenidos mediante búsqueda. lr0, lrf, momentum, weight_decay, box y cls coinciden con default.yaml, mientras que warmup_epochs, close_mosaic y dfl se sobrescribieron. La configuración es común a todos los tamaños, salvo warmup_epochs en X, las intensidades de aumento de datos y los pesos internos de MuSGD y del cabezal que se indican después de las tablas:
| Configuración | Valor |
|---|---|
data | Objects365v1 |
epochs | 150 |
imgsz | 640 |
batch | 128 |
optimizer | MuSGD |
lr0 / lrf | 0.01 / 0.01 |
momentum | 0.937 |
weight_decay | 0.0005 |
warmup_epochs | 1 (2 para X) |
close_mosaic | 8 |
box / cls / dfl | 7.5 / 0.5 / 6.0 |
| Aumento de datos | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
mixup | 0.0 | 0.05 | 0.15 | 0.15 | 0.2 |
copy_paste | 0.1 | 0.15 | 0.4 | 0.5 | 0.6 |
scale | 0.5 | 0.9 | 0.9 | 0.9 | 0.9 |
Estas tablas incluyen la configuración que determina el preentrenamiento, pero no la configuración completa. Los puntos de control registran más de 100 argumentos, así que ejecuta train_args como se muestra a continuación para consultar la lista oficial.
Avanzado: parámetros internos de preentrenamiento
Durante el preentrenamiento también variaron parámetros de ramas experimentales del mismo tipo que los descritos en Parámetros internos de entrenamiento. cls_w tuvo un valor de 1.0 para todos los tamaños:
| Configuración | N | S | M | L | X |
|---|---|---|---|---|---|
muon_w | 0.45 | 0.5 | 0.45 | 0.45 | 0.5 |
sgd_w | 0.55 | 0.5 | 0.55 | 0.55 | 0.6 |
o2m | 0.1 | 0.1 | 0.1 | 1.0 | 1.0 |
No necesitas el conjunto de datos Objects365 para reutilizar la etapa 1. Los puntos de control preentrenados se descargan automáticamente, como cualquier otro recurso de Ultralytics, así que puedes ajustarlos con tu propio conjunto de datos:
from ultralytics import YOLO
model = YOLO("yolo26s-objv1-150.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Para volver a ejecutar la etapa de COCO, parte de los mismos pesos y pasa los valores del optimizador, la pérdida y el aumento de datos de la etapa 2 correspondientes a ese tamaño, indicados en las tablas de abajo. En esas tablas se omiten argumentos más pequeños que no son predeterminados, como warmup_momentum, warmup_bias_lr, perspective, flipud y cutmix, así que imprime train_args desde el punto de control para obtener la configuración exacta. El paquete publicado rechaza los parámetros internos; para usarlos necesitas la rama experimental.
Inspección de los argumentos de entrenamiento del punto de control de YOLO26#
Cada punto de control de Ultralytics almacena la configuración completa de entrenamiento con la que se generó, así que puedes comprobar por ti mismo cada valor de esta página:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
print(model.ckpt["train_args"])El resultado enumera la configuración completa, con más de 100 entradas, incluidos todos los valores de la receta documentados en esta página. Un extracto de yolo26n.pt:
batch: 128
...
box: 5.62767
...
close_mosaic: 10
cls: 0.56099
...
dfl: 9.03871
...
epochs: 245
...
lr0: 0.0054
lrf: 0.04952
...
optimizer: MuSGDEsto funciona con cualquier punto de control .pt, tanto con las versiones oficiales como con tus propios modelos ajustados. Para consultar la lista completa de argumentos de entrenamiento configurables, consulta la referencia de configuración del entrenamiento.
Visualización de las curvas de entrenamiento#
train_args no es lo único que se almacena. Cada punto de control también incluye el results.csv completo de cada época de la ejecución que lo generó, junto con sus métricas finales de validación. Las curvas de los puntos de control oficiales de YOLO26 se publican en Ultralytics Platform, y cualquier archivo .pt puede arrastrarse y soltarse en un proyecto para representar los mismos datos, con los metadatos extraídos automáticamente del archivo.
Cada punto de control corresponde a la etapa que lo generó: las curvas de COCO están en yolo26s.pt y las curvas de las 150 épocas de Objects365 están en yolo26s-objv1-150.pt.
Comprobación de la revisión del código#
ckpt["git"] registra el commit que generó el punto de control, y esos commits están en ramas experimentales públicas del repositorio de Ultralytics, así que puedes usar exactamente el mismo código de entrenamiento:
from ultralytics import YOLO
print(YOLO("yolo26n.pt").ckpt["git"])
# {'root': ..., 'branch': 'exp-main', 'commit': 'cb13d5f9cfbd6f299da3620c625f81d721dc2849', ...}git fetch origin cb13d5f9cfbd6f299da3620c625f81d721dc2849
git checkout cb13d5f9cfbd6f299da3620c625f81d721dc2849Las ramas experimentales incluyen trabajo que nunca llegó a main, como o2m y cls_w configurables. Si entrenas con main y los hiperparámetros documentados abajo, los resultados no serán idénticos bit a bit, pero la diferencia con las métricas publicadas será insignificante.
Hiperparámetros de entrenamiento de YOLO26 por tamaño del modelo#
Estos son los valores de la etapa 2, aplicados sobre los pesos de Objects365 de arriba. Las tablas siguientes agrupan la receta por categoría: optimizador y programación, pesos de pérdida y aumento de datos. Cada valor procede directamente de train_args, integrado en los puntos de control publicados.
Optimizador y tasa de aprendizaje#
Estos ajustes del optimizador y la programación se usaron para ajustar cada tamaño con COCO. Fíjate en cómo el modelo N se diferencia de los demás:
| Configuración | N | S | M | L | X |
|---|---|---|---|---|---|
optimizer | MuSGD | MuSGD | MuSGD | MuSGD | MuSGD |
lr0 | 0.0054 | 0.00038 | 0.00038 | 0.00038 | 0.00038 |
lrf | 0.0495 | 0.882 | 0.882 | 0.882 | 0.882 |
momentum | 0.947 | 0.948 | 0.948 | 0.948 | 0.948 |
weight_decay | 0.00064 | 0.00027 | 0.00027 | 0.00027 | 0.00027 |
warmup_epochs | 0.98 | 0.99 | 0.99 | 0.99 | 0.99 |
epochs | 245 | 70 | 80 | 60 | 40 |
batch | 128 | 128 | 128 | 128 | 128 |
imgsz | 640 | 640 | 640 | 640 | 640 |
El modelo N usó una tasa de aprendizaje inicial más alta con un descenso pronunciado (lrf=0.0495), mientras que los modelos S/M/L/X usaron una tasa de aprendizaje inicial mucho más baja y una programación más gradual (lrf=0.882). Esto refleja las distintas dinámicas de convergencia de los modelos pequeños frente a los grandes: los modelos pequeños necesitan actualizaciones más agresivas para aprender eficazmente.
Pesos de pérdida#
Los pesos de pérdida equilibran los tres componentes de la pérdida de detección: la regresión de IoU de la caja delimitadora (box), la clasificación (cls) y un término de regresión de la distancia de la caja (dfl). Ten en cuenta que YOLO26, al no usar DFL, reutiliza el valor de dfl para ponderar una pérdida L1 sobre las distancias normalizadas de las cajas, en lugar de la pérdida focal de distribución:
| Configuración | N | S | M | L | X |
|---|---|---|---|---|---|
box | 5.63 | 9.83 | 9.83 | 9.83 | 9.83 |
cls | 0.56 | 0.65 | 0.65 | 0.65 | 0.65 |
dfl | 9.04 | 0.96 | 0.96 | 0.96 | 0.96 |
El modelo N da prioridad al término de regresión de distancia dfl, mientras que los modelos S/M/L/X ponen más énfasis en la regresión de las cajas basada en IoU. La pérdida de clasificación se mantiene relativamente constante en todos los tamaños.
Proceso de aumento de datos#
Para consultar una explicación detallada de cada técnica, visita la guía de aumento de datos de YOLO.
| Configuración | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 0.909 | 0.992 | 0.992 | 0.992 | 0.992 |
mixup | 0.012 | 0.05 | 0.427 | 0.427 | 0.427 |
copy_paste | 0.075 | 0.404 | 0.304 | 0.404 | 0.404 |
scale | 0.562 | 0.9 | 0.95 | 0.95 | 0.95 |
fliplr | 0.606 | 0.304 | 0.304 | 0.304 | 0.304 |
degrees | 1.11 | ~0 | ~0 | ~0 | ~0 |
shear | 1.46 | ~0 | ~0 | ~0 | ~0 |
translate | 0.071 | 0.275 | 0.275 | 0.275 | 0.275 |
hsv_h | 0.014 | 0.013 | 0.013 | 0.013 | 0.013 |
hsv_s | 0.645 | 0.353 | 0.353 | 0.353 | 0.353 |
hsv_v | 0.566 | 0.194 | 0.194 | 0.194 | 0.194 |
bgr | 0.106 | 0.0 | 0.0 | 0.0 | 0.0 |
Los valores que aparecen como ~0 son inferiores a 0,01 en los puntos de control reales (por ejemplo, degrees=0.00012 en el modelo S), por lo que el aumento de datos está prácticamente desactivado.
En general, los modelos más grandes usan un aumento de datos más agresivo (más mixup y escala), ya que tienen más capacidad y se benefician de una regularización más intensa. El modelo N es el único tamaño con valores significativos de rotación, cizallamiento y aumento BGR.
Parámetros internos de entrenamiento#
Avanzado: parámetros internos del proceso
Los puntos de control también contienen parámetros utilizados en la rama de entrenamiento experimental que no están disponibles como ajustes configurables por el usuario en default.yaml:
| Configuración | Descripción | N | S | M | L | X |
|---|---|---|---|---|---|---|
muon_w | Peso de actualización Muon en MuSGD | 0.528 | 0.436 | 0.436 | 0.436 | 0.436 |
sgd_w | Peso de actualización SGD en MuSGD | 0.674 | 0.479 | 0.479 | 0.479 | 0.479 |
cls_w | Peso de clasificación interno | 2.74 | 3.48 | 3.48 | 3.48 | 3.48 |
o2m | Peso de pérdida de la cabeza uno a muchos | 1.0 | 0.705 | 0.705 | 0.705 | 0.705 |
topk | Asignación de etiquetas top-k | 8 | 5 | 5 | 5 | 5 |
Consulta la pregunta frecuente sobre estos parámetros para saber qué significan al ajustar un modelo.
Ajustar YOLO26 con tu propio conjunto de datos#
Al ajustar YOLO26 con tu propio conjunto de datos, no necesitas reproducir toda la receta de preentrenamiento. Los pesos preentrenados ya incorporan los conocimientos sobre aumento de datos y optimización adquiridos durante el entrenamiento con COCO. Para conocer buenas prácticas de entrenamiento más generales, consulta Consejos para entrenar modelos.
Ajuste con la configuración predeterminada#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)El ajuste con la configuración predeterminada es un buen punto de partida. Cambia los hiperparámetros solo si tienes un motivo concreto.
Cuándo ajustar los hiperparámetros de YOLO26#
Conjuntos de datos pequeños (< 1.000 imágenes):
- Reduce la intensidad del aumento de datos:
mosaic=0.5,mixup=0.0,copy_paste=0.0 - Reduce la tasa de aprendizaje y especifica el optimizador:
optimizer=AdamW,lr0=0.001 - Usa menos épocas y establece una paciencia:
epochs=50,patience=20 - Plantéate congelar las capas del backbone:
freeze=10
Conjuntos de datos grandes (> 50.000 imágenes):
- Ajusta la receta para que se parezca más a la de preentrenamiento
- Plantéate usar
optimizer=MuSGDen ejecuciones más largas - Aumenta el aumento de datos:
mosaic=1.0,mixup=0.3,scale=0.9
Imágenes de dominios específicos (aéreas, médicas, submarinas):
- Aumenta
flipud=0.5si varía la orientación vertical - Aumenta
degreessi los objetos aparecen con cualquier orientación - Ajusta
hsv_syhsv_vsi las condiciones de iluminación difieren significativamente de las de COCO
Para automatizar la optimización de hiperparámetros, consulta la guía de ajuste de hiperparámetros.
Elige el tamaño del modelo#
| Modelo | Ideal para | Recomendaciones sobre el tamaño del lote |
|---|---|---|
| YOLO26n | Dispositivos periféricos, móviles y tiempo real en CPU | Lotes grandes (64-128) en GPU de consumo |
| YOLO26s | Equilibrio entre velocidad y precisión | Lotes medianos (32-64) |
| YOLO26m | Mayor precisión con un consumo de recursos moderado | Lotes más pequeños (16-32) |
| YOLO26l | Alta precisión cuando hay una GPU disponible | Lotes pequeños (8-16) o varias GPU |
| YOLO26x | Máxima precisión, para despliegues en servidores | Lotes pequeños (4-8) o varias GPU |
Para consultar las opciones de exportación y despliegue, visita la guía de exportación y Opciones de despliegue de modelos.
Conclusión#
Los puntos de control de YOLO26 incluyen la receta completa de entrenamiento, así que basta con consultar train_args para conocer los hiperparámetros exactos de cualquier tamaño de modelo. Empieza el ajuste con la configuración predeterminada, haz cambios deliberados basándote en las tablas de esta página y comprueba cada cambio con tu propio conjunto de validación. Si te surge alguna duda, pregunta a la comunidad en el repositorio de Ultralytics en GitHub o en el servidor de Discord de Ultralytics.
Preguntas frecuentes#
Carga el punto de control con
torch.load()y accede a la clavetrain_args, o usamodel.ckpt["train_args"]con la API de Ultralytics. Consulta Inspección de los argumentos de entrenamiento del punto de control de YOLO26 para ver ejemplos completos.Todos los tamaños recibieron las mismas 150 épocas de preentrenamiento con Objects365, así que el recuento de COCO solo abarca la etapa de ajuste. Los modelos más grandes convergen en COCO con menos épocas: 40 en el caso de X frente a 245 en el de N. El recuento no sigue una progresión estrictamente monotónica (S usó 70 y M, 80) porque se obtuvo mediante una búsqueda de hiperparámetros para cada tamaño. Al ajustar el modelo con tu propio conjunto de datos, el número óptimo de épocas depende del tamaño y la complejidad de los datos, no del tamaño del modelo. Usa la detención temprana (
patience) para encontrar automáticamente el momento adecuado para detener el entrenamiento.Estos parámetros proceden de la rama experimental en la que se generaron los puntos de control base, y están registrados en
train_argspara garantizar la reproducibilidad. No son ajustes configurables por el usuario endefault.yaml, y si los pasas amodel.train()se produce un error de argumento no válido, porque el paquete publicado no los lee. No hace falta que los configures al ajustar el modelo; consulta Parámetros internos de entrenamiento para ver sus valores en cada tamaño de modelo.No. Cada punto de control de COCO se ajustó a partir de un punto de control de Objects365v1 del mismo tamaño que ya se había entrenado durante 150 épocas, tal como se describe en Etapa 1: preentrenamiento con Objects365 y en el artículo de YOLO26. No se realizó ningún entrenamiento de COCO desde cero para obtener las cifras publicadas, así que una comparación con esas cifras usando un modelo entrenado desde cero no sería equivalente.
Están dentro de los puntos de control y representados en Ultralytics Platform. Cada punto de control almacena el
results.csvcompleto de cada época de su ejecución, así que basta con soltar un archivo.pten un proyecto de Platform para representar las pérdidas, la evolución de mAP y las tasas de aprendizaje, sin escribir código. Consulta Visualización de las curvas de entrenamiento. La etapa de Objects365 tiene su propio registro en los puntos de controlyolo26*-objv1-150.pt.Obtendrás resultados cercanos a las métricas publicadas, pero no idénticos. Para reproducir exactamente la configuración, cambia a la revisión registrada en el punto de control y entrena en esa rama. Consulta Comprobación de la revisión del código.