Vai al contenuto

Formazione del modello con Ultralytics YOLO

Ultralytics YOLO ecosistema e integrazioni

Introduzione

L'addestramento di un modello di deep learning consiste nel fornirgli dati e regolare i suoi parametri in modo che possa fare previsioni accurate. La modalità Train di Ultralytics YOLOv8 è stata progettata per un addestramento efficace ed efficiente dei modelli di rilevamento degli oggetti, sfruttando appieno le capacità dell'hardware moderno. Questa guida ha lo scopo di fornire tutti i dettagli necessari per iniziare ad addestrare i tuoi modelli utilizzando il robusto set di funzioni di YOLOv8.



Guarda: Come addestrare un modello YOLOv8 su un dataset personalizzato in Google Colab.

Perché scegliere Ultralytics YOLO per la formazione?

Ecco alcuni motivi validi per scegliere la modalità Treno di YOLOv8:

  • Efficienza: Sfrutta al massimo il tuo hardware, sia che si tratti di una configurazione con una sola GPU sia che si tratti di una scalata su più GPU.
  • Versatilità: Addestramento su set di dati personalizzati oltre a quelli già disponibili come COCO, VOC e ImageNet.
  • Facilità d'uso: interfacce CLI e Python semplici ma potenti per un'esperienza di formazione immediata.
  • Flessibilità degli iperparametri: Un'ampia gamma di iperparametri personalizzabili per mettere a punto le prestazioni del modello.

Caratteristiche principali della modalità Treno

Di seguito sono elencate alcune caratteristiche salienti della modalità Treno di YOLOv8:

  • Download automatico dei dataset: I set di dati standard come COCO, VOC e ImageNet vengono scaricati automaticamente al primo utilizzo.
  • Supporto Multi-GPU: Scala i tuoi sforzi formativi senza problemi su più GPU per accelerare il processo.
  • Configurazione degli iperparametri: L'opzione di modificare gli iperparametri attraverso i file di configurazione YAML o gli argomenti di CLI .
  • Visualizzazione e monitoraggio: Tracciamento in tempo reale delle metriche di formazione e visualizzazione del processo di apprendimento per una migliore comprensione.

Suggerimento

  • YOLOv8 I set di dati come COCO, VOC, ImageNet e molti altri vengono scaricati automaticamente al primo utilizzo, ovvero... yolo train data=coco.yaml

Esempi di utilizzo

Addestra YOLOv8n sul set di dati COCO8 per 100 epoche con dimensioni dell'immagine 640. Il dispositivo di addestramento può essere specificato utilizzando l'opzione device argomento. Se non viene passato alcun argomento GPU device=0 verrà utilizzato se disponibile, altrimenti device='cpu' verrà utilizzato. Vedi la sezione Argomenti di seguito per un elenco completo degli argomenti di formazione.

Esempio di allenamento con una sola GPU e una sola CPU

Il dispositivo viene determinato automaticamente. Se è disponibile una GPU, verrà utilizzata, altrimenti la formazione verrà avviata dalla CPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

Formazione 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 funzione è disponibile sia attraverso l'API di Python che attraverso l'interfaccia a riga di comando. Per abilitare l'addestramento multi-GPU, specifica gli ID dei dispositivi GPU che desideri utilizzare.

Esempio di formazione multi-GPU

Per allenarsi 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('yolov8n.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])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Formazione su Apple M1 e M2 MPS

Grazie al supporto dei chip Apple M1 e M2 integrati 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 metodo ad alte prestazioni per eseguire compiti di calcolo e di elaborazione delle immagini sul silicio personalizzato di Apple.

Per abilitare la formazione sui chip Apple M1 e M2, devi specificare "mps" come dispositivo quando inizi il processo di formazione. Di seguito è riportato un esempio di come puoi farlo in Python e tramite la riga di comando:

Esempio di formazione MPS

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.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='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

Sfruttando la potenza di calcolo dei chip M1/M2, si ottiene un'elaborazione più efficiente dei compiti di formazione. Per una guida più dettagliata e per le opzioni di configurazione avanzate, consulta la documentazione di PyTorch MPS.

Riprendere gli allenamenti interrotti

Riprendere l'addestramento da uno stato precedentemente salvato è una funzione fondamentale quando si lavora con modelli di deep learning. Può essere utile in vari scenari, come quando il processo di addestramento è stato interrotto inaspettatamente o quando si desidera 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, il programma di apprendimento e il numero di epoch. Questo ti permette di continuare il processo di formazione senza problemi dal punto in cui è stato interrotto.

Puoi riprendere facilmente la formazione in Ultralytics YOLO impostando il parametro resume argomento a True quando si chiama l'opzione train e specificando il percorso del metodo .pt contenente i pesi del modello parzialmente addestrato.

Di seguito è riportato un esempio di come riprendere una formazione interrotta utilizzando Python e tramite la linea di comando:

Esempio di curriculum formativo

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)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

