Data Augmentation con Ultralytics YOLO

YOLO data augmentation examples showing original and augmented images for training

Introduzione

La Data augmentation è una tecnica fondamentale nella computer vision che espande artificialmente il tuo dataset di addestramento applicando varie trasformazioni alle immagini esistenti. Quando addestri modelli di deep learning come Ultralytics YOLO, la data augmentation aiuta a migliorare la robustezza del modello, riduce l'overfitting e potenzia 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 dei modelli di computer vision:

  • Dataset espanso: Creando variazioni di immagini esistenti, puoi aumentare efficacemente la dimensione del tuo dataset di addestramento senza raccogliere nuovi dati.
  • Generalizzazione migliorata: I modelli imparano a riconoscere oggetti in condizioni varie, rendendoli più robusti nelle applicazioni reali.
  • 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 una corretta augmentation solitamente ottengono risultati migliori in termini di accuracy sui set di validazione e test.

L'implementazione di Ultralytics YOLO fornisce una suite completa di tecniche di augmentation, ognuna con scopi specifici e che contribuisce alle prestazioni del modello in modi differenti. Questa guida esplorerà in dettaglio ogni parametro di augmentation, aiutandoti a capire quando e come utilizzarli efficacemente nei tuoi progetti.

Configurazioni di esempio

Puoi personalizzare ogni parametro usando la Python API, la command line interface (CLI) o un file di configurazione. Di seguito sono riportati esempi su come impostare la data augmentation per 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="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.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="coco.yaml", epochs=100, augmentations=custom_transforms)

Utilizzo di un file di configurazione

Puoi definire tutti i parametri di addestramento, incluse le augmentations, in un file di configurazione YAML (ad esempio, train_custom.yaml). Il parametro mode è richiesto solo quando si utilizza 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 training
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")

Augmentations 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, con l'aggiustamento finale scelto casualmente tra -hsv_h e hsv_h. Ad esempio, con hsv_h=0.3, lo spostamento è selezionato casualmente tra -0.3 e 0.3. Per valori superiori a 0.5, lo spostamento di tonalità ruota attorno alla ruota dei colori, motivo per cui le augmentations appaiono identiche tra 0.5 e -0.5.
  • Scopo: Particolarmente utile per scenari esterni dove le condizioni di illuminazione possono influenzare drasticamente l'aspetto dell'oggetto. Ad esempio, una banana potrebbe apparire più gialla sotto la luce diretta del sole ma più verdastra al chiuso.
  • 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, con l'aggiustamento finale scelto casualmente tra -hsv_s e hsv_s. Ad esempio, con hsv_s=0.7, l'intensità è 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
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: Cambia la luminosità dell'immagine. L'iperparametro hsv_v definisce l'entità dello spostamento, con l'aggiustamento finale scelto casualmente tra -hsv_v e hsv_v. Ad esempio, con hsv_v=0.4, l'intensità è selezionata casualmente tra -0.4 e 0.4.
  • Scopo: Essenziale per addestrare modelli che devono funzionare in diverse condizioni di illuminazione. Ad esempio, una mela rossa potrebbe 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: 0.0 a 180
  • Predefinito: 0
  • Utilizzo: Ruota le immagini casualmente entro l'intervallo specificato. L'iperparametro degrees definisce l'angolo di rotazione, con l'aggiustamento finale scelto casualmente tra -degrees e degrees. Ad esempio, con degrees=10.0, la rotazione è 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
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 della dimensione dell'immagine. L'iperparametro translate definisce l'entità dello spostamento, con l'aggiustamento finale scelto casualmente due volte (una per ogni asse) nell'intervallo -translate e translate. Ad esempio, con translate=0.5, la traslazione è 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 interamente 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 sono mostrati poiché traslerebbero l'immagine completamente 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: 0.0 - 1.0
  • Predefinito: 0.5
  • Utilizzo: Ridimensiona le immagini di un fattore casuale entro l'intervallo specificato. L'iperparametro scale definisce il fattore di scala, con l'aggiustamento finale scelto casualmente tra 1-scale e 1+scale. Ad esempio, con scale=0.5, la scala è selezionata casualmente tra 0.5 e 1.5.
  • Scopo: Permette 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 è mostrato poiché farebbe scomparire l'immagine, mentre 1.0 risulta semplicemente in uno zoom 2x.
    • I valori visualizzati nella tabella seguente sono quelli applicati tramite l'iperparametro scale, non il fattore di scala finale.
    • Se scale è maggiore di 1.0, l'immagine può risultare molto piccola o capovolta, poiché il fattore di scala è scelto casualmente tra 1-scale e 1+scale. Ad esempio, con scale=3.0, la scala è selezionata casualmente tra -2.0 e 4.0. Se viene scelto un valore negativo, l'immagine viene capovolta.
