Ultralytics YOLO27:

Aumento dei dati con Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Introduzione#

L'aumento dei dati è una tecnica fondamentale nella computer vision che amplia artificialmente il dataset di addestramento applicando diverse trasformazioni alle immagini esistenti. Quando addestri modelli di deep learning come Ultralytics YOLO, l'aumento dei dati contribuisce a migliorare la robustezza del modello, riduce l'overfitting e migliora la generalizzazione agli scenari del mondo reale.



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

Perché l'aumento dei dati è importante#

L'aumento dei dati svolge diversi compiti fondamentali durante l'addestramento dei modelli di computer vision:

  • Dataset ampliato: creando varianti delle immagini esistenti, puoi aumentare efficacemente le dimensioni del dataset di addestramento senza raccogliere nuovi dati.
  • Migliore generalizzazione: i modelli imparano a riconoscere gli oggetti in condizioni diverse, diventando più robusti nelle applicazioni del mondo reale.
  • Riduzione dell'overfitting: introducendo variabilità nei dati di addestramento, è meno probabile che i modelli memorizzino caratteristiche specifiche delle immagini.
  • Prestazioni migliorate: i modelli addestrati con un aumento dei dati appropriato raggiungono in genere una precisione migliore sui set di validazione e di test.

L'implementazione di Ultralytics YOLO offre una suite completa di tecniche di aumento dei dati, ciascuna con uno scopo specifico e un contributo diverso alle prestazioni del modello. Questa guida analizza le impostazioni di aumento riportate di seguito e ti aiuta a capire quando e come utilizzarle efficacemente nei tuoi progetti.

Configurazioni di esempio#

Puoi personalizzare ogni parametro usando l'API Python, l'interfaccia della riga di comando (CLI) o un file di configurazione. Di seguito sono riportati esempi di configurazione dell'aumento dei dati con ciascun metodo.

Esempi di configurazione
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
    data="coco8.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco8.yaml", epochs=100, augmentations=custom_transforms)
Azzerare gli argomenti dell'aumento non disabilita Albumentations

Le trasformazioni elencate in questa pagina sono quelle che controlli tramite gli argomenti di addestramento. Ultralytics applica inoltre un piccolo insieme di Albumentations — sfocatura, sfocatura mediana, scala di grigi e CLAHE, ciascuna con p=0.01 — ogni volta che il pacchetto albumentations è installato; nessun argomento in default.yaml lo disattiva. Disinstalla il pacchetto per rimuoverlo oppure passa il tuo elenco a augmentations per sostituirlo.

Uso di un file di configurazione#

Puoi definire tutti i parametri di addestramento, inclusi gli aumenti, in un file di configurazione YAML (ad esempio, train_custom.yaml). Il parametro mode è necessario solo quando usi la CLI. Questo nuovo file YAML sostituirà quindi quello predefinito presente nel pacchetto ultralytics.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

Quindi avvia l'addestramento con l'API Python:

Esempio di addestramento
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

Aumenti dello spazio colore#

Regolazione della tonalità (hsv_h)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.015
  • Utilizzo: sposta i colori dell'immagine preservandone le relazioni. L'iperparametro hsv_h definisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente tra -hsv_h e hsv_h. Ad esempio, con hsv_h=0.3, lo spostamento viene selezionato casualmente nell'intervallo da -0.3 a 0.3. Per valori superiori a 0.5, lo spostamento della tonalità ricomincia dall'altro lato della ruota dei colori; per questo gli aumenti hanno lo stesso aspetto tra 0.5 e -0.5.
  • Scopo: particolarmente utile per gli scenari all'aperto, in cui le condizioni di illuminazione possono influire notevolmente sull'aspetto degli oggetti. Ad esempio, una banana può apparire più gialla sotto la luce intensa del sole, ma più verdastra in ambienti chiusi.
  • Implementazione di Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

