YOLO Vision 2026:

Data Augmentation con Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Introduzione#

Data augmentation è una tecnica fondamentale nella visione artificiale che espande artificialmente il tuo set di dati di addestramento applicando varie trasformazioni alle immagini esistenti. Quando addestri modelli di deep learning come Ultralytics YOLO, l'aumento dei dati aiuta a migliorare la robustezza del modello, riduce l'overfitting e migliora la generalizzazione a scenari del mondo reale.



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

Perché la Data Augmentation è importante#

La data augmentation serve a diversi scopi critici nell'addestramento di modelli di computer vision:

  • Dataset Espanso: Creando variazioni delle immagini esistenti, puoi aumentare efficacemente le dimensioni del tuo dataset di addestramento senza raccogliere nuovi dati.
  • Generalizzazione Migliorata: I modelli imparano a riconoscere oggetti in diverse condizioni, rendendoli più robusti nelle applicazioni reali.
  • Riduzione dell'Overfitting: Introducendo variabilità nei dati di addestramento, è meno probabile che i modelli memorizzino caratteristiche specifiche dell'immagine.
  • Prestazioni Migliorate: I modelli addestrati con un'adeguata augmentations ottengono tipicamente una migliore precisione sui set di validazione e test.

L'implementazione di Ultralytics YOLO offre una suite completa di tecniche di augmentation, ognuna con scopi specifici e in grado di contribuire alle prestazioni del modello in modi differenti. Questa guida esplora le impostazioni di augmentation qui sotto, aiutandoti a comprendere quando e come utilizzarle efficacemente nei tuoi progetti.

Configurazioni di esempio#

Puoi personalizzare ogni parametro usando la Python API, l'interfaccia a riga di comando (CLI) o un file di configurazione. Di seguito sono riportati esempi di come impostare la data augmentation 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 di augmentation non disabilita Albumentations

Le trasformazioni elencate in questa pagina sono quelle che puoi controllare tramite gli argomenti di training. Ultralytics applica anche un piccolo set di Albumentations — sfocatura, sfocatura mediana, scala di grigi e CLAHE, ciascuno a p=0.01 — ogni volta che il pacchetto albumentations è installato e nessun argomento in default.yaml lo disattiva. Disinstalla il pacchetto per rimuoverlo oppure passa la tua lista a augmentations per sostituirlo.

Utilizzo di un file di configurazione#

Puoi definire tutti i parametri di addestramento, incluse le augmentations, in un file di configurazione YAML (es. train_custom.yaml). Il parametro mode è richiesto solo quando usi la CLI. Questo nuovo file YAML sovrascriverà quindi quello predefinito situato 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 la Python API:

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")

Augmentation dello spazio colore#

Regolazione della Tonalità (hsv_h)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.015
  • Utilizzo: Sposta i colori dell'immagine preservando le loro relazioni. L'iperparametro hsv_h definisce l'entità dello spostamento, con la regolazione finale scelta casualmente tra -hsv_h e hsv_h. Ad esempio, con hsv_h=0.3, lo spostamento viene selezionato casualmente tra -0.3 e 0.3. Per valori superiori a 0.5, lo spostamento della tonalità fa il giro della ruota dei colori, motivo per cui le augmentations appaiono uguali tra 0.5 e -0.5.
  • Scopo: Particolarmente utile per scenari all'aperto in cui le condizioni di illuminazione possono influenzare drasticamente l'aspetto dell'oggetto. Ad esempio, una banana potrebbe sembrare più gialla sotto la luce diretta del sole ma più verdastra al chiuso.
  • Implementazione di Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Aumento spostamento tonalità -0.5Aumento spostamento tonalità -0.25Immagine originale senza aumentoAumento spostamento tonalità 0.25Aumento spostamento tonalità -0.5

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, con la regolazione finale scelta casualmente tra -hsv_s e hsv_s. Ad esempio, con hsv_s=0.7, l'intensità viene selezionata casualmente tra -0.7 e 0.7.
  • Scopo: Aiuta i modelli a gestire diverse condizioni meteorologiche e impostazioni della fotocamera. Ad esempio, un segnale stradale rosso potrebbe apparire molto vivido in una giornata di sole ma apparire spento e sbiadito in condizioni di nebbia.
  • Implementazione di Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Aumento scala di grigi saturazione -1.0Aumento saturazione -0.5Immagine originale senza aumentoAumento saturazione 0.5Aumento vividità saturazione 1.0

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, con la regolazione finale scelta casualmente tra -hsv_v e hsv_v. Ad esempio, con hsv_v=0.4, l'intensità viene selezionata casualmente tra -0.4 e 0.4.
  • Scopo: Essenziale per l'addestramento di modelli che devono operare in diverse condizioni di illuminazione. Ad esempio, una mela rossa potrebbe sembrare luminosa sotto il sole ma molto più scura nell'ombra.
  • Implementazione di Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Aumento luminosità scura -1.0Aumento luminosità -0.5Immagine originale senza aumentoAumento luminosità 0.5Aumento luminosità chiara 1.0

