Addestramento del modello con Ultralytics YOLO#
Introduzione#
L'addestramento di un modello di deep learning consiste nel fornirvi dati e regolarne i parametri affinché possa effettuare previsioni accurate. La modalità di addestramento in Ultralytics YOLO26 è progettata per un addestramento efficace ed efficiente di modelli di rilevamento degli oggetti, sfruttando appieno le capacità dell'hardware moderno. Questa guida mira a coprire tutti i dettagli necessari per iniziare ad addestrare i tuoi modelli utilizzando la robusta serie di funzionalità di YOLO26. Se non hai ancora installato Ultralytics, inizia con la guida di avvio rapido.
Vedi la anteprima non rilasciata di YOLO27 per gli esempi di addestramento pianificati.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
Perché scegliere Ultralytics YOLO per l'addestramento?#
Ecco alcuni motivi validi per optare per la modalità di addestramento di YOLO26:
- Efficienza: Ottieni il massimo dal tuo hardware, sia che tu stia utilizzando una configurazione a singola GPU sia che tu stia scalando su più GPU.
- Versatilità: Addestra su dataset personalizzati oltre a quelli facilmente disponibili come COCO, VOC e ImageNet.
- Facilità d'uso: Interfacce CLI e Python semplici ma potenti per un'esperienza di addestramento diretta.
- Flessibilità degli iperparametri: Un'ampia gamma di iperparametri personalizzabili per ottimizzare le prestazioni del modello. Per un controllo più approfondito, puoi personalizzare il trainer stesso.
- Addestramento sul cloud: Addestra su GPU cloud tramite Ultralytics Platform con metriche in tempo reale e salvataggio automatico dei checkpoint.
Funzionalità chiave della modalità di addestramento#
Di seguito sono riportate alcune caratteristiche degne di nota della modalità di addestramento di YOLO26:
- Download automatico del dataset: Le configurazioni del 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 i formati e i dataset supportati. - Supporto multi-GPU: Scala le tue attività di addestramento senza problemi su più GPU per accelerare il processo.
- Configurazione degli iperparametri: L'opzione per 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 approfondimenti migliori.
Esempi di utilizzo#
Addestra YOLO26n sul dataset COCO8 per 100 epoche con una dimensione dell'immagine di 640. Il dispositivo di addestramento può essere specificato utilizzando l'argomento device. Se non viene passato alcun argomento, verrà utilizzata la GPU device=0 quando disponibile; altrimenti verrà utilizzata device='cpu'. Consulta la sezione Argomenti sottostante per un elenco completo degli argomenti di addestramento.
Su Windows, potresti ricevere un RuntimeError quando avvii l'addestramento come script. Aggiungi un blocco if __name__ == "__main__": prima del codice di addestramento per risolverlo.
Il dispositivo viene determinato automaticamente. Se è disponibile una GPU, verrà utilizzata (dispositivo CUDA predefinito 0); altrimenti l'addestramento verrà avviato su CPU.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Addestramento multi-GPU#
L'addestramento multi-GPU consente un utilizzo più efficiente delle risorse hardware disponibili distribuendo il carico di addestramento su più GPU. Questa funzionalità è disponibile sia tramite l'API Python che tramite l'interfaccia a riga di comando. Per abilitare l'addestramento multi-GPU, specifica gli ID dei dispositivi GPU che desideri utilizzare.
Per addestrare con 2 GPU, i dispositivi CUDA 0 e 1 utilizzano i seguenti comandi. Espandi ad altre GPU se necessario.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'addestramento multi-GPU non funziona su Windows con i pacchetti PyTorch ufficiali per torch>=2.4. Ultralytics avvia DDP tramite torch.distributed.run, la cui fase di rendezvous costruisce un TCPStore che ha impostato come predefinito il backend libuv a partire da PyTorch 2.4, e i pacchetti ufficiali per Windows sono compilati senza libuv. L'addestramento si interrompe immediatamente con:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
L'impostazione di USE_LIBUV=0 non risolve il problema, poiché il rendezvous costruisce direttamente TCPStore e quel percorso di codice non legge mai la variabile. Addestra su Linux o WSL2 per utilizzare più GPU, oppure addestra su una singola GPU con device=0 su Windows.
Quando specifichi più dispositivi (ad esempio, device=[0, 1]), Ultralytics genera internamente una nuova istanza di trainer ed esegue torch.distributed.run internamente. Questo funziona senza problemi per l'uso standard della CLI e per gli script Python non modificati.
Tuttavia, se il tuo script contiene componenti personalizzati, come un trainer personalizzato, un validatore, un dataset o una pipeline di augmentation, questi oggetti non possono essere serializzati automaticamente e trasferiti ai sottoprocessi DDP. In questo caso, devi avviare il tuo script direttamente con torch.distributed.run:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyL'addestramento su GPU AMD utilizza una build ROCm di PyTorch con la sintassi standard device=0 o device=cuda:0. Consulta la guida all'integrazione AMD per l'installazione e lo stato di supporto attuale di MIGraphX, DirectML e Ryzen AI NPU.
L'addestramento su GPU Intel utilizza device=xpu:0, o più ID XPU con una build PyTorch che fornisce XCCL.
Addestramento NPU Huawei Ascend#
Ultralytics supporta l'addestramento e la validazione su NPU Huawei Ascend tramite torch_npu. Installa versioni reciprocamente compatibili di CANN, PyTorch e torch_npu seguendo la guida di installazione di Ascend Extension for PyTorch, quindi attiva l'ambiente CANN prima di avviare Ultralytics:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")Le funzionalità di addestramento standard, tra cui AMP, validazione, salvataggio dei checkpoint e ripresa, utilizzano la NPU attiva. AutoBatch è disponibile per l'addestramento su singola NPU, mentre più ID di NPU avviano l'addestramento distribuito tramite HCCL. Consulta la guida all'integrazione Huawei Ascend per l'esportazione e il deployment del modello dopo l'addestramento.
Addestramento su GPU inattive#
L'addestramento su GPU inattive consente la selezione automatica delle GPU meno utilizzate nei sistemi multi-GPU, ottimizzando l'utilizzo delle risorse senza la selezione manuale della GPU. Questa funzionalità identifica le GPU disponibili in base alle metriche di utilizzo e alla disponibilità di VRAM.
Per selezionare e utilizzare automaticamente la o le GPU più inattive per l'addestramento, usa il parametro del dispositivo -1. Questo è particolarmente utile in ambienti di calcolo condivisi o server con più utenti.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'algoritmo di selezione automatica dà la priorità alle GPU con:
- Percentuali di utilizzo attuale inferiori
- Maggiore memoria disponibile (VRAM libera)
- Minori temperature e consumi energetici
Questa funzionalità è particolarmente preziosa in ambienti di calcolo condivisi o quando si eseguono più processi di addestramento su modelli diversi. Si adatta automaticamente alle mutevoli condizioni del sistema, garantendo un'allocazione ottimale delle risorse senza intervento manuale.
Addestramento MPS su Apple Silicon#
Con il supporto per i chip Apple Silicon integrato nei modelli Ultralytics YOLO, ora è possibile addestrare i tuoi modelli su dispositivi che utilizzano il potente framework Metal Performance Shaders (MPS). L'MPS offre un modo ad alte prestazioni per eseguire attività di calcolo ed elaborazione di immagini sul silicio personalizzato di Apple.
Per abilitare l'addestramento sui chip Apple Silicon, dovresti specificare 'mps' come dispositivo quando avvii il processo di addestramento. Di seguito è riportato un esempio di come potresti farlo in Python e tramite la riga di comando:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Sfruttando la potenza di calcolo dei chip Apple Silicon, ciò consente un'elaborazione più efficiente delle attività di addestramento. Per una guida più dettagliata e opzioni di configurazione avanzate, fai riferimento alla documentazione di PyTorch MPS.
Ripresa di addestramenti interrotti#
Riprendere l'addestramento da uno stato precedentemente salvato è una funzionalità cruciale quando si lavora con modelli di deep learning. Questo può tornare utile in vari scenari, come quando il processo di addestramento è stato inaspettatamente interrotto o quando desideri continuare ad addestrare un modello con nuovi dati o per più epoche.
Quando l'addestramento viene ripreso, Ultralytics YOLO carica i pesi dall'ultimo modello salvato e ripristina anche lo stato dell'ottimizzatore, il pianificatore del learning rate, il numero di epoca e il dataset. Questo ti consente di continuare il processo di addestramento senza interruzioni da dove era stato interrotto. Passa un esplicito data= insieme a resume per continuare su un dataset diverso invece di quello del checkpoint.
Puoi facilmente riprendere 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 tramite la riga di comando:
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
results = model.train(resume=True)Impostando resume=True, la funzione train continuerà l'addestramento da dove era stato interrotto, utilizzando 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 i checkpoint vengono salvati alla fine di ogni epoca per impostazione predefinita, o a intervalli fissi utilizzando l'argomento save_period, quindi devi completare almeno 1 epoca per riprendere un ciclo di addestramento.
Impostazioni di addestramento#
Le impostazioni di addestramento per i modelli YOLO comprendono vari iperparametri e configurazioni utilizzati durante il processo di addestramento. Queste impostazioni influenzano le prestazioni, la velocità e la precisione del modello. Le impostazioni chiave di addestramento includono la dimensione del batch, il learning rate, il momentum e il decadimento dei pesi. Inoltre, la scelta dell'ottimizzatore, della loss function e della composizione del dataset di addestramento può influenzare il processo di addestramento. Un'attenta ottimizzazione e la sperimentazione con queste impostazioni sono cruciali per ottimizzare le prestazioni.
Ottimizzatore MuSGD#
In YOLO26, MuSGD è un ottimizzatore ibrido che combina gli aggiornamenti standard di SGD con aggiornamenti ortogonalizzati in stile Muon.
È consigliato per cicli di addestramento YOLO26 più lunghi e dataset più grandi, dove gli aggiornamenti ortogonalizzati Muon possono aiutare a stabilizzare l'ottimizzazione.
Solo i pesi lineari 2D e i filtri di convoluzione 4D (ridimensionati a 2D) ricevono l'aggiornamento in stile Muon insieme a SGD, mentre tutti gli altri parametri, come i pesi di normalizzazione del batch e i termini di bias, rimangono su SGD standard.
Quando viene utilizzato optimizer=auto, Ultralytics seleziona automaticamente MuSGD per cicli di addestramento più lunghi (in genere quando le iterazioni sono > 10000). Per cicli più brevi, il trainer passa a AdamW.
Esempio di utilizzo:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDVedi 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 per l'addestramento. Accetta un percorso a un modello .pt preaddestrato oppure a un file di configurazione .yaml. È essenziale per definire la struttura del modello o inizializzare i pesi. |
data | str | None | Percorso allo YAML del dataset (ad esempio, coco8.yaml), che contiene i percorsi ai dati di addestramento e validazione, i nomi delle classi e il numero di classi. La classificazione accetta invece una directory del dataset o il nome di un dataset integrato (ad esempio, imagenet10). |
epochs | int | 100 | Numero totale di epoche di addestramento. Ogni epoca rappresenta un passaggio completo sull'intero dataset. La modifica di questo valore può influire sulla durata dell'addestramento e sulle prestazioni del modello. |
time | float | None | Tempo massimo di addestramento in ore. Se impostato, sovrascrive l'argomento epochs, consentendo di interrompere automaticamente l'addestramento dopo la durata specificata. È utile negli scenari di addestramento con vincoli temporali. |
patience | int | 100 | Numero di epoche da attendere senza miglioramenti nelle metriche di validazione prima di interrompere anticipatamente l'addestramento. Aiuta a prevenire l'overfitting interrompendo l'addestramento quando le prestazioni si stabilizzano. |
batch | int o float | 16 | Dimensione del batch, con tre modalità: impostazione come intero (ad esempio, batch=16), modalità automatica per utilizzare il 60% della memoria GPU (batch=-1) oppure modalità automatica con una frazione di utilizzo specificata (batch=0.70). |
imgsz | int | 640 | Dimensione obiettivo delle immagini per l'addestramento. Le immagini vengono ridimensionate a quadrati con lati uguali al valore specificato (se rect=False), mantenendo le proporzioni per i modelli YOLO ma non per RT-DETR. Influisce sull'accuratezza del modello e sulla complessità computazionale. |
save | bool | True | Abilita il salvataggio dei checkpoint di addestramento e dei 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. Un valore pari a -1 disabilita questa funzionalità. È utile per salvare modelli intermedi durante sessioni di addestramento prolungate. |
cache | bool | False | Abilita il caching delle immagini del dataset in memoria (True/ram), su disco (disk) oppure lo disabilita (False). Migliora la velocità di addestramento riducendo l'I/O su disco, a scapito di un maggiore utilizzo della memoria. |
device | int oppure str oppure list | None | Specifica il dispositivo o 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), Huawei Ascend NPU (device=npu:0 oppure device=npu:0,1), 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 e dell'invio dei dati al modello, soprattutto 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 sperimentazioni. |
name | str | None | Nome dell'esecuzione di addestramento. Viene usato per creare una sottodirectory nella cartella del progetto, in cui vengono salvati i log e gli output dell'addestramento. |
exist_ok | bool | False | Se True, consente di sovrascrivere una directory project/name esistente. È utile per la sperimentazione iterativa senza dover eliminare manualmente gli output precedenti. |
save_dir | str | None | Specifica la directory esatta in cui vengono salvati gli output dell'esecuzione, sovrascrivendo la combinazione project/name. Il percorso viene usato così com'è senza incrementi automatici, quindi le esecuzioni consecutive riutilizzano la stessa directory. |
pretrained | bool o str | True | Determina se iniziare l'addestramento dai pesi preaddestrati. Può essere un valore booleano o un percorso testuale ai pesi da caricare. pretrained=False addestra a partire da pesi inizializzati casualmente mantenendo l'architettura del modello. |
cls_remap | bool | True | Durante il fine-tuning tra dataset, copia nel nuovo modello le righe della testa di classificazione preaddestrata quando i nomi delle classi corrispondono, così le classi sovrapposte mantengono il bias appreso e anche i relativi pesi quando la larghezza della testa non cambia. Si applica sia quando il numero di classi differisce, sia quando coincide ma l'ordine delle classi è diverso. |
optimizer | str | 'auto' | Scelta dell'ottimizzatore per l'addestramento. Le opzioni includono SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp oppure 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 della restrizione sugli algoritmi non deterministici. |
verbose | bool | True | Abilita l'output dettagliato durante l'addestramento, mostrando nella console barre di avanzamento, metriche per epoca e ulteriori informazioni sull'addestramento. |
single_cls | bool | False | Tratta tutte le classi nei dataset multiclass come un'unica classe durante l'addestramento. È utile per attività di classificazione binaria o quando ci si concentra sulla presenza degli oggetti anziché sulla classificazione. |
classes | list[int] | None | Specifica un elenco di ID delle classi su cui eseguire l'addestramento. È utile per filtrare le classi e concentrarsi solo su quelle desiderate durante l'addestramento. |
rect | bool | False | Abilita la strategia di padding minimo: le immagini di un batch ricevono il padding minimo necessario per raggiungere una dimensione comune, con il lato più lungo uguale a imgsz. Può migliorare efficienza e velocità, ma può influire sull'accuratezza del modello. |
multi_scale | float | 0.0 | Varia casualmente imgsz a ogni batch di +/- multi_scale (ad esempio, da 0.25 -> 0.75x a 1.25x), arrotondando ai multipli dello stride del modello; 0.0 disabilita l'addestramento multi-scala. |
cos_lr | bool | False | Usa uno scheduler del learning rate coseno, regolando il learning rate secondo una curva coseno durante le epoche. Aiuta a gestire il learning rate per ottenere una migliore convergenza. |
close_mosaic | int | 10 | Disabilita la data augmentation mosaic nelle ultime N epoche per stabilizzare l'addestramento prima del completamento. L'impostazione a 0 disabilita questa funzionalità. |
resume | bool | False | Riprende l'addestramento dall'ultimo checkpoint salvato. Carica automaticamente i pesi del modello, lo stato dell'ottimizzatore e il conteggio delle epoche, continuando l'addestramento senza interruzioni. |
amp | bool o str | True | Imposta la precisione dell'addestramento: True oppure "fp16" usa FP16, "bf16" usa BF16 sui dispositivi CUDA supportati e False oppure "fp32" usa FP32. |
quantize | int o str | None | Imposta su 8 (o "int8") per l'addestramento consapevole della quantizzazione (QAT) in INT8, che esegue il fine-tuning con la finta quantizzazione nel ciclo in modo che i pesi tollerino l'esportazione in INT8. Consulta Quantization-Aware Training. |
fraction | float, int o list | 1.0 | Sottoinsieme del dataset espresso come rapporto/conteggio o come elenco [train, val, test]. 1 indica l'intero split, gli interi superiori a 1 indicano il numero di immagini e solo la voce test facoltativa accetta 0/0.0 per indicare nessun elemento. Gli elenchi a 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 tramite indice o nome del modulo (23.cv2, senza il model. iniziale), riducendo il numero di parametri addestrabili. È utile per il fine-tuning o il transfer learning. |
lr0 | float | 0.01 | Learning rate iniziale (ovvero SGD=1E-2, Adam=1E-3). La modifica di questo valore è fondamentale per il processo di ottimizzazione, poiché influisce sulla rapidità di aggiornamento dei pesi del modello. |
lrf | float | 0.01 | Learning rate finale come frazione del learning rate iniziale = (lr0 * lrf), usato insieme agli scheduler per regolare il learning rate nel tempo. |
momentum | float | 0.937 | Fattore di momentum per SGD o beta1 per gli ottimizzatori Adam, che influisce sull'integrazione dei gradienti passati nell'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 learning rate, che aumenta gradualmente il learning rate da un valore basso a quello iniziale per stabilizzare le prime fasi dell'addestramento. |
warmup_momentum | float | 0.8 | Momentum iniziale per la fase di warmup, che si adatta gradualmente al momentum impostato durante il periodo di warmup. |
warmup_bias_lr | float | 0.1 | Learning rate per i parametri di bias durante la fase di warmup, che aiuta a stabilizzare l'addestramento del modello nelle epoche iniziali. Viene impostato automaticamente su 0.0 con il valore predefinito optimizer='auto', quindi specifica esplicitamente un ottimizzatore per usarlo. |
distill_model | str | None | Percorso a un checkpoint del modello teacher (ad esempio, yolo26x.pt) per il knowledge distillation. Quando impostato, il modello student viene addestrato con una perdita aggiuntiva di distillazione guidata dal teacher congelato. |
dis | float | 6.0 | Peso della perdita di distillazione aggiunta alle perdite standard di rilevamento. Valori più elevati aumentano l'influenza della guida delle caratteristiche del teacher. |
box | float | 7.5 | Peso della componente di perdita dei riquadri nella funzione di perdita, che influisce sull'importanza attribuita alla previsione accurata delle coordinate dei bounding box. |
cls | float | 0.5 | Peso della perdita di classificazione nella funzione di perdita totale, che influisce sull'importanza della corretta previsione della classe rispetto alle altre componenti. |
cls_pw | float | 0.0 | Potenza per la ponderazione delle classi, per gestire lo sbilanciamento tra classi usando la frequenza inversa delle classi. 0.0 disabilita la ponderazione delle classi, mentre 1.0 applica la ponderazione completa con frequenza inversa. I valori compresi tra 0 e 1 forniscono una ponderazione parziale. |
dfl | float | 1.5 | Peso del termine di regressione della distanza dei riquadri: distribution focal loss (DFL) quando la testa di rilevamento usa reg_max > 1, oppure una perdita L1 sulle distanze normalizzate dei riquadri in YOLO26 senza DFL (reg_max: 1). |
pose | float | 12.0 | Peso della perdita della posa nei modelli addestrati per la stima della posa, che influisce sull'importanza attribuita alla previsione accurata dei keypoint della posa. |
kobj | float | 1.0 | Peso della perdita di objectness dei keypoint nei modelli di stima della posa, che bilancia la confidenza del rilevamento e l'accuratezza della posa. |
rle | float | 1.0 | Peso della perdita 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 perdita dell'angolo nei modelli obb, che influisce sulla precisione delle previsioni degli angoli dei bounding box orientati. |
dlog | float | 1.0 | Peso della perdita logaritmica invariante alla scala (SILog) nei modelli di stima della profondità, il termine principale che determina l'accuratezza della profondità. |
dgrad | float | 0.5 | Peso della perdita del gradiente nei modelli di stima della profondità, che penalizza gli errori sui bordi di profondità e favorisce contorni delle superfici più netti. |
dlam | float | 1.0 | Fattore di enfasi della varianza della perdita SILog nei modelli di stima della profondità. 1.0 rende la perdita completamente invariante alla scala, mentre 0.0 la riduce a una semplice log-RMSE. |
nbs | int | 64 | Dimensione nominale del batch per la normalizzazione della perdita. |
overlap_mask | bool | True | Determina se le maschere degli oggetti devono essere unite in un'unica maschera per l'addestramento oppure 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 per le maschere di segmentazione, che influisce sulla risoluzione delle maschere usate durante l'addestramento. |
dropout | float | 0.0 | Tasso di dropout per la regolarizzazione nelle attività di classificazione, che previene l'overfitting omettendo casualmente alcune unità durante l'addestramento. |
val | bool | True | Abilita la validazione durante l'addestramento, consentendo la valutazione periodica delle prestazioni del modello su un dataset separato. |
nms | bool, facoltativo | None | Seleziona la testa di inferenza utilizzata per la convalida delle epoche, la selezione dei checkpoint e l'arresto anticipato. None o True utilizzano l'approccio uno-a-molti con NMS; False utilizza la testa senza NMS quando disponibile. Entrambe le teste mantengono le rispettive perdite di addestramento. |
plots | bool | True | Genera e salva grafici delle metriche di addestramento e validazione, oltre a esempi di previsioni, fornendo indicazioni visive sulle prestazioni del modello e sull'avanzamento 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 → disabilita, oppure una modalità stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se non è supportata, torna alla 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 su Windows, dove è risultato più lento. False lo disabilita e True lo richiede esplicitamente. PyTorch 1.10 e precedenti, CPU e MPS rimangono NCHW per impostazione predefinita. |
max_det | int | 300 | Rilevamenti massimi per immagine durante la validazione dell'addestramento. Per detect, segment, pose e OBB, il valore predefinito di 300 aumenta fino al conteggio di oggetti etichettati di train/val più alto solo quando tale conteggio supera 300; altri valori rimangono fissi e il superamento del limite attiva un avviso. |
L'argomento batch può essere configurato in tre modi:
- Batch Size fisso: Imposta un valore intero (ad esempio,
batch=16), specificando direttamente il numero di immagini per batch. - Modalità automatica (60% della memoria GPU): Usa
batch=-1per regolare automaticamente la dimensione del batch per un utilizzo della memoria CUDA di circa il 60%. - Modalità automatica con frazione di utilizzo: Imposta un valore frazionario (ad esempio,
batch=0.70) per regolare la dimensione del batch in base alla frazione specificata di utilizzo della memoria GPU. - Riprova automatica OOM: Se si verifica un errore di memoria esaurita CUDA durante la prima epoca, il trainer dimezza automaticamente la dimensione del batch e riprova (fino a 3 volte). Questo si applica solo all'addestramento su singola GPU; l'addestramento multi-GPU (DDP) genererà immediatamente l'errore.
- Nessuna configurazione adatta trovata: se nessuna dimensione del batch candidata produce un profilo utilizzabile, AutoBatch genera un errore chiaro
RuntimeErrorinvece di ripiegare silenziosamente su un valore predefinito non correlato.
Impostazioni di augmentation e iperparametri#
Le tecniche di augmentation sono essenziali per migliorare la robustezza e le prestazioni dei modelli YOLO introducendo variabilità nei dati di addestramento, aiutando il modello a generalizzare meglio su dati non visti. La seguente tabella delinea 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, influenzando l'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 dimensioni dell'immagine, 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 mediante un fattore di guadagno, simulando oggetti a distanze diverse dalla fotocamera. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Inclina l'immagine del numero di gradi specificato, simulando l'effetto di oggetti osservati da angolazioni diverse. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Applica una trasformazione prospettica casuale all'immagine, 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 sottosopra con la probabilità specificata, aumentando la variabilità dei dati senza influire sulle 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 diversità 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 rispetto a un ordinamento errato dei canali. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combina quattro immagini di training in una, simulando diverse composizioni della scena e interazioni tra oggetti. Particolarmente efficace per la comprensione di 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à del modello di generalizzare introducendo rumore nelle etichette e variabilità visiva. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | Combina porzioni di due immagini, creando una fusione parziale e mantenendo regioni distinte. Migliora la robustezza del modello creando scenari di occlusione. |
copy_paste | float | 0 | segment, obb | 0.0 - 1.0 | Frazione degli oggetti idonei incollati; flip li riflette all'interno dell'immagine, mentre mixup usa il valore anche come probabilità di applicazione tra immagini. |
copy_paste_mode | str | flip | segment, 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 attraverso la diversità visiva. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Cancella casualmente regioni dell'immagine durante il training per incoraggiare il modello a concentrarsi sulle caratteristiche meno evidenti. |
augmentations | list | None | detect, segment, semantic, depth, pose, obb | - | Trasformazioni Albumentations personalizzate per l'augmentation avanzata dei dati (solo API Python). Accetta un elenco di oggetti di trasformazione per esigenze di augmentation specializzate. |
Queste impostazioni possono essere regolate per soddisfare i requisiti specifici del dataset e dell'attività in corso. La sperimentazione con valori diversi può aiutare a trovare la strategia di augmentation ottimale che porta alle migliori prestazioni del modello.
Per ulteriori informazioni sulle operazioni di augmentation dell'addestramento, consulta la sezione di riferimento.
Registrazione#
Le metriche, i grafici e i checkpoint dell'addestramento vengono sempre scritti nella directory di esecuzione e Ultralytics li trasmette anche a qualsiasi tracciatore di esperimenti installato e abilitato: Comet, ClearML, TensorBoard, MLflow, Weights & Biases e DVCLive. Ciascun logger viene attivato o disattivato tramite le impostazioni di Ultralytics, ad esempio yolo settings tensorboard=True. Le tre configurazioni più comuni sono mostrate di seguito.
Comet#
Comet è una piattaforma che consente a data scientist e sviluppatori di tracciare, confrontare, spiegare e ottimizzare esperimenti e modelli. Fornisce funzionalità come metriche in tempo reale, differenze di codice e tracciamento degli iperparametri.
Per usare Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()Ricordati di accedere al tuo account Comet sul loro sito web e di ottenere la tua chiave API. Dovrai aggiungerla alle tue variabili d'ambiente o al tuo script per registrare i tuoi esperimenti.
ClearML#
ClearML è una piattaforma open-source che automatizza il tracciamento degli esperimenti e aiuta a condividere in modo efficiente le 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 sul browser e autenticare la tua sessione.
TensorBoard#
TensorBoard è un toolkit di visualizzazione per TensorFlow. Ti consente di visualizzare il tuo grafico TensorFlow, tracciare metriche quantitative sull'esecuzione del tuo grafico 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 localmente, esegui il comando sottostante e visualizza i risultati su localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryQuesto caricherà TensorBoard e lo indirizzerà alla directory in cui sono salvati i log di addestramento.
Dopo aver configurato il tuo logger, puoi procedere con l'addestramento del tuo modello. Tutte le metriche di addestramento verranno registrate automaticamente nella piattaforma prescelta e potrai accedere a questi log per monitorare le prestazioni del tuo modello nel tempo, confrontare diversi modelli e identificare aree di miglioramento.
E adesso?#
Valida il tuo modello addestrato rispetto a dati isolati per verificarne la precisione nel mondo reale, quindi esportalo in ONNX, TensorRT o un altro formato di deployment. Stai addestrando sui tuoi dati anziché su COCO8? Formattali prima con la guida ai dataset.
FAQ#
Sì. L'addestramento sul cloud di Ultralytics Platform include crediti gratuiti per iniziare. Carica il tuo dataset, seleziona un modello e una GPU e addestra direttamente dal browser.
Per addestrare un modello di rilevamento degli oggetti utilizzando Ultralytics YOLO26, puoi utilizzare l'API Python o la CLI. Di seguito è riportato un esempio per entrambe:
Esempio di addestramento su singola GPU e CPUfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Per maggiori dettagli, fai riferimento alla sezione Impostazioni di addestramento.
Le funzionalità chiave della modalità di addestramento di Ultralytics YOLO26 includono:
- Download automatico del dataset: Scarica automaticamente dataset standard come COCO, VOC e ImageNet.
- Supporto multi-GPU: Scala l'addestramento su più GPU per un'elaborazione più rapida.
- Configurazione degli iperparametri: Personalizza gli iperparametri tramite file YAML o argomenti CLI.
- Visualizzazione e monitoraggio: Monitoraggio in tempo reale delle metriche di addestramento per approfondimenti migliori.
Queste funzionalità rendono l'addestramento efficiente e personalizzabile in base alle tue esigenze. Per maggiori dettagli, consulta la sezione Funzionalità chiave della modalità di addestramento.
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 # Load the partially trained model model = YOLO("path/to/last.pt") # Resume training results = model.train(resume=True)Consulta la sezione Ripresa di addestramenti interrotti per ulteriori informazioni.
Lo sbilanciamento delle classi si verifica quando alcune classi hanno un numero significativamente inferiore di esempi rispetto ad altre nei tuoi dati di addestramento. Questo può causare scarse prestazioni del modello sulle classi rare. Ultralytics YOLO supporta la ponderazione delle classi tramite l'argomento
cls_pwper affrontare questo problema.L'argomento
cls_pwcontrolla la potenza della ponderazione delle classi in base alla frequenza inversa delle classi:cls_pw=0.0(predefinito): disabilita la ponderazione delle classicls_pw=1.0: applica la ponderazione completa basata sulla frequenza inversa- Valori compresi tra
0.0e1.0: forniscono 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 set di dati sbilanciatifrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train with full class weighting for severely imbalanced data results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Or use partial weighting (0.25) for moderate imbalance results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)SuggerimentoInizia con
cls_pw=0.25per set di dati moderatamente sbilanciati e aumenta a1.0se le classi rare continuano a offrire prestazioni scarse. Puoi controllare i pesi delle classi calcolati nei log di addestramento per verificare la distribuzione dei pesi.Sì, Ultralytics YOLO26 supporta l'addestramento su chip Apple Silicon utilizzando il framework Metal Performance Shaders (MPS). Specifica 'mps' come dispositivo di addestramento.
Esempio di addestramento MPSfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train the model on Apple silicon chip (M1/M2/M3/M4) results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Per maggiori dettagli, fai riferimento alla sezione Addestramento MPS su Apple Silicon.
Ultralytics YOLO26 ti consente di configurare una varietà di impostazioni di addestramento come dimensione del batch, tasso di apprendimento, epoche e altro tramite argomenti. Ecco una breve panoramica:
Argomento Predefinito Descrizione modelNonePercorso del file del modello per l'addestramento. dataNonePercorso del file YAML del set di dati (ad esempio, coco8.yaml), oppure directory o nome del set di dati (ad esempio,imagenet10) per la classificazione.epochs100Numero totale di epoche di addestramento. batch16Dimensione del batch, regolabile come numero intero o in modalità automatica. imgsz640Dimensione target dell'immagine per l'addestramento. deviceNoneDispositivo o dispositivi di calcolo per l'addestramento come 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, controlla la sezione Impostazioni di addestramento.