Regolazione della saturazione (hsv_s)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.7
  • Utilizzo: modifica l'intensità dei colori nell'immagine. L'iperparametro hsv_s definisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente tra -hsv_s e hsv_s. Ad esempio, con hsv_s=0.7, l'intensità viene selezionata casualmente nell'intervallo da -0.7 a 0.7.
  • Scopo: aiuta i modelli a gestire condizioni meteorologiche e impostazioni della fotocamera variabili. Ad esempio, un segnale stradale rosso può apparire molto vivido in una giornata di sole, ma risultare opaco e sbiadito in condizioni di nebbia.
  • Implementazione di Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

Regolazione della luminosità (hsv_v)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.4
  • Utilizzo: modifica la luminosità dell'immagine. L'iperparametro hsv_v definisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente tra -hsv_v e hsv_v. Ad esempio, con hsv_v=0.4, l'intensità viene selezionata casualmente nell'intervallo da -0.4 a 0.4.
  • Scopo: essenziale per addestrare modelli che devono operare in condizioni di illuminazione diverse. Ad esempio, una mela rossa può apparire luminosa alla luce del sole, ma molto più scura all'ombra.
  • Implementazione di Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

Trasformazioni geometriche#

Rotazione (degrees)#

  • Intervallo: da 0.0 a 180
  • Predefinito: 0
  • Utilizzo: ruota casualmente le immagini entro l'intervallo specificato. L'iperparametro degrees definisce l'angolo di rotazione, mentre la regolazione finale viene scelta casualmente tra -degrees e degrees. Ad esempio, con degrees=10.0, la rotazione viene selezionata casualmente nell'intervallo da -10.0 a 10.0.
  • Scopo: fondamentale per le applicazioni in cui gli oggetti possono apparire con orientamenti diversi. Ad esempio, nelle immagini aeree acquisite da droni, i veicoli possono essere orientati in qualsiasi direzione; i modelli devono quindi riconoscere gli oggetti indipendentemente dalla loro rotazione.
  • Implementazione di Ultralytics: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

Traslazione (translate)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.1
  • Utilizzo: sposta le immagini orizzontalmente e verticalmente di una frazione casuale delle dimensioni dell'immagine. L'iperparametro translate definisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente due volte (una per ciascun asse) nell'intervallo tra -translate e translate. Ad esempio, con translate=0.5, la traslazione sull'asse x viene selezionata casualmente nell'intervallo da -0.5 a 0.5, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo.
  • Scopo: aiuta i modelli a imparare a rilevare oggetti parzialmente visibili e migliora la robustezza rispetto alla posizione degli oggetti. Ad esempio, nelle applicazioni di valutazione dei danni ai veicoli, i componenti dell'auto possono apparire interamente o parzialmente nell'inquadratura a seconda della posizione e della distanza del fotografo; l'aumento tramite traslazione insegna al modello a riconoscere queste caratteristiche indipendentemente dalla loro completezza o posizione.
  • Implementazione di Ultralytics: RandomPerspective
  • Nota: per semplicità, le traslazioni applicate di seguito sono uguali ogni volta per entrambi gli assi x e y. I valori -1.0 e 1.0 non sono mostrati perché sposterebbero completamente l'immagine fuori dall'inquadratura.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