Impostando resume=True, il train continuerà l'allenamento dal punto in cui è stato interrotto, utilizzando lo stato memorizzato nel file "path/to/last.pt". Se il file resume è omesso o è impostato su False, il train inizierà una nuova sessione di formazione.

Ricorda che i checkpoint vengono salvati alla fine di ogni epoca per impostazione predefinita, oppure a intervalli fissi utilizzando l'opzione save_period quindi devi completare almeno un'epoca per riprendere una sessione di allenamento.

Impostazioni del treno

Le impostazioni di addestramento dei modelli di 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 chiave per l'addestramento includono la dimensione del batch, il tasso di apprendimento, il momentum e il decadimento dei pesi. Inoltre, la scelta dell'ottimizzatore, della funzione di perdita e della composizione del set di dati di addestramento possono influire sul processo di addestramento. Un'attenta messa a punto e la sperimentazione di queste impostazioni sono fondamentali per ottimizzare le prestazioni.

Argomento Predefinito Descrizione
model None Specifica il file del modello per la formazione. Accetta il percorso di un file .pt modello preaddestrato o un .yaml file di configurazione. È essenziale per definire la struttura del modello o per inizializzare i pesi.
data None Percorso del file di configurazione del dataset (es, coco8.yaml). Questo file contiene parametri specifici del set di dati, tra cui i percorsi dei dati di formazione e di convalida, i nomi delle classi e il numero di classi.
epochs 100 Numero totale di epoche di allenamento. Ogni epoch rappresenta un passaggio completo sull'intero set di dati. La regolazione di questo valore può influire sulla durata dell'addestramento e sulle prestazioni del modello.
time None Tempo massimo di allenamento in ore. Se impostato, sostituisce l'opzione epochs che permette di interrompere automaticamente l'allenamento dopo la durata specificata. Utile per gli scenari di formazione con vincoli di tempo.
patience 100 Numero di epoche da attendere senza miglioramenti nelle metriche di convalida prima di interrompere l'addestramento. Aiuta a prevenire l'overfitting interrompendo l'addestramento quando le prestazioni raggiungono il livello massimo.
batch 16 Dimensione del lotto per l'addestramento, che indica quante immagini vengono elaborate prima che i parametri interni del modello vengano aggiornati. AutoBatch (batch=-1) regola dinamicamente la dimensione del batch in base alla disponibilità di memoria della GPU.
imgsz 640 Dimensione dell'immagine target per l'addestramento. Tutte le immagini vengono ridimensionate a questa dimensione prima di essere inserite nel modello. Influisce sull'accuratezza del modello e sulla complessità computazionale.
save True Consente di salvare i checkpoint di formazione e i pesi finali del modello. Utile per riprendere l'addestramento o la distribuzione del modello.
save_period -1 Frequenza di salvataggio dei checkpoint del modello, specificata in epoche. Un valore di -1 disabilita questa funzione. Utile per salvare i modelli intermedi durante le lunghe sessioni di allenamento.
cache False Abilita la cache delle immagini del dataset in memoria (True/ram), su disco (disk), oppure disabilitarlo (False). Migliora la velocità di formazione riducendo l'I/O del disco al costo di un maggiore utilizzo della memoria.
device None Specifica il/i dispositivo/i di calcolo per la formazione: una singola GPU (device=0), GPU multiple (device=0,1), CPU (device=cpu), o MPS per il silicio Apple (device=mps).
workers 8 Numero di thread worker per il caricamento dei dati (per RANK se la formazione è multi-GPU). Influenza la velocità di preelaborazione dei dati e di alimentazione del modello, particolarmente utile nelle configurazioni multi-GPU.
project None Nome della directory del progetto in cui vengono salvati i risultati della formazione. Consente di archiviare in modo organizzato i diversi esperimenti.
name None Nome della sessione di allenamento. Utilizzato per creare una sottodirectory all'interno della cartella del progetto, dove vengono archiviati i log e gli output dell'allenamento.
exist_ok False Se è vero, permette di sovrascrivere una cartella di progetto/nome esistente. Utile per sperimentare in modo iterativo senza dover cancellare manualmente i risultati precedenti.
pretrained True Determina se iniziare l'addestramento da un modello preaddestrato. Può essere un valore booleano o un percorso di stringhe verso un modello specifico da cui caricare i pesi. Migliora l'efficienza della formazione e le prestazioni del modello.
optimizer 'auto' Scelta dell'ottimizzatore per la formazione. Le opzioni includono SGD, Adam, AdamW, NAdam, RAdam, RMSProp ecc. auto per la selezione automatica basata sulla configurazione del modello. Influisce sulla velocità di convergenza e sulla stabilità.
verbose False Abilita l'output verboso durante l'allenamento, fornendo registri dettagliati e aggiornamenti sui progressi. Utile per il debug e per monitorare da vicino il processo di formazione.
seed 0 Imposta il seme casuale per l'addestramento, garantendo la riproducibilità dei risultati tra le esecuzioni con le stesse configurazioni.
deterministic True Forza l'uso di algoritmi deterministici, garantendo la riproducibilità, ma può influire sulle prestazioni e sulla velocità a causa della limitazione degli algoritmi non deterministici.
single_cls False Tratta tutte le classi nei dataset multiclasse come un'unica classe durante l'addestramento. Utile per compiti di classificazione binaria o quando ci si concentra sulla presenza di oggetti piuttosto che sulla classificazione.
rect False Consente l'addestramento rettangolare, ottimizzando la composizione dei lotti per ottenere un'imbottitura minima. Può migliorare l'efficienza e la velocità, ma può influire sull'accuratezza del modello.
cos_lr False Utilizza uno scheduler del tasso di apprendimento del coseno, che regola il tasso di apprendimento seguendo una curva del coseno nel corso delle epoche. Aiuta a gestire il tasso di apprendimento per una migliore convergenza.
close_mosaic 10 Disabilita l'aumento dei dati del mosaico nelle ultime N epoche per stabilizzare l'addestramento prima del completamento. L'impostazione a 0 disabilita questa funzione.
resume False Riprende l'allenamento 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 True Abilita l'addestramento automatico di precisione mista (AMP), riducendo l'uso della memoria e possibilmente accelerando l'addestramento con un impatto minimo sulla precisione.
fraction 1.0 Specifica la frazione del dataset da utilizzare per l'addestramento. Consente l'addestramento su un sottoinsieme dell'intero set di dati, utile per gli esperimenti o quando le risorse sono limitate.
profile False Consente di profilare le velocità di ONNX e TensorRT durante l'addestramento, utile per ottimizzare la distribuzione del modello.
freeze None Congela i primi N livelli del modello o i livelli specificati per indice, riducendo il numero di parametri addestrabili. Utile per la messa a punto o l'apprendimento per trasferimento.
lr0 0.01 Tasso di apprendimento iniziale (cioè SGD=1E-2, Adam=1E-3) . La regolazione di questo valore è fondamentale per il processo di ottimizzazione, in quanto influisce sulla velocità di aggiornamento dei pesi del modello.
lrf 0.01 Tasso di apprendimento finale come frazione del tasso iniziale = (lr0 * lrf), utilizzato insieme agli schedulatori per regolare il tasso di apprendimento nel tempo.
momentum 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 0.0005 Termine di regolarizzazione L2 che penalizza i pesi grandi per evitare l'overfitting.
warmup_epochs 3.0 Numero di epoche per il riscaldamento del tasso di apprendimento, aumentando gradualmente il tasso di apprendimento da un valore basso al tasso di apprendimento iniziale per stabilizzare l'allenamento all'inizio.
warmup_momentum 0.8 Slancio iniziale per la fase di riscaldamento, con regolazione graduale dello slancio impostato nel corso del periodo di riscaldamento.
warmup_bias_lr 0.1 Tasso di apprendimento dei parametri di polarizzazione durante la fase di riscaldamento, che aiuta a stabilizzare l'addestramento del modello nelle epoche iniziali.
box 7.5 Peso della componente di perdita del box nella funzione di perdita, che influenza l'importanza attribuita alla previsione accurata delle coordinate del box di delimitazione.
cls 0.5 Peso della perdita di classificazione nella funzione di perdita totale, che influenza l'importanza della corretta previsione della classe rispetto agli altri componenti.
dfl 1.5 Peso della perdita focale della distribuzione, utilizzato in alcune versioni di YOLO per una classificazione a grana fine.
pose 12.0 Peso della perdita di posa nei modelli addestrati per la stima della posa, che influenza l'enfasi sulla previsione accurata dei punti chiave della posa.
kobj 2.0 Peso della perdita di oggettività dei punti chiave nei modelli di stima della posa, bilanciando la fiducia nel rilevamento con l'accuratezza della posa.
label_smoothing 0.0 L'applicazione di un'attenuazione delle etichette, che ammorbidisce le etichette dure in un mix di etichette di destinazione e di una distribuzione uniforme delle etichette, può migliorare la generalizzazione.
nbs 64 Dimensione nominale del lotto per la normalizzazione della perdita.
overlap_mask True Determina se le maschere di segmentazione devono sovrapporsi durante l'addestramento, applicabile nei compiti di segmentazione delle istanze.
mask_ratio 4 Rapporto di downsample per le maschere di segmentazione, che influisce sulla risoluzione delle maschere utilizzate durante l'addestramento.
dropout 0.0 Tasso di abbandono per la regolarizzazione nei compiti di classificazione, per evitare l'overfitting attraverso l'omissione casuale di unità durante l'addestramento.
val True Abilita la convalida durante l'addestramento, consentendo una valutazione periodica delle prestazioni del modello su un set di dati separato.
plots False Genera e salva i grafici delle metriche di addestramento e di convalida, così come gli esempi di previsione, fornendo una visione delle prestazioni del modello e della progressione dell'apprendimento.