Trasformazioni geometriche#

Rotazione (degrees)#

  • Intervallo: da 0.0 a 180
  • Predefinito: 0
  • Utilizzo: Ruota le immagini casualmente entro l'intervallo specificato. L'iperparametro degrees definisce l'angolo di rotazione, con la regolazione finale scelta casualmente tra -degrees e degrees. Ad esempio, con degrees=10.0, la rotazione viene selezionata casualmente tra -10.0 e 10.0.
  • Scopo: Cruciale per applicazioni in cui gli oggetti possono apparire con orientamenti diversi. Ad esempio, nelle immagini di droni aerei, i veicoli possono essere orientati in qualsiasi direzione, richiedendo ai modelli di riconoscere gli oggetti indipendentemente dalla loro rotazione.
  • Implementazione di Ultralytics: RandomPerspective
-180-900.090180
Aumento rotazione -180 gradiAumento rotazione -90 gradiImmagine originale senza aumentoAumento rotazione 90 gradiAumento rotazione 180 gradi

Traslazione (translate)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.1
  • Utilizzo: Sposta le immagini orizzontalmente e verticalmente di una frazione casuale della dimensione dell'immagine. L'iperparametro translate definisce l'entità dello spostamento, con la regolazione finale scelta casualmente due volte (una per ciascun asse) nell'intervallo -translate e translate. Ad esempio, con translate=0.5, la traslazione viene selezionata casualmente tra -0.5 e 0.5 sull'asse x, e un altro valore casuale indipendente viene selezionato nello stesso intervallo sull'asse y.
  • Scopo: Aiuta i modelli a imparare a rilevare oggetti parzialmente visibili e migliora la robustezza rispetto alla posizione dell'oggetto. Ad esempio, nelle applicazioni di valutazione dei danni ai veicoli, le parti dell'auto possono apparire completamente o parzialmente nell'inquadratura a seconda della posizione e della distanza del fotografo; la traslazione insegnerà 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 le stesse ogni volta per entrambi gli assi x e y. I valori -1.0 e 1.0 non vengono mostrati poiché trarrebbero l'immagine completamente fuori dall'inquadratura.
-0.5-0.250.00.250.5
Aumento spostamento traslazione -0.5Aumento spostamento traslazione -0.25Immagine originale senza aumentoAumento spostamento traslazione 0.25Aumento spostamento traslazione 0.5

Scala (scale)#

  • Intervallo: da 0.0 a 1.0 come float, oppure una tupla esplicita (min, max)
  • Predefinito: 0.5
  • Uso: ridimensiona le immagini di un fattore casuale all'interno dell'intervallo specificato. Come float, l'iperparametro scale definisce il guadagno di scaling, con il fattore finale scelto casualmente tra 1-scale e 1+scale. Ad esempio, con scale=0.5, lo scaling viene selezionato casualmente tra 0.5 e 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, richiedendo al modello di riconoscerli indipendentemente dalla loro dimensione.
  • Implementazione di Ultralytics: RandomPerspective
  • Nota:
    • Il valore -1.0 non viene mostrato poiché farebbe scomparire l'immagine, mentre 1.0 produce semplicemente uno zoom 2x.
    • I valori visualizzati nella tabella sottostante sono i delta di scala effettivi, non i valori passati all'iperparametro scale.
    • La forma float viene validata rispetto all'intervallo 0.0 - 1.0, e un valore al di fuori di esso genera un ValueError. Per campionare un fattore oltre uno zoom 2x, passa invece la forma a tupla (min, max).
    • La forma a tupla si applica esclusivamente ai task geometrici. Il training di classificazione deriva il proprio intervallo di ritaglio dal float (da 1.0 - scale a 1.0), quindi passare una tupla in quel contesto genera un TypeError.
