libreyolo train

Addestra un modello su un dataset e scrive checkpoint, metriche e log in una directory di esecuzione. Ogni argomento qui sotto ha un valore predefinito preso dalla definizione del comando, che la configurazione di addestramento propria di una famiglia di modelli può sostituire.

Comando
libreyolo train
Obbligatorio
data
Output
Checkpoint, metriche e log in runs/train/<name>; senza name=, il nome di run proprio della famiglia, come yolo9_exp

Sinossi

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

Gli argomenti sono coppie key=value, e funziona anche la forma POSIX, quindi epochs=50 e --epochs 50 sono lo stesso argomento. I booleani accettano true e false: amp=false diventa --no-amp dove il flag ha una forma negativa.

Argomenti

Modello e dati

ArgomentoPredefinitoSignificato
dataPercorso dello YAML del dataset (formato YOLO, ad esempio coco8.yaml). Obbligatorio
modelyolox-sNome del modello o percorso dei pesi
taskOverride esplicito del task: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueUsa pesi preaddestrati. false costruisce l'architettura e addestra da zero
allow_download_scriptsfalseConsente il Python incorporato nei blocchi di download dello YAML del dataset

Ciclo di addestramento

ArgomentoPredefinitoSignificato
epochs300Epoche di addestramento
batch16Dimensione del batch. Con più GPU è il batch globale, diviso in parti uguali tra le GPU
imgsz640Dimensione delle immagini di addestramento: 640 (quadrata) o 480x640 (altezza x larghezza)
deviceautoDispositivo: 0, cpu, mps, auto. Una lista di GPU come 0,1 o [0,1] addestra su quelle GPU
workers4Worker del dataloader
cachefalseMette in cache le immagini per velocizzare il caricamento dei dati: ram, disk, true, false
seed0Seed casuale
resumeRiprende l'addestramento: true, oppure il percorso di un checkpoint
amptrueAutomatic Mixed Precision
amp_dtypefloat16Tipo di dato dell'AMP su CUDA: float16 o bfloat16
cuda_graphfalseCattura il forward e il backward dell'addestramento in CUDA graph. Solo GPU singola e solo per le famiglie supportate; le altre girano in modalità eager
compilefalseApplica torch.compile alla rete di addestramento: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Solo una GPU CUDA; le altre esecuzioni addestrano in modalità eager con un avviso
lorafalseFine-tuning con LoRA, per le famiglie transformer elencate nelle Note
freezeCongela i layer: un numero intero, una lista di indici o nomi di moduli

Distillazione

ArgomentoPredefinitoSignificato
distill_modelInsegnante: un checkpoint di un rilevatore, oppure l'id di un foundation teacher come dinov2 per la distillazione delle feature del backbone
disPeso della loss di distillazione. Se non impostato, il valore pubblicato per quel tipo di loss
distill_loss_typemgdLoss sulle feature per gli insegnanti rilevatori: mgd, cwd. I foundation teacher usano sempre feat_mse

Ottimizzatore

ArgomentoPredefinitoSignificato
optimizersgdOttimizzatore: sgd, adam, adamw
lr00.01Learning rate iniziale (tasso di apprendimento)
momentum0.937Momento di SGD, e coefficiente del primo momento per gli ottimizzatori Adam
weight_decay0.0005Regolarizzazione L2
nesterovtrueMomento di Nesterov
clip_max_normLimita la norma L2 del gradiente a questo valore prima di ogni passo dell'ottimizzatore; 0 disattiva il clipping. Se non impostato, vale il valore della famiglia

Scheduler

ArgomentoPredefinitoSignificato
scheduleryoloxwarmcosTipo di schedule del learning rate
warmup_epochs5Durata del warmup
warmup_lr_start0.0Learning rate iniziale del warmup
min_lr_ratio0.05Rapporto minimo del learning rate
lr_drop100Epoca del calo a gradino del learning rate di RF-DETR

Augmentation

ArgomentoPredefinitoSignificato
mosaic1.0Probabilità del mosaic
mixup1.0Probabilità del mixup
hsv_prob1.0Probabilità del jitter HSV
flip_prob0.5Probabilità del flip orizzontale
degrees10.0Intervallo di rotazione, in più e in meno, in gradi
translate0.1Rapporto di traslazione
shear2.0Angolo di shear
mosaic_scale(0.1,2.0)Intervallo di scala del mosaic
mixup_scale(0.5,1.5)Intervallo di scala del mixup
no_aug_epochs15Disattiva la data augmentation per le ultime N epoche

EMA

ArgomentoPredefinitoSignificato
ematrueMedia mobile esponenziale
ema_decay0.9998Fattore di decadimento dell'EMA

Validazione durante l'addestramento

