Addestramento del modello con Ultralytics YOLO#
Introduzione#
L'addestramento di un modello di deep learning comporta l'inserimento di dati e la regolazione dei suoi parametri affinché possa fare previsioni accurate. La modalità di addestramento in Ultralytics YOLO26 è progettata per un addestramento efficace ed efficiente di modelli di rilevamento 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 il solido set di funzionalità di YOLO26. Se non hai ancora installato Ultralytics, inizia con la Guida rapida.
Watch: How to Train a YOLO model on Your Custom Dataset 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 stia utilizzando una configurazione a singola GPU o 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 su Cloud: addestra su GPU cloud tramite Ultralytics Platform con metriche in tempo reale e salvataggio automatico dei checkpoint.
Caratteristiche principali della modalità Train#
Di seguito sono riportate alcune caratteristiche notevoli della modalità Train di YOLO26:
- Download automatico del dataset: le configurazioni del dataset con una sorgente 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 in modo fluido su più GPU per accelerare il processo.
- Configurazione degli iperparametri: La possibilità di 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 insight migliori.
Esempi di Utilizzo#
Addestra YOLO26n sul dataset COCO8 per 100 epoche con dimensione immagine 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 tuo codice di addestramento per risolverlo.
Il dispositivo viene determinato automaticamente. Se una GPU è disponibile, verrà utilizzata (dispositivo CUDA predefinito 0); altrimenti l'addestramento inizierà sulla 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, dispositivi CUDA 0 e 1, usa 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])Quando specifichi più dispositivi (ad esempio, device=[0, 1]), Ultralytics genera internamente una nuova istanza di trainer ed esegue torch.distributed.run dietro le quinte. Questo funziona senza problemi per l'uso standard da CLI e per gli script Python non modificati.
Tuttavia, se il tuo script contiene componenti personalizzati, come un trainer, un validatore, un dataset o una pipeline di augmentations personalizzati, questi oggetti non possono essere serializzati e trasferiti automaticamente 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 con GPU AMD utilizza una build PyTorch ROCm con la sintassi standard device=0 o device=cuda:0. Consulta la guida all'integrazione AMD per l'installazione e lo stato attuale del supporto per MIGraphX, DirectML e Ryzen AI NPU.
L'addestramento con 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 mutualmente compatibili di CANN, PyTorch e torch_npu seguendo la guida all'installazione di Ascend Extension per 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")
# 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, checkpoint e ripresa, utilizzano la NPU attiva. AutoBatch è disponibile per l'addestramento su singola NPU, mentre più ID NPU avviano l'addestramento distribuito tramite HCCL. Consulta la guida all'integrazione di Huawei Ascend per l'esportazione del modello e il deployment 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'uso delle risorse senza la selezione manuale della GPU. Questa funzione 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ù libere 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à priorità alle GPU con:
- Minori percentuali di utilizzo corrente
- Maggiore memoria disponibile (VRAM libera)
- Minore temperatura e consumo energetico
Questa funzionalità è particolarmente preziosa in ambienti di calcolo condivisi o quando si eseguono più processi di addestramento su diversi modelli. Si adatta automaticamente al cambiamento delle 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 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 delle 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 puoi farlo in Python e tramite 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, questo consente un'elaborazione più efficiente dei task di addestramento. Per una guida più dettagliata e opzioni di configurazione avanzate, fai riferimento alla documentazione di PyTorch MPS.
Riprendere 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 ulteriori epoche.
Quando l'addestramento viene ripreso, Ultralytics YOLO carica i pesi dall'ultimo modello salvato e ripristina anche lo stato dell'ottimizzatore, lo scheduler del learning rate e il numero dell'epoca. Questo ti consente di continuare il processo di addestramento senza interruzioni da dove era stato interrotto.
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 utilizzando Python e tramite 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'esecuzione 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 l'accuratezza del modello. Le impostazioni di addestramento chiave includono la dimensione del batch, il learning rate, il momentum e il weight decay. Inoltre, la scelta dell'ottimizzatore, della loss function e della composizione del dataset di addestramento può influenzare il processo di addestramento. Una messa a punto accurata e la sperimentazione con queste impostazioni sono fondamentali per ottimizzare le prestazioni.
Ottimizzatore MuSGD#
In YOLO26, MuSGD è un ottimizzatore ibrido che combina aggiornamenti SGD standard con aggiornamenti ortogonalizzati in stile Muon.
È consigliato per sessioni di addestramento YOLO26 più lunghe e dataset più grandi, dove gli aggiornamenti ortogonalizzati Muon possono aiutare a stabilizzare l'ottimizzazione.
Solo i pesi lineari 2D e i filtri convoluzionali 4D (ridimensionati a 2D) ricevono l'aggiornamento in stile Muon insieme a SGD, mentre tutti gli altri parametri, come i pesi della normalizzazione dei batch e i termini di bias, rimangono su SGD standard.
Quando viene utilizzato optimizer=auto, Ultralytics seleziona automaticamente MuSGD per esecuzioni di addestramento più lunghe (in genere quando le iterazioni sono > 10000). Per esecuzioni 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 auto-selezione dell'ottimizzatore in BaseTrainer.build_optimizer.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
model | str | None | Specifica il file del modello per l'addestramento. Accetta un percorso verso un modello preaddestrato .pt o 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 (es., coco8.yaml), che contiene i percorsi per l'addestramento e i dati di convalida, i nomi delle classi e il numero di classi. La classificazione richiede invece una directory del dataset o il nome di un dataset integrato (es., 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ò influenzare la durata dell'addestramento e le prestazioni del modello. |
time | float | None | Tempo massimo di addestramento in ore. Se impostato, questo sovrascrive l'argomento epochs, consentendo all'addestramento di interrompersi automaticamente dopo la durata specificata. Utile per scenari di addestramento con vincoli di tempo. |
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 | Batch size, con tre modalità: impostata come intero (es. batch=16), modalità auto per un utilizzo della memoria GPU del 60% (batch=-1) o modalità auto con frazione di utilizzo specificata (batch=0.70). |
imgsz | int | 640 | Dimensione target dell'immagine per l'addestramento. Le immagini vengono ridimensionate a quadrati con lati uguali al valore specificato (se rect=False), preservando l'aspect ratio per i modelli YOLO ma non per RT-DETR. Influisce sulla precisione 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 il deployment del modello. |
save_period | int | -1 | Frequenza di salvataggio dei checkpoint del modello, specificata in epoche. Un valore di -1 disabilita questa funzione. Utile per salvare modelli intermedi durante lunghe sessioni di addestramento. |
cache | bool | False | Abilita la memorizzazione nella cache delle immagini del dataset in memoria (True/ram), su disco (disk) o la disabilita (False). Migliora la velocità di addestramento riducendo l'I/O su disco a scapito di un maggiore utilizzo di memoria. |
device | int o str o list | None | Specifica il 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), NPU Huawei Ascend (device=npu:0 o device=npu:0,1), oppure selezione automatica di una GPU inattiva (device=-1) o di più GPU inattive (device=[-1,-1]). |
workers | int | 8 | Numero di thread di lavoro per il caricamento dei dati (per RANK in caso di addestramento Multi-GPU). Influisce sulla velocità di preelaborazione dei dati e sull'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 una memorizzazione organizzata dei diversi esperimenti. |
name | str | None | Nome della sessione di addestramento. Utilizzato per creare una sottodirectory all'interno della cartella del progetto, dove vengono archiviati i log e gli output dell'addestramento. |
exist_ok | bool | False | Se True, consente la sovrascrittura di una directory progetto/nome esistente. Utile per la sperimentazione iterativa senza dover cancellare manualmente i precedenti output. |
save_dir | str | None | Specifica la directory esatta in cui vengono salvati gli output dell'esecuzione, sovrascrivendo la combinazione project/name. Il percorso viene utilizzato così com'è senza incremento automatico, quindi le esecuzioni consecutive riutilizzano la stessa directory. |
pretrained | bool o str | True | Determina se avviare l'addestramento da pesi preaddestrati. Può essere un valore booleano o un percorso in formato stringa ai pesi da caricare. pretrained=False effettua l'addestramento da pesi inizializzati casualmente mantenendo l'architettura del modello. |
cls_remap | bool | True | Durante il fine-tuning su più dataset, copia le righe della testata di classificazione preaddestrata nel nuovo modello ovunque i nomi delle classi corrispondano, in modo che le classi sovrapposte mantengano il loro bias appreso, oltre ai loro pesi quando la larghezza della testata è invariata. Si applica sia che i conteggi delle classi differiscano sia che coincidano con un ordine delle classi diverso. |
optimizer | str | 'auto' | Scelta dell'ottimizzatore per l'addestramento. Le opzioni includono SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp o auto per la selezione automatica basata sulla configurazione del modello. Influisce sulla velocità di convergenza e sulla stabilità. |
seed | int | 0 | Imposta il seed casuale per l'addestramento, garantendo la riproducibilità dei risultati tra sessioni diverse con le stesse configurazioni. |
deterministic | bool | True | Forza l'uso di algoritmi deterministici, garantendo la riproducibilità ma potenzialmente influenzando le prestazioni e la velocità a causa della restrizione su algoritmi non deterministici. |
verbose | bool | True | Abilita l'output dettagliato durante l'addestramento, visualizzando barre di avanzamento, metriche per epoca e ulteriori informazioni sull'addestramento nella console. |
single_cls | bool | False | Tratta tutte le classi in dataset multi-classe come una singola classe durante l'addestramento. Utile per attività di classificazione binaria o quando ci si concentra sulla presenza di oggetti piuttosto che sulla classificazione. |
classes | list[int] | None | Specifica un elenco di ID classe su cui addestrare. Utile per filtrare e concentrarsi solo su determinate classi durante l'addestramento. |
rect | bool | False | Abilita la strategia di padding minimo: le immagini in un batch vengono imbottite al minimo per raggiungere una dimensione comune, con il lato più lungo uguale a imgsz. Può migliorare l'efficienza e la velocità, ma potrebbe influire sulla precisione del modello. |
multi_scale | float | 0.0 | Varia casualmente imgsz ogni batch di +/- multi_scale (es. 0.25 -> da 0.75x a 1.25x), arrotondando ai multipli dello stride del modello; 0.0 disabilita l'addestramento multi-scala. |
cos_lr | bool | False | Utilizza uno scheduler del learning rate a coseno, regolando il learning rate seguendo una curva a coseno nel corso delle epoche. Aiuta a gestire il learning rate per una migliore convergenza. |
close_mosaic | int | 10 | Disabilita il data augmentation a mosaico nelle ultime N epoche per stabilizzare l'addestramento prima del completamento. Impostare a 0 disabilita questa funzionalità. |
resume | bool | False | Riprende l'addestramento dall'ultimo checkpoint salvato. Carica automaticamente pesi del modello, stato dell'ottimizzatore e conteggio delle epoche, continuando l'addestramento senza interruzioni. |
amp | bool | True | Abilita l'addestramento in Automatic Mixed Precision (AMP), riducendo l'utilizzo di memoria e possibilmente accelerando l'addestramento con un impatto minimo sulla precisione. |
fraction | float | 1.0 | Specifica la frazione del dataset da utilizzare per l'addestramento. Consente l'addestramento su un sottoinsieme dell'intero dataset, utile per esperimenti o quando le risorse sono limitate. |
profile | bool | False | Abilita la profilazione delle velocità ONNX e TensorRT durante l'addestramento, utile per ottimizzare il deployment del modello. |
freeze | int o list | None | Congela i primi N layer del modello o i layer specificati per indice, riducendo il numero di parametri addestrabili. Utile per il fine-tuning o il transfer learning. |
lr0 | float | 0.01 | Learning rate iniziale (es. SGD=1E-2, Adam=1E-3). La regolazione di questo valore è cruciale per il processo di ottimizzazione, poiché influenza la velocità con cui vengono aggiornati i pesi del modello. |
lrf | float | 0.01 | Learning rate finale come frazione del tasso iniziale = (lr0 * lrf), utilizzato in combinazione con gli scheduler per regolare il learning rate nel tempo. |
momentum | float | 0.937 | Fattore di momentum per SGD o beta1 per gli ottimizzatori Adam, che influenza l'incorporazione dei gradienti passati nell'aggiornamento corrente. |
weight_decay | float | 0.0005 | Termine di regolarizzazione L2, che penalizza i pesi di grandi dimensioni per prevenire l'overfitting. |
warmup_epochs | float | 3.0 | Numero di epoche per il warmup del learning rate, aumentando gradualmente il learning rate da un valore basso a quello iniziale per stabilizzare l'addestramento nelle prime fasi. |
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, aiutando a stabilizzare l'addestramento del modello nelle epoche iniziali. |
distill_model | str | None | Percorso a un checkpoint del modello teacher (es. yolo26x.pt) per la knowledge distillation. Quando impostato, il modello student viene addestrato con una loss di distillazione aggiuntiva 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 della guida delle feature del teacher. |
box | float | 7.5 | Peso della componente di box loss nella loss function, che influenza l'importanza attribuita alla predizione accurata delle coordinate del bounding box. |
cls | float | 0.5 | Peso della perdita di classificazione nella funzione di perdita totale, che influisce sull'importanza della previsione corretta della classe rispetto ad altre componenti. |
cls_pw | float | 0.0 | Esponente per la ponderazione delle classi per gestire lo squilibrio delle classi utilizzando la frequenza inversa della classe. 0.0 disabilita la ponderazione delle classi, 1.0 applica la ponderazione completa basata sulla frequenza inversa. Valori compresi tra 0 e 1 forniscono una ponderazione parziale. |
dfl | float | 1.5 | Peso della distribution focal loss (DFL), un termine di localizzazione della bounding box che esegue la regressione delle distanze dei bordi del box. |
pose | float | 12.0 | Peso della perdita di posa nei modelli addestrati per la stima della posa, che influenza l'enfasi sulla previsione accurata dei keypoint della posa. |
kobj | float | 1.0 | Peso della perdita di objectness dei keypoint nei modelli di stima della posa, bilanciando la confidenza di rilevamento con l'accuratezza della posa. |
rle | float | 1.0 | Peso della perdita di stima della log-likelihood residua nei modelli di stima della posa, influenzando la precisione della localizzazione dei keypoint. |
angle | float | 1.0 | Peso della perdita dell'angolo nei modelli obb, influenzando la precisione delle previsioni dell'angolo della bounding box orientata. |
dlog | float | 1.0 | Peso della loss logaritmica scale-invariante (SILog) nei modelli di stima della profondità, il termine principale che guida l'accuratezza della profondità. |
dgrad | float | 0.5 | Peso della loss del gradiente nei modelli di stima della profondità, che penalizza gli errori nei bordi di profondità e incoraggia confini di superficie più nitidi. |
dlam | float | 1.0 | Fattore di focalizzazione della varianza della loss SILog nei modelli di stima della profondità. 1.0 rende la loss completamente invariante alla scala, mentre 0.0 la riduce a un semplice log-RMSE. |
nbs | int | 64 | Batch size nominale per la normalizzazione della perdita. |
overlap_mask | bool | True | Determina se le maschere degli oggetti debbano essere unite in un'unica maschera per l'addestramento o mantenute separate per ogni oggetto. In caso di sovrapposizione, la maschera più piccola viene sovrapposta a quella più grande durante l'unione. |
mask_ratio | int | 4 | Rapporto di downsampling per le maschere di segmentazione, che influisce sulla risoluzione delle maschere utilizzate durante l'addestramento. |
dropout | float | 0.0 | Tasso di dropout per la regolarizzazione nelle attività di classificazione, che previene l'overfitting omettendo casualmente 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. |
plots | bool | True | Genera e salva grafici delle metriche di addestramento e validazione, oltre a esempi di previsione, fornendo approfondimenti visivi sulle prestazioni del modello e sul progresso dell'apprendimento. |
compile | bool o str | False | Abilita la compilazione del grafo PyTorch 2.x torch.compile con backend='inductor'. Accetta True → "default", False → disabilita, oppure una modalità in formato stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Torna alla modalità eager con un avviso se non supportato. |
channels_last | bool | False | Utilizza il formato di memoria channels_last (NHWC) per le convoluzioni durante l'addestramento, accelerando le GPU CUDA Tensor Core senza variazioni nei risultati. Viene automaticamente ignorato su CPU e MPS, dove non offre alcun vantaggio. |
max_det | int | 300 | Specifica il numero massimo di oggetti conservati durante la fase di validazione dell'addestramento. |
L'argomento batch può essere configurato in tre modi:
- Batch Size fissa: imposta un valore intero (ad esempio,
batch=16), specificando direttamente il numero di immagini per batch. - Modalità Auto (60% di memoria GPU): usa
batch=-1per regolare automaticamente la dimensione del batch per un utilizzo della memoria CUDA di circa il 60%. - Modalità Auto 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. - Auto-ritentativo in caso di OOM: Se si verifica un errore di esaurimento della memoria CUDA durante la prima epoca, il trainer dimezza automaticamente la batch size e riprova (fino a 3 volte). Questo si applica solo all'addestramento su singola GPU; l'addestramento multi-GPU (DDP) solleverà immediatamente l'errore.
Impostazioni di aumentazione e iperparametri#
Le tecniche di augmentations 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 tabella seguente 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à (hue) dell'immagine di una frazione della ruota dei colori, introducendo variabilità cromatica. Aiuta il modello a generalizzare in diverse condizioni di illuminazione. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Altera la saturazione dell'immagine di una frazione, influenzando l'intensità dei colori. Utile per simulare diverse condizioni ambientali. |
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 varie condizioni di luce. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Ruota l'immagine in modo casuale entro l'intervallo di gradi specificato, migliorando la capacità del modello di riconoscere 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 della dimensione dell'immagine, aiutando a imparare a rilevare oggetti parzialmente visibili. |
scale | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 | Scala l'immagine con un fattore di guadagno, simulando oggetti a diverse distanze dalla fotocamera. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Inclina (shear) l'immagine di un grado specificato, mimando l'effetto di oggetti visti 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 verticalmente (sottosopra) con la probabilità specificata, aumentando la variabilità dei dati senza influenzare le caratteristiche dell'oggetto. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Capovolge l'immagine orizzontalmente con la probabilità specificata, utile per imparare 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 contro un ordine dei canali errato. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combina quattro immagini di addestramento in una, simulando diverse composizioni di scena e interazioni tra oggetti. Molto efficace per la comprensione di scene complesse. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Unisci due immagini e le loro 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 pur mantenendo regioni distinte. Migliora la robustezza del modello creando scenari di occlusione. |
copy_paste | float | 0 | segment | 0.0 - 1.0 | Copia e incolla oggetti tra le immagini per aumentare le istanze degli oggetti. |
copy_paste_mode | str | flip | segment | - | Specifica la strategia copy-paste da utilizzare. Le opzioni includono 'flip' e 'mixup'. |
auto_augment | str | randaugment | classify | - | Applica una politica di aumento 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 l'addestramento per incoraggiare il modello a concentrarsi su caratteristiche meno ovvie. |
augmentations | list | None | detect, segment, semantic, pose, obb | - | Trasformazioni Albumentations personalizzate per l'aumento avanzato dei dati (solo API Python). Accetta un elenco di oggetti di trasformazione per esigenze di aumento specializzate. |
Queste impostazioni possono essere regolate per soddisfare i requisiti specifici del dataset e del compito in questione. Sperimentare con valori diversi può aiutare a trovare la strategia di aumento ottimale che porta alle migliori prestazioni del modello.
Per ulteriori informazioni sulle operazioni di augmentations per l'addestramento, consulta la sezione di riferimento.
Registrazione (Logging)#
Nell'addestramento di un modello YOLO26, potresti trovare utile monitorare le prestazioni del modello nel tempo. È qui che entra in gioco il logging. Ultralytics YOLO offre supporto per tre tipi di logger: Comet, ClearML e TensorBoard.
Per utilizzare un logger, selezionalo dal menu a discesa nello snippet di codice qui sopra ed eseguilo. Il logger scelto verrà installato e inizializzato.
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 utilizzare Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()Ricordati di accedere al tuo account Comet sul loro sito web e ottenere la tua API key. 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 le risorse in modo efficiente. È progettata per aiutare i team a gestire, eseguire e riprodurre il loro lavoro di ML in modo più efficiente.
Per utilizzare 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 grafo TensorFlow, tracciare metriche quantitative sull'esecuzione del tuo 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 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 logger, puoi procedere con l'addestramento del modello. Tutte le metriche di addestramento verranno registrate automaticamente nella piattaforma scelta e potrai accedere a questi log per monitorare le prestazioni del modello nel tempo, confrontare diversi modelli e identificare le aree di miglioramento.
Cosa succede dopo#
Valida il tuo modello addestrato rispetto a dati trattenuti per verificarne l'accuratezza nel mondo reale, quindi esportalo in ONNX, TensorRT o un altro formato di deployment. Stai addestrando sui tuoi dati invece che su COCO8? Formattali prima con la Guida ai dataset.
FAQ#
Posso addestrare senza una GPU locale?#
Sì. L'addestramento cloud su Ultralytics Platform include crediti gratuiti per iniziare. Carica il tuo dataset, seleziona un modello e una GPU e addestra direttamente dal browser.
Come posso addestrare un modello di object detection utilizzando Ultralytics YOLO26?#
Per addestrare un modello di rilevamento oggetti usando Ultralytics YOLO26, puoi usare l'API Python o la CLI. Di seguito un esempio per entrambi:
from 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.
Quali sono le caratteristiche principali della modalità Addestramento (Train) di Ultralytics YOLO26?#
Le caratteristiche principali della modalità 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: Tracciamento in tempo reale delle metriche di addestramento per migliori approfondimenti.
Queste funzionalità rendono l'addestramento efficiente e personalizzabile in base alle tue esigenze. Per maggiori dettagli, consulta la sezione Caratteristiche principali della modalità di addestramento.
Come posso riprendere l'addestramento da una sessione interrotta in Ultralytics YOLO26?#
Per riprendere l'addestramento da una sessione interrotta, imposta l'argomento resume su True e specifica il percorso dell'ultimo checkpoint salvato.
from ultralytics import YOLO
# Load the partially trained model
model = YOLO("path/to/last.pt")
# Resume training
results = model.train(resume=True)Controlla la sezione sulla Ripresa di addestramenti interrotti per ulteriori informazioni.
Come posso addestrare un modello su un dataset sbilanciato?#
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_pw per risolvere questo problema.
L'argomento cls_pw controlla 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 della frequenza inversa- Valori tra
0.0e1.0: forniscono una ponderazione parziale per uno sbilanciamento moderato
I pesi delle classi vengono calcolati come (1.0 / class_counts) ^ cls_pw e normalizzati in modo che la loro media sia pari a 1.0.
from 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)Inizia con cls_pw=0.25 per dataset moderatamente sbilanciati e aumenta a 1.0 se le classi rare continuano a sottoperformare. Puoi controllare i pesi delle classi calcolati nei log di addestramento per verificare la distribuzione dei pesi.
Posso addestrare i modelli YOLO26 sui chip Apple silicon?#
Sì, Ultralytics YOLO26 supporta l'addestramento sui chip Apple silicon utilizzando il framework Metal Performance Shaders (MPS). Specifica 'mps' come tuo dispositivo di addestramento.
from 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.
Quali sono le impostazioni comuni di addestramento e come posso configurarle?#
Ultralytics YOLO26 ti permette di configurare una varietà di impostazioni di addestramento come dimensione del batch, tasso di apprendimento (learning rate), epoche e altro tramite argomenti. Ecco una breve panoramica:
| Argomento | Predefinito | Descrizione |
|---|---|---|
model | None | Percorso al file del modello per l'addestramento. |
data | None | Percorso al file YAML del dataset (ad esempio, coco8.yaml), o una directory o un nome di dataset (ad esempio, imagenet10) per la classificazione. |
epochs | 100 | Numero totale di epoche di addestramento. |
batch | 16 | Dimensione del batch, regolabile come numero intero o modalità automatica. |
imgsz | 640 | Dimensione dell'immagine target per l'addestramento. |
device | None | Dispositivo(i) di calcolo per l'addestramento come cpu, 0, 0,1 o mps. |
save | True | Abilita 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.