Impostazioni di incremento e iperparametri

Le tecniche di incremento sono essenziali per migliorare la robustezza e le prestazioni dei modelli di YOLO introducendo variabilità nei dati di addestramento, aiutando il modello a generalizzarsi meglio ai dati non visti. La seguente tabella illustra lo scopo e l'effetto di ogni argomento di incremento:

Argomento Tipo Predefinito Gamma Descrizione
hsv_h float 0.015 0.0 - 1.0 Regola la tonalità dell'immagine di una frazione della ruota dei colori, introducendo la variabilità del colore. Aiuta il modello a generalizzarsi in diverse condizioni di illuminazione.
hsv_s float 0.7 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 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.0 -180 - +180 Ruota l'immagine in modo casuale all'interno dell'intervallo di gradi specificato, migliorando la capacità del modello di riconoscere gli oggetti con diversi orientamenti.
translate float 0.1 0.0 - 1.0 Traduce l'immagine in orizzontale e in verticale di una frazione delle dimensioni dell'immagine, aiutando l'apprendimento del rilevamento di oggetti parzialmente visibili.
scale float 0.5 >=0.0 Ridimensiona l'immagine con un fattore di guadagno, simulando oggetti a distanze diverse dalla telecamera.
shear float 0.0 -180 - +180 Taglia l'immagine di un grado specifico, imitando l'effetto degli oggetti visti da diverse angolazioni.
perspective float 0.0 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.0 0.0 - 1.0 Capovolge l'immagine con la probabilità specificata, aumentando la variabilità dei dati senza influire sulle caratteristiche dell'oggetto.
fliplr float 0.5 0.0 - 1.0 Capovolge l'immagine da sinistra a destra con la probabilità specificata, utile per l'apprendimento di oggetti simmetrici e per aumentare la diversità del set di dati.
bgr float 0.0 0.0 - 1.0 Inverte i canali dell'immagine da RGB a BGR con la probabilità specificata, utile per aumentare la robustezza di un ordine errato dei canali.
mosaic float 1.0 0.0 - 1.0 Combina quattro immagini di addestramento in una sola, simulando diverse composizioni della scena e interazioni di oggetti. Molto efficace per la comprensione di scene complesse.
mixup float 0.0 0.0 - 1.0 Mescola due immagini e le loro etichette, creando un'immagine composita. Migliora la capacità di generalizzazione del modello introducendo il rumore delle etichette e la variabilità visiva.
copy_paste float 0.0 0.0 - 1.0 Copia gli oggetti da un'immagine e li incolla su un'altra, utile per aumentare le istanze degli oggetti e imparare l'occlusione degli oggetti.
auto_augment str randaugment - Applica automaticamente un criterio di incremento predefinito (randaugment, autoaugment, augmix), ottimizzando i compiti di classificazione attraverso la diversificazione delle caratteristiche visive.
erasing float 0.4 0.0 - 0.9 Cancella a caso una parte dell'immagine durante l'addestramento alla classificazione, incoraggiando il modello a concentrarsi su caratteristiche meno evidenti per il riconoscimento.
crop_fraction float 1.0 0.1 - 1.0 Ritaglia l'immagine di classificazione a una frazione delle sue dimensioni per enfatizzare le caratteristiche centrali e adattarsi alle scale degli oggetti, riducendo le distrazioni dello sfondo.