Scala (scale)#

  • Intervallo: da 0.0 a 1.0 come float, oppure una tupla (min, max) esplicita
  • Predefinito: 0.5
  • Utilizzo: ridimensiona le immagini di un fattore casuale entro l'intervallo specificato. Come float, l'iperparametro scale definisce il guadagno di scala, mentre il fattore finale viene scelto casualmente tra 1-scale e 1+scale. Ad esempio, con scale=0.5, la scala viene selezionata casualmente nell'intervallo da 0.5 a 1.5. Come tupla, scale imposta direttamente tale intervallo, quindi scale=(0.5, 2.0) campiona il fattore tra 0.5 e 2.0.
  • Scopo: consente ai modelli di gestire oggetti a distanze e dimensioni diverse. Ad esempio, nelle applicazioni di guida autonoma, i veicoli possono apparire a varie distanze dalla fotocamera; il modello deve quindi riconoscerli indipendentemente dalle loro dimensioni.
  • Implementazione di Ultralytics: RandomPerspective
  • Nota:
    • Il valore -1.0 non è mostrato perché farebbe scomparire l'immagine, mentre 1.0 produce semplicemente uno zoom 2x.
    • I valori visualizzati nella tabella seguente sono le variazioni di scala effettive, non i valori passati all'iperparametro scale.
    • La forma float viene convalidata nell'intervallo da 0.0 a 1.0; un valore al di fuori di tale intervallo genera un ValueError. Per campionare un fattore oltre lo zoom 2x, passa invece la forma a tupla (min, max).
    • La forma a tupla si applica solo ai task geometrici. L'addestramento di classificazione ricava il proprio intervallo di ritaglio dal valore float (da 1.0 - scale a 1.0), quindi il passaggio di una tupla genera un TypeError.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Inclinazione (shear)#

  • Intervallo: da -180 a +180
  • Predefinito: 0
  • Utilizzo: introduce una trasformazione geometrica che inclina l'immagine lungo l'asse x e l'asse y, spostando di fatto parti dell'immagine in una direzione e mantenendo parallele le linee. L'iperparametro shear definisce l'angolo di inclinazione, mentre la regolazione finale viene scelta casualmente tra -shear e shear. Ad esempio, con shear=10.0, l'inclinazione sull'asse x viene selezionata casualmente nell'intervallo da -10 a 10, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo.
  • Scopo: aiuta i modelli a generalizzare rispetto alle variazioni degli angoli di visualizzazione causate da lievi inclinazioni o prospettive oblique. Ad esempio, nel monitoraggio del traffico, oggetti come automobili e segnali stradali possono apparire inclinati a causa del posizionamento non perpendicolare della fotocamera. L'applicazione dell'aumento tramite inclinazione assicura che il modello impari a riconoscere gli oggetti nonostante tali distorsioni.
  • Implementazione di Ultralytics: RandomPerspective
  • Nota:
    • I valori shear possono distorcere rapidamente l'immagine, quindi è consigliabile iniziare con valori bassi e aumentarli gradualmente.
    • A differenza delle trasformazioni prospettiche, l'inclinazione non introduce profondità o punti di fuga, ma distorce la forma degli oggetti modificandone gli angoli e mantenendo paralleti i lati opposti.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

Prospettiva (perspective)#

  • Intervallo: 0.0 - 0.001
  • Predefinito: 0
  • Utilizzo: applica una trasformazione prospettica completa lungo l'asse x e l'asse y, simulando l'aspetto degli oggetti osservati da profondità o angolazioni diverse. L'iperparametro perspective definisce l'entità della prospettiva, mentre la regolazione finale viene scelta casualmente tra -perspective e perspective. Ad esempio, con perspective=0.001, la prospettiva sull'asse x viene selezionata casualmente nell'intervallo da -0.001 a 0.001, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo.
  • Scopo: l'aumento prospettico è fondamentale per gestire variazioni estreme del punto di vista, soprattutto negli scenari in cui gli oggetti appaiono accorciati o distorti a causa dei cambiamenti prospettici. Ad esempio, nel rilevamento di oggetti basato su droni, edifici, strade e veicoli possono apparire allungati o compressi a seconda dell'inclinazione e dell'altitudine del drone. Applicando trasformazioni prospettiche, i modelli imparano a riconoscere gli oggetti nonostante le distorsioni indotte dalla prospettiva, migliorando la propria robustezza nelle implementazioni del mondo reale.
  • Implementazione di Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Capovolgimento verticale (flipud)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: esegue un capovolgimento verticale invertendo l'immagine lungo l'asse y. Questa trasformazione specchia l'intera immagine sottosopra, preservando tutte le relazioni spaziali tra gli oggetti. L'iperparametro flipud definisce la probabilità di applicazione della trasformazione: un valore flipud=1.0 assicura che tutte le immagini vengano capovolte, mentre un valore flipud=0.0 disabilita completamente la trasformazione. Ad esempio, con flipud=0.5, ogni immagine ha il 50% di probabilità di essere capovolta verticalmente.
  • Scopo: utile negli scenari in cui gli oggetti possono apparire sottosopra. Ad esempio, nei sistemi di visione robotica, gli oggetti sui nastri trasportatori o sui bracci robotici possono essere prelevati e posizionati con orientamenti diversi. Il capovolgimento verticale aiuta il modello a riconoscere gli oggetti indipendentemente dal loro orientamento dall'alto verso il basso.
  • Implementazione di Ultralytics: RandomFlip