-0.5-0.250.00.250.5
Aumento zoom indietro scala 0.5xAumento zoom indietro scala 0.75xImmagine originale senza aumentoAumento zoom avanti scala 1.25xAumento zoom avanti scala 1.5x

Inclinazione (Shear) (shear)#

  • Intervallo: da -180 a +180
  • Predefinito: 0
  • Utilizzo: Introduce una trasformazione geometrica che deforma l'immagine lungo entrambi gli assi x e y, spostando efficacemente parti dell'immagine in una direzione pur mantenendo linee parallele. L'iperparametro shear definisce l'angolo di inclinazione, con la regolazione finale scelta casualmente tra -shear e shear. Ad esempio, con shear=10.0, l'inclinazione viene selezionata casualmente tra -10 e 10 sull'asse x, e un altro valore casuale indipendente viene selezionato nello stesso intervallo sull'asse y.
  • Scopo: Aiuta i modelli a generalizzare rispetto alle variazioni negli angoli di visualizzazione causate da leggere inclinazioni o punti di vista obliqui. Ad esempio, nel monitoraggio del traffico, oggetti come auto e segnali stradali possono apparire inclinati a causa di posizionamenti della fotocamera non perpendicolari. L'applicazione dell'augmentation di taglio assicura che il modello impari a riconoscere gli oggetti nonostante tali distorsioni.
  • Implementazione di Ultralytics: RandomPerspective
  • Nota:
    • I valori di shear possono distorcere rapidamente l'immagine, quindi è consigliabile iniziare con valori piccoli e aumentarli gradualmente.
    • A differenza delle trasformazioni prospettiche, il taglio non introduce profondità o punti di fuga, ma distorce invece la forma degli oggetti cambiando i loro angoli pur mantenendo paralleli i lati opposti.
-10-50.0510
Aumento taglio -10 gradiAumento taglio -5 gradiImmagine originale senza aumentoAumento taglio 5 gradiAumento taglio 10 gradi

Prospettiva (perspective)#

  • Intervallo: 0.0 - 0.001
  • Predefinito: 0
  • Utilizzo: Applica una trasformazione di prospettiva completa lungo entrambi gli assi x e y, simulando l'aspetto degli oggetti se visti da diverse profondità o angolazioni. L'iperparametro perspective definisce l'entità della prospettiva, con la regolazione finale scelta casualmente tra -perspective e perspective. Ad esempio, con perspective=0.001, la prospettiva viene selezionata casualmente tra -0.001 e 0.001 sull'asse x, e un altro valore casuale indipendente viene selezionato nello stesso intervallo sull'asse y.
  • Scopo: L'aumento della prospettiva è fondamentale per gestire cambiamenti estremi di punto di vista, specialmente in scenari in cui gli oggetti appaiono scorciati o distorti a causa di spostamenti prospettici. Ad esempio, nel rilevamento di oggetti tramite 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 queste distorsioni indotte dalla prospettiva, migliorando la loro robustezza nelle implementazioni reali.
  • Implementazione di Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Trasformazione prospettica -0.001Trasformazione prospettica -0.0005Immagine originale senza aumentoTrasformazione prospettica 0.0005Trasformazione prospettica 0.001

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 ma preserva tutte le relazioni spaziali tra gli oggetti. L'iperparametro flipud definisce la probabilità di applicare la trasformazione, con un valore di flipud=1.0 che assicura che tutte le immagini vengano capovolte e un valore di flipud=0.0 che disabilita completamente la trasformazione. Ad esempio, con flipud=0.5, ogni immagine ha il 50% di probabilità di essere capovolta sottosopra.
  • Scopo: Utile per 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 raccolti e posizionati in vari orientamenti. Il capovolgimento verticale aiuta il modello a riconoscere gli oggetti indipendentemente dal loro posizionamento dall'alto verso il basso.
  • Implementazione di Ultralytics: RandomFlip
