Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Get Started
Creare dataset YOLO ad alte prestazioni·Preparazione·Lezione 7/10
Lezioneprincipiante

Usa l'aumento dei dati con attenzione

Verifica ogni trasformazione di aumento dei dati rispetto alla telecamera di deployment, crea un profilo motivato, usalo per il training e controlla il risultato nei batch di training.

Immagina una linea di smistamento che separa capsule rosse da capsule arancioni, addestrata con la variazione predefinita della tonalità. A ogni epoca il modello vede capsule rosse con una tonalità arancione, quindi impara che il colore non conta, proprio l'unica cosa che doveva imparare. L'aumento dei dati rende un modello più robusto solo quando ogni trasformazione è qualcosa che la telecamera di deployment potrebbe davvero produrre. Questa lezione ti fornisce il test per decidere quali trasformazioni mantenere.

Esito

Scegli un profilo di aumento dei dati con una giustificazione di una riga, relativa al deployment, per ogni argomento modificato, usalo per il training e verificalo in train_batch0.jpg.

Percorso rapido
Se sai già come muoverti, ecco la versione breve.
  1. Inizia il training con l'aumento dei dati predefinito e registra il valore di riferimento.

  2. Disattiva le trasformazioni che la telecamera non può mai produrre, come le variazioni di tonalità quando il colore definisce una classe.

  3. Attiva le trasformazioni che la telecamera può produrre, come flipud per le viste dall'alto.

  4. Apri train_batch0.jpg e verifica che i riquadri rimangano precisi e gli indizi di classe siano preservati.

Pratico

Cosa fa l'aumento dei dati#

Aumenti di una foto di un macao: riflessione orizzontale, ritaglio, sfocatura mediana, contrasto, variazione di tonalità-saturazione-valore e gamma

L'aumento dei dati trasforma al volo le immagini di training, così il modello vede una versione leggermente diversa di ogni immagine a ogni epoca. Se eseguito correttamente, migliora la robustezza a illuminazione, scala e orientamento e riduce l'overfitting, perché il modello non può memorizzare immagini che cambiano continuamente. Se eseguito male, insegna scene fisicamente impossibili e nasconde lacune nel dataset che dovresti correggere.

Guarda il riquadro della tonalità qui sopra: il macao rosso diventa giallo. È innocuo per distinguere «macao» da «non macao», ma è dannoso se il colore distingue due delle tue classi.

Le impostazioni predefinite importanti#

Questi sono i valori predefiniti in Ultralytics 8.4; la guida di riferimento alle impostazioni di aumento dei dati elenca ogni argomento:

ArgomentoPredefinitaFunzioneModificalo quando
hsv_h0.015Variazione della tonalitàImpostala su 0 quando il colore definisce una classe
hsv_s / hsv_v0.7 / 0.4Variazione di saturazione e luminositàRiducila se l'illuminazione è fissa e controllata
degrees0.0Rotazione casuale (±gradi)Aumentala quando gli oggetti possono comparire a qualsiasi angolo
translate / scale0.1 / 0.5Traslazione e zoomRiducili se i ritagli possono escludere parti che definiscono la classe
fliplr0.5Probabilità di riflessione orizzontaleImpostala su 0 quando la distinzione tra sinistra e destra è importante, come nel testo
flipud0.0Probabilità di riflessione verticaleAumentala per viste dall'alto, aeree o al microscopio
mosaic1.0Unisce quattro immagini in unaRaramente; vedi close_mosaic
close_mosaic10Disattiva mosaic per le ultime N epocheRiducila per le esecuzioni molto brevi
mixup / cutmix0.0 / 0.0Unisce due immagini / incolla una porzione di un'immagine su un'altraProvala su dataset piccoli, dopo aver stabilito un valore di riferimento
copy_paste0.0Incolla istanze di oggetti tra immaginiDataset di segmentazione, semantici e OBB con classi rare

I dataset di profondità fanno eccezione: mosaic, mixup, cutmix e copy_paste produrrebbero mappe di profondità abbinate non valide, quindi il caricatore dei dati di profondità li imposta automaticamente su 0.

Il test di deployment#

Ogni trasformazione attivata deve superare una domanda e poi una seconda:

TrasformazioneRealistica?Esito
Luminosità ±30% su una telecamera esternaSì: ora del giornoMantieni
Riflessione orizzontale su una telecamera di sicurezzaSì: le persone camminano in entrambe le direzioniMantieni
Riflessione verticale su una telecamera montata a pareteNo: il pavimento resta in bassoDisattiva
Capovolgimento verticale su una telecamera rivolta verso il basso sopra un nastro trasportatoreSì: nell'immagine non c'è un «alto»Attiva
Rotazione di 90° su una telecamera stradale fissaNo: la telecamera non ruota maiDisattiva
Variazione della tonalità quando le parti rosse e verdi appartengono a classi diverseNo: distrugge il segnaleDisattiva

Aumento con rotazione di 180 gradi: un'ara capovolta, una vista che una telecamera fissa e verticale non produce mai

Un'ara capovolta è un'immagine di addestramento adatta a un drone che guarda dritto verso il basso, ma sprecata per una telecamera fissata a una parete. Le trasformazioni che non superano il test producono un segnale di addestramento negativo: il modello impara a riconoscere immagini che non vedrà mai, a scapito della capacità di riconoscere quelle che vedrà.

