Data Augmentation con Ultralytics YOLO#
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.
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)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.5Quindi avvia l'addestramento con la Python API:
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_hdefinisce l'entità dello spostamento, con la regolazione finale scelta casualmente tra-hsv_hehsv_h. Ad esempio, conhsv_h=0.3, lo spostamento viene selezionato casualmente tra-0.3e0.3. Per valori superiori a0.5, lo spostamento della tonalità fa il giro della ruota dei colori, motivo per cui le augmentations appaiono uguali tra0.5e-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.25 | 0.0 | 0.25 | 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_sdefinisce l'entità dello spostamento, con la regolazione finale scelta casualmente tra-hsv_sehsv_s. Ad esempio, conhsv_s=0.7, l'intensità viene selezionata casualmente tra-0.7e0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Regolazione della Luminosità (hsv_v)#
- Intervallo:
0.0-1.0 - Predefinito:
0.4 - Utilizzo: Modifica la luminosità dell'immagine. L'iperparametro
hsv_vdefinisce l'entità dello spostamento, con la regolazione finale scelta casualmente tra-hsv_vehsv_v. Ad esempio, conhsv_v=0.4, l'intensità viene selezionata casualmente tra-0.4e0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Trasformazioni geometriche#
Rotazione (degrees)#
- Intervallo: da
0.0a180 - Predefinito:
0 - Utilizzo: Ruota le immagini casualmente entro l'intervallo specificato. L'iperparametro
degreesdefinisce l'angolo di rotazione, con la regolazione finale scelta casualmente tra-degreesedegrees. Ad esempio, condegrees=10.0, la rotazione viene selezionata casualmente tra-10.0e10.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 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
translatedefinisce l'entità dello spostamento, con la regolazione finale scelta casualmente due volte (una per ciascun asse) nell'intervallo-translateetranslate. Ad esempio, contranslate=0.5, la traslazione viene selezionata casualmente tra-0.5e0.5sull'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
xey. I valori-1.0e1.0non vengono mostrati poiché trarrebbero l'immagine completamente fuori dall'inquadratura.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scala (scale)#
- Intervallo: da
0.0a1.0come 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
scaledefinisce il guadagno di scaling, con il fattore finale scelto casualmente tra1-scalee1+scale. Ad esempio, conscale=0.5, lo scaling viene selezionato casualmente tra0.5e1.5. Come tupla,scaleimposta direttamente tale intervallo, quindiscale=(0.5, 2.0)campiona il fattore tra0.5e2.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.0non viene mostrato poiché farebbe scomparire l'immagine, mentre1.0produce 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 unValueError. 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 - scalea1.0), quindi passare una tupla in quel contesto genera unTypeError.
- Il valore
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Inclinazione (Shear) (shear)#
- Intervallo: da
-180a+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
sheardefinisce l'angolo di inclinazione, con la regolazione finale scelta casualmente tra-sheareshear. Ad esempio, conshear=10.0, l'inclinazione viene selezionata casualmente tra-10e10sull'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
shearpossono 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.
- I valori di
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
perspectivedefinisce l'entità della prospettiva, con la regolazione finale scelta casualmente tra-perspectiveeperspective. Ad esempio, conperspective=0.001, la prospettiva viene selezionata casualmente tra-0.001e0.001sull'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.0005 | 0.0 | 0.0005 | 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.0che assicura che tutte le immagini vengano capovolte e un valore diflipud=0.0che disabilita completamente la trasformazione. Ad esempio, conflipud=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 disattivato | flipud attivato |
|---|---|
![]() | ![]() |
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
fliplrdefinisce la probabilità di applicare la trasformazione, con un valore difliplr=1.0che assicura che tutte le immagini vengano capovolte e un valore difliplr=0.0che disabilita completamente la trasformazione. Ad esempio, confliplr=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 disattivato | fliplr attivato |
|---|---|
![]() | ![]() |
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
bgrdefinisce la probabilità di applicare la trasformazione, conbgr=1.0che assicura che tutte le immagini subiscano lo scambio di canali ebgr=0.0che lo disabilita. Ad esempio, conbgr=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 disattivato | bgr attivato |
|---|---|
![]() | ![]() |
Mosaic (mosaic)#
- Intervallo:
0.0-1.0 - Predefinito:
1 - Utilizzo: Combina quattro immagini di addestramento in una sola. L'iperparametro
mosaicdefinisce la probabilità di applicare la trasformazione, conmosaic=1.0che assicura che tutte le immagini siano combinate emosaic=0.0che disabilita la trasformazione. Ad esempio, conmosaic=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
mosaicrende il modello più robusto, può anche rendere il processo di addestramento più impegnativo. - L'augmentations
mosaicpuò essere disabilitata verso la fine dell'addestramento impostandoclose_mosaicsul numero di epoche prima del completamento in cui dovrebbe essere disattivata. Ad esempio, seepochsè impostato su200eclose_mosaicè impostato su20, l'augmentationsmosaicverrà disabilitata dopo180epoche. Seclose_mosaicè impostato su0, l'augmentationsmosaicsarà abilitata per l'intero processo di addestramento. - La chiusura del mosaic disabilita anche
copy_paste,mixupecutmixnella 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 checopy_pastenella sua modalità predefinitaflipopera 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
mosaiccombina l'immagine corrente con altre 3, estratte da un buffer di immagini caricate di recente o da qualsiasi punto del dataset quandocache='ram'. In entrambi i casi vengono campionate con reinserimento, quindi la stessa immagine può comparire più volte in un singolo mosaic.
- Anche se l'augmentations
mosaic disattivato | 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
mixupdefinisce la probabilità di applicare la trasformazione, conmixup=1.0che assicura che tutte le immagini siano miscelate emixup=0.0che disabilita la trasformazione. Ad esempio, conmixup=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 betanp.random.beta(32.0, 32.0), il che significa che ciascuna immagine contribuisce per circa il 50%, con lievi variazioni.
- Il rapporto
Prima immagine, mixup disattivato | Seconda immagine, mixup disattivato | 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
cutmixdefinisce la probabilità di applicare la trasformazione, concutmix=1.0che assicura che tutte le immagini subiscano questa trasformazione ecutmix=0.0che la disabilita completamente. Ad esempio, concutmix=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,
cutmixmantiene 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 a0.01(1%) una volta che le etichette contengono segmenti.
Prima immagine, cutmix disattivato | Seconda immagine, cutmix disattivato | 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, 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 acopy_paste=0.5. In modalitàmixup, lo stesso valore controlla anche la probabilità che venga eseguito il copy-paste.copy_paste=0.0disabilita 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_pastepuò 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 a0.3(30%); non viene incollato se un qualsiasi valore di IoA è pari o superiore a0.3. - La soglia IoA non può essere modificata con l'implementazione corrente ed è impostata su
0.3per impostazione predefinita.
- Come mostrato nel video sottostante, l'aumento
copy_paste disattivato | copy_paste attivo con copy_paste_mode=flip | Visualizza il processo copy_paste |
|---|---|---|
![]() | ![]() |
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.
- Il principio IoA è lo stesso per entrambe le opzioni di
| Immagine di riferimento | Immagine scelta per copy_paste | copy_paste attivo con copy_paste_mode=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 suNonedisabilita 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
erasingdefinisce la probabilità di applicare la trasformazione, conerasing=1.0che cancella una regione in ogni immagine eerasing=0.0che disabilita la trasformazione. Ad esempio, conerasing=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
erasingviene fornita con gli iperparametriscale,ratioevalueche non possono essere modificati con l'implementazione attuale. I loro valori predefiniti sono rispettivamente(0.02, 0.33),(0.3, 3.3)e0, come indicato nella documentazione di PyTorch.
- L'augmentations
erasing disattivato | erasing attivo (esempio 1) | erasing attivo (esempio 2) | erasing attivo (esempio 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funzionalità di aumento avanzate#
Trasformazioni Albumentations Personalizzate (augmentations)#
- Tipo:
listdi 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 aresumedi ripristinarli. - Le trasformazioni personalizzate sostituiscono completamente il set predefinito di Albumentations. Ogni augmentation configurata altrove in questa pagina —
mosaic,hsv_h,degreese 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,poseeobb. La classificazione è esclusa poiché utilizza una pipeline di augmentation separata.
- La creazione degli oggetti di trasformazione richiede la API Python. Ultralytics li serializza con
Gli esempi seguenti richiedono Albumentations 1.4.22 o versioni successive e quindi Python 3.9 o versioni successive.
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_sehsv_vrappresentano 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,shearoperspective. Tuttavia, se l'angolo della telecamera può variare e hai bisogno che il modello sia più robusto, è meglio mantenere queste augmentations. - Usa l'augmentations
mosaicsolo se avere oggetti parzialmente occlusi o più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi mantenere attivomosaicma aumentare il valore diclose_mosaicper 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.
- Nella maggior parte dei casi, lievi variazioni di colore e luminosità sono vantaggiose. I valori predefiniti per
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à
pmaggiore di0sono 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 albumentationsUna 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.













