flipud disattivatoflipud attivato
Immagine originale senza aumentoAumento capovolgimento verticale abilitato

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 inverte i lati destro e sinistro mantenendo la coerenza spaziale, il che aiuta il modello a generalizzare a oggetti che compaiono in orientamenti speculari. L'iperparametro fliplr definisce la probabilità di applicare la trasformazione, con un valore di fliplr=1.0 che assicura che tutte le immagini vengano capovolte e un valore di fliplr=0.0 che 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 di 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 apparire su entrambi i lati della strada, e il capovolgimento orizzontale aiuta il modello a riconoscerli altrettanto bene in entrambi gli orientamenti.
  • Implementazione di Ultralytics: RandomFlip
fliplr disattivatofliplr attivato
Immagine originale senza aumentoAumento capovolgimento orizzontale abilitato

Scambio Canale BGR (bgr)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: Scambia i canali di colore di un'immagine da RGB a BGR, alterando l'ordine in cui i colori sono rappresentati. L'iperparametro bgr definisce la probabilità di applicare la trasformazione, con bgr=1.0 che assicura che tutte le immagini subiscano lo scambio di canali e bgr=0.0 che 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 diverse ordinazioni dei canali di colore. Ad esempio, quando si addestrano modelli che devono funzionare su vari sistemi di telecamere e librerie di imaging in cui i formati RGB e BGR possono essere utilizzati in modo incoerente, o quando si implementano modelli in ambienti in cui il formato del colore di input potrebbe differire dai dati di addestramento.
  • Implementazione di Ultralytics: Format
bgr disattivatobgr attivato
Immagine originale senza aumentoAumento scambio canale BGR

Mosaic (mosaic)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 1
  • Utilizzo: Combina quattro immagini di addestramento in una sola. L'iperparametro mosaic definisce la probabilità di applicare la trasformazione, con mosaic=1.0 che assicura che tutte le immagini siano combinate e mosaic=0.0 che disabilita la trasformazione. Ad esempio, con mosaic=0.5, ogni immagine ha il 50% di probabilità di essere combinata con altre tre immagini.
  • Scopo: Molto efficace per migliorare il rilevamento di piccoli oggetti e la comprensione del contesto. Ad esempio, nei progetti di conservazione della fauna selvatica dove gli animali possono apparire a varie distanze e scale, l'aumento Mosaic aiuta il modello a imparare a riconoscere la stessa specie attraverso diverse dimensioni, occlusioni parziali e contesti ambientali, creando artificialmente diversi campioni di addestramento da dati limitati.
  • Implementazione di Ultralytics: Mosaic
  • Nota:
    • Anche se l'augmentations mosaic rende il modello più robusto, può anche rendere il processo di addestramento più impegnativo.
    • L'augmentations mosaic può essere disabilitata verso la fine dell'addestramento impostando close_mosaic sul numero di epoche prima del completamento in cui dovrebbe essere disattivata. Ad esempio, se epochs è impostato su 200 e close_mosaic è impostato su 20, l'augmentations mosaic verrà disabilitata dopo 180 epoche. Se close_mosaic è impostato su 0, l'augmentations mosaic sarà abilitata per l'intero processo di addestramento.
    • La chiusura del mosaic disabilita anche copy_paste, mixup e cutmix nella stessa epoca. I quattro elementi vengono disattivati insieme, in modo che le epoche finali si addestrino senza di essi mentre tutte le altre augmentation — le trasformazioni geometriche, HSV, i ribaltamenti e Albumentations — continuano a funzionare. Nota che copy_paste nella sua modalità predefinita flip opera all'interno di una singola immagine anziché combinarne diverse.
    • Il centro del mosaico generato viene determinato utilizzando valori casuali e può trovarsi all'interno dell'immagine o al di fuori di essa.
    • L'attuale implementazione dell'augmentation mosaic combina l'immagine corrente con altre 3, estratte da un buffer di immagini caricate di recente o da qualsiasi punto del dataset quando cache='ram'. In entrambi i casi vengono campionate con reinserimento, quindi la stessa immagine può comparire più volte in un singolo mosaic.
mosaic disattivatomosaic attivato
Immagine originale senza aumentoAumento Mosaic a 4 immagini abilitato