ArgomentoPredefinitoSignificato
valtrueValida durante l'addestramento
eval_interval10Valida ogni N epoche e dopo l'ultima epoca
max_det300Numero massimo di predizioni per immagine dopo la NMS di validazione
eval_max_detLimite del valutatore COCO. Se non impostato, la convenzione AP@100 di pycocotools
faster_coco_evaltrueUsa il backend C++ faster-coco-eval per le metriche COCO quando è installato; altrimenti ricade su pycocotools
save_plotsfalseSalva i grafici della validazione finale durante l'addestramento
patience50Pazienza dell'early stopping. 0 lo disattiva

Output

ArgomentoPredefinitoSignificato
projectruns/trainDirectory radice di output
nameNome dell'esperimento. Se non impostato, l'esecuzione prende il nome usato dal train() della famiglia, come yolo9_exp o dfine_exp
exist_okfalseRiusa la directory di output esistente
save_period10Salva un checkpoint ogni N epoche
log_interval10Registra la loss ogni N batch

Flag per agenti

ArgomentoPredefinitoSignificato
jsonfalseOutput JSON su stdout
quietfalseSopprime stderr
dry_runfalseRisolve e stampa la configurazione senza eseguire
help_jsonfalseStampa lo schema del comando in JSON ed esce
ArgomentoDefaultSignificato
min_samples0Lunghezza minima dell'epoca per dataset piccoli: quando il dataset ha meno immagini, estrae questo numero di campioni per epoca con reinserimento (0 = disattivato)
class_balancedFalseCampionamento con fattore di ripetizione in stile LVIS per dataset a coda lunga (default: disattivato)
cls_pw0.0Esponente della ponderazione inversa alla frequenza per la classificazione: 0 disattivata, 1 completa (pesi di classe a media uno; non combinabile con class_weights=True)
class_weightsFalsePesi della loss di classificazione precedenti, normalizzati sui campioni (default: disattivati)
single_clsFalseAddestra un rilevatore supportato rimappando ogni etichetta alla classe 0
classesNoneAddestra un rilevatore supportato solo su questi ID originali di classe del dataset, separati da virgole (es. '0,3,5'); ogni altra classe viene scartata come se non fosse etichettata. Gli ID restano invariati, senza essere compattati
average_best0Calcola la media uniforme degli N checkpoint migliori secondo la metrica monitorata in weights/average.pt al termine dell'addestramento (0 = disattivato)
export_checkFalseEsporta ONNX prima dell'epoca 1 e interrompe l'esecuzione se l'esportazione fallisce (default: disattivato)
precise_bn0Ricalcola le statistiche correnti di BatchNorm da questo numero di immagini di addestramento dopo l'ultima epoca (0 = disattivato)
aux_weightSolo YOLO9: peso della loss del ramo ausiliario PGI. Un valore collega un nuovo ramo con quel peso e 0 addestra solo la testa principale. Se non impostato, il ramo viene collegato a 0.25 solo quando i pesi contengono tensori PGI o l'esecuzione parte da zero
fliplrNoneProbabilità di ribaltamento orizzontale (alias di ecosistema di flip_prob)
flipud0.0Probabilità di ribaltamento verticale
auto_augmentNoneRegola di auto-augmentation per classificazione: randaugment, autoaugment, augmix (default: nessuna)
erasing0.0Probabilità RandomErasing per classificazione, 0 <= erasing < 1
cutmix0.0Probabilità CutMix per classificazione (etichette soft)
scale0.5Intervallo di area RandomResizedCrop per classificazione: limite inferiore float o coppia esplicita (min,max)
crop_pctNoneRapporto di ridimensionamento nella valutazione della classificazione prima del ritaglio centrale (default: valore nativo della famiglia del modello)
plot_samples8Immagini nel grafico dei campioni di validazione: 0 per nessuna, -1 per ogni immagine validata (non modifica le metriche)

Esempi

Base
# coco8.yaml è incluso nel pacchetto e scarica le sue 8 immagini al primo uso.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
Controllare prima la configurazione risolta
# Stampa quello che l'esecuzione userebbe, valori predefiniti della famiglia# inclusi, ed esce senza addestrare né caricare dati.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
Esecuzione con nome e ricetta esplicita
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

Note

I valori predefiniti qui sopra non sono sempre quelli usati

Ogni famiglia di modelli porta con sé la propria configurazione di addestramento, e dove quella configurazione differisce da quella di base, il suo valore sostituisce il valore predefinito del comando per ogni argomento che non hai impostato esplicitamente. Impostare l'argomento tu vince sempre. libreyolo cfg stampa i valori predefiniti di base e le sostituzioni per famiglia, ed è il modo per vedere che cosa userà davvero una data famiglia.