-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

Taglio/Inclinazione (shear)

  • Intervallo: -180 a +180
  • Predefinito: 0
  • Utilizzo: Introduce una trasformazione geometrica che distorce l'immagine lungo l'asse x e l'asse y, spostando effettivamente parti dell'immagine in una direzione pur mantenendo le linee parallele. L'iperparametro shear definisce l'angolo di taglio, con l'aggiustamento finale scelto casualmente tra -shear e shear. Ad esempio, con shear=10.0, il taglio è selezionato 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 a variazioni negli angoli di visualizzazione causate da lievi 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 non perpendicolari della fotocamera. Applicare l'augmentation shear garantisce 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 piccoli e aumentarli gradualmente.
    • A differenza delle trasformazioni prospettiche, lo shear non introduce profondità o punti di fuga, ma distorce la forma degli oggetti cambiandone gli angoli pur mantenendo paralleli 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 sia lungo l'asse x che lungo l'asse y, simulando come appaiono gli oggetti quando 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 accorciati 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 nel mondo reale.
  • Implementazione di Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Trasformazione prospettica -0.001Trasformazione prospettica -0.0005Original image without augmentationTrasformazione prospettica 0.0005Trasformazione prospettica 0.001

Capovolgimento Alto-Basso (flipud)

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • Scopo: Utile per scenari in cui gli oggetti possono apparire capovolti. Ad esempio, nei sistemi di visione robotica, gli oggetti su nastri trasportatori o bracci robotici possono essere raccolti e posizionati con 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 attivato