Mixup (mixup)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: Miscela due immagini e le loro etichette con una data probabilità. L'iperparametro mixup definisce la probabilità di applicare la trasformazione, con mixup=1.0 che assicura che tutte le immagini siano miscelate e mixup=0.0 che 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, il mixup aiuta il modello a imparare caratteristiche più robuste miscelando immagini di prodotti diversi, insegnandogli a identificare gli articoli anche quando sono parzialmente visibili o oscurati da altri prodotti su scaffali affollati.
  • Implementazione di Ultralytics: Mixup
  • Nota:
    • Il rapporto mixup è un valore casuale estratto da una distribuzione beta np.random.beta(32.0, 32.0), il che significa che ciascuna immagine contribuisce per circa il 50%, con lievi variazioni.
Prima immagine, mixup disattivatoSeconda immagine, mixup disattivatomixup attivato
Prima immagine per la fusione MixUpSeconda immagine per la fusione MixUpAumento fusione MixUp abilitato

CutMix (cutmix)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: Taglia una regione rettangolare da un'immagine e la incolla su un'altra immagine con una data probabilità. L'iperparametro cutmix definisce la probabilità di applicare la trasformazione, con cutmix=1.0 che assicura che tutte le immagini subiscano questa trasformazione e cutmix=0.0 che la disabilita completamente. Ad esempio, con cutmix=0.5, ogni immagine ha il 50% di probabilità di vedere una regione sostituita con una patch proveniente da un'altra immagine.
  • Scopo: Migliora le prestazioni del modello creando scenari di occlusione realistici pur mantenendo l'integrità delle caratteristiche locali. Ad esempio, nei sistemi di guida autonoma, il cutmix aiuta il modello a imparare a riconoscere veicoli o pedoni anche quando sono parzialmente oscurati da altri oggetti, migliorando la precisione di rilevamento in ambienti complessi del mondo reale con oggetti sovrapposti.
  • Implementazione di Ultralytics: CutMix
  • Nota:
    • La dimensione e la posizione della regione di taglio vengono determinate casualmente per ogni applicazione.
    • A differenza del mixup che fonde i valori dei pixel globalmente, cutmix mantiene le intensità dei pixel originali all'interno delle regioni ritagliate, preservando le caratteristiche locali.
    • Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone ad alcun bounding box esistente. Inoltre, vengono preservati solo i bounding box che conservano una quota sufficiente della loro area originale all'interno della regione incollata.
    • Questa soglia minima dell'area del bounding box non può essere modificata con l'implementazione corrente. È pari a 0.1 (10%) per le etichette di detection e a 0.01 (1%) una volta che le etichette contengono segmenti.
Prima immagine, cutmix disattivatoSeconda immagine, cutmix disattivatocutmix attivato
Prima immagine per CutMixSeconda immagine per CutMixAumento CutMix abilitato

Aumenti specifici per la segmentazione#

Copy-Paste (copy_paste)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: Funziona solo per attività di segmentazione, questa augmentazione copia oggetti all'interno o tra le immagini, controllata da copy_paste_mode. In modalità flip, copy_paste è la frazione di oggetti idonei copiati: un'immagine con sei oggetti idonei ottiene tre copie a copy_paste=0.5. In modalità mixup, lo stesso valore controlla anche la probabilità che venga eseguito il copy-paste. copy_paste=0.0 disabilita la trasformazione.
  • Scopo: Particolarmente utile per attività di segmentazione delle istanze e classi di oggetti rari. Ad esempio, nel rilevamento di difetti industriali in cui determinati tipi di difetti compaiono raramente, l'aumento copia-incolla può aumentare artificialmente la presenza di questi rari difetti copiandoli da un'immagine all'altra, aiutando il modello a imparare meglio questi casi sottorappresentati senza richiedere campioni difettosi aggiuntivi.
  • Implementazione di Ultralytics: CopyPaste
  • Nota:
    • Come mostrato nel video sottostante, l'aumento copy_paste può essere utilizzato per copiare oggetti da un'immagine all'altra.
    • Una volta selezionato un oggetto per la copia, 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 di IoA sono inferiori a 0.3 (30%); non viene incollato se un qualsiasi valore di IoA è pari o superiore a 0.3.
    • La soglia IoA non può essere modificata con l'implementazione corrente ed è impostata su 0.3 per impostazione predefinita.
copy_paste disattivatocopy_paste attivo con copy_paste_mode=flipVisualizza il processo copy_paste
Immagine originale senza aumentoAumento copia-incolla abilitato