flipud disattivatoflipud attivato
Original image without augmentationVertical flip augmentation enabled

Capovolgimento orizzontale (fliplr)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.5
  • Utilizzo: esegue un capovolgimento orizzontale specchiando l'immagine lungo l'asse x. Questa trasformazione scambia i lati sinistro e destro mantenendo la coerenza spaziale, aiutando il modello a generalizzare agli oggetti visualizzati con orientamenti speculari. L'iperparametro fliplr definisce la probabilità di applicazione della trasformazione: un valore fliplr=1.0 assicura che tutte le immagini vengano capovolte, mentre un valore fliplr=0.0 disabilita completamente la trasformazione. Ad esempio, con fliplr=0.5, ogni immagine ha il 50% di probabilità di essere capovolta da sinistra a destra.
  • Scopo: il capovolgimento orizzontale è ampiamente utilizzato nel rilevamento degli oggetti, nella stima della posa e nel riconoscimento facciale per migliorare la robustezza rispetto alle variazioni sinistra-destra. Ad esempio, nella guida autonoma, veicoli e pedoni possono trovarsi su entrambi i lati della strada; il capovolgimento orizzontale aiuta il modello a riconoscerli con la stessa efficacia in entrambi gli orientamenti.
  • Implementazione di Ultralytics: RandomFlip
fliplr disattivatofliplr attivato
Original image without augmentationHorizontal flip augmentation enabled

Scambio dei canali BGR (bgr)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: scambia i canali di colore di un'immagine da RGB a BGR, modificando l'ordine con cui sono rappresentati i colori. L'iperparametro bgr definisce la probabilità di applicazione della trasformazione: bgr=1.0 assicura che tutte le immagini subiscano lo scambio dei canali, mentre bgr=0.0 lo disabilita. Ad esempio, con bgr=0.5, ogni immagine ha il 50% di probabilità di essere convertita da RGB a BGR.
  • Scopo: aumenta la robustezza rispetto a diversi ordini dei canali di colore. Ad esempio, quando addestri modelli che devono funzionare con vari sistemi di fotocamere e librerie di imaging in cui i formati RGB e BGR possono essere utilizzati in modo non coerente, oppure quando distribuisci modelli in ambienti in cui il formato dei colori in ingresso può differire da quello dei dati di addestramento.
  • Implementazione di Ultralytics: Format
bgr disattivatobgr attivato
Original image without augmentationBGR channel swap augmentation