imgsz è l'argomento per cui questo conta di più. Il valore predefinito del comando è 640, che non è l'input nativo di ogni checkpoint: le dimensioni pubblicate per il rilevamento con RF-DETR sono 384, 512, 576 e 704, e i checkpoint YOLOX n e t sono a 416. RF-DETR e DEIMv2 sono gestiti inoltrando imgsz solo quando è stato impostato esplicitamente, così altrimenti resta in vigore la loro dimensione. Alle altre famiglie il valore arriva così com'è e ci addestrano sopra. FOMO è la famiglia rigida: ogni dimensione accetta solo il proprio input nativo (96, 192 e 224), quindi un addestramento FOMO ha bisogno di imgsz impostato di conseguenza, altrimenti si ferma con un errore. RF-DETR richiede anche che il valore sia divisibile per la dimensione delle sue patch moltiplicata per il numero delle sue finestre, e quando non lo è riporta le due dimensioni valide più vicine.

Argomenti che una famiglia ignora

Non tutte le famiglie leggono tutti gli argomenti, e quelli della data augmentation sono il caso in cui si nota di più. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 e DINOv2 si addestrano con pipeline pass-through senza mosaic, senza mixup e senza warp affine, quindi lì mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale e mixup_scale non raggiungono nulla. EC condivide quella pipeline ma legge hsv_prob, degrees e translate quando il suo task è la stima della posa. Le famiglie di classificazione ignorano quell'insieme tranne mixup, che per loro è MixUp a livello di batch, e leggono flip_prob. SegFormer, LingBot-Vision e NAFNet ignorano tutto quell'insieme e con esso flip_prob, perché il loro flip gira a una probabilità fissa e non configurabile. YOLO-NAS ignora solo mosaic, dato che al suo posto fa data augmentation con una trasformazione affine per campione sempre attiva. RF-DETR ne ignora altri tre oltre a quella lista: optimizer, momentum e nesterov.

Impostarne uno non è un errore. L'esecuzione scrive una riga su stderr con il nome della famiglia e gli argomenti che ignorerà, poi addestra, e quella riga è la lista autorevole per la versione installata. È anche l'unico segnale, quindi un'esecuzione da script con quiet=true sopprime l'avviso insieme a tutto il resto su stderr.

val=false è un caso collegato. Imposta eval_interval a 0, che disattiva la validazione durante l'addestramento, ultima epoca inclusa, e l'esecuzione non scrive best.pt.

Altri comportamenti da conoscere

lora=true è accettato da RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 e v4, EC, GTR e ConvNeXt. Qualsiasi altra famiglia esce con config_unsupported invece di addestrare senza LoRA.

clip_max_norm è accettato dalle famiglie la cui configurazione di addestramento lo dichiara: YOLOv9, YOLOv9-E2E e YOLOv9-P2, dove vale 10 di default, e D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR, DINOv2 e GTR, dove vale 0.1. Qualsiasi altra famiglia esce con config_unsupported, e un valore negativo o non finito esce con config_type_error.

device=0,1 costruisce il modello sulla prima GPU elencata e passa la lista a train(), che avvia un processo per GPU. Vedi addestramento multi-GPU.

RF-DETR non ha il trasferimento da detect a segment. task=segment con un checkpoint di segmentazione RF-DETR carica quel checkpoint qualunque sia il nome del file, perché è il metadato del checkpoint a decidere il task, mentre un checkpoint di rilevamento si ferma con un errore invece di addestrare una testa di maschere non addestrata.

pretrained=false combinato con resume viene rifiutato per le famiglie che supportano l'addestramento da zero, dato che i due chiedono cose opposte.

mosaic e mixup sono la scrittura da riga di comando dei campi di configurazione mosaic_prob e mixup_prob; su un modello di classificazione mixup è invece MixUp a livello di batch. Nelle famiglie il cui mixup si applica solo ai campioni con mosaic, mixup sopra zero con mosaic a zero non scatta mai, e l'esecuzione lo dice.

dry_run=true risolve il riferimento al modello, applica i valori predefiniti della famiglia e stampa la configurazione con cui addestrerebbe. Non carica il dataset, quindi è il modo economico per confermare che un argomento sia arrivato al valore che ti aspettavi.

stdout porta l'oggetto con il risultato finale; avanzamento e avvisi vanno su stderr. Il codice di uscita è 0 in caso di successo, 2 per un errore d'uso o di configurazione, 3 quando il dataset non si trova o non si può leggere, 4 quando il modello non si può caricare, e 1 per gli altri errori a runtime.

Correlati: libreyolo doctor per controllare un dataset prima di impegnarsi in un addestramento, libreyolo monitor per seguire un'esecuzione nel browser, libreyolo val per misurare il risultato.

Verificato con LibreYOLO v1.6.0.