Queste impostazioni possono essere regolate per soddisfare i requisiti specifici del set di dati e del compito da svolgere. La sperimentazione di diversi valori può aiutare a trovare la strategia di incremento ottimale che porta alle migliori prestazioni del modello.

Info

Per maggiori informazioni sulle operazioni di addestramento di potenziamento, consulta la sezione di riferimento.

Registrazione

Durante l'addestramento di un modello YOLOv8 , potresti trovare utile tenere traccia delle prestazioni del modello nel tempo. È qui che entra in gioco il logging. Ultralytics'YOLO supporta tre tipi di logger: Comet, ClearML e TensorBoard.

Per utilizzare un logger, selezionalo dal menu a tendina nel frammento di codice qui sopra ed eseguilo. Il logger scelto verrà installato e inizializzato.

Comet

Comet è una piattaforma che consente agli scienziati dei dati e agli sviluppatori di monitorare, confrontare, spiegare e ottimizzare esperimenti e modelli. Offre funzionalità come metriche in tempo reale, differenze di codice e monitoraggio degli iperparametri.

Per utilizzare Comet:

Esempio

# 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 variabili d'ambiente o allo script per registrare gli esperimenti.

ClearML

ClearML è una piattaforma open-source che automatizza il monitoraggio degli esperimenti e aiuta a condividere in modo efficiente le risorse. È stata progettata per aiutare i team a gestire, eseguire e riprodurre il loro lavoro di ML in modo più efficiente.

Per utilizzare ClearML:

Esempio

# 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 permette di visualizzare il tuo grafico TensorFlow , di tracciare metriche quantitative sull'esecuzione del grafico e di mostrare dati aggiuntivi come le immagini che lo attraversano.

Per utilizzare TensorBoard in Google Colab:

Esempio

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Per utilizzare TensorBoard localmente, esegui il comando seguente e visualizza i risultati su http://localhost:6006/.

Esempio

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Questo caricherà TensorBoard e lo indirizzerà alla directory in cui sono salvati i registri di allenamento.

Dopo aver configurato il logger, puoi procedere con la formazione del modello. Tutte le metriche dell'addestramento verranno registrate automaticamente nella piattaforma scelta e potrai accedere a questi registri per monitorare le prestazioni del tuo modello nel tempo, confrontare modelli diversi e identificare le aree di miglioramento.



Creato 2023-11-12, Aggiornato 2024-04-23
Autori: dependabot[bot] (1), glenn-jocher (10), fcakyon (1), Laughing-q (2), Burhan-Q (1)

Commenti