Mosaico (mosaic)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 1
  • Utilizzo: combina quattro immagini di addestramento in una sola. L'iperparametro mosaic definisce la probabilità di applicazione della trasformazione: mosaic=1.0 assicura che tutte le immagini vengano combinate, mentre mosaic=0.0 disabilita la trasformazione. Ad esempio, con mosaic=0.5, ogni immagine ha il 50% di probabilità di essere combinata con altre tre immagini.
  • Scopo: altamente efficace per migliorare il rilevamento degli oggetti piccoli e la comprensione del contesto. Ad esempio, nei progetti di conservazione della fauna selvatica, in cui gli animali possono apparire a distanze e scale diverse, l'aumento a mosaico aiuta il modello a imparare a riconoscere la stessa specie con dimensioni diverse, occlusioni parziali e contesti ambientali differenti, creando artificialmente campioni di addestramento diversificati a partire da dati limitati.
  • Implementazione di Ultralytics: Mosaic
  • Nota:
    • Anche se l'aumento mosaic rende il modello più robusto, può anche rendere più complesso il processo di addestramento.
    • L'aumento mosaic può essere disabilitato verso la fine dell'addestramento impostando close_mosaic sul numero di epoche mancanti al completamento, a partire dal quale deve essere disattivato. Ad esempio, se epochs è impostato su 200 e close_mosaic è impostato su 20, l'aumento mosaic verrà disabilitato dopo 180 epoche. Se close_mosaic è impostato su 0, l'aumento mosaic verrà applicato durante l'intero processo di addestramento.
    • La chiusura del mosaico disabilita contemporaneamente anche copy_paste, mixup e cutmix, alla stessa epoca. I quattro aumenti vengono disattivati insieme, quindi nelle epoche finali l'addestramento procede senza di essi, mentre tutti gli altri aumenti — le trasformazioni geometriche, HSV, i capovolgimenti e Albumentations — continuano a essere applicati. Nota che copy_paste nella modalità predefinita flip opera su una singola immagine anziché combinarne diverse.
    • Il centro del mosaico generato viene determinato usando valori casuali e può trovarsi all'interno o all'esterno dell'immagine.
    • L'implementazione attuale dell'aumento mosaic combina l'immagine corrente con altre 3, estratte da un buffer di immagini caricate di recente oppure da qualsiasi punto del dataset quando cache='ram'. In entrambi i casi, il campionamento avviene con reinserimento, quindi la stessa immagine può comparire più di una volta in un singolo mosaico.
mosaic disattivatomosaic attivato
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: fonde due immagini e le relative etichette con una probabilità specificata. L'iperparametro mixup definisce la probabilità di applicazione della trasformazione: mixup=1.0 assicura che tutte le immagini vengano miscelate, mentre mixup=0.0 disabilita la trasformazione. Ad esempio, con mixup=0.5, ogni immagine ha il 50% di probabilità di essere miscelata con un'altra immagine.
  • Scopo: migliora la robustezza del modello e riduce l'overfitting. Ad esempio, nei sistemi di riconoscimento dei prodotti al dettaglio, mixup aiuta il modello ad apprendere caratteristiche più robuste fondendo immagini di prodotti diversi e insegnandogli a identificare gli articoli anche quando sono parzialmente visibili o coperti da altri prodotti sugli scaffali affollati dei negozi.
  • Implementazione di Ultralytics: Mixup
  • Nota:
    • Il rapporto mixup è un valore casuale estratto da una distribuzione beta np.random.beta(32.0, 32.0); ciò significa che ogni immagine contribuisce per circa il 50%, con lievi variazioni.
Prima immagine, mixup disattivatoSeconda immagine, mixup disattivatomixup attivato
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: ritaglia una regione rettangolare da un'immagine e la incolla su un'altra con una probabilità specificata. L'iperparametro cutmix definisce la probabilità di applicazione della trasformazione: cutmix=1.0 assicura che tutte le immagini subiscano questa trasformazione, mentre cutmix=0.0 la disabilita completamente. Ad esempio, con cutmix=0.5, ogni immagine ha il 50% di probabilità di avere una regione sostituita con una porzione proveniente da un'altra immagine.
  • Scopo: migliora le prestazioni del modello creando scenari realistici di occlusione e preservando al contempo l'integrità delle caratteristiche locali. Ad esempio, nei sistemi di guida autonoma, cutmix aiuta il modello a imparare a riconoscere veicoli o pedoni anche quando sono parzialmente occlusi da altri oggetti, migliorando la precisione del rilevamento in ambienti complessi del mondo reale con oggetti sovrapposti.
  • Implementazione di Ultralytics: CutMix
  • Nota:
    • Le dimensioni e la posizione della regione ritagliata vengono determinate casualmente per ogni applicazione.
    • A differenza di mixup, che fonde globalmente i valori dei pixel, cutmix mantiene le intensità originali dei pixel all'interno delle regioni ritagliate, preservando le caratteristiche locali.
    • Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone ad alcun BBox esistente. Inoltre, vengono conservati solo i BBox che mantengono una porzione sufficiente della loro area originale all'interno della regione incollata.
    • Questa soglia minima dell'area del BBox non può essere modificata con l'implementazione attuale. È 0.1 (10%) per le etichette di rilevamento e 0.01 (1%) quando le etichette includono segmenti.