Un profilo d'esempio#

Una telecamera rivolta verso il basso sopra un nastro trasportatore smista parti le cui classi differiscono solo per il colore. Il jitter della tonalità va rimosso, mentre i capovolgimenti verticali e le piccole rotazioni diventano realistici. Questa configurazione viene eseguita come mostrato sul set dimostrativo COCO8; sostituisci il file YAML dei dati con il tuo e imposta un numero reale di epoche:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # il colore è il segnale della classe: mantieni le tonalità fedeli
    flipud=0.5,  # vista dall'alto: nel fotogramma non c'è un "alto"
    degrees=10.0,  # i componenti possono trovarsi a qualsiasi angolo ridotto
)

Apri train_batch0.jpg nella cartella dell'esecuzione e verifica tre cose: i riquadri restano precisi dopo la trasformazione, gli indizi che definiscono la classe (colore, forma, testo) restano intatti e nulla appare fisicamente impossibile. Riduci qualsiasi trasformazione che comprometta uno di questi aspetti. Addestra il tuo primo modello spiega l'esecuzione dell'addestramento.

Mosaic e close_mosaic#

Aumento Mosaic: quattro foto di pappagalli unite in un'unica immagine di addestramento

Mosaic unisce quattro immagini in una ed è attivo per impostazione predefinita. È l'aumento con il maggiore impatto per il rilevamento: ogni immagine di addestramento racchiude diverse scene, scale e contesti degli oggetti. Il problema è che le immagini Mosaic non assomigliano ai fotogrammi in fase di distribuzione, quindi close_mosaic=10 lo disattiva nelle ultime 10 epoche e il modello termina l'addestramento su input realistici. La disattivazione di Mosaic spegne anche mixup, cutmix e copy_paste, mentre i capovolgimenti, HSV e le trasformazioni geometriche continuano a essere applicati.

Le esecuzioni brevi non usano mai mosaic

Nelle esecuzioni di durata non superiore a close_mosaic epoche, incluso il profilo di un'epoca mostrato sopra, mosaic è disattivato fin dalla prima epoca. Valuta mosaic usando train_batch0.jpg di un'esecuzione a durata completa, non con un test rapido.

Cosa non può correggere l'aumento dei dati#

L'aumento dei dati moltiplica ciò che è già presente. Se il set di dati non contiene immagini notturne, nessuna impostazione genera la notte: produce versioni più chiare e più scure del giorno. Se una classe funziona solo con un aumento aggressivo, non hai abbastanza esempi di quella classe. Torna a Raccogliere dati rappresentativi e di alta qualità.

Portare al massimo tutti i parametri nasconde il vero problema

Su un dataset piccolo, impostare al massimo tutte le tecniche di aumento dei dati significa addestrare su immagini sempre più lontane dalle condizioni di produzione, e spesso la mAP di validazione cala. Modifica un solo argomento alla volta, per un motivo preciso, e confrontalo con la baseline predefinita sulla stessa suddivisione.

Quando i ritagli cancellano la classe

Se una classe è definita da una piccola parte dell'oggetto, come il simbolo nell'angolo di una carta da gioco, mosaic, translate e scale possono ritagliare quella parte e creare un'immagine di addestramento che sembra identica a un'altra classe. Riduci quei valori per quel dataset e verifica la correzione in train_batch0.jpg.

Provalo

Indica per ogni argomento della tabella dei valori predefiniti se mantenerlo, modificarlo o disattivarlo per la tua distribuzione, aggiungendo una riga di motivazione per ogni modifica. Esegui l'addestramento una volta con i valori predefiniti e una volta con il tuo profilo, usando la stessa suddivisione, e registra il mAP50-95 di val per entrambi. Risultati da consegnare: la tabella annotata, entrambi i punteggi e un train_batch0.jpg dell'esecuzione personalizzata.

Criteri di completamento
La lezione è completata quando tutte le seguenti condizioni sono soddisfatte.
  • Ogni argomento modificato ha una motivazione di una riga legata alla distribuzione.

  • I profili predefinito e personalizzato vengono confrontati sulla stessa suddivisione val.

  • train_batch0.jpg dell'esecuzione personalizzata mostra riquadri precisi e indizi di classe intatti.

Mostra la soluzione

Un drone sorvola un porto dall'alto e rileva navi con riquadri orientati. Da questo punto di vista non esiste un «alto», le navi sono orientate in tutte le direzioni e il colore non definisce la classe:

ArgomentoSceltaMotivazione
flipud0.5Una vista dall'alto appare uguale anche se capovolta verticalmente
degrees180Le navi appaiono con qualsiasi orientamento
hsv_hpredefinitoIl colore dello scafo varia e non è un segnale di classe
mosaicpredefinitoMolti oggetti piccoli per immagine; Mosaic è utile

Sul set dimostrativo aereo DOTA8:

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

Per una telecamera stradale fissa, le stesse due modifiche non supererebbero il test di distribuzione: le auto non appaiono mai capovolte in una ripresa da una telecamera montata a parete.

Prossimi passi

Il set di dati, le suddivisioni e l'aumento dei dati sono pronti; la prossima lezione determina in modo oggettivo se il set di dati è pronto per l'addestramento.

Accedi per salvare i progressi