Ver como Markdown

libreyolo train

Entrena un modelo sobre un dataset y escribe checkpoints, métricas y logs en un directorio de ejecución. Cada argumento de abajo tiene un valor por defecto tomado de la definición del comando, que la configuración de entrenamiento propia de cada familia de modelos puede sustituir.

Comando
libreyolo train
Requerido
data
Salida
Checkpoints, métricas y logs en runs/train/<name>; sin name=, el nombre de ejecución propio de la familia, como yolo9_exp

Sinopsis

bash
libreyolo train data=<dataset.yaml> [model=<name|path>] [key=value ...]

Los argumentos son pares key=value, y la forma POSIX también funciona, de modo que epochs=50 y --epochs 50 son el mismo argumento. Los booleanos aceptan true y false: amp=false se convierte en --no-amp cuando el flag tiene forma negativa.

Argumentos

Modelo y datos

ArgumentoPor defectoSignificado
dataRuta al YAML del dataset (formato YOLO, p. ej. coco8.yaml). Requerido
modelyolox-sNombre del modelo o ruta a los pesos
taskTarea explícita que sustituye a la detectada: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueUsar pesos preentrenados. Con false se construye la arquitectura y se entrena desde cero
allow_download_scriptsfalsePermitir Python embebido en los bloques de descarga del YAML del dataset

Bucle de entrenamiento

ArgumentoPor defectoSignificado
epochs300Épocas de entrenamiento
batch16Tamaño de batch. Con varias GPU es el batch global, repartido a partes iguales entre ellas
imgsz640Tamaño de imagen de entrenamiento: 640 (cuadrada) o 480x640 (alto x ancho)
deviceautoDispositivo: 0, cpu, mps, auto. Una lista de GPU como 0,1 o [0,1] entrena en esas GPU
workers4Workers del dataloader
cachefalseCachear imágenes para acelerar la carga de datos: ram, disk, true, false
seed0Semilla aleatoria
resumeReanudar el entrenamiento: true, o una ruta a un checkpoint
amptruePrecisión mixta automática (AMP)
amp_dtypefloat16dtype de AMP en CUDA: float16 o bfloat16
cuda_graphfalseCaptura el forward y el backward del entrenamiento en CUDA graphs. Solo una GPU y solo familias compatibles; el resto se ejecutan en modo eager
compilefalseAplica torch.compile a la red de entrenamiento: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Solo una GPU CUDA; las demás ejecuciones entrenan en modo eager con una advertencia
lorafalseFine-tuning con LoRA, para las familias transformer listadas en Notas
freezeCongelar capas: un número entero, una lista de índices o nombres de módulos

Destilación

ArgumentoPor defectoSignificado
distill_modelTeacher: un checkpoint de detector, o un id de foundation teacher como dinov2 para destilación de características del backbone
disPeso de la loss de destilación. Si no se indica, el valor publicado por defecto para ese tipo de loss
distill_loss_typemgdLoss de características para teachers de tipo detector: mgd, cwd. Los foundation teachers usan siempre feat_mse

Optimizador

ArgumentoPor defectoSignificado
optimizersgdOptimizador: sgd, adam, adamw
lr00.01Learning rate inicial
momentum0.937Momentum de SGD, y el coeficiente de primer momento para los optimizadores Adam
weight_decay0.0005Regularización L2
nesterovtrueMomentum de Nesterov
clip_max_normRecorta la norma L2 del gradiente a este valor antes de cada paso del optimizador; 0 desactiva el recorte. Si no se indica, se aplica el valor de la familia

Scheduler

ArgumentoPor defectoSignificado
scheduleryoloxwarmcosTipo de planificación del LR
warmup_epochs5Duración del warmup
warmup_lr_start0.0LR inicial del warmup
min_lr_ratio0.05Ratio de LR mínimo
lr_drop100Época de caída escalonada del LR en RF-DETR

Aumento de datos

ArgumentoPor defectoSignificado
mosaic1.0Probabilidad de mosaic
mixup1.0Probabilidad de mixup
hsv_prob1.0Probabilidad de jitter HSV
flip_prob0.5Probabilidad de volteo horizontal
degrees10.0Rango de rotación, en más y en menos, en grados
translate0.1Ratio de traslación
shear2.0Ángulo de cizalladura
mosaic_scale(0.1,2.0)Rango de escala del mosaic
mixup_scale(0.5,1.5)Rango de escala del mixup
no_aug_epochs15Desactivar el aumento de datos durante las últimas N épocas

EMA

ArgumentoPor defectoSignificado
ematrueMedia móvil exponencial
ema_decay0.9998Factor de decaimiento de la EMA

Validación durante el entrenamiento