Prima immagine, cutmix disattivatoSeconda immagine, cutmix disattivatocutmix attivato
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Aumenti Copy-Paste#

Copy-Paste (copy_paste)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: richiede etichette poligonali, quindi si applica ai task di segmentazione e OBB; questo aumento copia gli oggetti all'interno o tra le immagini, controllato da copy_paste_mode. Nella modalità flip, copy_paste indica la frazione di oggetti idonei copiati: un'immagine con sei oggetti idonei acquisisce tre copie con copy_paste=0.5. Nella modalità mixup, lo stesso valore controlla anche la probabilità di esecuzione del copy-paste. copy_paste=0.0 disabilita la trasformazione.
  • Scopo: particolarmente utile per i task di segmentazione delle istanze e per le classi di oggetti rari. Ad esempio, nel rilevamento dei difetti industriali, in cui alcuni tipi di difetti compaiono raramente, l'aumento copy-paste può incrementare artificialmente la presenza di questi difetti rari copiandoli da un'immagine all'altra, aiutando il modello ad apprendere meglio questi casi sottorappresentati senza richiedere ulteriori campioni difettosi.
  • Implementazione di Ultralytics: CopyPaste
  • Nota:
    • Come mostrato nel video seguente, l'augmentation copy_paste può essere usata per copiare oggetti da un'immagine a un'altra.
    • Una volta selezionato un oggetto da copiare, il suo IoA viene calcolato rispetto a tutti gli oggetti già presenti nell'immagine di destinazione, indipendentemente da copy_paste_mode. L'oggetto viene incollato solo se tutti i valori IoA sono inferiori a 0.3 (30%); non viene incollato se un qualsiasi valore IoA è pari o superiore a 0.3.
    • La soglia IoA non può essere modificata con l'implementazione attuale ed è impostata su 0.3 per impostazione predefinita.
copy_paste disattivatocopy_paste attivo con copy_paste_mode=flipVisualizza il processo copy_paste
Original image without augmentationCopy-paste augmentation enabled

Modalità Copy-Paste (copy_paste_mode)#

  • Opzioni: 'flip', 'mixup'
  • Predefinito: 'flip'
  • Utilizzo: determina il metodo usato per l'augmentation copy-paste. Se impostata su 'flip', gli oggetti provengono dalla stessa immagine, mentre 'mixup' consente di copiare oggetti da immagini diverse.
  • Scopo: consente di definire con flessibilità come gli oggetti copiati vengono integrati nelle immagini di destinazione.
  • Implementazione di Ultralytics: CopyPaste
  • Nota:
    • Il principio IoA è lo stesso per entrambe le opzioni copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso.
    • A seconda delle dimensioni dell'immagine, a volte gli oggetti possono essere copiati parzialmente o interamente al di fuori dell'inquadratura.
    • A seconda della qualità delle annotazioni dei poligoni, gli oggetti copiati possono presentare lievi variazioni di forma rispetto agli originali.
Immagine di riferimentoImmagine scelta per copy_pastecopy_paste attivo con copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Augmentation specifiche per la classificazione#

