Meet YOLO26: next-gen vision AI.

Link to this sectionData Augmentation con Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Link to this sectionIntroduzione#

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 migliora la generalizzazione a scenari reali.



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

Link to this sectionPerché 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 una corretta augmentation solitamente ottengono una migliore accuratezza sui set di validazione e test.

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

Link to this sectionConfigurazioni 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="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)

Link to this sectionUtilizzo di un file di configurazione#

Puoi definire tutti i parametri di addestramento, incluse le augmentation, 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")

Link to this sectionAugmentation dello spazio colore#

Link to this sectionRegolazione 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 viene selezionato casualmente tra -0.3 e 0.3. Per valori superiori a 0.5, lo spostamento della tonalità si riavvolge lungo la ruota dei colori, motivo per cui le augmentation sembrano identiche 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
Augmentation spostamento tonalità -0.5Augmentation spostamento tonalità -0.25Immagine originale senza augmentationAugmentation spostamento tonalità 0.25Augmentation spostamento tonalità -0.5

Link to this sectionRegolazione 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à 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
Augmentation saturazione -1.0 scala di grigiAugmentation saturazione -0.5Immagine originale senza augmentationAugmentation saturazione 0.5Augmentation saturazione 1.0 vivido

Link to this sectionRegolazione 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à 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
Augmentation luminosità -1.0 scuroAugmentation luminosità -0.5Immagine originale senza augmentationAugmentation luminosità 0.5Augmentation luminosità 1.0 luminoso

Link to this sectionTrasformazioni geometriche#