Capovolgimento Sinistra-Destra (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, il che aiuta il modello a generalizzare rispetto agli oggetti che appaiono con orientamenti specchiati. L'iperparametro fliplr definisce la probabilità di applicare la trasformazione, con un valore di fliplr=1.0 che garantisce 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 una probabilità del 50% 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 contro le 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 attivato

Scambio di 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 garantisce che tutte le immagini subiscano lo scambio di canale e bgr=0.0 che lo disabilita. Ad esempio, con bgr=0.5, ogni immagine ha una probabilità del 50% di essere convertita da RGB a BGR.
  • Scopo: Aumenta la robustezza rispetto a diversi ordini di canali colore. Ad esempio, quando si addestrano modelli che devono funzionare su vari sistemi di telecamere e librerie di imaging dove i formati RGB e BGR possono essere usati in modo incoerente, o quando si implementano modelli in ambienti in cui il formato 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. L'iperparametro mosaic definisce la probabilità di applicare la trasformazione, con mosaic=1.0 che garantisce che tutte le immagini vengano combinate e mosaic=0.0 che disabilita la trasformazione. Ad esempio, con mosaic=0.5, ogni immagine ha una probabilità del 50% di essere combinata con altre tre immagini.
  • Scopo: Altamente efficace per migliorare il rilevamento di piccoli oggetti e la comprensione del contesto. Ad esempio, in 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 dimensioni diverse, occlusioni parziali e contesti ambientali creando artificialmente campioni di addestramento diversi da dati limitati.
  • Implementazione di Ultralytics: Mosaic
  • Nota:
    • Anche se l'aumento mosaic rende il modello più robusto, può anche rendere il processo di addestramento più impegnativo.
    • L'aumento mosaic può essere disabilitato verso la fine dell'addestramento impostando close_mosaic sul numero di epoche prima del completamento in cui dovrebbe 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 sarà abilitato per l'intero processo di addestramento.
    • Il centro del mosaico generato viene determinato utilizzando valori casuali e può trovarsi all'interno dell'immagine o al di fuori di essa.
    • L'implementazione attuale dell'aumento mosaic combina 4 immagini scelte casualmente dal dataset. Se il dataset è piccolo, la stessa immagine può essere utilizzata più volte nello stesso mosaico.
mosaic disattivatomosaic attivato
Immagine originale senza aumentoAumento a 4 immagini mosaic attivato

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 garantisce che tutte le immagini vengano miscelate e mixup=0.0 che disabilita la trasformazione. Ad esempio, con mixup=0.5, ogni immagine ha una probabilità del 50% 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 ogni immagine contribuisce per circa il 50%, con lievi variazioni.
Prima immagine, mixup disattivatoSeconda immagine, mixup disattivatomixup attivato
Prima immagine per miscelazione MixUpSeconda immagine per miscelazione MixUpAumento miscelazione MixUp attivato

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 garantisce che tutte le immagini subiscano questa trasformazione e cutmix=0.0 che la disabilita completamente. Ad esempio, con cutmix=0.5, ogni immagine ha una probabilità del 50% di avere una regione sostituita con una patch 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 occlusi da altri oggetti, migliorando l'accuratezza del rilevamento in ambienti complessi del mondo reale con oggetti sovrapposti.
  • Implementazione di Ultralytics: CutMix
  • Nota:
    • La dimensione e la posizione della regione tagliata vengono determinate casualmente per ogni applicazione.
    • A differenza del mixup che miscela i valori dei pixel globalmente, cutmix mantiene le intensità dei pixel originali all'interno delle regioni tagliate, preservando le caratteristiche locali.
    • Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone a nessun riquadro di delimitazione (bounding box) esistente. Inoltre, vengono conservati solo i riquadri di delimitazione che mantengono almeno 0.1 (10%) della loro area originale all'interno della regione incollata.
    • Questa soglia di area minima del riquadro di delimitazione non può essere modificata con l'implementazione attuale ed è impostata su 0.1 per impostazione predefinita.
Prima immagine, cutmix disattivatoSeconda immagine, cutmix disattivatocutmix attivato
Prima immagine per CutMixSeconda immagine per CutMixAumento CutMix attivato

Aumenti Specifici per la Segmentazione

Copy-Paste (copy_paste)

  • Intervallo: 0.0 - 1.0
  • Predefinito: 0
  • Utilizzo: Funziona solo per attività di segmentazione, questo aumento copia oggetti all'interno o tra le immagini in base a una probabilità specificata, controllata da copy_paste_mode. L'iperparametro copy_paste definisce la probabilità di applicare la trasformazione, con copy_paste=1.0 che garantisce che tutte le immagini vengano copiate e copy_paste=0.0 che disabilita la trasformazione. Ad esempio, con copy_paste=0.5, ogni immagine ha una probabilità del 50% di avere oggetti copiati da un'altra immagine.
  • Scopo: Particolarmente utile per attività di segmentazione di istanze e classi di oggetti rari. Ad esempio, nel rilevamento industriale dei difetti dove certi tipi di difetti appaiono raramente, l'aumento copy-paste può aumentare artificialmente la ricorrenza di questi rari difetti copiandoli da un'immagine all'altra, aiutando il modello a imparare meglio questi casi sottorappresentati senza richiedere ulteriori campioni difettosi.
  • Implementazione di Ultralytics: CopyPaste
  • Nota:
    • Come mostrato nella gif qui sotto, l'aumento copy_paste può essere utilizzato per copiare oggetti da un'immagine all'altra.
    • Una volta copiato un oggetto, indipendentemente dalla copy_paste_mode, la sua Intersection over Area (IoA) viene calcolata con tutti gli oggetti dell'immagine sorgente. Se tutte le IoA sono inferiori a 0.3 (30%), l'oggetto viene incollato nell'immagine di destinazione. Se solo una delle IoA è superiore a 0.3, l'oggetto non viene incollato nell'immagine di destinazione.
    • La soglia IoA non può essere modificata con l'implementazione attuale ed è impostata su 0.3 per impostazione predefinita.
copy_paste disattivatocopy_paste attivato con copy_paste_mode=flipVisualizza il processo copy_paste
Immagine originale senza aumentoAumento copy-paste attivatoDemo animata aumento copy-paste

Modalità Copy-Paste (copy_paste_mode)

  • Opzioni: 'flip', 'mixup'
  • Predefinito: 'flip'
  • Utilizzo: Determina il metodo utilizzato per l'aumento 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 copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso.
    • A seconda delle dimensioni dell'immagine, gli oggetti potrebbero a volte 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 attivato con copy_paste_mode=mixup
Seconda immagine per miscelazione MixUpImmagine originale senza aumentoCopy-paste con modalità MixUp

Aumenti Specifici per la Classificazione

Auto Augment (auto_augment)

  • Opzioni: 'randaugment', 'autoaugment', 'augmix', None
  • Predefinito: 'randaugment'
  • Utilizzo: Applica politiche di aumento automatizzate per la classificazione. L'opzione 'randaugment' utilizza RandAugment, 'autoaugment' utilizza AutoAugment e 'augmix' utilizza AugMix. L'impostazione su None disabilita l'aumento automatizzato.
  • Scopo: Ottimizza automaticamente le strategie di aumento per i compiti di classificazione. Le differenze sono le seguenti:
    • AutoAugment: Questa modalità applica politiche di aumento predefinite apprese da dataset come ImageNet, CIFAR10 e SVHN. Puoi selezionare queste politiche esistenti ma non puoi addestrarne di nuove all'interno di Torchvision. Per scoprire strategie di aumento ottimali per dataset specifici, sarebbero necessarie librerie esterne o implementazioni personalizzate. Riferimento al documento su AutoAugment.
    • RandAugment: Applica una selezione casuale di trasformazioni con magnitudo uniforme. Questo approccio riduce la necessità di un'estesa fase di ricerca, rendendolo computazionalmente più efficiente pur migliorando la robustezza del modello. Riferimento al documento su RandAugment.
    • AugMix: AugMix è un metodo di aumento dei dati che migliora la robustezza del modello creando diverse variazioni di immagini attraverso combinazioni casuali di trasformazioni semplici. Riferimento al documento su 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 consultare questo articolo che confronta i tre metodi nel dettaglio.

Cancellazione casuale (erasing)

  • Intervallo: 0.0 - 0.9
  • Predefinito: 0.4
  • Utilizzo: Cancella casualmente porzioni dell'immagine durante l'addestramento alla classificazione. L'iperparametro erasing definisce la probabilità di applicare la trasformazione, con erasing=0.9 che garantisce che quasi tutte le immagini vengano cancellate e erasing=0.0 che disabilita la trasformazione. Ad esempio, con erasing=0.5, ogni immagine ha una probabilità del 50% di avere una porzione cancellata.
  • Scopo: Aiuta i modelli ad 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, mascherine o altri oggetti che potrebbero coprire parzialmente i tratti del viso. Questo 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'aumento erasing viene fornito con iperparametri scale, ratio e value che non possono essere modificati con l'implementazione attuale. I loro valori predefiniti sono (0.02, 0.33), (0.3, 3.3) e 0, rispettivamente, come indicato nella documentazione di PyTorch.
    • Il limite superiore dell'iperparametro erasing è impostato a 0.9 per evitare di applicare la trasformazione a tutte le immagini.
erasing disattivatoerasing attivato (esempio 1)erasing attivato (esempio 2)erasing attivato (esempio 3)
Immagine originale senza aumentoEsempio di cancellazione casuale 1Esempio di cancellazione casuale 2Esempio di cancellazione casuale 3

Funzionalità di aumento avanzate

Trasformazioni personalizzate Albumentations (augmentations)

  • Tipo: list di trasformazioni Albumentations
  • Predefinito: None
  • Utilizzo: Ti consente di fornire trasformazioni personalizzate Albumentations per l'aumento dei dati utilizzando la Python API. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento al posto delle trasformazioni Albumentations predefinite.
  • Scopo: Fornisce un controllo granulare sulle strategie di aumento dei dati sfruttando l'ampia libreria di trasformazioni Albumentations. Questo è particolarmente utile quando hai bisogno di aumenti specializzati oltre alle opzioni YOLO integrate, come regolazioni avanzate del colore, iniezione di rumore o trasformazioni specifiche del dominio.
  • Implementazione di Ultralytics: Albumentations
Esempio personalizzato Albumentations
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(var_limit=(10.0, 50.0), 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,
)

Punti chiave:

  • Solo Python API: Le trasformazioni personalizzate Albumentations sono attualmente supportate solo tramite la Python API. Non possono essere specificate tramite CLI o file di configurazione YAML.
  • Sostituisce le trasformazioni predefinite: Quando fornisci trasformazioni personalizzate tramite il parametro augmentations, esse sostituiscono completamente le trasformazioni Albumentations predefinite. Le aumentazioni YOLO predefinite (come mosaic, hsv_h, hsv_s, degrees, ecc.) rimangono attive e vengono applicate in modo indipendente.
  • Compatibilità dei BBox: Fai attenzione quando usi trasformazioni spaziali (trasformazioni che cambiano la geometria dell'immagine). Ultralytics gestisce automaticamente le regolazioni dei bounding box, ma alcune trasformazioni complesse potrebbero richiedere una configurazione aggiuntiva.
  • Ampia libreria: Albumentations offre oltre 70+ trasformazioni diverse. Esplora la documentazione di Albumentations per scoprire tutte le opzioni disponibili.
  • Considerazione sulle prestazioni: Aggiungere troppe aumentazioni o utilizzare trasformazioni computazionalmente costose può rallentare l'addestramento. Inizia con un piccolo set e monitora la velocità di addestramento.

Casi d'uso comuni:

  • Imaging medico: Applica trasformazioni specializzate come deformazioni elastiche o distorsioni della griglia per l'aumento di immagini radiografiche o MRI
  • Immagini aeree/satellitari: Usa trasformazioni ottimizzate per prospettive dall'alto
  • Condizioni di scarsa illuminazione: Applica rumore e regolazioni della luminosità per simulare condizioni di illuminazione difficili
  • Ispezione industriale: Aggiungi pattern simili a difetti o variazioni di texture per applicazioni di controllo qualità

Note di compatibilità:

  • Richiede la versione di Albumentations 1.0.3 o superiore
  • Compatibile con tutte le attività di rilevamento e segmentazione YOLO
  • Non applicabile per le attività di classificazione (la classificazione utilizza una pipeline di aumento diversa)

Per ulteriori informazioni su Albumentations e sulle trasformazioni disponibili, visita la documentazione ufficiale di Albumentations.

FAQ

Ci sono troppe aumentazioni tra cui scegliere. Come faccio a sapere quali usare?

Scegliere le giuste aumentazioni dipende dal tuo caso d'uso specifico e dal dataset. Ecco alcune linee guida generali per aiutarti a decidere:

  • Nella maggior parte dei casi, leggere variazioni di colore e luminosità sono benefiche. I valori predefiniti per hsv_h, hsv_s e hsv_v sono 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 potrebbe variare e hai bisogno che il modello sia più robusto, è meglio mantenere queste aumentazioni.
  • Usa l'aumento mosaic solo se avere oggetti parzialmente occlusi o più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi mantenere mosaic attivo ma aumentare il valore close_mosaic per disabilitarlo prima nel processo di addestramento.

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

Quando inizio un addestramento, vedo un riferimento albumentations: Blur[...]. Significa che Ultralytics YOLO esegue un'aumento aggiuntivo come la sfocatura?

Se il pacchetto albumentations è installato, Ultralytics applica automaticamente una serie di aumentazioni extra dell'immagine utilizzandolo. Queste aumentazioni vengono gestite internamente e non richiedono alcuna configurazione aggiuntiva.

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

Puoi anche fornire le tue trasformazioni personalizzate Albumentations utilizzando la Python API. Consulta la sezione Funzionalità di aumento avanzate per ulteriori dettagli.

Quando inizio un addestramento, non vedo alcun riferimento ad albumentations. Perché?

Controlla se il pacchetto albumentations è installato. In caso contrario, puoi installarlo eseguendo pip install albumentations. Una volta installato, il pacchetto dovrebbe essere rilevato automaticamente e utilizzato da Ultralytics.

Come posso personalizzare le mie aumentazioni?

Puoi personalizzare le aumentazioni creando una classe di dataset e un trainer personalizzati. Ad esempio, puoi sostituire le aumentazioni 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