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.
Pratico
Cosa fa l'aumento dei dati#

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:
| Argomento | Predefinita | Funzione | Modificalo quando |
|---|---|---|---|
hsv_h | 0.015 | Variazione della tonalità | Impostala su 0 quando il colore definisce una classe |
hsv_s / hsv_v | 0.7 / 0.4 | Variazione di saturazione e luminosità | Riducila se l'illuminazione è fissa e controllata |
degrees | 0.0 | Rotazione casuale (±gradi) | Aumentala quando gli oggetti possono comparire a qualsiasi angolo |
translate / scale | 0.1 / 0.5 | Traslazione e zoom | Riducili se i ritagli possono escludere parti che definiscono la classe |
fliplr | 0.5 | Probabilità di riflessione orizzontale | Impostala su 0 quando la distinzione tra sinistra e destra è importante, come nel testo |
flipud | 0.0 | Probabilità di riflessione verticale | Aumentala per viste dall'alto, aeree o al microscopio |
mosaic | 1.0 | Unisce quattro immagini in una | Raramente; vedi close_mosaic |
close_mosaic | 10 | Disattiva mosaic per le ultime N epoche | Riducila per le esecuzioni molto brevi |
mixup / cutmix | 0.0 / 0.0 | Unisce due immagini / incolla una porzione di un'immagine su un'altra | Provala su dataset piccoli, dopo aver stabilito un valore di riferimento |
copy_paste | 0.0 | Incolla istanze di oggetti tra immagini | Dataset 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:
| Trasformazione | Realistica? | Esito |
|---|---|---|
| Luminosità ±30% su una telecamera esterna | Sì: ora del giorno | Mantieni |
| Riflessione orizzontale su una telecamera di sicurezza | Sì: le persone camminano in entrambe le direzioni | Mantieni |
| Riflessione verticale su una telecamera montata a parete | No: il pavimento resta in basso | Disattiva |
| Capovolgimento verticale su una telecamera rivolta verso il basso sopra un nastro trasportatore | Sì: nell'immagine non c'è un «alto» | Attiva |
| Rotazione di 90° su una telecamera stradale fissa | No: la telecamera non ruota mai | Disattiva |
| Variazione della tonalità quando le parti rosse e verdi appartengono a classi diverse | No: distrugge il segnale | Disattiva |

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#

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.
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à.
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.
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.
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:
| Argomento | Scelta | Motivazione |
|---|---|---|
flipud | 0.5 | Una vista dall'alto appare uguale anche se capovolta verticalmente |
degrees | 180 | Le navi appaiono con qualsiasi orientamento |
hsv_h | predefinito | Il colore dello scafo varia e non è un segnale di classe |
mosaic | predefinito | Molti 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=180Per 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.