ArgumentoPor defectoSignificado
valtrueValidar durante el entrenamiento
eval_interval10Validar cada N épocas, y tras la última época
max_det300Máximo de predicciones por imagen tras el NMS de validación
eval_max_detTope del evaluador COCO. Si no se indica, la convención AP@100 de pycocotools
faster_coco_evaltrueUsar el backend C++ faster-coco-eval para las métricas COCO cuando esté instalado; si no, recurre a pycocotools
save_plotsfalseGuardar las gráficas finales de validación durante el entrenamiento
patience50Paciencia del early stopping. 0 lo desactiva

Salida

ArgumentoPor defectoSignificado
projectruns/trainRaíz del directorio de salida
nameNombre del experimento. Si no se indica, la ejecución toma el nombre que usa train() de la familia, como yolo9_exp o dfine_exp
exist_okfalseReutilizar el directorio de salida existente
save_period10Guardar un checkpoint cada N épocas
log_interval10Registrar la loss cada N batches

Flags de agente

ArgumentoPor defectoSignificado
jsonfalseSalida JSON por stdout
quietfalseSilenciar stderr
dry_runfalseResolver e imprimir la configuración sin ejecutar
help_jsonfalseVolcar el esquema del comando como JSON y salir
ArgumentoPor defectoSignificado
min_samples0Mínimo de longitud de época para datasets pequeños: si el dataset tiene menos imágenes, extrae este número de muestras por época con reemplazo (0 = desactivado)
class_balancedFalseMuestreo con factor de repetición al estilo LVIS para datasets de cola larga (por defecto: desactivado)
cls_pw0.0Exponente de ponderación por frecuencia inversa en clasificación: 0 desactivado, 1 completo (pesos de clase con media 1; no puede combinarse con class_weights=True)
class_weightsFalsePesos heredados de la función de pérdida de clasificación, normalizados por muestra (por defecto: desactivado)
single_clsFalseEntrena un detector compatible reasignando todas las etiquetas a la clase 0
classesNoneEntrena un detector compatible solo con estos ID originales de clase del dataset, separados por comas (p. ej. '0,3,5'); las demás clases se descartan como si no estuvieran etiquetadas. Los ID se conservan, no se compactan
average_best0Promedia uniformemente los N mejores checkpoints según la métrica observada en weights/average.pt al terminar el entrenamiento (0 = desactivado)
export_checkFalseExporta ONNX antes de la época 1 y hace fallar la ejecución si la exportación falla (por defecto: desactivado)
precise_bn0Recalcula las estadísticas acumuladas de BatchNorm con este número de imágenes de entrenamiento tras la última época (0 = desactivado)
aux_weightSolo YOLO9: peso de la loss de la rama auxiliar PGI. Un valor añade una rama nueva con ese peso y 0 entrena solo la cabeza principal. Si no se indica, la rama se añade con 0.25 solo cuando los pesos traen tensores PGI o la ejecución entrena desde cero
fliplrNoneProbabilidad de volteo horizontal (alias de flip_prob usado en el ecosistema)
flipud0.0Probabilidad de volteo vertical
auto_augmentNonePolítica de autoaumento para clasificación: randaugment, autoaugment, augmix (por defecto: ninguna)
erasing0.0Probabilidad de RandomErasing en clasificación, 0 <= erasing < 1
cutmix0.0Probabilidad de CutMix en clasificación (etiquetas suaves)
scale0.5Rango de área de RandomResizedCrop en clasificación: un límite inferior float o un par explícito (min,max)
crop_pctNoneProporción de redimensionado de evaluación en clasificación antes del recorte central (por defecto: el valor nativo de la familia del modelo)
plot_samples8Imágenes de muestra en el gráfico de validación: 0 para ninguna, -1 para todas las imágenes validadas (no cambia las métricas)

Ejemplos

Básico
# coco8.yaml viene con el paquete y descarga sus 8 imágenes en el primer uso.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
Comprobar primero la configuración resuelta
# Imprime lo que usaría la ejecución, incluidos los valores por defecto de# la familia, y sale sin entrenar ni cargar datos.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
Ejecución con nombre y receta explícita
libreyolo train model=LibreYOLO9s.pt data=coco8.yaml \  epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \  patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=true

Notas

Los valores por defecto de arriba no siempre son los que se usan

Cada familia de modelos lleva su propia configuración de entrenamiento y, allí donde esa configuración difiere de la base, su valor sustituye al valor por defecto del comando para cualquier argumento que no hayas fijado explícitamente. Fijar tú mismo el argumento gana siempre. libreyolo cfg imprime los valores por defecto base y las sustituciones de cada familia, que es la forma de ver qué usará realmente una familia dada.

