Aumento dei dati con Ultralytics YOLO#
Introduzione#
L'aumento dei dati è una tecnica fondamentale nella computer vision che amplia artificialmente il dataset di addestramento applicando diverse trasformazioni alle immagini esistenti. Quando addestri modelli di deep learning come Ultralytics YOLO, l'aumento dei dati contribuisce a migliorare la robustezza del modello, riduce l'overfitting e migliora la generalizzazione agli scenari del mondo reale.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
Perché l'aumento dei dati è importante#
L'aumento dei dati svolge diversi compiti fondamentali durante l'addestramento dei modelli di computer vision:
- Dataset ampliato: creando varianti delle immagini esistenti, puoi aumentare efficacemente le dimensioni del dataset di addestramento senza raccogliere nuovi dati.
- Migliore generalizzazione: i modelli imparano a riconoscere gli oggetti in condizioni diverse, diventando più robusti nelle applicazioni del mondo reale.
- Riduzione dell'overfitting: introducendo variabilità nei dati di addestramento, è meno probabile che i modelli memorizzino caratteristiche specifiche delle immagini.
- Prestazioni migliorate: i modelli addestrati con un aumento dei dati appropriato raggiungono in genere una precisione migliore sui set di validazione e di test.
L'implementazione di Ultralytics YOLO offre una suite completa di tecniche di aumento dei dati, ciascuna con uno scopo specifico e un contributo diverso alle prestazioni del modello. Questa guida analizza le impostazioni di aumento riportate di seguito e ti aiuta a capire quando e come utilizzarle efficacemente nei tuoi progetti.
Configurazioni di esempio#
Puoi personalizzare ogni parametro usando l'API Python, l'interfaccia della riga di comando (CLI) o un file di configurazione. Di seguito sono riportati esempi di configurazione dell'aumento dei dati con ciascun metodo.
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 controlli tramite gli argomenti di addestramento. Ultralytics applica inoltre un piccolo insieme di Albumentations — sfocatura, sfocatura mediana, scala di grigi e CLAHE, ciascuna con p=0.01 — ogni volta che il pacchetto albumentations è installato; nessun argomento in default.yaml lo disattiva. Disinstalla il pacchetto per rimuoverlo oppure passa il tuo elenco a augmentations per sostituirlo.
Uso di un file di configurazione#
Puoi definire tutti i parametri di addestramento, inclusi gli aumenti, in un file di configurazione YAML (ad esempio, train_custom.yaml). Il parametro mode è necessario solo quando usi la CLI. Questo nuovo file YAML sostituirà quindi quello predefinito presente nel pacchetto ultralytics.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5Quindi avvia l'addestramento con l'API Python:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")Aumenti dello spazio colore#
Regolazione della tonalità (hsv_h)#
- Intervallo:
0.0-1.0 - Predefinito:
0.015 - Utilizzo: sposta i colori dell'immagine preservandone le relazioni. L'iperparametro
hsv_hdefinisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente tra-hsv_hehsv_h. Ad esempio, conhsv_h=0.3, lo spostamento viene selezionato casualmente nell'intervallo da-0.3a0.3. Per valori superiori a0.5, lo spostamento della tonalità ricomincia dall'altro lato della ruota dei colori; per questo gli aumenti hanno lo stesso aspetto tra0.5e-0.5. - Scopo: particolarmente utile per gli scenari all'aperto, in cui le condizioni di illuminazione possono influire notevolmente sull'aspetto degli oggetti. Ad esempio, una banana può apparire più gialla sotto la luce intensa del sole, ma più verdastra in ambienti chiusi.
- Implementazione di Ultralytics: RandomHSV
-0.5 | -0.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, mentre la regolazione finale viene scelta casualmente tra-hsv_sehsv_s. Ad esempio, conhsv_s=0.7, l'intensità viene selezionata casualmente nell'intervallo da-0.7a0.7. - Scopo: aiuta i modelli a gestire condizioni meteorologiche e impostazioni della fotocamera variabili. Ad esempio, un segnale stradale rosso può apparire molto vivido in una giornata di sole, ma risultare opaco e sbiadito in condizioni di nebbia.
- Implementazione di Ultralytics: RandomHSV
-1.0 | -0.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, mentre la regolazione finale viene scelta casualmente tra-hsv_vehsv_v. Ad esempio, conhsv_v=0.4, l'intensità viene selezionata casualmente nell'intervallo da-0.4a0.4. - Scopo: essenziale per addestrare modelli che devono operare in condizioni di illuminazione diverse. Ad esempio, una mela rossa può apparire luminosa alla luce del sole, ma molto più scura all'ombra.
- Implementazione di Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Trasformazioni geometriche#
Rotazione (degrees)#
- Intervallo: da
0.0a180 - Predefinito:
0 - Utilizzo: ruota casualmente le immagini entro l'intervallo specificato. L'iperparametro
degreesdefinisce l'angolo di rotazione, mentre la regolazione finale viene scelta casualmente tra-degreesedegrees. Ad esempio, condegrees=10.0, la rotazione viene selezionata casualmente nell'intervallo da-10.0a10.0. - Scopo: fondamentale per le applicazioni in cui gli oggetti possono apparire con orientamenti diversi. Ad esempio, nelle immagini aeree acquisite da droni, i veicoli possono essere orientati in qualsiasi direzione; i modelli devono quindi riconoscere gli oggetti indipendentemente dalla loro rotazione.
- Implementazione di Ultralytics: RandomPerspective
-180 | -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 delle dimensioni dell'immagine. L'iperparametro
translatedefinisce l'entità dello spostamento, mentre la regolazione finale viene scelta casualmente due volte (una per ciascun asse) nell'intervallo tra-translateetranslate. Ad esempio, contranslate=0.5, la traslazione sull'asse x viene selezionata casualmente nell'intervallo da-0.5a0.5, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo. - Scopo: aiuta i modelli a imparare a rilevare oggetti parzialmente visibili e migliora la robustezza rispetto alla posizione degli oggetti. Ad esempio, nelle applicazioni di valutazione dei danni ai veicoli, i componenti dell'auto possono apparire interamente o parzialmente nell'inquadratura a seconda della posizione e della distanza del fotografo; l'aumento tramite traslazione insegna al modello a riconoscere queste caratteristiche indipendentemente dalla loro completezza o posizione.
- Implementazione di Ultralytics: RandomPerspective
- Nota: per semplicità, le traslazioni applicate di seguito sono uguali ogni volta per entrambi gli assi
xey. I valori-1.0e1.0non sono mostrati perché sposterebbero completamente l'immagine fuori dall'inquadratura.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scala (scale)#
- Intervallo: da
0.0a1.0come float, oppure una tupla(min, max)esplicita - Predefinito:
0.5 - Utilizzo: ridimensiona le immagini di un fattore casuale entro l'intervallo specificato. Come float, l'iperparametro
scaledefinisce il guadagno di scala, mentre il fattore finale viene scelto casualmente tra1-scalee1+scale. Ad esempio, conscale=0.5, la scala viene selezionata casualmente nell'intervallo da0.5a1.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; il modello deve quindi riconoscerli indipendentemente dalle loro dimensioni.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
- Il valore
-1.0non è mostrato perché farebbe scomparire l'immagine, mentre1.0produce semplicemente uno zoom 2x. - I valori visualizzati nella tabella seguente sono le variazioni di scala effettive, non i valori passati all'iperparametro
scale. - La forma float viene convalidata nell'intervallo da
0.0a1.0; un valore al di fuori di tale intervallo genera unValueError. Per campionare un fattore oltre lo zoom 2x, passa invece la forma a tupla(min, max). - La forma a tupla si applica solo ai task geometrici. L'addestramento di classificazione ricava il proprio intervallo di ritaglio dal valore float (da
1.0 - scalea1.0), quindi il passaggio di una tupla genera unTypeError.
- Il valore
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Inclinazione (shear)#
- Intervallo: da
-180a+180 - Predefinito:
0 - Utilizzo: introduce una trasformazione geometrica che inclina l'immagine lungo l'asse x e l'asse y, spostando di fatto parti dell'immagine in una direzione e mantenendo parallele le linee. L'iperparametro
sheardefinisce l'angolo di inclinazione, mentre la regolazione finale viene scelta casualmente tra-sheareshear. Ad esempio, conshear=10.0, l'inclinazione sull'asse x viene selezionata casualmente nell'intervallo da-10a10, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo. - Scopo: aiuta i modelli a generalizzare rispetto alle variazioni degli angoli di visualizzazione causate da lievi inclinazioni o prospettive oblique. Ad esempio, nel monitoraggio del traffico, oggetti come automobili e segnali stradali possono apparire inclinati a causa del posizionamento non perpendicolare della fotocamera. L'applicazione dell'aumento tramite inclinazione assicura che il modello impari a riconoscere gli oggetti nonostante tali distorsioni.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
- I valori
shearpossono distorcere rapidamente l'immagine, quindi è consigliabile iniziare con valori bassi e aumentarli gradualmente. - A differenza delle trasformazioni prospettiche, l'inclinazione non introduce profondità o punti di fuga, ma distorce la forma degli oggetti modificandone gli angoli e mantenendo paralleti i lati opposti.
- I valori
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Prospettiva (perspective)#
- Intervallo:
0.0-0.001 - Predefinito:
0 - Utilizzo: applica una trasformazione prospettica completa lungo l'asse x e l'asse y, simulando l'aspetto degli oggetti osservati da profondità o angolazioni diverse. L'iperparametro
perspectivedefinisce l'entità della prospettiva, mentre la regolazione finale viene scelta casualmente tra-perspectiveeperspective. Ad esempio, conperspective=0.001, la prospettiva sull'asse x viene selezionata casualmente nell'intervallo da-0.001a0.001, mentre sull'asse y viene selezionato un altro valore casuale indipendente nello stesso intervallo. - Scopo: l'aumento prospettico è fondamentale per gestire variazioni estreme del punto di vista, soprattutto negli scenari in cui gli oggetti appaiono accorciati o distorti a causa dei cambiamenti prospettici. Ad esempio, nel rilevamento di oggetti basato su droni, edifici, strade e veicoli possono apparire allungati o compressi a seconda dell'inclinazione e dell'altitudine del drone. Applicando trasformazioni prospettiche, i modelli imparano a riconoscere gli oggetti nonostante le distorsioni indotte dalla prospettiva, migliorando la propria robustezza nelle implementazioni del mondo reale.
- Implementazione di Ultralytics: RandomPerspective
-0.001 | -0.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, preservando tutte le relazioni spaziali tra gli oggetti. L'iperparametro flipud definisce la probabilità di applicazione della trasformazione: un valore
flipud=1.0assicura che tutte le immagini vengano capovolte, mentre un valoreflipud=0.0disabilita completamente la trasformazione. Ad esempio, conflipud=0.5, ogni immagine ha il 50% di probabilità di essere capovolta verticalmente. - Scopo: utile negli scenari in cui gli oggetti possono apparire sottosopra. Ad esempio, nei sistemi di visione robotica, gli oggetti sui nastri trasportatori o sui bracci robotici possono essere prelevati e posizionati con orientamenti diversi. Il capovolgimento verticale aiuta il modello a riconoscere gli oggetti indipendentemente dal loro orientamento dall'alto verso il basso.
- Implementazione di Ultralytics: RandomFlip
flipud 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 scambia i lati sinistro e destro mantenendo la coerenza spaziale, aiutando il modello a generalizzare agli oggetti visualizzati con orientamenti speculari. L'iperparametro
fliplrdefinisce la probabilità di applicazione della trasformazione: un valorefliplr=1.0assicura che tutte le immagini vengano capovolte, mentre un valorefliplr=0.0disabilita 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 degli oggetti, nella stima della posa e nel riconoscimento facciale per migliorare la robustezza rispetto alle variazioni sinistra-destra. Ad esempio, nella guida autonoma, veicoli e pedoni possono trovarsi su entrambi i lati della strada; il capovolgimento orizzontale aiuta il modello a riconoscerli con la stessa efficacia in entrambi gli orientamenti.
- Implementazione di Ultralytics: RandomFlip
fliplr disattivato | fliplr attivato |
|---|---|
![]() | ![]() |
Scambio dei canali BGR (bgr)#
- Intervallo:
0.0-1.0 - Predefinito:
0 - Utilizzo: scambia i canali di colore di un'immagine da RGB a BGR, modificando l'ordine con cui sono rappresentati i colori. L'iperparametro
bgrdefinisce la probabilità di applicazione della trasformazione:bgr=1.0assicura che tutte le immagini subiscano lo scambio dei canali, mentrebgr=0.0lo 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 diversi ordini dei canali di colore. Ad esempio, quando addestri modelli che devono funzionare con vari sistemi di fotocamere e librerie di imaging in cui i formati RGB e BGR possono essere utilizzati in modo non coerente, oppure quando distribuisci modelli in ambienti in cui il formato dei colori in ingresso può differire da quello dei dati di addestramento.
- Implementazione di Ultralytics: Format
bgr disattivato | bgr attivato |
|---|---|
![]() | ![]() |
Mosaico (mosaic)#
- Intervallo:
0.0-1.0 - Predefinito:
1 - Utilizzo: combina quattro immagini di addestramento in una sola. L'iperparametro
mosaicdefinisce la probabilità di applicazione della trasformazione:mosaic=1.0assicura che tutte le immagini vengano combinate, mentremosaic=0.0disabilita la trasformazione. Ad esempio, conmosaic=0.5, ogni immagine ha il 50% di probabilità di essere combinata con altre tre immagini. - Scopo: altamente efficace per migliorare il rilevamento degli oggetti piccoli e la comprensione del contesto. Ad esempio, nei progetti di conservazione della fauna selvatica, in cui gli animali possono apparire a distanze e scale diverse, l'aumento a mosaico aiuta il modello a imparare a riconoscere la stessa specie con dimensioni diverse, occlusioni parziali e contesti ambientali differenti, creando artificialmente campioni di addestramento diversificati a partire da dati limitati.
- Implementazione di Ultralytics: Mosaic
- Nota:
- Anche se l'aumento
mosaicrende il modello più robusto, può anche rendere più complesso il processo di addestramento. - L'aumento
mosaicpuò essere disabilitato verso la fine dell'addestramento impostandoclose_mosaicsul numero di epoche mancanti al completamento, a partire dal quale deve essere disattivato. Ad esempio, seepochsè impostato su200eclose_mosaicè impostato su20, l'aumentomosaicverrà disabilitato dopo180epoche. Seclose_mosaicè impostato su0, l'aumentomosaicverrà applicato durante l'intero processo di addestramento. - La chiusura del mosaico disabilita contemporaneamente anche
copy_paste,mixupecutmix, alla stessa epoca. I quattro aumenti vengono disattivati insieme, quindi nelle epoche finali l'addestramento procede senza di essi, mentre tutti gli altri aumenti — le trasformazioni geometriche, HSV, i capovolgimenti e Albumentations — continuano a essere applicati. Nota checopy_pastenella modalità predefinitaflipopera su una singola immagine anziché combinarne diverse. - Il centro del mosaico generato viene determinato usando valori casuali e può trovarsi all'interno o all'esterno dell'immagine.
- L'implementazione attuale dell'aumento
mosaiccombina l'immagine corrente con altre 3, estratte da un buffer di immagini caricate di recente oppure da qualsiasi punto del dataset quandocache='ram'. In entrambi i casi, il campionamento avviene con reinserimento, quindi la stessa immagine può comparire più di una volta in un singolo mosaico.
- Anche se l'aumento
mosaic disattivato | mosaic attivato |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Intervallo:
0.0-1.0 - Predefinito:
0 - Utilizzo: fonde due immagini e le relative etichette con una probabilità specificata. L'iperparametro
mixupdefinisce la probabilità di applicazione della trasformazione:mixup=1.0assicura che tutte le immagini vengano miscelate, mentremixup=0.0disabilita 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, mixup aiuta il modello ad apprendere caratteristiche più robuste fondendo immagini di prodotti diversi e insegnandogli a identificare gli articoli anche quando sono parzialmente visibili o coperti da altri prodotti sugli scaffali affollati dei negozi.
- Implementazione di Ultralytics: Mixup
- Nota:
- Il rapporto
mixupè un valore casuale estratto da una distribuzione betanp.random.beta(32.0, 32.0); ciò significa che ogni 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: ritaglia una regione rettangolare da un'immagine e la incolla su un'altra con una probabilità specificata. L'iperparametro
cutmixdefinisce la probabilità di applicazione della trasformazione:cutmix=1.0assicura che tutte le immagini subiscano questa trasformazione, mentrecutmix=0.0la disabilita completamente. Ad esempio, concutmix=0.5, ogni immagine ha il 50% di probabilità di avere una regione sostituita con una porzione proveniente da un'altra immagine. - Scopo: migliora le prestazioni del modello creando scenari realistici di occlusione e preservando al contempo l'integrità delle caratteristiche locali. Ad esempio, nei sistemi di guida autonoma, cutmix aiuta il modello a imparare a riconoscere veicoli o pedoni anche quando sono parzialmente occlusi da altri oggetti, migliorando la precisione del rilevamento in ambienti complessi del mondo reale con oggetti sovrapposti.
- Implementazione di Ultralytics: CutMix
- Nota:
- Le dimensioni e la posizione della regione ritagliata vengono determinate casualmente per ogni applicazione.
- A differenza di mixup, che fonde globalmente i valori dei pixel,
cutmixmantiene le intensità originali dei pixel all'interno delle regioni ritagliate, preservando le caratteristiche locali. - Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone ad alcun BBox esistente. Inoltre, vengono conservati solo i BBox che mantengono una porzione sufficiente della loro area originale all'interno della regione incollata.
- Questa soglia minima dell'area del BBox non può essere modificata con l'implementazione attuale. È
0.1(10%) per le etichette di rilevamento e0.01(1%) quando le etichette includono segmenti.
Prima immagine, cutmix disattivato | Seconda immagine, cutmix disattivato | cutmix attivato |
|---|---|---|
![]() | ![]() | ![]() |
Aumenti Copy-Paste#
Copy-Paste (copy_paste)#
- Intervallo:
0.0-1.0 - Predefinito:
0 - Utilizzo: richiede etichette poligonali, quindi si applica ai task di segmentazione e OBB; questo aumento copia gli oggetti all'interno o tra le immagini, controllato da
copy_paste_mode. Nella modalitàflip,copy_pasteindica la frazione di oggetti idonei copiati: un'immagine con sei oggetti idonei acquisisce tre copie concopy_paste=0.5. Nella modalitàmixup, lo stesso valore controlla anche la probabilità di esecuzione del copy-paste.copy_paste=0.0disabilita la trasformazione. - Scopo: particolarmente utile per i task di segmentazione delle istanze e per le classi di oggetti rari. Ad esempio, nel rilevamento dei difetti industriali, in cui alcuni tipi di difetti compaiono raramente, l'aumento copy-paste può incrementare artificialmente la presenza di questi difetti rari copiandoli da un'immagine all'altra, aiutando il modello ad apprendere meglio questi casi sottorappresentati senza richiedere ulteriori campioni difettosi.
- Implementazione di Ultralytics: CopyPaste
- Nota:
- Come mostrato nel video seguente, l'augmentation
copy_pastepuò essere usata per copiare oggetti da un'immagine a un'altra. - Una volta selezionato un oggetto da copiare, il suo IoA viene calcolato rispetto a tutti gli oggetti già presenti nell'immagine di destinazione, indipendentemente da
copy_paste_mode. L'oggetto viene incollato solo se tutti i valori IoA sono inferiori a0.3(30%); non viene incollato se un qualsiasi valore IoA è pari o superiore a0.3. - La soglia IoA non può essere modificata con l'implementazione attuale ed è impostata su
0.3per impostazione predefinita.
- Come mostrato nel video seguente, l'augmentation
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 usato per l'augmentation copy-paste. Se impostata su
'flip', gli oggetti provengono dalla stessa immagine, mentre'mixup'consente di copiare oggetti da immagini diverse. - Scopo: consente di definire con flessibilità come gli oggetti copiati vengono integrati nelle immagini di destinazione.
- Implementazione di Ultralytics: CopyPaste
- Nota:
- Il principio IoA è lo stesso per entrambe le opzioni
copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso. - A seconda delle dimensioni dell'immagine, a volte gli oggetti possono essere copiati parzialmente o interamente al di fuori dell'inquadratura.
- A seconda della qualità delle annotazioni dei poligoni, gli oggetti copiati possono presentare lievi variazioni di forma rispetto agli originali.
- Il principio IoA è lo stesso per entrambe le opzioni
| Immagine di riferimento | Immagine scelta per copy_paste | copy_paste attivo con copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Augmentation specifiche per la classificazione#
Auto Augment (auto_augment)#
- Opzioni:
'randaugment','autoaugment','augmix',None - Predefinito:
'randaugment' - Utilizzo: applica policy di augmentation automatizzate per la classificazione. L'opzione
'randaugment'usa RandAugment,'autoaugment'usa AutoAugment e'augmix'usa AugMix. ImpostandoNonesi disabilita l'augmentation automatizzata. - Scopo: ottimizza automaticamente le strategie di augmentation per le attività di classificazione. Le differenze sono le seguenti:
- AutoAugment: questa modalità applica policy di augmentation predefinite apprese da dataset come ImageNet, CIFAR10 e SVHN. Gli utenti possono selezionare queste policy esistenti, ma non possono addestrarne di nuove in Torchvision. Per individuare strategie di augmentation ottimali per dataset specifici, sarebbero necessarie librerie esterne o implementazioni personalizzate. Consulta il paper su AutoAugment.
- RandAugment: applica una selezione casuale di trasformazioni con intensità uniforme. Questo approccio riduce la necessità di un'ampia fase di ricerca, rendendolo più efficiente dal punto di vista computazionale e migliorando al contempo la robustezza del modello. Consulta il paper su RandAugment.
- AugMix: AugMix è un metodo di augmentation dei dati che migliora la robustezza del modello creando diverse variazioni delle immagini attraverso combinazioni casuali di trasformazioni semplici. Consulta il paper su AugMix.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- In sostanza, la differenza principale tra i tre metodi consiste nel modo in cui le policy di augmentation vengono definite e applicate.
- Puoi consultare questo articolo, che confronta in dettaglio i tre metodi.
Random Erasing (erasing)#
- Intervallo:
0.0-1.0 - Predefinito:
0.4 - Utilizzo: cancella casualmente porzioni dell'immagine durante l'addestramento alla classificazione. L'iperparametro
erasingdefinisce la probabilità di applicare la trasformazione:erasing=1.0cancella una regione in ogni immagine, mentreerasing=0.0disabilita la trasformazione. Ad esempio, conerasing=0.5, ogni immagine ha il 50% di probabilità che venga cancellata una porzione. - Scopo: aiuta i modelli ad apprendere caratteristiche robuste e impedisce un'eccessiva dipendenza da specifiche regioni dell'immagine. Ad esempio, nei sistemi di riconoscimento facciale, la cancellazione casuale aiuta i modelli a diventare più robusti alle occlusioni parziali, come occhiali da sole, mascherine o altri oggetti che possono coprire parzialmente i tratti del viso. Questo migliora le prestazioni nel mondo reale, costringendo il modello a identificare le persone usando molteplici caratteristiche facciali invece di dipendere esclusivamente da tratti distintivi che potrebbero essere oscurati.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- L'augmentation
erasinginclude gli iperparametriscale,ratioevalue, che non possono essere modificati con l'implementazione attuale. I relativi valori predefiniti sono rispettivamente(0.02, 0.33),(0.3, 3.3)e0, come indicato nella documentazione di PyTorch.
- L'augmentation
erasing disattivato | erasing attivo (esempio 1) | erasing attivo (esempio 2) | erasing attivo (esempio 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funzionalità avanzate di augmentation#
Trasformazioni Albumentations personalizzate (augmentations)#
- Tipo:
listdi trasformazioni Albumentations - Predefinito:
None - Utilizzo: consente di fornire trasformazioni Albumentations personalizzate per l'augmentation dei dati usando l'API Python. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento al posto delle trasformazioni Albumentations predefinite.
- Scopo: offre un controllo dettagliato sulle strategie di augmentation dei dati sfruttando l'ampia libreria di trasformazioni Albumentations. È particolarmente utile quando servono augmentation specializzate oltre alle opzioni YOLO integrate, come deformazioni elastiche e distorsioni a griglia per l'imaging medicale, trasformazioni ottimizzate per prospettive aeree e satellitari dall'alto, variazioni di rumore e luminosità che simulano condizioni di scarsa illuminazione o variazioni delle texture simili a difetti per l'ispezione industriale.
- Implementazione di Ultralytics: Albumentations
- Nota:
- La creazione degli oggetti di trasformazione richiede l'API Python. Ultralytics li serializza con
A.to_dict()quando salva un checkpoint, consentendo a un elenco già serializzato di essere mantenuto attraverso un file di configurazione YAML o la CLI; questo permette aresumedi ripristinarli. - Le trasformazioni personalizzate sostituiscono completamente il set predefinito di Albumentations. Ogni augmentation configurata altrove in questa pagina —
mosaic,hsv_h,degreese tutte le altre — rimane attiva e viene applicata in modo indipendente. - Le trasformazioni spaziali che modificano la geometria dell'immagine, incluse quelle annidate in
A.OneOfoA.Compose, spostano i riquadri di delimitazione, i poligoni, i punti chiave e le maschere di profondità o semantiche insieme all'immagine;A.RandomGridShufflenon può preservare la topologia dei poligoni o dei punti chiave e genera un errore sui campioni di segmentazione, stima della posta e OBB. - Albumentations offre oltre 70 trasformazioni; la documentazione di Albumentations le elenca tutte. L'aggiunta di molte trasformazioni, o di trasformazioni computazionalmente costose, rallenta l'addestramento, quindi inizia con un set ridotto e monitora la durata delle epoche.
- Si applica alle attività
detect,segment,semantic,depth,poseeobb. La classificazione è esclusa perché usa una pipeline di augmentation separata.
- La creazione degli oggetti di trasformazione richiede l'API Python. Ultralytics li serializza con
Gli esempi seguenti richiedono Albumentations 1.4.22 o versioni successive e, di conseguenza, 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#
La scelta delle augmentation appropriate dipende dal tuo caso d'uso specifico e dal tuo dataset. Ecco alcune linee guida generali per aiutarti a decidere:
- Nella maggior parte dei casi, lievi variazioni di colore e luminosità sono vantaggiose. I valori predefiniti di
hsv_h,hsv_sehsv_vsono un buon punto di partenza. - Se il punto di vista della fotocamera è coerente e non cambierà una volta implementato il modello, probabilmente puoi evitare trasformazioni geometriche come
rotation,translation,scale,shearoperspective. Tuttavia, se l'angolazione della fotocamera può variare e hai bisogno di rendere il modello più robusto, è meglio mantenere queste augmentation. - Usa l'augmentation
mosaicsolo se la presenza di oggetti parzialmente occlusi o di più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi lasciare attivomosaic, ma aumentare il valore diclose_mosaicper disabilitarlo prima durante il processo di addestramento.
In breve: mantieni le cose semplici. Inizia con un set ridotto di augmentation e aggiungine gradualmente altre quando necessario. L'obiettivo è migliorare la capacità di generalizzazione e la robustezza del modello, non complicare eccessivamente il processo di addestramento. Assicurati inoltre che le augmentation applicate riflettano la stessa distribuzione dei dati che il modello incontrerà in produzione.
- Nella maggior parte dei casi, lievi variazioni di colore e luminosità sono vantaggiose. I valori predefiniti di
Se il pacchetto
albumentationsè installato, Ultralytics applica automaticamente un insieme di augmentation aggiuntive alle immagini utilizzandolo. Queste augmentation vengono gestite internamente e non richiedono configurazioni aggiuntive.Puoi trovare l'elenco completo delle trasformazioni applicate nella nostra documentazione tecnica e nella nostra guida all'integrazione di Albumentations. Nota che sono attive solo le augmentation con una probabilità
pmaggiore di0. Vengono applicate intenzionalmente con bassa frequenza per imitare artefatti visivi del mondo reale, come effetti di sfocatura o scala di grigi.Puoi anche fornire trasformazioni Albumentations personalizzate usando l'API Python. Per maggiori dettagli, consulta la sezione Funzionalità avanzate di augmentation.
Verifica se il pacchetto
albumentationsè installato. In caso contrario, installalo:pip install albumentationsUna volta installato, il pacchetto dovrebbe essere rilevato e usato automaticamente da Ultralytics.
Puoi personalizzare le augmentation creando una classe dataset e un trainer personalizzati. Ad esempio, puoi sostituire le augmentation di classificazione predefinite di Ultralytics con torchvision.transforms.Resize di PyTorch o con altre trasformazioni. Per i dettagli sull'implementazione, consulta l'esempio di addestramento personalizzato nella documentazione sulla classificazione.













































