Addestramento dei modelli con Ultralytics YOLO#
Introduzione#
L'addestramento di un modello di deep learning consiste nel fornirgli dati e modificarne i parametri affinché possa effettuare predizioni accurate. La modalità train di Ultralytics YOLO26 è progettata per addestrare modelli di rilevamento degli oggetti in modo efficace ed efficiente, sfruttando appieno le capacità dell'hardware moderno. Questa guida illustra tutti i dettagli necessari per iniziare ad addestrare i tuoi modelli con il robusto insieme di funzionalità di YOLO26. Se non hai ancora installato Ultralytics, inizia con la guida introduttiva.
Consulta l'anteprima non ancora rilasciata di YOLO27 per gli esempi di addestramento previsti.
Guarda: Come addestrare un modello YOLO sul tuo dataset personalizzato in Google Colab.
Perché scegliere Ultralytics YOLO per l'addestramento?#
Ecco alcuni validi motivi per scegliere la modalità Train di YOLO26:
- Efficienza: sfrutta al massimo il tuo hardware, che tu utilizzi una singola GPU o distribuisca il carico su più GPU.
- Versatilità: addestra i modelli su dataset personalizzati, oltre che su quelli facilmente disponibili come COCO, VOC e ImageNet.
- Facilità d'uso: interfacce CLI e Python semplici ma potenti, per un'esperienza di addestramento immediata.
- Flessibilità degli iperparametri: un'ampia gamma di iperparametri personalizzabili per ottimizzare le prestazioni del modello. Per un controllo più approfondito, puoi personalizzare il trainer.
- Addestramento nel cloud: addestra i modelli su GPU cloud tramite la piattaforma Ultralytics, con metriche in tempo reale e salvataggio automatico dei checkpoint.
Funzionalità principali della modalità Train#
Ecco alcune funzionalità degne di nota della modalità Train di YOLO26:
- Download automatico dei dataset: le configurazioni dei dataset con una fonte di download vengono scaricate automaticamente al primo utilizzo, ad esempio
yolo train data=coco8.yaml. Consulta la panoramica dei dataset per conoscere i formati e i dataset supportati. - Supporto multi-GPU: distribuisci senza problemi l'addestramento su più GPU per accelerare il processo.
- Configurazione degli iperparametri: puoi modificare gli iperparametri tramite file di configurazione YAML o argomenti CLI.
- Visualizzazione e monitoraggio: monitoraggio in tempo reale delle metriche di addestramento e visualizzazione del processo di apprendimento per ottenere informazioni più utili.
Esempi d'uso#
Addestra YOLO26n sul dataset COCO8 per 100 epoche con dimensione dell'immagine pari a 640. Puoi specificare il dispositivo di addestramento usando l'argomento device. Se non passi alcun argomento, verrà usata la GPU device=0 se disponibile; altrimenti verrà usata device='cpu'. Consulta la sezione Argomenti qui sotto per l'elenco completo degli argomenti di addestramento.
Su Windows, quando avvii l'addestramento come script, potresti ricevere un RuntimeError. Per risolvere il problema, aggiungi un blocco if __name__ == "__main__": prima del codice di addestramento.
Il dispositivo viene determinato automaticamente. Se è disponibile una GPU, verrà usata (dispositivo CUDA 0 predefinito); altrimenti, l'addestramento verrà avviato sulla CPU.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.yaml") # crea un nuovo modello dal file YAML
model = YOLO("yolo26n.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # crea dal file YAML e trasferisci i pesi
# Addestra il modello
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Addestramento multi-GPU#
L'addestramento multi-GPU consente di utilizzare in modo più efficiente le risorse hardware disponibili, distribuendo il carico di addestramento su più GPU. Questa funzionalità è disponibile sia tramite l'API Python sia tramite l'interfaccia a riga di comando. Per attivare l'addestramento multi-GPU, specifica gli ID dei dispositivi GPU che vuoi usare.
Per addestrare il modello con 2 GPU, usando i dispositivi CUDA 0 e 1, esegui i comandi seguenti. Se necessario, puoi estendere la configurazione a più GPU.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
# Addestra il modello con 2 GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Addestra il modello con le due GPU meno occupate
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'addestramento multi-GPU non funziona su Windows con le wheel ufficiali di PyTorch per torch>=2.4. Ultralytics avvia DDP tramite torch.distributed.run, il cui passaggio di rendezvous crea un TCPStore che, a partire da PyTorch 2.4, usa per impostazione predefinita il backend libuv; le wheel ufficiali per Windows sono invece compilate senza libuv. L'addestramento termina immediatamente con:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
Impostare USE_LIBUV=0 non risolve il problema, perché il rendezvous crea direttamente TCPStore e quel percorso del codice non legge mai la variabile. Per usare più GPU, addestra il modello su Linux o WSL2; in alternativa, su Windows, addestralo su una singola GPU con device=0.
Quando specifichi più dispositivi (ad esempio, device=[0, 1]), Ultralytics avvia internamente una nuova istanza del trainer ed esegue torch.distributed.run dietro le quinte. Questo funziona senza problemi con l'uso standard della CLI e con gli script Python non modificati.
Tuttavia, se lo script contiene componenti personalizzati, come un trainer, un validator, un dataset o una pipeline di augmentation personalizzati, questi oggetti non possono essere serializzati e trasferiti automaticamente ai sottoprocessi DDP. In questo caso, devi avviare direttamente lo script con torch.distributed.run:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyL'addestramento su GPU AMD usa una build di PyTorch con ROCm, con la sintassi standard device=0 o device=cuda:0. Consulta la guida all'integrazione AMD per informazioni sull'installazione di ROCm, l'addestramento multi-GPU e le note su AMP, oltre che sull'inferenza MIGraphX dei modelli esportati.
L'addestramento su GPU Intel usa device=xpu:0 oppure più ID XPU con una build di PyTorch che supporti XCCL.
Addestramento su NPU Huawei Ascend#
Ultralytics supporta l'addestramento e la convalida su NPU Huawei Ascend tramite torch_npu. Installa versioni compatibili tra loro di CANN, PyTorch e torch_npu seguendo la guida all'installazione di Ascend Extension for PyTorch, quindi carica l'ambiente CANN prima di avviare Ultralytics:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Addestra su una NPU Ascend
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Addestra su due NPU Ascend con HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")Le funzionalità standard di addestramento, tra cui AMP, convalida, salvataggio dei checkpoint e ripresa, usano la NPU attiva. AutoBatch è disponibile per l'addestramento su una singola NPU, mentre più ID NPU avviano l'addestramento distribuito tramite HCCL. Consulta la guida all'integrazione di Huawei Ascend per informazioni sull'esportazione e il deployment del modello dopo l'addestramento.
Addestramento su GPU inattive#
L'addestramento su GPU inattive seleziona automaticamente le GPU meno utilizzate nei sistemi multi-GPU, ottimizzando l'uso delle risorse senza dover scegliere manualmente le GPU. Questa funzionalità individua le GPU disponibili in base alle metriche di utilizzo e alla disponibilità di VRAM.
Per selezionare e usare automaticamente la GPU o le GPU meno occupate per l'addestramento, usa il parametro device -1. Questa opzione è particolarmente utile negli ambienti di calcolo condivisi o sui server con più utenti.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
# Addestra usando la GPU meno occupata
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Addestra usando le due GPU meno occupate
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'algoritmo di selezione automatica dà priorità alle GPU con:
- Percentuali di utilizzo attuale inferiori
- Maggiore memoria disponibile (VRAM libera)
Questa funzionalità è particolarmente utile negli ambienti di calcolo condivisi o quando si eseguono più processi di addestramento su modelli diversi. Si adatta automaticamente alle condizioni mutevoli del sistema, garantendo un'allocazione ottimale delle risorse senza interventi manuali.
Addestramento MPS su Apple Silicon#
Grazie al supporto integrato per i chip Apple Silicon nei modelli Ultralytics YOLO, ora puoi addestrare i tuoi modelli su dispositivi che usano il potente framework Metal Performance Shaders (MPS). MPS offre un metodo ad alte prestazioni per eseguire calcoli e attività di elaborazione delle immagini sui chip proprietari di Apple.
Per attivare l'addestramento sui chip Apple Silicon, specifica 'mps' come dispositivo quando avvii il processo di addestramento. Ecco un esempio di come farlo in Python e tramite la riga di comando:
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
# Addestra il modello con MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Sfruttando la potenza di calcolo dei chip Apple Silicon, puoi elaborare le attività di addestramento in modo più efficiente. Per indicazioni più dettagliate e opzioni di configurazione avanzate, consulta la documentazione di PyTorch MPS.
Ripresa degli addestramenti interrotti#
Riprendere l'addestramento da uno stato salvato in precedenza è una funzionalità fondamentale quando si lavora con modelli di deep learning. Può tornare utile in vari scenari, ad esempio quando il processo di addestramento viene interrotto inaspettatamente o quando vuoi continuare ad addestrare un modello con nuovi dati o per più epoche.
Quando l'addestramento viene ripreso, Ultralytics YOLO carica i pesi dell'ultimo modello salvato e ripristina anche lo stato dell'ottimizzatore, lo scheduler del tasso di apprendimento, il numero di epoche e il dataset. In questo modo puoi continuare il processo di addestramento senza interruzioni dal punto in cui era stato interrotto. Passa un data= esplicito insieme a resume per continuare con un dataset diverso da quello del checkpoint.
Puoi riprendere facilmente l'addestramento in Ultralytics YOLO impostando l'argomento resume su True quando chiami il metodo train e specificando il percorso del file .pt contenente i pesi del modello parzialmente addestrato.
Di seguito è riportato un esempio di come riprendere un addestramento interrotto usando Python e la riga di comando:
from ultralytics import YOLO
# Carica un modello
model = YOLO("path/to/last.pt") # carica un modello parzialmente addestrato
# Riprendi l'addestramento
results = model.train(resume=True)Impostando resume=True, la funzione train continuerà l'addestramento dal punto in cui era stato interrotto, usando lo stato memorizzato nel file 'path/to/last.pt'. Se l'argomento resume viene omesso o impostato su False, la funzione train avvierà una nuova sessione di addestramento.
Ricorda che, per impostazione predefinita, i checkpoint vengono salvati alla fine di ogni epoca o a intervalli fissi usando l'argomento save_period, quindi devi completare almeno 1 epoca per riprendere un'esecuzione di addestramento.
Impostazioni di Train#
Le impostazioni di addestramento dei modelli YOLO comprendono vari iperparametri e configurazioni usati durante il processo di addestramento. Queste impostazioni influenzano le prestazioni, la velocità e la precisione del modello. Tra le impostazioni di addestramento principali figurano la dimensione del batch, il tasso di apprendimento, il momentum e il weight decay. Anche la scelta dell'ottimizzatore, della funzione di perdita e della composizione del dataset di addestramento può influire sul processo. Una regolazione accurata e la sperimentazione con queste impostazioni sono fondamentali per ottimizzare le prestazioni.
Ottimizzatore MuSGD#
In YOLO26, MuSGD è un ottimizzatore ibrido che combina gli aggiornamenti standard di SGD con gli aggiornamenti ortogonalizzati in stile Muon.
È consigliato per le sessioni di addestramento di YOLO26 più lunghe e per i dataset più grandi, in cui gli aggiornamenti ortogonalizzati di Muon possono contribuire a stabilizzare l'ottimizzazione.
Solo i pesi lineari 2D e i filtri convoluzionali 4D (rimodellati in 2D) ricevono l'aggiornamento in stile Muon insieme a SGD, mentre tutti gli altri parametri, come i pesi della normalizzazione del batch e i termini di bias, continuano a usare SGD standard.
Quando si usa optimizer=auto, Ultralytics seleziona automaticamente MuSGD per le sessioni di addestramento più lunghe (in genere quando le iterazioni > 10000). Per le sessioni più brevi, il trainer passa a AdamW. In modalità auto, il trainer seleziona anche il tasso di apprendimento, quindi un valore lr0 fornito dall'utente viene ignorato. Per controllare manualmente queste impostazioni, seleziona esplicitamente un ottimizzatore, ad esempio optimizer=AdamW lr0=0.001.
Esempio d'uso:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDConsulta l'implementazione in ultralytics/optim/muon.py e la logica di selezione automatica dell'ottimizzatore in BaseTrainer.build_optimizer.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
model | str | None | Specifica il file del modello da usare per l'addestramento. Accetta il percorso di un modello pretrained .pt oppure di un file di configurazione .yaml. È essenziale per definire la struttura del modello o inizializzare i pesi. |
data | str | None | Percorso del file YAML del dataset (ad es. coco8.yaml), che contiene i percorsi dei dati di addestramento e dei dati di convalida, i nomi delle classi e il numero di classi. Per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato (ad es. imagenet10). |
epochs | int | 100 | Numero totale di epoche di addestramento. Ogni epoca corrisponde a un passaggio completo sull'intero dataset. Modificare questo valore può influire sulla durata dell'addestramento e sulle prestazioni del modello. |
time | float | None | Durata massima dell'addestramento in ore. Se impostata, questa opzione sostituisce l'argomento epochs e consente di interrompere automaticamente l'addestramento dopo la durata specificata. Utile per gli scenari di addestramento con limiti di tempo. |
patience | int | 100 | Numero di epoche da attendere senza miglioramenti nelle metriche di convalida prima di interrompere anticipatamente l'addestramento. Aiuta a prevenire l'overfitting interrompendo l'addestramento quando le prestazioni raggiungono un plateau. |
batch | int o float | 16 | Dimensione del batch, con tre modalità: imposta un valore intero (ad es. batch=16), usa la modalità automatica per un utilizzo del 60% della memoria GPU (batch=-1) oppure la modalità automatica con la frazione di utilizzo specificata (batch=0.70). |
imgsz | int | 640 | Dimensione delle immagini di destinazione per l'addestramento. Le immagini vengono ridimensionate a quadrati con lati pari al valore specificato (se rect=False); i modelli YOLO mantengono le proporzioni, mentre RT-DETR no. Influisce sulla precisione del modello e sulla complessità computazionale. |
save | bool | True | Consente di salvare i checkpoint di addestramento e i pesi finali del modello. Utile per riprendere l'addestramento o per la distribuzione del modello. |
save_period | int | -1 | Frequenza di salvataggio dei checkpoint del modello, specificata in epoche. Il valore -1 disattiva questa funzione. Utile per salvare modelli intermedi durante sessioni di addestramento prolungate. |
cache | bool o str | False | Consente di memorizzare nella cache le immagini del dataset in memoria (True/ram), su disco (disk) oppure di disattivare la cache (False). Aumenta la velocità di addestramento riducendo le operazioni di I/O su disco, a fronte di un maggiore utilizzo della memoria. |
device | int o str o list | None | Specifica i dispositivi di calcolo per l'addestramento: una singola GPU (device=0), più GPU (device=[0,1]), CPU (device=cpu), MPS per Apple silicon (device=mps), NPU Huawei Ascend (device=npu:0 o device=npu:0,1), Intel XPU (device=xpu:0), oppure la selezione automatica di una GPU inattiva (device=-1) o di più GPU inattive (device=[-1,-1]). |
workers | int | 8 | Numero di thread worker per il caricamento dei dati (per RANK nell'addestramento Multi-GPU). Influisce sulla velocità della preelaborazione dei dati e del loro invio al modello; è particolarmente utile nelle configurazioni multi-GPU. |
project | str | None | Nome della directory del progetto in cui vengono salvati gli output dell'addestramento. Consente di organizzare le diverse prove. |
name | str | None | Nome dell'esecuzione di addestramento. Viene usato per creare una sottodirectory nella cartella del progetto, dove vengono archiviati i log e gli output dell'addestramento. |
exist_ok | bool | False | Se è True, consente di sovrascrivere una directory progetto/nome già esistente. Utile per sperimentare in modo iterativo senza dover eliminare manualmente gli output precedenti. |
save_dir | str | None | Specifica la directory esatta in cui salvare gli output dell'esecuzione, sostituendo la combinazione project/name. Il percorso viene usato così com'è, senza incrementi automatici; le esecuzioni consecutive riutilizzano quindi la stessa directory. |
pretrained | bool o str | True | Determina se avviare l'addestramento da pesi pretrained. Può essere un valore booleano o il percorso stringa dei pesi da caricare. pretrained=False avvia l'addestramento con pesi inizializzati casualmente, mantenendo l'architettura del modello. |
cls_remap | bool | True | Quando esegui il fine-tuning su dataset diversi, copia le righe della testa di classificazione pretrained nel nuovo modello per le classi con lo stesso nome, così le classi corrispondenti mantengono il bias appreso e, se la larghezza della testa non cambia, anche i pesi. Si applica sia quando il numero di classi è diverso, sia quando è uguale ma l'ordine delle classi cambia. |
optimizer | str | 'auto' | Scelta dell'ottimizzatore per l'addestramento. Le opzioni includono SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp o auto per scegliere AdamW o MuSGD in base al numero di iterazioni di addestramento. Influisce sulla velocità e sulla stabilità della convergenza. |
seed | int | 0 | Imposta il seed casuale per l'addestramento, garantendo la riproducibilità dei risultati tra esecuzioni con le stesse configurazioni. |
deterministic | bool | True | Forza l'uso di algoritmi deterministici, garantendo la riproducibilità, ma può influire sulle prestazioni e sulla velocità a causa dell'esclusione degli algoritmi non deterministici. |
verbose | bool | True | Abilita l'output dettagliato durante l'addestramento, mostrando barre di avanzamento, metriche per epoca e informazioni aggiuntive sull'addestramento nella console. |
single_cls | bool | False | Tratta tutte le classi dei dataset multi-classe come un'unica classe durante l'addestramento. Utile per le attività di classificazione binaria o quando interessa rilevare la presenza di oggetti anziché classificarli. |
classes | list[int] | None | Specifica un elenco di ID delle classi su cui addestrare il modello. Utile per filtrare le classi e concentrarsi solo su alcune durante l'addestramento. |
rect | bool | False | Abilita la strategia di padding minimo: le immagini di un batch vengono sottoposte al padding minimo necessario per raggiungere una dimensione comune, con il lato più lungo pari a imgsz. Può migliorare l'efficienza e la velocità, ma può influire sulla precisione del modello. Il trainer YOLO standard usa rect=True per la validazione di detect, segment, pose e OBB, indipendentemente da questa impostazione. |
multi_scale | float | 0.0 | Varia casualmente imgsz a ogni batch di +/- multi_scale (ad es. 0.25 -> 0.75x a 1.25x), arrotondando ai multipli dello stride del modello; 0.0 disattiva l'addestramento multi-scala. |
cos_lr | bool | False | Usa uno scheduler del tasso di apprendimento cosinusoidale, che regola il tasso di apprendimento seguendo una curva cosinusoidale nel corso delle epoche. Aiuta a gestire il tasso di apprendimento per ottenere una convergenza migliore. |
close_mosaic | int | 10 | Disattiva l'aumento dei dati mosaic nelle ultime N epoche per stabilizzare l'addestramento prima del termine. Imposta a 0 per disattivare questa funzione. |
resume | bool | False | Riprende l'addestramento dall'ultimo checkpoint salvato. Carica automaticamente i pesi del modello, lo stato dell'ottimizzatore e il numero di epoche, proseguendo l'addestramento senza interruzioni. |
amp | bool o str | True | Imposta la precisione di addestramento: True o "fp16" usa FP16, "bf16" usa BF16 sui dispositivi CUDA supportati e False o "fp32" usa FP32. |
quantize | int o str | None | Imposta 8 (o "int8") per l'addestramento con consapevolezza della quantizzazione INT8 (QAT), che esegue il fine-tuning con la fake quantization nel ciclo, in modo che i pesi tollerino l'esportazione INT8. Consulta Addestramento con consapevolezza della quantizzazione. |
fraction | float, int o list | 1.0 | Sottoinsieme del dataset espresso come rapporto/numero o elenco [train, val, test]. 1 indica l'intero split, i numeri interi maggiori di 1 indicano il numero di immagini e solo la voce facoltativa del test accetta 0/0.0 per indicare nessun dato. Gli elenchi di due elementi mantengono completo il test. |
profile | bool | False | Abilita la profilazione delle velocità ONNX e TensorRT durante l'addestramento, utile per ottimizzare la distribuzione del modello. |
freeze | int o list | None | Blocca i primi N layer del modello oppure layer specifici in base all'indice o al nome del modulo (23.cv2, senza il prefisso model.), riducendo il numero di parametri addestrabili. Utile per il fine-tuning o l'apprendimento per trasferimento. |
lr0 | float | 0.01 | Tasso di apprendimento iniziale (ovvero SGD=1E-2, Adam=1E-3). Ignorato con il valore predefinito optimizer='auto'; specifica esplicitamente un ottimizzatore per usarlo. |
lrf | float | 0.01 | Tasso di apprendimento finale come frazione del tasso iniziale = (lr0 * lrf), usato insieme agli scheduler per regolare il tasso di apprendimento nel tempo. |
momentum | float | 0.937 | Fattore di momento per SGD o beta1 per gli ottimizzatori Adam, che determina quanto i gradienti passati contribuiscono all'aggiornamento corrente. |
weight_decay | float | 0.0005 | Termine di regolarizzazione L2, che penalizza i pesi elevati per prevenire l'overfitting. |
warmup_epochs | float | 3.0 | Numero di epoche di warmup del tasso di apprendimento, che aumenta gradualmente il tasso da un valore basso a quello iniziale per stabilizzare le prime fasi dell'addestramento. |
warmup_momentum | float | 0.8 | Momento iniziale per la fase di warmup, che viene regolato gradualmente fino al momento impostato durante il periodo di warmup. |
warmup_bias_lr | float | 0.1 | Tasso di apprendimento dei parametri di bias durante la fase di warmup, utile per stabilizzare l'addestramento del modello nelle prime epoche. Con il valore predefinito optimizer='auto' viene impostato automaticamente su 0.0; specifica esplicitamente un ottimizzatore per usarlo. |
distill_model | str | None | Percorso di un checkpoint del modello teacher (ad es. yolo26x.pt) per la distillazione della conoscenza. Se impostato, il modello student viene addestrato con una loss aggiuntiva di distillazione, guidata dal teacher congelato. |
dis | float | 6.0 | Peso della loss di distillazione aggiunta alle loss di rilevamento standard. Valori più alti aumentano l'influenza delle indicazioni sulle feature fornite dal teacher. |
box | float | 7.5 | Peso della componente della loss relativa ai riquadri nella funzione di perdita, che determina l'importanza attribuita alla previsione accurata delle coordinate dei riquadri di delimitazione. |
cls | float | 0.5 | Peso della loss di classificazione nella funzione di perdita totale, che determina l'importanza della corretta previsione della classe rispetto agli altri componenti. |
cls_pw | float | 0.0 | Esponente per la ponderazione delle classi, che gestisce lo sbilanciamento tra classi usando la frequenza inversa delle classi. 0.0 disattiva la ponderazione delle classi, mentre 1.0 applica la ponderazione completa basata sulla frequenza inversa. I valori tra 0 e 1 applicano una ponderazione parziale. |
dfl | float | 1.5 | Peso del termine di regressione delle distanze dei riquadri: loss focalizzata sulla distribuzione (DFL) quando la testa di rilevamento usa reg_max > 1; loss L1 sulle distanze normalizzate dei riquadri in YOLO26 senza DFL (reg_max: 1). |
pose | float | 12.0 | Peso della loss della posa nei modelli addestrati per la stima della posa, che determina l'importanza attribuita alla previsione accurata dei keypoint della posa. |
kobj | float | 1.0 | Peso della loss di objectness dei keypoint nei modelli di stima della posa, che bilancia la confidenza del rilevamento con la precisione della posa. |
rle | float | 1.0 | Peso della loss di stima della log-verosimiglianza residua nei modelli di stima della posa, che influisce sulla precisione della localizzazione dei keypoint. |
angle | float | 1.0 | Peso della loss dell'angolo nei modelli OBB, che influisce sulla precisione delle previsioni dell'angolo dei riquadri di delimitazione orientati. |
dlog | float | 1.0 | Peso della loss logaritmica invariante rispetto alla scala (SILog) nei modelli di stima della profondità, il termine principale che determina la precisione della profondità. |
dgrad | float | 0.5 | Peso della loss del gradiente nei modelli di stima della profondità, che penalizza gli errori sui bordi in profondità e favorisce contorni delle superfici più netti. |
dlam | float | 1.0 | Fattore di enfasi della varianza della loss SILog nei modelli di stima della profondità. 1.0 rende la loss completamente invariante rispetto alla scala, mentre 0.0 la riduce a una semplice RMSE logaritmica. |
nbs | int | 64 | Dimensione nominale del batch per la normalizzazione della loss. |
overlap_mask | bool | True | Determina se le maschere degli oggetti devono essere unite in un'unica maschera per l'addestramento o mantenute separate per ogni oggetto. In caso di sovrapposizione, durante l'unione la maschera più piccola viene sovrapposta a quella più grande. |
mask_ratio | int | 4 | Rapporto di sottocampionamento delle maschere di segmentazione, che influisce sulla risoluzione delle maschere usate durante l'addestramento. Non modifica la risoluzione delle maschere predette. |
dropout | float | 0.0 | Tasso di dropout per la regolarizzazione nelle attività di classificazione, che previene l'overfitting omettendo casualmente delle unità durante l'addestramento. |
val | bool | True | Abilita la convalida durante l'addestramento, consentendo la valutazione periodica delle prestazioni del modello su un dataset separato. |
nms | bool, facoltativo | None | Seleziona la testa di inferenza usata per la convalida a ogni epoca, la selezione dei checkpoint e l'arresto anticipato. None o True usa la modalità one-to-many con NMS; False usa la testa senza NMS quando disponibile. Entrambe le teste mantengono le rispettive loss di addestramento. |
plots | bool | True | Genera e salva grafici delle metriche di addestramento e convalida, oltre a esempi di predizione, offrendo una rappresentazione visiva delle prestazioni del modello e dei progressi dell'apprendimento. |
compile | bool o str | False | Abilita la compilazione del grafo torch.compile di PyTorch 2.x con backend='inductor'. Accetta True → "default", False → disattivazione oppure una modalità stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se non è supportata, ripiega sulla modalità eager con un avviso. |
channels_last | bool | None | Usa il formato di memoria channels_last (NHWC) per le convoluzioni durante l'addestramento. None lo abilita automaticamente su CUDA con PyTorch 1.11 o versioni successive, tranne che su Windows, dove si è rivelato più lento. False lo disabilita, mentre True lo richiede esplicitamente. L'addestramento su CPU o MPS usa sempre NCHW (True viene ignorato con un avviso). |
max_det | int | 300 | Numero massimo di rilevamenti per immagine durante la convalida dell'addestramento. Per detect, segment, pose e OBB, il valore predefinito 300 aumenta fino al numero massimo di oggetti etichettati nei dati di addestramento/convalida solo se tale numero supera 300. Gli altri valori restano fissi; il superamento del limite genera un avviso. |
L'argomento batch può essere configurato in tre modi:
- Dimensione del batch fissa: imposta un valore intero (ad es.
batch=16) per specificare direttamente il numero di immagini per batch. - Modalità automatica (60% della memoria GPU): usa
batch=-1per regolare automaticamente la dimensione del batch in modo da utilizzare circa il 60% della memoria CUDA. - Modalità automatica con frazione di utilizzo: imposta un valore frazionario (ad es.
batch=0.70) per regolare la dimensione del batch in base alla frazione specificata di memoria GPU da usare. - Nuovo tentativo automatico in caso di OOM: se durante la prima epoca si verifica un errore CUDA di memoria esaurita, il trainer dimezza automaticamente la dimensione del batch e riprova (fino a 3 volte). Questa opzione si applica solo all'addestramento con una singola GPU; l'addestramento multi-GPU (DDP) genera subito l'errore.
- Nessuna configurazione valida: se nessuna dimensione del batch candidata produce un profilo utilizzabile, AutoBatch genera un
RuntimeErroresplicito invece di ripiegare silenziosamente su un valore predefinito non pertinente.
Impostazioni e iperparametri di data augmentation#
Le tecniche di data augmentation sono essenziali per migliorare la robustezza e le prestazioni dei modelli YOLO, introducendo variabilità nei dati di addestramento e aiutando il modello a generalizzare meglio sui dati mai visti. La tabella seguente illustra lo scopo e l'effetto di ciascun argomento di augmentation:
| Argomento | Tipo | Predefinito | Attività supportate | Intervallo | Descrizione |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Regola la tonalità dell'immagine di una frazione della ruota dei colori, introducendo variabilità cromatica. Aiuta il modello a generalizzare in diverse condizioni di illuminazione. Per classify, si applica solo quando auto_augment=None. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifica la saturazione dell'immagine di una frazione, influendo sull'intensità dei colori. Utile per simulare diverse condizioni ambientali. Per classify, si applica solo quando auto_augment=None. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifica il valore (luminosità) dell'immagine di una frazione, aiutando il modello a funzionare bene in diverse condizioni di illuminazione. Per classify, si applica solo quando auto_augment=None. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Ruota casualmente l'immagine entro l'intervallo di gradi specificato, migliorando la capacità del modello di riconoscere gli oggetti con orientamenti diversi. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Trasla l'immagine orizzontalmente e verticalmente di una frazione delle sue dimensioni, aiutando il modello a imparare a rilevare oggetti parzialmente visibili. |
scale | float | tuple | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 oppure una tupla (min, max) esplicita (non per classify) | Ridimensiona l'immagine con un fattore di scala, simulando oggetti a distanze diverse dalla fotocamera. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Inclina l'immagine di un angolo specificato, imitando l'effetto degli oggetti osservati da angolazioni diverse. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Applica all'immagine una trasformazione prospettica casuale, migliorando la capacità del modello di comprendere gli oggetti nello spazio 3D. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Capovolge l'immagine verticalmente con la probabilità specificata, aumentando la variabilità dei dati senza alterare le caratteristiche dell'oggetto. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Capovolge l'immagine da sinistra a destra con la probabilità specificata; è utile per apprendere oggetti simmetrici e aumentare la varietà del dataset. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Inverte i canali dell'immagine da RGB a BGR con la probabilità specificata; è utile per aumentare la robustezza a un ordinamento errato dei canali. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combina quattro immagini di addestramento in una, simulando diverse composizioni di scene e interazioni tra oggetti. È molto efficace per comprendere scene complesse. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Fonde due immagini e le relative etichette, creando un'immagine composita. Migliora la capacità di generalizzazione del modello introducendo rumore nelle etichette e variabilità visiva. |
cutmix | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combina porzioni di due immagini, creando una fusione parziale e mantenendo al contempo regioni distinte. Migliora la robustezza del modello creando scenari di occlusione. |
copy_paste | float | 0 | segment, semantic, obb | 0.0 - 1.0 | Frazione degli oggetti idonei incollati; flip li rispecchia all'interno dell'immagine, mentre mixup usa questo valore anche come probabilità di applicazione tra immagini. |
copy_paste_mode | str | flip | segment, semantic, obb | - | Specifica la strategia copy-paste da utilizzare. Le opzioni includono 'flip' e 'mixup'. |
auto_augment | str | randaugment | classify | - | Applica una policy di augmentation predefinita ('randaugment', 'autoaugment' o 'augmix') per migliorare le prestazioni del modello tramite la varietà visiva. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Cancella casualmente alcune regioni dell'immagine durante l'addestramento per incoraggiare il modello a concentrarsi su caratteristiche meno evidenti. |
augmentations | list | None | detect, segment, semantic, depth, pose, obb | - | Trasformazioni Albumentations personalizzate per la data augmentation avanzata (solo API Python). Accetta un elenco di oggetti di trasformazione per esigenze di augmentation specifiche. |
Puoi modificare queste impostazioni in base ai requisiti specifici del dataset e dell'attività. Sperimentare con valori diversi può aiutarti a trovare la strategia di augmentation ottimale per ottenere le migliori prestazioni del modello.
Per ulteriori informazioni sulle operazioni di data augmentation durante l'addestramento, consulta la sezione di riferimento.
Registrazione#
Le metriche di addestramento, i grafici e i checkpoint vengono sempre scritti nella directory dell'esecuzione; Ultralytics li trasmette anche a qualsiasi sistema di tracciamento degli esperimenti installato e abilitato: Comet, ClearML, TensorBoard, MLflow, Weights & Biases e DVCLive. Puoi attivare o disattivare ciascun logger tramite le impostazioni di Ultralytics, ad esempio yolo settings tensorboard=True. Di seguito sono illustrate le tre configurazioni più comuni.
Comet#
Comet è una piattaforma che permette a data scientist e sviluppatori di monitorare, confrontare, spiegare e ottimizzare esperimenti e modelli. Offre funzionalità come metriche in tempo reale, differenze nel codice e tracciamento degli iperparametri.
Per usare Comet:
# pip install comet_ml
import comet_ml
comet_ml.login()Ricordati di accedere al tuo account Comet sul sito web e di ottenere la chiave API. Dovrai aggiungerla alle variabili d'ambiente o al tuo script per registrare gli esperimenti.
ClearML#
ClearML è una piattaforma open source che automatizza il tracciamento degli esperimenti e facilita la condivisione efficiente delle risorse. È progettata per aiutare i team a gestire, eseguire e riprodurre il proprio lavoro di ML in modo più efficiente.
Per usare ClearML:
# pip install clearml
import clearml
clearml.browser_login()Dopo aver eseguito questo script, dovrai accedere al tuo account ClearML tramite il browser e autenticare la sessione.
TensorBoard#
TensorBoard è un toolkit di visualizzazione per TensorFlow. Ti permette di visualizzare il grafo TensorFlow, tracciare metriche quantitative sull'esecuzione del grafo e mostrare dati aggiuntivi, come le immagini che lo attraversano.
Per usare TensorBoard in Google Colab:
%load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryPer usare TensorBoard in locale, esegui il comando seguente e visualizza i risultati in localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryIn questo modo TensorBoard verrà caricato e indirizzato alla directory in cui sono salvati i log di addestramento.
Dopo aver configurato il logger, puoi procedere con l'addestramento del modello. Tutte le metriche di addestramento verranno registrate automaticamente sulla piattaforma scelta e potrai consultare questi log per monitorare nel tempo le prestazioni del modello, confrontare modelli diversi e individuare aree da migliorare.
E adesso?#
Convalida il modello addestrato su dati di test esclusi dall'addestramento per verificarne la precisione nel mondo reale, quindi esportalo in ONNX, TensorRT o in un altro formato di distribuzione. Addestri il modello sui tuoi dati invece che su COCO8? Formattali prima seguendo la guida ai dataset.
Domande frequenti#
Sì. L'addestramento cloud di Ultralytics Platform include crediti gratuiti per iniziare. Carica il tuo dataset, seleziona un modello e una GPU e avvia l'addestramento direttamente dal browser.
Per addestrare un modello di rilevamento di oggetti con Ultralytics YOLO26, puoi usare l'API Python oppure la CLI. Di seguito trovi un esempio per ciascuna modalità:
Esempio di addestramento su singola GPU e CPUfrom ultralytics import YOLO # Carica un modello model = YOLO("yolo26n.pt") # carica un modello preaddestrato (consigliato per l'addestramento) # Addestra il modello results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Per ulteriori dettagli, consulta la sezione Impostazioni di addestramento.
Le funzionalità principali della modalità Train di Ultralytics YOLO26 includono:
- Download automatico dei dataset: scarica automaticamente dataset standard come COCO, VOC e ImageNet.
- Supporto multi-GPU: distribuisci l'addestramento su più GPU per elaborare i dati più rapidamente.
- Configurazione degli iperparametri: personalizza gli iperparametri tramite file YAML o argomenti CLI.
- Visualizzazione e monitoraggio: tracciamento in tempo reale delle metriche di addestramento per ottenere informazioni più dettagliate.
Queste funzionalità rendono l'addestramento efficiente e personalizzabile in base alle tue esigenze. Per ulteriori dettagli, consulta la sezione Funzionalità principali della modalità Train.
Per riprendere l'addestramento da una sessione interrotta, imposta l'argomento
resumesuTruee specifica il percorso dell'ultimo checkpoint salvato.Esempio di ripresa dell'addestramentofrom ultralytics import YOLO # Carica il modello parzialmente addestrato model = YOLO("path/to/last.pt") # Riprendi l'addestramento results = model.train(resume=True)Consulta la sezione Ripresa degli addestramenti interrotti per ulteriori informazioni.
Lo sbilanciamento delle classi si verifica quando alcune classi hanno molti meno esempi di altre nei dati di addestramento. Questo può causare prestazioni scarse del modello sulle classi rare. Ultralytics YOLO supporta la ponderazione delle classi tramite l'argomento
cls_pwper affrontare questo problema.L'argomento
cls_pwcontrolla il livello di ponderazione delle classi in base alla frequenza inversa delle classi:cls_pw=0.0(predefinito): disattiva la ponderazione delle classicls_pw=1.0: applica la ponderazione completa in base alla frequenza inversa- Valori compresi tra
0.0e1.0: applicano una ponderazione parziale per uno sbilanciamento moderato
I pesi delle classi vengono calcolati come
(1.0 / class_counts) ^ cls_pwe normalizzati in modo che la loro media sia pari a 1.0.Addestramento su un dataset sbilanciatofrom ultralytics import YOLO # Carica un modello preaddestrato model = YOLO("yolo26n.pt") # Addestra con la ponderazione completa delle classi per dati con forte sbilanciamento results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Oppure usa una ponderazione parziale (0.25) per uno sbilanciamento moderato results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)SuggerimentoInizia con
cls_pw=0.25per i dataset moderatamente sbilanciati e aumenta il valore a1.0se le prestazioni delle classi rare restano insufficienti. Puoi verificare la distribuzione dei pesi controllando i pesi delle classi calcolati nei log di addestramento.Sì, Ultralytics YOLO26 supporta l'addestramento sui chip Apple silicon tramite il framework Metal Performance Shaders (MPS). Specifica 'mps' come dispositivo di addestramento.
Esempio di addestramento MPSfrom ultralytics import YOLO # Carica un modello preaddestrato model = YOLO("yolo26n.pt") # Addestra il modello su un chip Apple silicon (M1/M2/M3/M4) results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Per ulteriori dettagli, consulta la sezione Addestramento con Apple Silicon MPS.
Ultralytics YOLO26 ti permette di configurare diverse impostazioni di addestramento tramite argomenti, come la dimensione del batch, il tasso di apprendimento, il numero di epoche e altro. Ecco una breve panoramica:
Argomento Predefinito Descrizione modelNonePercorso del file del modello da usare per l'addestramento. dataNonePercorso del file YAML del dataset (ad es. coco8.yaml) oppure directory o nome del dataset (ad es.imagenet10) per la classificazione.epochs100Numero totale di epoche di addestramento. batch16Dimensione del batch, configurabile come numero intero o in modalità automatica. imgsz640Dimensione di destinazione delle immagini per l'addestramento. deviceNoneDispositivo o dispositivi di calcolo per l'addestramento, ad esempio cpu,0,0,1omps.saveTrueAbilita il salvataggio dei checkpoint di addestramento e dei pesi finali del modello. Per una guida approfondita sulle impostazioni di addestramento, consulta la sezione Impostazioni di addestramento.