Modalità Copy-Paste (copy_paste_mode)#

  • Opzioni: 'flip', 'mixup'
  • Predefinito: 'flip'
  • Utilizzo: Determina il metodo utilizzato per l'augmentations copy-paste. Se impostato su 'flip', gli oggetti provengono dalla stessa immagine, mentre 'mixup' consente di copiare oggetti da immagini diverse.
  • Scopo: Consente flessibilità nel modo in cui gli oggetti copiati vengono integrati nelle immagini di destinazione.
  • Implementazione di Ultralytics: CopyPaste
  • Nota:
    • Il principio IoA è lo stesso per entrambe le opzioni di copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso.
    • A seconda delle dimensioni dell'immagine, gli oggetti potrebbero talvolta essere copiati parzialmente o interamente fuori dall'inquadratura.
    • A seconda della qualità delle annotazioni poligonali, gli oggetti copiati potrebbero presentare lievi variazioni di forma rispetto agli originali.
Immagine di riferimentoImmagine scelta per copy_pastecopy_paste attivo con copy_paste_mode=mixup
Seconda immagine per la fusione MixUpImmagine originale senza aumentoCopia-incolla con modalità MixUp

Aumenti specifici per la classificazione#

Auto Augment (auto_augment)#

  • Opzioni: 'randaugment', 'autoaugment', 'augmix', None
  • Predefinito: 'randaugment'
  • Utilizzo: Applica policy di augmentations automatizzate per la classificazione. L'opzione 'randaugment' utilizza RandAugment, 'autoaugment' usa AutoAugment e 'augmix' usa AugMix. L'impostazione su None disabilita l'augmentations automatizzata.
  • Scopo: Ottimizza automaticamente le strategie di aumento per le attività di classificazione. Le differenze sono le seguenti:
    • AutoAugment: Questa modalità applica policy di augmentations predefinite apprese da dataset come ImageNet, CIFAR10 e SVHN. Gli utenti possono selezionare queste policy esistenti ma non possono addestrarne di nuove all'interno di Torchvision. Per scoprire strategie di augmentations ottimali per dataset specifici, sarebbero necessarie librerie esterne o implementazioni personalizzate. Riferimento al paper di AutoAugment.
    • RandAugment: Applica una selezione casuale di trasformazioni con magnitudo uniforme. Questo approccio riduce la necessità di un'estesa fase di ricerca, rendendolo più efficiente dal punto di vista computazionale pur migliorando la robustezza del modello. Riferimento al paper di RandAugment.
    • AugMix: AugMix è un metodo di data augmentation che migliora la robustezza del modello creando diverse varianti di immagini attraverso combinazioni casuali di trasformazioni semplici. Riferimento al paper di AugMix.
  • Implementazione di Ultralytics: classify_augmentations()
  • Nota:
    • Essenzialmente, la differenza principale tra i tre metodi è il modo in cui le politiche di aumento vengono definite e applicate.
    • Puoi fare riferimento a questo articolo che confronta in dettaglio i tre metodi.

Cancellazione Casuale (Random Erasing) (erasing)#

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0.4
  • Uso: cancella casualmente porzioni dell'immagine durante il training di classificazione. L'iperparametro erasing definisce la probabilità di applicare la trasformazione, con erasing=1.0 che cancella una regione in ogni immagine e erasing=0.0 che disabilita la trasformazione. Ad esempio, con erasing=0.5, ciascuna immagine ha una probabilità del 50% che le venga cancellata una porzione.
  • Scopo: Aiuta i modelli a apprendere caratteristiche robuste e previene l'eccessiva dipendenza da regioni specifiche dell'immagine. Ad esempio, nei sistemi di riconoscimento facciale, la cancellazione casuale aiuta i modelli a diventare più robusti verso occlusioni parziali come occhiali da sole, maschere facciali o altri oggetti che potrebbero coprire parzialmente le caratteristiche del volto. Ciò migliora le prestazioni nel mondo reale costringendo il modello a identificare gli individui utilizzando molteplici caratteristiche facciali anziché dipendere esclusivamente da tratti distintivi che potrebbero essere oscurati.
  • Implementazione di Ultralytics: classify_augmentations()
  • Nota:
    • L'augmentations erasing viene fornita con gli iperparametri scale, ratio e value che non possono essere modificati con l'implementazione attuale. I loro 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)
