Data Augmentation
L'aumento dei dati addestra i modelli su copie esistenti delle immagini trasformate casualmente, ad esempio con capovolgimenti, ritagli e variazioni di colore, migliorandone la capacità di generalizzazione.
L'aumento dei dati amplia la varietà di un dataset di addestramento applicando trasformazioni casuali, come ribaltamenti, ritagli, ridimensionamenti, variazioni di colore e combinazioni di immagini, agli esempi che il dataset contiene già. Ogni copia trasformata conserva la propria etichetta originale, così il modello impara che un oggetto rimane lo stesso nonostante le variazioni del punto di vista, dell'illuminazione e della posizione. Poiché raccogliere ed etichettare nuove immagini è lento e costoso, l'aumento dei dati è la difesa più economica contro il sovradattamento e quasi tutti i moderni modelli di visione artificiale vengono addestrati con l'aumento dei dati.
Come funziona l'aumento dei dati#
La maggior parte delle pipeline di addestramento applica l'aumento dei dati online: il caricatore dei dati trasforma ogni immagine mentre crea un batch, estraendo ogni volta nuovi parametri casuali; così, a ogni epoca, ogni immagine appare in una versione diversa. L'aumento offline salva invece su disco un numero fisso di copie trasformate prima dell'addestramento, moltiplicando lo spazio occupato e offrendo al modello molte meno varianti distinte.
Due regole impediscono alle trasformazioni di alterare i dati. Primo, le etichette devono seguire i pixel: nel rilevamento degli oggetti, nella segmentazione delle istanze e nella stima della posa, una trasformazione geometrica deve aggiornare ogni riquadro di delimitazione, maschera e punto chiave, e un ribaltamento orizzontale scambia anche i punti chiave sinistri con quelli destri. Secondo, la trasformazione deve essere possibile nel mondo reale: i ribaltamenti verticali sono adatti alle immagini aeree e alle immagini al microscopio, mentre nelle scene stradali creano auto capovolte che non compaiono mai al momento dell'inferenza. Le trasformazioni di Torchvision gestiscono automaticamente la prima regola quando i riquadri vengono passati insieme all'immagine:
from urllib.request import urlopen
from PIL import Image
from torchvision import tv_tensors
from torchvision.transforms import v2
image = Image.open(urlopen("https://ultralytics.com/images/bus.jpg")) # 810 x 1080 pixels
boxes = tv_tensors.BoundingBoxes([[50, 400, 250, 900]], format="XYXY", canvas_size=(1080, 810))
# Flip every time (p=1.0) and shift colors; the box must move with the pixels
augment = v2.Compose([v2.RandomHorizontalFlip(p=1.0), v2.ColorJitter(brightness=0.4, saturation=0.7)])
new_image, new_boxes = augment(image, boxes)
print(f"Original box: {boxes.tolist()}")
print(f"Flipped box: {new_boxes.tolist()}")Il riquadro attorno all'uomo sul lato sinistro dell'immagine si sposta da [50, 400, 250, 900] a [560, 400, 760, 900], specchiato rispetto alla larghezza di 810 pixel; la variazione cromatica modifica i pixel senza toccare il riquadro.
Tecniche comuni#
- Trasformazioni geometriche: Ribaltamenti, rotazioni, ridimensionamenti, traslazioni, ritagli, deformazioni e trasformazioni prospettiche simulano diverse posizioni della telecamera e dimensioni degli oggetti.
- Trasformazioni fotometriche: Modifiche a luminosità, contrasto, saturazione e tonalità, oltre a sfocatura e rumore, simulano diverse condizioni di illuminazione, sensori e qualità delle immagini.
- Occlusione: La cancellazione casuale e il cutout oscurano dei rettangoli, impedendo al modello di basarsi su una sola parte dell'oggetto.
- Combinazione di immagini: MixUp fonde due immagini e le relative etichette, CutMix incolla una porzione di un'immagine in un'altra, il mosaico affianca quattro immagini in un unico campione di addestramento e il copy-paste trasferisce oggetti segmentati su nuovi sfondi.
- Policy automatizzate: RandAugment applica una sequenza casuale di trasformazioni controllata da sole due impostazioni, il numero e l'intensità delle trasformazioni, evitando così la costosa ricerca richiesta dalle precedenti policy apprese.
Pipeline di aumento dei dati per il rilevamento di oggetti#
Le pipeline di rilevamento concatenano più trasformazioni, ciascuna applicata con una propria probabilità, così ogni immagine di addestramento riceve una combinazione casuale diversa.
L'addestramento di Ultralytics YOLO esegue questa pipeline per impostazione predefinita: applica il mosaico a ogni immagine (mosaic=1.0), usa una probabilità del 50% di ribaltamento orizzontale (fliplr=0.5), una variazione di scala fino a ±50% e variazioni cromatiche HSV; disattiva inoltre il mosaico nelle ultime 10 epoche (close_mosaic=10), così il modello termina l'addestramento su immagini complete e dall'aspetto naturale.
from ultralytics import YOLO
# Carica un modello YOLO26n preaddestrato
model = YOLO("yolo26n.pt")
# fliplr: probabilità di ribaltamento orizzontale; scale: intervallo di zoom (+/- 70%); degrees: intervallo di rotazione (+/- 5)
results = model.train(data="coco8.yaml", epochs=10, fliplr=0.5, scale=0.7, degrees=5.0)Durante questa esecuzione, il trainer YOLO26 salva i primi tre batch aumentati come train_batch0.jpg, train_batch1.jpg e train_batch2.jpg, con i riquadri disegnati, così puoi verificare l'effetto di ogni impostazione prima di avviare un'esecuzione lunga.
Aumento dei dati e termini correlati#
- Dati sintetici: Generati da zero con motori di rendering, simulatori o modelli di diffusione. L'aumento dei dati modifica immagini reali già esistenti.
- Preelaborazione dei dati: Passaggi deterministici, come il ridimensionamento e la normalizzazione, applicati in modo identico a ogni immagine durante l'addestramento e l'inferenza. L'aumento dei dati è casuale e avviene solo durante l'addestramento.
- Aumento in fase di test (TTA): Esegue l'inferenza su diverse versioni aumentate dello stesso input, come copie ribaltate e ridimensionate, e combina le previsioni; sacrifica più calcoli per ottenere un lieve incremento della precisione.