Auto Augment (auto_augment)#

  • Opzioni: 'randaugment', 'autoaugment', 'augmix', None
  • Predefinito: 'randaugment'
  • Utilizzo: applica policy di augmentation automatizzate per la classificazione. L'opzione 'randaugment' usa RandAugment, 'autoaugment' usa AutoAugment e 'augmix' usa AugMix. Impostando None si disabilita l'augmentation automatizzata.
  • Scopo: ottimizza automaticamente le strategie di augmentation per le attività di classificazione. Le differenze sono le seguenti:
    • AutoAugment: questa modalità applica policy di augmentation predefinite apprese da dataset come ImageNet, CIFAR10 e SVHN. Gli utenti possono selezionare queste policy esistenti, ma non possono addestrarne di nuove in Torchvision. Per individuare strategie di augmentation ottimali per dataset specifici, sarebbero necessarie librerie esterne o implementazioni personalizzate. Consulta il paper su AutoAugment.
    • RandAugment: applica una selezione casuale di trasformazioni con intensità uniforme. Questo approccio riduce la necessità di un'ampia fase di ricerca, rendendolo più efficiente dal punto di vista computazionale e migliorando al contempo la robustezza del modello. Consulta il paper su RandAugment.
    • AugMix: AugMix è un metodo di augmentation dei dati che migliora la robustezza del modello creando diverse variazioni delle immagini attraverso combinazioni casuali di trasformazioni semplici. Consulta il paper su AugMix.
  • Implementazione di Ultralytics: classify_augmentations()
  • Nota:
    • In sostanza, la differenza principale tra i tre metodi consiste nel modo in cui le policy di augmentation vengono definite e applicate.
    • Puoi consultare questo articolo, che confronta in dettaglio i tre metodi.

Random Erasing (erasing)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.4
  • Utilizzo: cancella casualmente porzioni dell'immagine durante l'addestramento alla classificazione. L'iperparametro erasing definisce la probabilità di applicare la trasformazione: erasing=1.0 cancella una regione in ogni immagine, mentre erasing=0.0 disabilita la trasformazione. Ad esempio, con erasing=0.5, ogni immagine ha il 50% di probabilità che venga cancellata una porzione.
  • Scopo: aiuta i modelli ad apprendere caratteristiche robuste e impedisce un'eccessiva dipendenza da specifiche regioni dell'immagine. Ad esempio, nei sistemi di riconoscimento facciale, la cancellazione casuale aiuta i modelli a diventare più robusti alle occlusioni parziali, come occhiali da sole, mascherine o altri oggetti che possono coprire parzialmente i tratti del viso. Questo migliora le prestazioni nel mondo reale, costringendo il modello a identificare le persone usando molteplici caratteristiche facciali invece di dipendere esclusivamente da tratti distintivi che potrebbero essere oscurati.
  • Implementazione di Ultralytics: classify_augmentations()
  • Nota:
    • L'augmentation erasing include gli iperparametri scale, ratio e value, che non possono essere modificati con l'implementazione attuale. I relativi valori predefiniti sono rispettivamente (0.02, 0.33), (0.3, 3.3) e 0, come indicato nella documentazione di PyTorch.