imgsz es el argumento donde más importa. El valor por defecto del comando es 640, que no es la entrada nativa de todos los checkpoints: los tamaños de detección publicados de RF-DETR son 384, 512, 576 y 704, y los checkpoints n y t de YOLOX son de 416. RF-DETR y DEIMv2 se tratan pasándoles imgsz solo cuando se ha fijado explícitamente, de modo que en los demás casos sigue vigente su propio tamaño. A las otras familias se les entrega el valor tal cual y entrenan con él. FOMO es la estricta: cada tamaño acepta únicamente su entrada nativa (96, 192 y 224), así que una ejecución de FOMO necesita imgsz fijado para que coincida o se detiene con un error. RF-DETR exige además que el valor sea divisible por su tamaño de patch multiplicado por su número de ventanas, e informa de los dos tamaños válidos más cercanos cuando no lo es.

Argumentos que una familia ignora

No todas las familias leen todos los argumentos, y donde más se nota es en los del aumento de datos. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 y DINOv2 entrenan con pipelines de paso directo, sin mosaic, sin mixup y sin deformación afín, así que ahí mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale y mixup_scale no llegan a nada. EC comparte ese pipeline, pero sí lee hsv_prob, degrees y translate cuando su tarea es pose. Las familias de clasificación ignoran ese conjunto salvo mixup, que para ellas es MixUp por batch, y leen flip_prob. SegFormer, LingBot-Vision y NAFNet ignoran todo ese conjunto y flip_prob con él, porque su volteo se aplica con una probabilidad fija en lugar de una configurable. YOLO-NAS ignora solo mosaic, ya que en su lugar aumenta con una transformación afín por muestra siempre activa. RF-DETR ignora tres más además de esa lista: optimizer, momentum y nesterov.

Fijar uno de estos no es un error. La ejecución escribe una línea en stderr con el nombre de la familia y los argumentos que va a ignorar, y a continuación entrena; esa línea es la lista autoritativa para la versión instalada. También es la única señal, así que una ejecución con quiet=true dentro de un script silencia el aviso junto con todo lo demás que va a stderr.

val=false es un caso relacionado. Pone eval_interval a 0, lo que desactiva la validación durante el entrenamiento, última época incluida, y la ejecución no escribe best.pt.

Otros comportamientos que conviene conocer

lora=true lo aceptan RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 y v4, EC, GTR y ConvNeXt. Cualquier otra familia sale con config_unsupported en lugar de entrenar sin ello.

clip_max_norm lo aceptan las familias cuya configuración de entrenamiento lo declara: YOLOv9, YOLOv9-E2E y YOLOv9-P2, donde vale 10 por defecto, y D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR, DINOv2 y GTR, donde vale 0.1 por defecto. Cualquier otra familia sale con config_unsupported, y un valor negativo o no finito sale con config_type_error.

device=0,1 construye el modelo en la primera GPU de la lista y pasa la lista a train(), que arranca un proceso por GPU. Consulta entrenamiento multi-GPU.

RF-DETR no tiene transferencia de detección a segmentación. task=segment con un checkpoint de segmentación de RF-DETR carga ese checkpoint sea cual sea su nombre de fichero, porque los metadatos del checkpoint deciden la tarea, mientras que un checkpoint de detección se detiene con un error en lugar de entrenar una cabeza de máscaras sin entrenar.

pretrained=false combinado con resume se rechaza en las familias que admiten el entrenamiento desde cero, ya que ambos piden cosas opuestas.

mosaic y mixup son las grafías de línea de comandos de los campos de configuración mosaic_prob y mixup_prob; en un modelo de clasificación, mixup es en cambio MixUp por batch. En las familias cuyo mixup solo se aplica a las muestras de mosaic, un mixup por encima de cero con mosaic a cero no se activa nunca, y la ejecución lo indica.

dry_run=true resuelve la referencia del modelo, aplica los valores por defecto de la familia e imprime la configuración con la que entrenaría. No carga el dataset, así que es la forma barata de confirmar que un argumento ha llegado al valor que esperabas.

stdout lleva el objeto de resultado final; el progreso y los avisos van a stderr. El código de salida es 0 si todo va bien, 2 ante un error de uso o de configuración, 3 cuando no se encuentra o no se puede leer el dataset, 4 cuando no se puede cargar el modelo, y 1 para el resto de fallos en tiempo de ejecución.

Relacionado: libreyolo doctor para comprobar un dataset antes de comprometerte con una ejecución, libreyolo monitor para seguir una ejecución en el navegador, libreyolo val para medir el resultado.

Verificado con LibreYOLO v1.6.0.