Link to this sectionRotazione (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 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
Augmentation rotazione -180 gradiAugmentation rotazione -90 gradiImmagine originale senza augmentationAugmentation rotazione 90 gradiAugmentation rotazione 180 gradi

Link to this sectionTraslazione (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, con l'aggiustamento finale scelto casualmente due volte (una per ogni asse) all'interno dell'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é traslerebbero l'immagine completamente fuori dall'inquadratura.
-0.5-0.250.00.250.5
Augmentation spostamento traslazione -0.5Augmentation spostamento traslazione -0.25Immagine originale senza augmentationAugmentation spostamento traslazione 0.25Augmentation spostamento traslazione 0.5

Link to this sectionScala (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, il ridimensionamento viene selezionato casualmente tra 0.5 e 1.5.
  • 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 comporta semplicemente 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 viene scelto casualmente tra 1-scale e 1+scale. Ad esempio, con scale=3.0, il ridimensionamento viene selezionato casualmente tra -2.0 e 4.0. Se viene scelto un valore negativo, l'immagine viene capovolta.
-0.5-0.250.00.250.5
Augmentation zoom out 0.5x scalaAugmentation zoom out 0.75x scalaImmagine originale senza augmentationAugmentation zoom in 1.25x scalaAugmentation zoom in 1.5x scala

Link to this sectionTaglio (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 efficacemente parti dell'immagine in una direzione 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 viene 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 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
Augmentation taglio -10 gradiAugmentation taglio -5 gradiImmagine originale senza augmentationAugmentation taglio 5 gradiAugmentation taglio 10 gradi

Link to this sectionProspettiva (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 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 Prospettiva -0.001Trasformazione Prospettiva -0.0005Immagine originale senza augmentationTrasformazione Prospettiva 0.0005Trasformazione Prospettiva 0.001

Link to this sectionCapovolgimento 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 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

Link to this sectionCapovolgimento 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 verso 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 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

Link to this sectionScambio Canali 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 canali 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 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

Link to this sectionMosaic (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: 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'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'attuale implementazione dell'aumento mosaic combina 4 immagini scelte casualmente dal dataset. Se il dataset è piccolo, la stessa immagine potrebbe essere utilizzata più volte nello stesso mosaico.
mosaic disattivatomosaic attivato
Immagine originale senza aumentoAumento mosaico a 4 immagini abilitato

Link to this sectionMixup (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 scelto da una distribuzione beta np.random.beta(32.0, 32.0), il che significa che ogni immagine contribuisce per circa il 50%, con leggere variazioni.
Prima immagine, mixup disattivatoSeconda immagine, mixup disattivatomixup attivato
Prima immagine per la miscelazione MixUpSeconda immagine per la miscelazione MixUpAumento miscelazione MixUp abilitato

Link to this sectionCutMix (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 vedere 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 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 miscela i valori dei pixel globalmente, cutmix mantiene le intensità originali dei pixel all'interno delle regioni tagliate, preservando le caratteristiche locali.
    • Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone a nessuna bounding box esistente. Inoltre, vengono preservate solo le bounding box che conservano almeno lo 0.1 (10%) della loro area originale all'interno della regione incollata.
    • Questa soglia minima dell'area della bounding box non può essere modificata con l'attuale implementazione ed è impostata su 0.1 per impostazione predefinita.
Prima immagine, cutmix disattivatoSeconda immagine, cutmix disattivatocutmix attivato
Prima immagine per CutMixSeconda immagine per CutMixAumento CutMix abilitato

Link to this sectionAumenti specifici per la segmentazione#

Link to this sectionCopia-Incolla (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 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 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 dal copy_paste_mode, la sua Intersection over Area (IoA) viene calcolata con tutti gli oggetti dell'immagine sorgente. Se tutta l'IoA è inferiore a 0.3 (30%), l'oggetto viene incollato nell'immagine di destinazione. Se solo una parte dell'IoA è superiore a 0.3, l'oggetto non viene incollato nell'immagine di destinazione.
    • La soglia IoA non può essere modificata con l'attuale implementazione 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 copia-incolla abilitatoDemo animata dell'aumento copia-incolla

Link to this sectionModalità Copia-Incolla (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 entrambi i 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 attivato con copy_paste_mode=mixup
Seconda immagine per la miscelazione MixUpImmagine originale senza aumentoCopia-incolla con modalità MixUp

Link to this sectionAumenti specifici per la classificazione#

Link to this sectionAuto 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. Impostare su None disabilita l'aumento automatizzato.
  • Scopo: Ottimizza automaticamente le strategie di aumento per le attività 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 AutoAugment.
    • RandAugment: Applica una selezione casuale di trasformazioni con magnitudo uniforme. Questo approccio riduce la necessità di un'ampia fase di ricerca, rendendolo più efficiente dal punto di vista computazionale pur migliorando la robustezza del modello. Riferimento al documento RandAugment.
    • AugMix: AugMix è un metodo di aumento dei dati che migliora la robustezza del modello creando diverse variazioni dell'immagine attraverso combinazioni casuali di trasformazioni semplici. Riferimento al documento 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 i tre metodi in dettaglio.

Link to this sectionCancellazione 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 il 50% di probabilità di avere una porzione cancellata.
  • 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'aumento erasing viene fornito 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.
    • Il limite superiore dell'iperparametro erasing è impostato su 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

Link to this sectionFunzionalità di aumento avanzate#

Link to this sectionTrasformazioni Albumentations personalizzate (augmentations)#

  • Tipo: list di trasformazioni Albumentations
  • Predefinito: None
  • Utilizzo: Ti consente di fornire trasformazioni Albumentations personalizzate per l'aumento dei dati utilizzando l'API Python. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento invece 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 le opzioni YOLO integrate, come regolazioni avanzate del colore, iniezione di rumore o trasformazioni specifiche del dominio.
  • Implementazione di Ultralytics: Albumentations
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(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 API Python: Le trasformazioni Albumentations personalizzate sono attualmente supportate solo tramite l'API Python. 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 indipendentemente.
  • Compatibilità con i riquadri di delimitazione: Presta attenzione quando utilizzi trasformazioni spaziali (trasformazioni che modificano la geometria dell'immagine). Ultralytics gestisce automaticamente le regolazioni dei riquadri di delimitazione, ma alcune trasformazioni complesse potrebbero richiedere una configurazione aggiuntiva.
  • Libreria estesa: Albumentations offre oltre 70 diverse trasformazioni. Esplora la documentazione di Albumentations per scoprire tutte le opzioni disponibili.
  • Considerazione sulle prestazioni: Aggiungere troppi aumenti o utilizzare trasformazioni computazionalmente costose può rallentare l'addestramento. Inizia con un set ridotto 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 a raggi X o risonanza magnetica
  • Immagini aeree/satellitari: Utilizza trasformazioni ottimizzate per prospettive dall'alto
  • Condizioni di scarsa illuminazione: Applica regolazioni di rumore e luminosità per simulare un'illuminazione difficile
  • Ispezione industriale: Aggiungi pattern simili a difetti o variazioni di texture per applicazioni di controllo qualità

Note di compatibilità:

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

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

Link to this sectionFAQ#

Link to this sectionCi sono troppi aumenti tra cui scegliere. Come faccio a sapere quali usare?#

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 sono un solido punto di partenza.
  • Se il punto di vista della fotocamera è 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 fotocamera potrebbe variare e hai bisogno che il modello sia più robusto, è meglio mantenere questi aumenti.
  • Usa l'aumento mosaic solo se avere oggetti parzialmente occlusi o oggetti multipli 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 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.

Link to this sectionQuando avvio un addestramento, vedo un riferimento a albumentations: Blur[...]. Ciò significa che Ultralytics YOLO esegue un aumento aggiuntivo come la sfocatura?#

Se il pacchetto albumentations è installato, Ultralytics applica automaticamente una serie di aumenti extra alle immagini utilizzandolo. Questi aumenti sono gestiti 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 gli aumenti con una probabilità p maggiore di 0 sono attivi. Questi vengono applicati intenzionalmente a basse frequenze per mimare artefatti visivi del mondo reale, come effetti di sfocatura o scala di grigi.

Puoi anche fornire le tue trasformazioni Albumentations personalizzate utilizzando l'API Python. Vedi la sezione Funzionalità di aumento avanzate per maggiori dettagli.

Link to this sectionQuando avvio un addestramento, non vedo alcun riferimento ad albumentations. Perché?#

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

Link to this sectionCome posso personalizzare i miei aumenti?#

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

Commenti