Data Augmentation con Ultralytics YOLO
Introduzione
La Data augmentation è una tecnica fondamentale nella computer vision che espande artificialmente il tuo dataset di addestramento applicando varie trasformazioni alle immagini esistenti. Quando addestri modelli di deep learning come Ultralytics YOLO, la data augmentation aiuta a migliorare la robustezza del modello, riduce l'overfitting e potenzia la generalizzazione a scenari del mondo reale.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
Perché la Data Augmentation è importante
La data augmentation serve a diversi scopi critici nell'addestramento dei modelli di computer vision:
- Dataset espanso: Creando variazioni di immagini esistenti, puoi aumentare efficacemente la dimensione del tuo dataset di addestramento senza raccogliere nuovi dati.
- Generalizzazione migliorata: I modelli imparano a riconoscere oggetti in condizioni varie, rendendoli più robusti nelle applicazioni reali.
- Riduzione dell'overfitting: Introducendo variabilità nei dati di addestramento, è meno probabile che i modelli memorizzino caratteristiche specifiche delle immagini.
- Prestazioni migliorate: I modelli addestrati con una corretta augmentation solitamente ottengono risultati migliori in termini di accuracy sui set di validazione e test.
L'implementazione di Ultralytics YOLO fornisce una suite completa di tecniche di augmentation, ognuna con scopi specifici e che contribuisce alle prestazioni del modello in modi differenti. Questa guida esplorerà in dettaglio ogni parametro di augmentation, aiutandoti a capire quando e come utilizzarli efficacemente nei tuoi progetti.
Configurazioni di esempio
Puoi personalizzare ogni parametro usando la Python API, la command line interface (CLI) o un file di configurazione. Di seguito sono riportati esempi su come impostare la data augmentation per ciascun metodo.
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Training with custom augmentation parameters
model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Training without any augmentations (disabled values omitted for clarity)
model.train(
data="coco.yaml",
epochs=100,
hsv_h=0.0,
hsv_s=0.0,
hsv_v=0.0,
translate=0.0,
scale=0.0,
fliplr=0.0,
mosaic=0.0,
erasing=0.0,
auto_augment=None,
)
# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)Utilizzo di un file di configurazione
Puoi definire tutti i parametri di addestramento, incluse le augmentations, in un file di configurazione YAML (ad esempio, train_custom.yaml). Il parametro mode è richiesto solo quando si utilizza la CLI. Questo nuovo file YAML sovrascriverà quindi quello predefinito situato nel pacchetto ultralytics.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.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")Augmentations dello spazio colore
Regolazione della tonalità (hsv_h)
- Intervallo:
0.0-1.0 - Predefinito:
0.015 - Utilizzo: Sposta i colori dell'immagine preservandone le relazioni. L'iperparametro
hsv_hdefinisce l'entità dello spostamento, con l'aggiustamento finale scelto casualmente tra-hsv_hehsv_h. Ad esempio, conhsv_h=0.3, lo spostamento è selezionato casualmente tra-0.3e0.3. Per valori superiori a0.5, lo spostamento di tonalità ruota attorno alla ruota dei colori, motivo per cui le augmentations appaiono identiche tra0.5e-0.5. - Scopo: Particolarmente utile per scenari esterni dove le condizioni di illuminazione possono influenzare drasticamente l'aspetto dell'oggetto. Ad esempio, una banana potrebbe apparire più gialla sotto la luce diretta del sole ma più verdastra al chiuso.
- Implementazione di Ultralytics: RandomHSV
-0.5 | -0.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 l'aggiustamento finale scelto casualmente tra-hsv_sehsv_s. Ad esempio, conhsv_s=0.7, l'intensità è 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: Cambia la luminosità dell'immagine. L'iperparametro
hsv_vdefinisce l'entità dello spostamento, con l'aggiustamento finale scelto casualmente tra-hsv_vehsv_v. Ad esempio, conhsv_v=0.4, l'intensità è selezionata casualmente tra-0.4e0.4. - Scopo: Essenziale per addestrare modelli che devono funzionare in diverse condizioni di illuminazione. Ad esempio, una mela rossa potrebbe apparire luminosa alla luce del sole ma molto più scura all'ombra.
- Implementazione di Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Trasformazioni geometriche
Rotazione (degrees)
- Intervallo:
0.0a180 - Predefinito:
0 - Utilizzo: Ruota le immagini casualmente entro l'intervallo specificato. L'iperparametro
degreesdefinisce l'angolo di rotazione, con l'aggiustamento finale scelto casualmente tra-degreesedegrees. Ad esempio, condegrees=10.0, la rotazione è 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 l'aggiustamento finale scelto casualmente due volte (una per ogni asse) nell'intervallo-translateetranslate. Ad esempio, contranslate=0.5, la traslazione è 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 interamente o parzialmente nell'inquadratura a seconda della posizione e della distanza del fotografo; la traslazione insegnerà al modello a riconoscere queste caratteristiche indipendentemente dalla loro completezza o posizione.
- Implementazione di Ultralytics: RandomPerspective
- Nota: Per semplicità, le traslazioni applicate di seguito sono le stesse ogni volta per entrambi gli assi
xey. I valori-1.0e1.0non sono mostrati poiché traslerebbero l'immagine completamente fuori dall'inquadratura.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scala (scale)
- Intervallo:
0.0-1.0 - Predefinito:
0.5 - Utilizzo: Ridimensiona le immagini di un fattore casuale entro l'intervallo specificato. L'iperparametro
scaledefinisce il fattore di scala, con l'aggiustamento finale scelto casualmente tra1-scalee1+scale. Ad esempio, conscale=0.5, la scala è selezionata casualmente tra0.5e1.5. - Scopo: Permette ai modelli di gestire oggetti a distanze e dimensioni diverse. Ad esempio, nelle applicazioni di guida autonoma, i veicoli possono apparire a varie distanze dalla fotocamera, richiedendo al modello di riconoscerli indipendentemente dalla loro dimensione.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
- Il valore
-1.0non è mostrato poiché farebbe scomparire l'immagine, mentre1.0risulta semplicemente in uno zoom 2x. - I valori visualizzati nella tabella seguente sono quelli applicati tramite l'iperparametro
scale, non il fattore di scala finale. - Se
scaleè maggiore di1.0, l'immagine può risultare molto piccola o capovolta, poiché il fattore di scala è scelto casualmente tra1-scalee1+scale. Ad esempio, conscale=3.0, la scala è selezionata casualmente tra-2.0e4.0. Se viene scelto un valore negativo, l'immagine viene capovolta.
- Il valore
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Taglio/Inclinazione (shear)
- Intervallo:
-180a+180 - Predefinito:
0 - Utilizzo: Introduce una trasformazione geometrica che distorce l'immagine lungo l'asse x e l'asse y, spostando effettivamente parti dell'immagine in una direzione pur mantenendo le linee parallele. L'iperparametro
sheardefinisce l'angolo di taglio, con l'aggiustamento finale scelto casualmente tra-sheareshear. Ad esempio, conshear=10.0, il taglio è selezionato 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 a variazioni negli angoli di visualizzazione causate da lievi inclinazioni o punti di vista obliqui. Ad esempio, nel monitoraggio del traffico, oggetti come auto e segnali stradali possono apparire inclinati a causa di posizionamenti non perpendicolari della fotocamera. Applicare l'augmentation shear garantisce che il modello impari a riconoscere gli oggetti nonostante tali distorsioni.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
- I valori
shearpossono distorcere rapidamente l'immagine, quindi è consigliabile iniziare con valori piccoli e aumentarli gradualmente. - A differenza delle trasformazioni prospettiche, lo shear non introduce profondità o punti di fuga, ma distorce la forma degli oggetti cambiandone gli angoli pur mantenendo paralleli i lati opposti.
- I valori
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Prospettiva (perspective)
- Intervallo:
0.0-0.001 - Predefinito:
0 - Utilizzo: Applica una trasformazione prospettica completa sia lungo l'asse x che lungo l'asse y, simulando come appaiono gli oggetti quando visti da diverse profondità o angolazioni. L'iperparametro
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 accorciati o distorti a causa di spostamenti prospettici. Ad esempio, nel rilevamento di oggetti tramite droni, edifici, strade e veicoli possono apparire allungati o compressi a seconda dell'inclinazione e dell'altitudine del drone. Applicando trasformazioni prospettiche, i modelli imparano a riconoscere gli oggetti nonostante queste distorsioni indotte dalla prospettiva, migliorando la loro robustezza nelle implementazioni nel mondo reale.
- Implementazione di Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Capovolgimento Alto-Basso (flipud)
- Intervallo:
0.0-1.0 - Predefinito:
0 - Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of
flipud=1.0ensuring that all images are flipped and a value offlipud=0.0disabling the transformation entirely. For example, withflipud=0.5, each image has a 50% chance of being flipped upside-down. - Scopo: Utile per scenari in cui gli oggetti possono apparire capovolti. Ad esempio, nei sistemi di visione robotica, gli oggetti su nastri trasportatori o bracci robotici possono essere raccolti e posizionati con vari orientamenti. Il capovolgimento verticale aiuta il modello a riconoscere gli oggetti indipendentemente dal loro posizionamento dall'alto verso il basso.
- Implementazione di Ultralytics: RandomFlip
flipud disattivato | flipud attivato |
|---|---|
![]() | ![]() |
Capovolgimento Sinistra-Destra (fliplr)
- Intervallo:
0.0-1.0 - Predefinito:
0.5 - Utilizzo: Esegue un capovolgimento orizzontale specchiando l'immagine lungo l'asse x. Questa trasformazione scambia i lati sinistro e destro mantenendo la coerenza spaziale, il che aiuta il modello a generalizzare rispetto agli oggetti che appaiono con orientamenti specchiati. L'iperparametro
fliplrdefinisce la probabilità di applicare la trasformazione, con un valore difliplr=1.0che garantisce che tutte le immagini vengano capovolte e un valore difliplr=0.0che disabilita completamente la trasformazione. Ad esempio, confliplr=0.5, ogni immagine ha una probabilità del 50% di essere capovolta da sinistra a destra. - Scopo: Il capovolgimento orizzontale è ampiamente utilizzato nel rilevamento di oggetti, nella stima della posa e nel riconoscimento facciale per migliorare la robustezza contro le variazioni sinistra-destra. Ad esempio, nella guida autonoma, veicoli e pedoni possono apparire su entrambi i lati della strada, e il capovolgimento orizzontale aiuta il modello a riconoscerli altrettanto bene in entrambi gli orientamenti.
- Implementazione di Ultralytics: RandomFlip
fliplr disattivato | fliplr attivato |
|---|---|
![]() | ![]() |
Scambio di Canale BGR (bgr)
- Intervallo:
0.0-1.0 - Predefinito:
0 - Utilizzo: Scambia i canali di colore di un'immagine da RGB a BGR, alterando l'ordine in cui i colori sono rappresentati. L'iperparametro
bgrdefinisce la probabilità di applicare la trasformazione, conbgr=1.0che garantisce che tutte le immagini subiscano lo scambio di canale ebgr=0.0che lo disabilita. Ad esempio, conbgr=0.5, ogni immagine ha una probabilità del 50% di essere convertita da RGB a BGR. - Scopo: Aumenta la robustezza rispetto a diversi ordini di canali colore. Ad esempio, quando si addestrano modelli che devono funzionare su vari sistemi di telecamere e librerie di imaging dove i formati RGB e BGR possono essere usati in modo incoerente, o quando si implementano modelli in ambienti in cui il formato colore di input potrebbe differire dai dati di addestramento.
- Implementazione di Ultralytics: Format
bgr disattivato | bgr attivato |
|---|---|
![]() | ![]() |
Mosaic (mosaic)
- Intervallo:
0.0-1.0 - Predefinito:
1 - Utilizzo: Combina quattro immagini di addestramento in una. L'iperparametro
mosaicdefinisce la probabilità di applicare la trasformazione, conmosaic=1.0che garantisce che tutte le immagini vengano combinate emosaic=0.0che disabilita la trasformazione. Ad esempio, conmosaic=0.5, ogni immagine ha una probabilità del 50% di essere combinata con altre tre immagini. - Scopo: Altamente efficace per migliorare il rilevamento di piccoli oggetti e la comprensione del contesto. Ad esempio, in progetti di conservazione della fauna selvatica dove gli animali possono apparire a varie distanze e scale, l'aumento mosaic aiuta il modello a imparare a riconoscere la stessa specie attraverso dimensioni diverse, occlusioni parziali e contesti ambientali creando artificialmente campioni di addestramento diversi da dati limitati.
- Implementazione di Ultralytics: Mosaic
- Nota:
- Anche se l'aumento
mosaicrende il modello più robusto, può anche rendere il processo di addestramento più impegnativo. - L'aumento
mosaicpuò essere disabilitato verso la fine dell'addestramento impostandoclose_mosaicsul numero di epoche prima del completamento in cui dovrebbe essere disattivato. Ad esempio, seepochsè impostato su200eclose_mosaicè impostato su20, l'aumentomosaicverrà disabilitato dopo180epoche. Seclose_mosaicè impostato su0, l'aumentomosaicsarà abilitato per l'intero processo di addestramento. - Il centro del mosaico generato viene determinato utilizzando valori casuali e può trovarsi all'interno dell'immagine o al di fuori di essa.
- L'implementazione attuale dell'aumento
mosaiccombina 4 immagini scelte casualmente dal dataset. Se il dataset è piccolo, la stessa immagine può essere utilizzata più volte nello stesso mosaico.
- Anche se l'aumento
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 garantisce che tutte le immagini vengano miscelate emixup=0.0che disabilita la trasformazione. Ad esempio, conmixup=0.5, ogni immagine ha una probabilità del 50% di essere miscelata con un'altra immagine. - Scopo: Migliora la robustezza del modello e riduce l'overfitting. Ad esempio, nei sistemi di riconoscimento dei prodotti al dettaglio, il mixup aiuta il modello a imparare caratteristiche più robuste miscelando immagini di prodotti diversi, insegnandogli a identificare gli articoli anche quando sono parzialmente visibili o oscurati da altri prodotti su scaffali affollati.
- Implementazione di Ultralytics: Mixup
- Nota:
- Il rapporto
mixupè un valore casuale estratto da una distribuzione betanp.random.beta(32.0, 32.0), il che 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: 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 garantisce che tutte le immagini subiscano questa trasformazione ecutmix=0.0che la disabilita completamente. Ad esempio, concutmix=0.5, ogni immagine ha una probabilità del 50% di avere una regione sostituita con una patch da un'altra immagine. - Scopo: Migliora le prestazioni del modello creando scenari di occlusione realistici pur mantenendo l'integrità delle caratteristiche locali. Ad esempio, nei sistemi di guida autonoma, il cutmix aiuta il modello a imparare a riconoscere veicoli o pedoni anche quando sono parzialmente occlusi da altri oggetti, migliorando l'accuratezza del rilevamento in ambienti complessi del mondo reale con oggetti sovrapposti.
- Implementazione di Ultralytics: CutMix
- Nota:
- La dimensione e la posizione della regione tagliata vengono determinate casualmente per ogni applicazione.
- A differenza del mixup che miscela i valori dei pixel globalmente,
cutmixmantiene le intensità dei pixel originali all'interno delle regioni tagliate, preservando le caratteristiche locali. - Una regione viene incollata nell'immagine di destinazione solo se non si sovrappone a nessun riquadro di delimitazione (bounding box) esistente. Inoltre, vengono conservati solo i riquadri di delimitazione che mantengono almeno
0.1(10%) della loro area originale all'interno della regione incollata. - Questa soglia di area minima del riquadro di delimitazione non può essere modificata con l'implementazione attuale ed è impostata su
0.1per impostazione predefinita.
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, questo aumento copia oggetti all'interno o tra le immagini in base a una probabilità specificata, controllata da
copy_paste_mode. L'iperparametrocopy_pastedefinisce la probabilità di applicare la trasformazione, concopy_paste=1.0che garantisce che tutte le immagini vengano copiate ecopy_paste=0.0che disabilita la trasformazione. Ad esempio, concopy_paste=0.5, ogni immagine ha una probabilità del 50% di avere oggetti copiati da un'altra immagine. - Scopo: Particolarmente utile per attività di segmentazione di istanze e classi di oggetti rari. Ad esempio, nel rilevamento industriale dei difetti dove certi tipi di difetti appaiono raramente, l'aumento copy-paste può aumentare artificialmente la ricorrenza di questi rari difetti copiandoli da un'immagine all'altra, aiutando il modello a imparare meglio questi casi sottorappresentati senza richiedere ulteriori campioni difettosi.
- Implementazione di Ultralytics: CopyPaste
- Nota:
- Come mostrato nella gif qui sotto, l'aumento
copy_pastepuò essere utilizzato per copiare oggetti da un'immagine all'altra. - Una volta copiato un oggetto, indipendentemente dalla
copy_paste_mode, la sua Intersection over Area (IoA) viene calcolata con tutti gli oggetti dell'immagine sorgente. Se tutte le IoA sono inferiori a0.3(30%), l'oggetto viene incollato nell'immagine di destinazione. Se solo una delle IoA è superiore a0.3, l'oggetto non viene incollato nell'immagine di destinazione. - La soglia IoA non può essere modificata con l'implementazione attuale ed è impostata su
0.3per impostazione predefinita.
- Come mostrato nella gif qui sotto, l'aumento
copy_paste disattivato | copy_paste attivato 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'aumento copy-paste. Se impostato su
'flip', gli oggetti provengono dalla stessa immagine, mentre'mixup'consente di copiare oggetti da immagini diverse. - Scopo: Consente flessibilità nel modo in cui gli oggetti copiati vengono integrati nelle immagini di destinazione.
- Implementazione di Ultralytics: CopyPaste
- Nota:
- Il principio IoA è lo stesso per entrambe le
copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso. - A seconda delle dimensioni dell'immagine, gli oggetti potrebbero a volte essere copiati parzialmente o interamente fuori dall'inquadratura.
- A seconda della qualità delle annotazioni poligonali, gli oggetti copiati potrebbero presentare lievi variazioni di forma rispetto agli originali.
- Il principio IoA è lo stesso per entrambe le
| Immagine di riferimento | Immagine scelta per copy_paste | copy_paste attivato con copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Aumenti Specifici per la Classificazione
Auto Augment (auto_augment)
- Opzioni:
'randaugment','autoaugment','augmix',None - Predefinito:
'randaugment' - Utilizzo: Applica politiche di aumento automatizzate per la classificazione. L'opzione
'randaugment'utilizza RandAugment,'autoaugment'utilizza AutoAugment e'augmix'utilizza AugMix. L'impostazione suNonedisabilita l'aumento automatizzato. - Scopo: Ottimizza automaticamente le strategie di aumento per i compiti di classificazione. Le differenze sono le seguenti:
- AutoAugment: Questa modalità applica politiche di aumento predefinite apprese da dataset come ImageNet, CIFAR10 e SVHN. Puoi selezionare queste politiche esistenti ma non puoi addestrarne di nuove all'interno di Torchvision. Per scoprire strategie di aumento ottimali per dataset specifici, sarebbero necessarie librerie esterne o implementazioni personalizzate. Riferimento al documento su AutoAugment.
- RandAugment: Applica una selezione casuale di trasformazioni con magnitudo uniforme. Questo approccio riduce la necessità di un'estesa fase di ricerca, rendendolo computazionalmente più efficiente pur migliorando la robustezza del modello. Riferimento al documento su RandAugment.
- AugMix: AugMix è un metodo di aumento dei dati che migliora la robustezza del modello creando diverse variazioni di immagini attraverso combinazioni casuali di trasformazioni semplici. Riferimento al documento su AugMix.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- Essenzialmente, la differenza principale tra i tre metodi è il modo in cui le politiche di aumento vengono definite e applicate.
- Puoi consultare questo articolo che confronta i tre metodi nel dettaglio.
Cancellazione casuale (erasing)
- Intervallo:
0.0-0.9 - Predefinito:
0.4 - Utilizzo: Cancella casualmente porzioni dell'immagine durante l'addestramento alla classificazione. L'iperparametro
erasingdefinisce la probabilità di applicare la trasformazione, conerasing=0.9che garantisce che quasi tutte le immagini vengano cancellate eerasing=0.0che disabilita la trasformazione. Ad esempio, conerasing=0.5, ogni immagine ha una probabilità del 50% di avere una porzione cancellata. - Scopo: Aiuta i modelli ad apprendere caratteristiche robuste e previene l'eccessiva dipendenza da regioni specifiche dell'immagine. Ad esempio, nei sistemi di riconoscimento facciale, la cancellazione casuale aiuta i modelli a diventare più robusti verso occlusioni parziali come occhiali da sole, mascherine o altri oggetti che potrebbero coprire parzialmente i tratti del viso. Questo migliora le prestazioni nel mondo reale costringendo il modello a identificare gli individui utilizzando molteplici caratteristiche facciali anziché dipendere esclusivamente da tratti distintivi che potrebbero essere oscurati.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- L'aumento
erasingviene fornito con iperparametriscale,ratioevalueche non possono essere modificati con l'implementazione attuale. I loro valori predefiniti sono(0.02, 0.33),(0.3, 3.3)e0, rispettivamente, come indicato nella documentazione di PyTorch. - Il limite superiore dell'iperparametro
erasingè impostato a0.9per evitare di applicare la trasformazione a tutte le immagini.
- L'aumento
erasing disattivato | erasing attivato (esempio 1) | erasing attivato (esempio 2) | erasing attivato (esempio 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funzionalità di aumento avanzate
Trasformazioni personalizzate Albumentations (augmentations)
- Tipo:
listdi trasformazioni Albumentations - Predefinito:
None - Utilizzo: Ti consente di fornire trasformazioni personalizzate Albumentations per l'aumento dei dati utilizzando la Python API. Questo parametro accetta un elenco di oggetti di trasformazione Albumentations che verranno applicati durante l'addestramento al posto delle trasformazioni Albumentations predefinite.
- Scopo: Fornisce un controllo granulare sulle strategie di aumento dei dati sfruttando l'ampia libreria di trasformazioni Albumentations. Questo è particolarmente utile quando hai bisogno di aumenti specializzati oltre alle opzioni YOLO integrate, come regolazioni avanzate del colore, iniezione di rumore o trasformazioni specifiche del dominio.
- Implementazione di Ultralytics: Albumentations
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Define custom Albumentations transforms
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Train with custom Albumentations transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pass custom transforms
imgsz=640,
)Punti chiave:
- Solo Python API: Le trasformazioni personalizzate Albumentations sono attualmente supportate solo tramite la Python API. Non possono essere specificate tramite CLI o file di configurazione YAML.
- Sostituisce le trasformazioni predefinite: Quando fornisci trasformazioni personalizzate tramite il parametro
augmentations, esse sostituiscono completamente le trasformazioni Albumentations predefinite. Le aumentazioni YOLO predefinite (comemosaic,hsv_h,hsv_s,degrees, ecc.) rimangono attive e vengono applicate in modo indipendente. - Compatibilità dei BBox: Fai attenzione quando usi trasformazioni spaziali (trasformazioni che cambiano la geometria dell'immagine). Ultralytics gestisce automaticamente le regolazioni dei bounding box, ma alcune trasformazioni complesse potrebbero richiedere una configurazione aggiuntiva.
- Ampia libreria: Albumentations offre oltre 70+ trasformazioni diverse. Esplora la documentazione di Albumentations per scoprire tutte le opzioni disponibili.
- Considerazione sulle prestazioni: Aggiungere troppe aumentazioni o utilizzare trasformazioni computazionalmente costose può rallentare l'addestramento. Inizia con un piccolo set e monitora la velocità di addestramento.
Casi d'uso comuni:
- Imaging medico: Applica trasformazioni specializzate come deformazioni elastiche o distorsioni della griglia per l'aumento di immagini radiografiche o MRI
- Immagini aeree/satellitari: Usa trasformazioni ottimizzate per prospettive dall'alto
- Condizioni di scarsa illuminazione: Applica rumore e regolazioni della luminosità per simulare condizioni di illuminazione difficili
- Ispezione industriale: Aggiungi pattern simili a difetti o variazioni di texture per applicazioni di controllo qualità
Note di compatibilità:
- Richiede la versione di Albumentations 1.0.3 o superiore
- Compatibile con tutte le attività di rilevamento e segmentazione YOLO
- Non applicabile per le attività di classificazione (la classificazione utilizza una pipeline di aumento diversa)
Per ulteriori informazioni su Albumentations e sulle trasformazioni disponibili, visita la documentazione ufficiale di Albumentations.
FAQ
Ci sono troppe aumentazioni tra cui scegliere. Come faccio a sapere quali usare?
Scegliere le giuste aumentazioni dipende dal tuo caso d'uso specifico e dal dataset. Ecco alcune linee guida generali per aiutarti a decidere:
- Nella maggior parte dei casi, leggere variazioni di colore e luminosità sono benefiche. I valori predefiniti per
hsv_h,hsv_sehsv_vsono 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 potrebbe variare e hai bisogno che il modello sia più robusto, è meglio mantenere queste aumentazioni. - Usa l'aumento
mosaicsolo se avere oggetti parzialmente occlusi o più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi manteneremosaicattivo ma aumentare il valoreclose_mosaicper disabilitarlo prima nel processo di addestramento.
In breve: mantieni le cose semplici. Inizia con un piccolo set di aumentazioni e aggiungine gradualmente altre se necessario. L'obiettivo è migliorare la generalizzazione e la robustezza del modello, non complicare eccessivamente il processo di addestramento. Inoltre, assicurati che le aumentazioni che applichi riflettano la stessa distribuzione di dati che il tuo modello incontrerà in produzione.
Quando inizio un addestramento, vedo un riferimento albumentations: Blur[...]. Significa che Ultralytics YOLO esegue un'aumento aggiuntivo come la sfocatura?
Se il pacchetto albumentations è installato, Ultralytics applica automaticamente una serie di aumentazioni extra dell'immagine utilizzandolo. Queste aumentazioni vengono gestite internamente e non richiedono alcuna configurazione aggiuntiva.
Puoi trovare l'elenco completo delle trasformazioni applicate nella nostra documentazione tecnica, così come nella nostra guida all'integrazione di Albumentations. Nota che solo le aumentazioni con una probabilità p maggiore di 0 sono attive. Queste vengono applicate intenzionalmente a basse frequenze per imitare artefatti visivi del mondo reale, come sfocature o effetti in scala di grigi.
Puoi anche fornire le tue trasformazioni personalizzate Albumentations utilizzando la Python API. Consulta la sezione Funzionalità di aumento avanzate per ulteriori dettagli.
Quando inizio un addestramento, non vedo alcun riferimento ad albumentations. Perché?
Controlla se il pacchetto albumentations è installato. In caso contrario, puoi installarlo eseguendo pip install albumentations. Una volta installato, il pacchetto dovrebbe essere rilevato automaticamente e utilizzato da Ultralytics.
Come posso personalizzare le mie aumentazioni?
Puoi personalizzare le aumentazioni creando una classe di dataset e un trainer personalizzati. Ad esempio, puoi sostituire le aumentazioni di classificazione predefinite di Ultralytics con torchvision.transforms.Resize di PyTorch o altre trasformazioni. Consulta l'esempio di addestramento personalizzato nella documentazione sulla classificazione per i dettagli sull'implementazione.
















