Immagine originale senza aumentoEsempio di cancellazione casuale 1Esempio di cancellazione casuale 2Esempio di cancellazione casuale 3

Funzionalità di aumento avanzate#

Trasformazioni Albumentations Personalizzate (augmentations)#

  • Tipo: list di trasformazioni Albumentations
  • Predefinito: None
  • Utilizzo: Ti consente di fornire trasformazioni Albumentations personalizzate per l'augmentations dei dati utilizzando l'API Python. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento anziché le trasformazioni Albumentations predefinite.
  • Scopo: fornisce un controllo granulare sulle strategie di data augmentation sfruttando la vasta libreria di trasformazioni di Albumentations. Questo è particolarmente utile quando hai bisogno di augmentation specializzate che vanno oltre le opzioni YOLO integrate, come deformazioni elastiche e distorsioni della griglia per l'imaging medico, trasformazioni ottimizzate per prospettive aeree e satellitari, variazioni di rumore e luminosità che simulano condizioni di scarsa illuminazione o variazioni di texture simili a difetti per l'ispezione industriale.
  • Implementazione di Ultralytics: Albumentations
  • Nota:
    • La creazione degli oggetti di trasformazione richiede la API Python. Ultralytics li serializza con A.to_dict() quando salva un checkpoint, consentendo a una lista già serializzata di effettuare il round-trip tramite un file di configurazione YAML o la CLI, ed è questo che 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 le altre — rimane attiva e viene applicata in modo indipendente.
    • Fai attenzione alle trasformazioni spaziali che modificano la geometria dell'immagine. Ultralytics regola automaticamente i bounding box, ma alcune trasformazioni complesse potrebbero richiedere una configurazione aggiuntiva.
    • Albumentations offre oltre 70 trasformazioni; la documentazione di Albumentations le elenca tutte. L'aggiunta di molte trasformazioni, o di alcune computazionalmente costose, rallenta il training, quindi inizia con un set piccolo e monitora il tempo per epoca.
    • Si applica ai task detect, segment, semantic, depth, pose e obb. La classificazione è esclusa poiché utilizza una pipeline di augmentation separata.

Gli esempi seguenti richiedono Albumentations 1.4.22 o versioni successive e quindi Python 3.9 o versioni successive.

Esempio 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#

  • Scegliere gli aumenti giusti dipende dal tuo caso d'uso specifico e dal 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 per hsv_h, hsv_s e hsv_v rappresentano un solido punto di partenza.
    • Se il punto di vista della telecamera è coerente e non cambierà una volta distribuito il modello, probabilmente puoi saltare trasformazioni geometriche come rotation, translation, scale, shear o perspective. Tuttavia, se l'angolo della telecamera può variare e hai bisogno che il modello sia più robusto, è meglio mantenere queste augmentations.
    • Usa l'augmentations mosaic solo se avere oggetti parzialmente occlusi o più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi mantenere attivo mosaic ma aumentare il valore di close_mosaic per disabilitarlo prima nel processo di addestramento.

    In breve: mantieni le cose semplici. Inizia con un piccolo set di aumenti e aggiungine gradualmente altri secondo necessità. L'obiettivo è migliorare la generalizzazione e la robustezza del modello, non complicare eccessivamente il processo di addestramento. Inoltre, assicurati che gli aumenti che applichi riflettano la stessa distribuzione di dati che il tuo modello incontrerà in produzione.

  • Se il pacchetto albumentations è installato, Ultralytics applica automaticamente una serie di augmentations di immagini extra utilizzandolo. Queste augmentations vengono gestite internamente e non richiedono alcuna configurazione aggiuntiva.

    Puoi trovare l'elenco completo delle trasformazioni applicate nella nostra documentazione tecnica e nella nostra guida all'integrazione di Albumentations. Nota che solo le augmentations con una probabilità p maggiore di 0 sono attive. Queste vengono applicate deliberatamente a basse frequenze per imitare gli artefatti visivi del mondo reale, come la sfocatura o gli effetti in scala di grigi.

    Puoi anche fornire le tue trasformazioni Albumentations personalizzate utilizzando l'API Python. Consulta la sezione Funzionalità di Augmentation Avanzate per maggiori dettagli.

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

    pip install albumentations

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

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

Commenti