erasing disattivatoerasing attivo (esempio 1)erasing attivo (esempio 2)erasing attivo (esempio 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Funzionalità avanzate di augmentation#

Trasformazioni Albumentations personalizzate (augmentations)#

  • Tipo: list di trasformazioni Albumentations
  • Predefinito: None
  • Utilizzo: consente di fornire trasformazioni Albumentations personalizzate per l'augmentation dei dati usando l'API Python. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento al posto delle trasformazioni Albumentations predefinite.
  • Scopo: offre un controllo dettagliato sulle strategie di augmentation dei dati sfruttando l'ampia libreria di trasformazioni Albumentations. È particolarmente utile quando servono augmentation specializzate oltre alle opzioni YOLO integrate, come deformazioni elastiche e distorsioni a griglia per l'imaging medicale, trasformazioni ottimizzate per prospettive aeree e satellitari dall'alto, variazioni di rumore e luminosità che simulano condizioni di scarsa illuminazione o variazioni delle texture simili a difetti per l'ispezione industriale.
  • Implementazione di Ultralytics: Albumentations
  • Nota:
    • La creazione degli oggetti di trasformazione richiede l'API Python. Ultralytics li serializza con A.to_dict() quando salva un checkpoint, consentendo a un elenco già serializzato di essere mantenuto attraverso un file di configurazione YAML o la CLI; questo permette a resume di ripristinarli.
    • Le trasformazioni personalizzate sostituiscono completamente il set predefinito di Albumentations. Ogni augmentation configurata altrove in questa pagina — mosaic, hsv_h, degrees e tutte le altre — rimane attiva e viene applicata in modo indipendente.
    • Le trasformazioni spaziali che modificano la geometria dell'immagine, incluse quelle annidate in A.OneOf o A.Compose, spostano i riquadri di delimitazione, i poligoni, i punti chiave e le maschere di profondità o semantiche insieme all'immagine; A.RandomGridShuffle non può preservare la topologia dei poligoni o dei punti chiave e genera un errore sui campioni di segmentazione, stima della posta e OBB.
    • Albumentations offre oltre 70 trasformazioni; la documentazione di Albumentations le elenca tutte. L'aggiunta di molte trasformazioni, o di trasformazioni computazionalmente costose, rallenta l'addestramento, quindi inizia con un set ridotto e monitora la durata delle epoche.
    • Si applica alle attività detect, segment, semantic, depth, pose e obb. La classificazione è esclusa perché usa una pipeline di augmentation separata.

Gli esempi seguenti richiedono Albumentations 1.4.22 o versioni successive e, di conseguenza, Python 3.9 o versioni successive.

Esempio di Albumentations personalizzato
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

FAQ#

  • La scelta delle augmentation appropriate dipende dal tuo caso d'uso specifico e dal tuo dataset. Ecco alcune linee guida generali per aiutarti a decidere:

    • Nella maggior parte dei casi, lievi variazioni di colore e luminosità sono vantaggiose. I valori predefiniti di hsv_h, hsv_s e hsv_v sono un buon punto di partenza.
    • Se il punto di vista della fotocamera è coerente e non cambierà una volta implementato il modello, probabilmente puoi evitare trasformazioni geometriche come rotation, translation, scale, shear o perspective. Tuttavia, se l'angolazione della fotocamera può variare e hai bisogno di rendere il modello più robusto, è meglio mantenere queste augmentation.
    • Usa l'augmentation mosaic solo se la presenza di oggetti parzialmente occlusi o di più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi lasciare attivo mosaic, ma aumentare il valore di close_mosaic per disabilitarlo prima durante il processo di addestramento.

    In breve: mantieni le cose semplici. Inizia con un set ridotto di augmentation e aggiungine gradualmente altre quando necessario. L'obiettivo è migliorare la capacità di generalizzazione e la robustezza del modello, non complicare eccessivamente il processo di addestramento. Assicurati inoltre che le augmentation applicate riflettano la stessa distribuzione dei dati che il modello incontrerà in produzione.

  • Se il pacchetto albumentations è installato, Ultralytics applica automaticamente un insieme di augmentation aggiuntive alle immagini utilizzandolo. Queste augmentation vengono gestite internamente e non richiedono configurazioni aggiuntive.

    Puoi trovare l'elenco completo delle trasformazioni applicate nella nostra documentazione tecnica e nella nostra guida all'integrazione di Albumentations. Nota che sono attive solo le augmentation con una probabilità p maggiore di 0. Vengono applicate intenzionalmente con bassa frequenza per imitare artefatti visivi del mondo reale, come effetti di sfocatura o scala di grigi.

    Puoi anche fornire trasformazioni Albumentations personalizzate usando l'API Python. Per maggiori dettagli, consulta la sezione Funzionalità avanzate di augmentation.

  • Verifica se il pacchetto albumentations è installato. In caso contrario, installalo:

    pip install albumentations

    Una volta installato, il pacchetto dovrebbe essere rilevato e usato automaticamente da Ultralytics.

  • Puoi personalizzare le augmentation creando una classe dataset e un trainer personalizzati. Ad esempio, puoi sostituire le augmentation di classificazione predefinite di Ultralytics con torchvision.transforms.Resize di PyTorch o con altre trasformazioni. Per i dettagli sull'implementazione, consulta l'esempio di addestramento personalizzato nella documentazione sulla classificazione.

Commenti