Aumento dei dati utilizzando Ultralytics YOLO

Introduzione
L'aumento dei dati è una tecnica cruciale nella computer vision che espande artificialmente il tuo set di dati di addestramento applicando varie trasformazioni alle immagini esistenti. Durante l'addestramento di 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.
Guarda: Come utilizzare Mosaic, MixUp e altre tecniche di Data Augmentation per aiutare i modelli Ultralytics YOLO a generalizzare meglio 🚀
Perché l'aumento dei dati è importante
L'aumento dei dati svolge molteplici scopi fondamentali nell'addestramento di modelli di computer vision:
- Dataset espanso: Creando variazioni delle immagini esistenti, è possibile aumentare efficacemente le dimensioni del dataset di training senza raccogliere nuovi dati.
- Generalizzazione migliorata: I modelli imparano a riconoscere gli oggetti in varie condizioni, rendendoli 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'adeguata augmentation in genere raggiungono una migliore accuratezza sui set di convalida e di test.
L'implementazione di Ultralytics YOLO fornisce una suite completa di tecniche di aumento dei dati, ognuna delle quali serve a scopi specifici e contribuisce alle prestazioni del modello in modi diversi. Questa guida esplorerà in dettaglio ogni parametro di aumento dei dati, aiutandoti a capire quando e come utilizzarli efficacemente nei tuoi progetti.
Configurazioni di esempio
Puoi personalizzare ogni parametro utilizzando l'API Python, l'interfaccia a riga di comando (CLI) o un file di configurazione. Di seguito sono riportati esempi di come impostare l'aumento dei dati in ciascun metodo.
Esempi di configurazione
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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)
# Training with custom augmentation parameters
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 hsv_h=0.03 hsv_s=0.6 hsv_v=0.5
Utilizzo di un file di configurazione
Puoi definire tutti i parametri di training, inclusi gli aumenti, in un file di configurazione YAML (ad esempio, train_custom.yaml). L'argomento mode parametro è richiesto solo quando si utilizza la CLI. Questo nuovo file YAML sovrascriverà quindi quello predefinito situato in ultralytics package.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo11n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5
Quindi avvia l'addestramento con l'API Python:
Esempio di addestramento
from ultralytics import YOLO
# Load a COCO-pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")
# Train the model with custom configuration
yolo detect train model="yolo11n.pt" 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. The
hsv_hL'iperparametro definisce 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 all'interno di-0.3a0.3. Per valori superiori a0.5, lo spostamento di tonalità si avvolge attorno alla ruota dei colori, ecco perché le aumentazioni appaiono uguali tra0.5e-0.5. - Scopo: Particolarmente utile per scenari all'aperto in cui le condizioni di illuminazione possono influenzare notevolmente l'aspetto degli oggetti. Ad esempio, una banana potrebbe apparire più gialla sotto la luce del sole intensa, ma più verdognola 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. Il parametro
hsv_sL'iperparametro definisce 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 all'interno di-0.7a0.7. - Scopo: Aiuta i modelli a gestire diverse condizioni meteorologiche e impostazioni della telecamera. Ad esempio, un segnale stradale rosso potrebbe apparire molto vivido in una giornata di sole, ma apparire 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. Il parametro
hsv_vL'iperparametro definisce 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 all'interno di-0.4a0.4. - Scopo: Essenziale per l'addestramento di modelli che devono funzionare in diverse condizioni di illuminazione. Ad esempio, una mela rossa potrebbe apparire brillante 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.0 - Utilizzo: Ruota le immagini in modo casuale entro l'intervallo specificato. The
degreesL'iperparametro definisce l'angolo di rotazione, con la regolazione finale scelta casualmente tra-degreesedegrees. Ad esempio, condegrees=10.0, la rotazione viene selezionata casualmente all'interno di-10.0a10.0. - Scopo: Fondamentale per le applicazioni in cui gli oggetti possono apparire con orientamenti diversi. Ad esempio, nelle immagini aeree dei droni, 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. The
translateL'iperparametro definisce l'entità dello spostamento, con la regolazione finale scelta casualmente due volte (una per ciascun asse) all'interno dell'intervallo-translateetranslate. Ad esempio, contranslate=0.5, la traslazione viene selezionata casualmente all'interno di-0.5a0.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 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; l'aumento della 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 i parametri
xeyassi. Valori-1.0e1.0non vengono mostrate perché tradurrebbero completamente l'immagine fuori dal frame.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scala (scale)
- Intervallo: ≥
0.0 - Predefinito:
0.5 - Utilizzo: Ridimensiona le immagini di un fattore casuale all'interno dell'intervallo specificato. Il parametro
scaleL'iperparametro definisce il fattore di scala, con la regolazione finale scelta casualmente tra1-scalee1+scale. Ad esempio, conscale=0.5, il ridimensionamento viene selezionato casualmente all'interno di0.5a1.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 telecamera, richiedendo al modello di riconoscerli indipendentemente dalle loro dimensioni.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
- Il valore
-1.0non viene mostrato perché farebbe scomparire l'immagine, mentre1.0si traduce semplicemente in uno zoom 2x. - I valori visualizzati nella tabella sottostante sono quelli applicati tramite l'iperparametro
scale, non il fattore di scala finale. - Se
scaleè maggiore di1.0, l'immagine può essere molto piccola o capovolta, poiché il fattore di scala è scelto casualmente tra1-scalee1+scale. Ad esempio, conscale=3.0, il ridimensionamento viene selezionato casualmente all'interno di-2.0a4.0. Se viene scelto un valore negativo, l'immagine viene capovolta.
- Il valore
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Cisalgiamento (shear)
- Intervallo:
-180a+180 - Predefinito:
0.0 - Utilizzo: Introduce una trasformazione geometrica che distorce l'immagine lungo entrambi gli assi x e y, spostando efficacemente parti dell'immagine in una direzione mantenendo le linee parallele. Il parametro
shearL'iperparametro definisce l'angolo di taglio, con la regolazione finale scelta casualmente tra-sheareshear. Ad esempio, conshear=10.0, il taglio viene selezionato casualmente all'interno di-10a10sull'asse x, e un altro valore casuale indipendente viene selezionato nello stesso intervallo sull'asse y. - Scopo: Aiuta i modelli a generalizzare le variazioni degli 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 non perpendicolari della telecamera. L'applicazione dell'aumento di shear assicura che il modello impari a riconoscere gli oggetti nonostante tali distorsioni oblique.
- Implementazione di Ultralytics: RandomPerspective
- Nota:
shearvalori possono distorcere rapidamente l'immagine, quindi si consiglia di 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 modificandone gli angoli mantenendo paralleli i lati opposti.
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Prospettiva (perspective)
- Intervallo:
0.0-0.001 - Predefinito:
0.0 - Utilizzo: Applica una trasformazione prospettica completa lungo entrambi gli assi x e y, simulando l'aspetto degli oggetti quando vengono visualizzati da diverse profondità o angolazioni. Il parametro
perspectiveL'iperparametro definisce l'entità della prospettiva, con la regolazione finale scelta casualmente tra-perspectiveeperspective. Ad esempio, conperspective=0.001, la prospettiva viene selezionata casualmente all'interno di-0.001a0.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 del punto di vista, specialmente in scenari in cui gli oggetti appaiono scorciati o distorti a causa di cambiamenti di prospettiva. Ad esempio, nel rilevamento di oggetti basato su drone, 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 del mondo reale.
- Implementazione di Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Capovolgi su-giù (flipud)
- Intervallo:
0.0-1.0 - Predefinito:
0.0 - Utilizzo: Esegue un ribaltamento verticale invertendo l'immagine lungo l'asse y. Questa trasformazione specchia l'intera immagine capovolta, 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.0garantendo che tutte le immagini vengano capovolte e un valore diflipud=0.0disabilitando completamente la trasformazione. Ad esempio, conflipud=0.5, ogni immagine ha una probabilità del 50% di essere capovolta verticalmente. - Scopo: Utile per scenari in cui gli oggetti possono apparire capovolti. Ad esempio, nei sistemi di visione robotica, gli oggetti sui nastri trasportatori o sui bracci robotici possono essere prelevati e posizionati in vari orientamenti. Il ribaltamento verticale aiuta il modello a riconoscere gli oggetti indipendentemente dal loro posizionamento dall'alto verso il basso.
- Implementazione di Ultralytics: RandomFlip
flipud off | flipud su |
|---|---|
![]() | ![]() |
Capovolgi a sinistra-destra (fliplr)
- Intervallo:
0.0-1.0 - Predefinito:
0.5 - Utilizzo: Esegue un ribaltamento 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 gli oggetti che appaiono in orientamenti speculari. Il parametro
fliplrL'iperparametro definisce la probabilità di applicare la trasformazione, con un valore difliplr=1.0garantendo che tutte le immagini vengano capovolte e un valore difliplr=0.0disabilitando completamente la trasformazione. Ad esempio, confliplr=0.5, ogni immagine ha una probabilità del 50% di essere capovolta orizzontalmente. - Scopo: Il ribaltamento 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 ribaltamento orizzontale aiuta il modello a riconoscerli ugualmente bene in entrambi gli orientamenti.
- Implementazione di Ultralytics: RandomFlip
fliplr off | fliplr su |
|---|---|
![]() | ![]() |
Scambio canali BGR (bgr)
- Intervallo:
0.0-1.0 - Predefinito:
0.0 - Utilizzo: Scambia i canali di colore di un'immagine da RGB a BGR, alterando l'ordine in cui i colori sono rappresentati. The
bgrL'iperparametro definisce la probabilità di applicare la trasformazione, conbgr=1.0garantendo che tutte le immagini vengano sottoposte allo scambio di canali ebgr=0.0disabilitandolo. Ad esempio, conbgr=0.5, ogni immagine ha una probabilità del 50% di essere convertita da RGB a BGR. - Scopo: Aumenta la robustezza a diversi ordinamenti 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 distribuiscono modelli in ambienti in cui il formato colore di input potrebbe differire dai dati di addestramento.
- Implementazione di Ultralytics: Format
bgr off | bgr su |
|---|---|
![]() | ![]() |
Mosaico (mosaic)
- Intervallo:
0.0-1.0 - Predefinito:
1.0 - Utilizzo: Combina quattro immagini di training in una sola. Il parametro
mosaicL'iperparametro definisce la probabilità di applicare la trasformazione, conmosaic=1.0garantendo che tutte le immagini siano combinate emosaic=0.0disabilitando 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, nei progetti di conservazione della fauna selvatica in cui gli animali possono apparire a varie distanze e scale, l'aumento a mosaico aiuta il modello a imparare a riconoscere la stessa specie attraverso diverse dimensioni, occlusioni parziali e contesti ambientali creando artificialmente campioni di addestramento diversi da dati limitati.
- Implementazione di Ultralytics: Mosaic
- Nota:
- Anche se il
mosaicL'aumento dei dati rende il modello più robusto, ma può anche rendere il processo di addestramento più impegnativo. - Il
mosaicaugmentation can be disabled near the end of training by settingclose_mosaical numero di epoche prima del completamento, quando dovrebbe essere disattivato. Ad esempio, seepochsè impostato su200eclose_mosaicè impostato su20, la funzionemosaicl'aumento dei dati verrà disabilitato dopo180epoche. Seclose_mosaicè impostato su0, la funzionemosaicl'aumento dei dati sarà abilitato per l'intero processo di addestramento. - Il centro del mosaic generato è determinato utilizzando valori casuali e può trovarsi all'interno o all'esterno dell'immagine.
- L'implementazione attuale del
mosaicaugmentation combines 4 images picked randomly from the dataset. If the dataset is small, the same image may be used multiple times in the same mosaic.
- Anche se il
mosaic off | mosaic su |
|---|---|
![]() | ![]() |
Mixup (mixup)
- Intervallo:
0.0-1.0 - Predefinito:
0.0 - Utilizzo: Combina due immagini e le relative etichette con una data probabilità. Il parametro
mixupL'iperparametro definisce la probabilità di applicare la trasformazione, conmixup=1.0garantendo che tutte le immagini siano miscelate emixup=0.0disabilitando la trasformazione. Ad esempio, conmixup=0.5, ogni immagine ha una probabilità del 50% di essere mescolata 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 a imparare caratteristiche più robuste mescolando immagini di prodotti diversi, insegnandogli a identificare gli articoli anche quando sono parzialmente visibili o oscurati da altri prodotti sugli scaffali affollati dei negozi.
- Implementazione di Ultralytics: Mixup
- Nota:
- Il
mixupratio è un valore casuale estratto da anp.random.beta(32.0, 32.0)distribuzione beta, il che significa che ogni immagine contribuisce per circa il 50%, con leggere variazioni.
- Il
Prima immagine, mixup off | Seconda immagine, mixup off | mixup su |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)
- Intervallo:
0.0-1.0 - Predefinito:
0.0 - Utilizzo: Taglia una regione rettangolare da un'immagine e la incolla su un'altra immagine con una data probabilità. Il parametro
cutmixL'iperparametro definisce la probabilità di applicare la trasformazione, concutmix=1.0garantendo che tutte le immagini vengano sottoposte a questa trasformazione ecutmix=0.0disabilitandolo completamente. Ad esempio, concutmix=0.5, ogni immagine ha una probabilità del 50% di avere una regione sostituita con una patch proveniente da un'altra immagine. - Scopo: Migliora le prestazioni del modello creando scenari di occlusione realistici, mantenendo 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 reali complessi con oggetti sovrapposti.
- Implementazione di Ultralytics: CutMix
- Nota:
- La dimensione e la posizione della regione tagliata sono determinate casualmente per ogni applicazione.
- A differenza di mixup, che fonde i valori dei pixel a livello globale,
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 bounding box esistente. Inoltre, solo i bounding box che conservano almeno
0.1(10%) della loro area originale all'interno della regione incollata vengono preservati. - Questa soglia minima dell'area del riquadro di delimitazione non può essere modificata con l'implementazione attuale ed è impostata su
0.1per impostazione predefinita.
Prima immagine, cutmix off | Seconda immagine, cutmix off | cutmix su |
|---|---|---|
![]() | ![]() | ![]() |
Aumentazioni specifiche per la segmentazione
Copia-Incolla (copy_paste)
- Intervallo:
0.0-1.0 - Predefinito:
0.0 - Utilizzo: Funziona solo per le attività di segmentazione; questa augmentation copia oggetti all'interno o tra le immagini in base a una probabilità specificata, controllata dal parametro
copy_paste_mode.copy_pasteL'iperparametro definisce la probabilità di applicare la trasformazione, concopy_paste=1.0garantendo che tutte le immagini vengano copiate ecopy_paste=0.0disabilitando 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 di difetti industriali in cui alcuni tipi di difetti appaiono raramente, l'aumento di copia-incolla può aumentare artificialmente l'occorrenza di questi difetti rari 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, il
copy_pasteaugmentation can be used to copy objects from one image to another. - Una volta che un oggetto viene copiato, indipendentemente dal
copy_paste_mode, la sua Intersection over Area (IoA) viene calcolata con tutti gli oggetti dell'immagine sorgente. Se tutti gli IoA sono inferiori a0.3(30%), l'oggetto viene incollato nell'immagine di destinazione. Se solo uno IoA è superiore0.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, il
copy_paste off | copy_paste on con copy_paste_mode=flip | Visualizza il copy_paste processo |
|---|---|---|
![]() | ![]() | ![]() |
Modalità Copia-Incolla (copy_paste_mode)
- Opzioni:
'flip','mixup' - Predefinito:
'flip' - Utilizzo: Determina il metodo utilizzato per copia-incolla aumento dei dati. Se impostato su
'flip', gli oggetti provengono dalla stessa immagine, mentre'mixup'consente di copiare oggetti da immagini diverse. - Scopo: Consente flessibilità nel modo in cui gli oggetti copiati vengono integrati nelle immagini di destinazione.
- Implementazione di Ultralytics: CopyPaste
- Nota:
- Il principio IoA è lo stesso per entrambi
copy_paste_mode, ma il modo in cui gli oggetti vengono copiati è diverso. - A seconda delle dimensioni dell'immagine, gli oggetti possono talvolta essere copiati parzialmente o interamente al di fuori del frame.
- A seconda della qualità delle annotazioni poligonali, gli oggetti copiati possono presentare lievi variazioni di forma rispetto agli originali.
- Il principio IoA è lo stesso per entrambi
| Immagine di riferimento | Immagine scelta per copy_paste | copy_paste on con copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Aumenti specifici per la classificazione
Aumento automatico (auto_augment)
- Opzioni:
'randaugment','autoaugment','augmix',None - Predefinito:
'randaugment' - Utilizzo: Applica policy di augmentation automatizzate per la classificazione. Il parametro
'randaugment'l'opzione utilizza RandAugment,'autoaugment'utilizza AutoAugment, e'augmix'utilizza AugMix. Impostazione suNonedisabilita l'aumento automatico. - 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 all'interno di Torchvision. Per scoprire strategie di augmentation 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 una fase di ricerca estensiva, rendendolo più efficiente dal punto di vista computazionale pur migliorando la robustezza del modello. Riferimento al paper di RandAugment.
- AugMix: AugMix è un metodo di aumento dei dati che migliora la robustezza del modello creando diverse variazioni dell'immagine attraverso combinazioni casuali di trasformazioni semplici. Riferimento al paper di AugMix.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- In sostanza, la differenza principale tra i tre metodi risiede nel modo in cui le policy di augmentation sono definite e applicate.
- Puoi fare riferimento a questo articolo che confronta i tre metodi in dettaglio.
Random Erasing (erasing)
- Intervallo:
0.0-0.9 - Predefinito:
0.4 - Utilizzo: Cancella casualmente porzioni dell'immagine durante il training di classificazione. Il parametro
erasingL'iperparametro definisce la probabilità di applicare la trasformazione, conerasing=0.9garantendo che quasi tutte le immagini vengano cancellate eerasing=0.0disabilitando la trasformazione. Ad esempio, conerasing=0.5, ogni immagine ha una probabilità del 50% di avere una porzione cancellata. - Scopo: Aiuta i modelli a imparare caratteristiche robuste e previene l'eccessivo affidamento su 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, maschere facciali o altri oggetti che potrebbero coprire parzialmente le caratteristiche del viso. Ciò migliora le prestazioni nel mondo reale costringendo il modello a identificare gli individui utilizzando molteplici caratteristiche facciali piuttosto che dipendere esclusivamente da caratteristiche distintive che potrebbero essere oscurate.
- Implementazione di Ultralytics: classify_augmentations()
- Nota:
- Il
erasingaugmentation comes with ascale,ratio, evalueIperparametri che non possono essere modificati con implementazione attuale. I loro valori predefiniti sono(0.02, 0.33),(0.3, 3.3), e0, rispettivamente, come indicato in PyTorch documentazione. - Il limite superiore del
erasingL'iperparametro è impostato su0.9per evitare di applicare la trasformazione a tutte le immagini.
- Il
erasing off | erasing on (esempio 1) | erasing on (esempio 2) | erasing on (esempio 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Caratteristiche avanzate dell'aumento
Trasformazioni albonate personalizzate (augmentations)
- Tipo:
listdelle trasformazioni di Albumentations - Predefinito:
None - Utilizzo: Consente di fornire trasformazioni Albumentations personalizzate per l'incremento dei dati utilizzando l'API Python . Questo parametro accetta un elenco di oggetti di trasformazione di Albumentations che saranno applicati durante l'addestramento al posto delle trasformazioni predefinite di Albumentations.
- Scopo: Fornisce un controllo a grana fine sulle strategie di incremento dei dati, sfruttando l'ampia libreria di trasformazioni di Albumentations. È particolarmente utile quando si ha bisogno di ampliamenti specializzati che vadano oltre le opzioni YOLO integrate, come le regolazioni avanzate del colore, l'iniezione di rumore o le trasformazioni specifiche del dominio.
- Implementazione diUltralytics: Albumentazioni
Esempio di valutazioni personalizzate
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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,
)
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Define advanced custom Albumentations transforms with specific parameters
advanced_transforms = [
A.OneOf(
[
A.MotionBlur(blur_limit=7, p=1.0),
A.MedianBlur(blur_limit=7, p=1.0),
A.GaussianBlur(blur_limit=7, p=1.0),
],
p=0.3,
),
A.OneOf(
[
A.GaussNoise(var_limit=(10.0, 50.0), p=1.0),
A.ISONoise(color_shift=(0.01, 0.05), intensity=(0.1, 0.5), p=1.0),
],
p=0.2,
),
A.CLAHE(clip_limit=4.0, tile_grid_size=(8, 8), p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, brightness_by_max=True, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
A.CoarseDropout(
max_holes=8, max_height=32, max_width=32, min_holes=1, min_height=8, min_width=8, fill_value=0, p=0.2
),
]
# Train with advanced custom transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=advanced_transforms,
imgsz=640,
)
Punti chiave:
- Solo APIPython : Le trasformazioni personalizzate di Albumentations sono attualmente supportate solo attraverso l'API Python . Non possono essere specificate tramite CLI o file di configurazione YAML.
- Sostituisce le trasformazioni predefinite: Quando si forniscono trasformazioni personalizzate tramite l'opzione
augmentationssostituiscono completamente le trasformazioni predefinite di Albumentations. Gli incrementi predefiniti di YOLO (comemosaic,hsv_h,hsv_s,degrees, ecc.) rimangono attivi e vengono applicati in modo indipendente. - Compatibilità con i riquadri di delimitazione: Prestare attenzione quando si utilizzano trasformazioni spaziali (trasformazioni che modificano la geometria dell'immagine). Ultralytics gestisce automaticamente le regolazioni dei riquadri di delimitazione, ma alcune trasformazioni complesse possono richiedere una configurazione aggiuntiva.
- Ampia libreria: Albumentations offre oltre 70 diverse trasformazioni. Esplorate la documentazione di Albumentations per scoprire tutte le opzioni disponibili.
- Considerazione delle prestazioni: L'aggiunta di un numero eccessivo di ampliamenti o l'uso di trasformazioni computazionalmente costose può rallentare l'addestramento. Iniziare con un piccolo set e monitorare la velocità di addestramento.
Casi d'uso comuni:
- Imaging medico: Applicare trasformazioni specializzate come deformazioni elastiche o distorsioni della griglia per l'aumento delle immagini a raggi X o a risonanza magnetica.
- Immagini aeree/satellitari: Utilizzare trasformazioni ottimizzate per le prospettive dall'alto.
- Condizioni di scarsa illuminazione: Applicare regolazioni del rumore e della luminosità per simulare un'illuminazione difficile.
- Ispezione industriale: Aggiunta di motivi simili a difetti o variazioni di texture per applicazioni di controllo qualità
Note sulla compatibilità:
- Richiede la versione 1.0.3 o superiore di Albumentations.
- Compatibile con tutte le attività di rilevamento e segmentazione YOLO
- Non si applica ai compiti di classificazione (la classificazione utilizza una pipeline di incremento diversa).
Per ulteriori informazioni su Albumentations e sulle trasformazioni disponibili, visitare la documentazione ufficiale di Albumentations.
FAQ
Ci sono troppe aumentazioni tra cui scegliere. Come faccio a sapere quali usare?
La scelta delle giuste tecniche di augmentation 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 vantaggiose. I valori predefiniti per
hsv_h,hsv_s, ehsv_vsono un solido punto di partenza. - Se il punto di vista della telecamera è coerente e non cambierà una volta implementato il modello, è probabile che tu possa saltare trasformazioni geometriche come
rotation,translation,scale,shear, oppureperspective. Tuttavia, se l'angolazione della telecamera può variare e hai bisogno che il modello sia più robusto, è meglio mantenere questi aumenti. - Utilizzare il
mosaicAumentare i dati solo se avere oggetti parzialmente occlusi o più oggetti per immagine è accettabile e non modifica il valore dell'etichetta. In alternativa, puoi manteneremosaicattivo ma aumenta ilclose_mosaicvalore per disabilitarlo prima nel processo di addestramento.
In breve: mantieni la semplicità. Inizia con un piccolo set di aumentazioni e aggiungine gradualmente altre secondo necessità. L'obiettivo è migliorare la generalizzazione e la robustezza del modello, non complicare eccessivamente il processo di training. Inoltre, assicurati che le aumentazioni che applichi riflettano la stessa distribuzione dei dati che il tuo modello incontrerà in produzione.
Quando si avvia un addestramento, si vede un albumentations: Blur[...] riferimento. Significa che Ultralytics YOLO esegue un'ulteriore augmentation come la sfocatura?
Se il albumentations pacchetto è installato, Ultralytics applica automaticamente una serie di aumenti extra dell'immagine utilizzandolo. Questi aumenti vengono gestiti internamente e non richiedono alcuna configurazione aggiuntiva.
Puoi trovare l'elenco completo delle trasformazioni applicate nel nostro documentazione tecnica, così come nel nostro Guida all'integrazione di Albumentations. Si noti che solo gli aumenti con una probabilità p maggiore di 0 sono attive. Queste vengono applicate intenzionalmente a basse frequenze per simulare artefatti visivi del mondo reale, come effetti di sfocatura o scala di grigi.
È anche possibile fornire trasformazioni Albumentations personalizzate utilizzando l'API Python . Per maggiori dettagli, consultare la sezione Funzioni avanzate di incremento.
Quando si avvia un addestramento, non vedo alcun riferimento a albumentations. Perché?
Verificare se il albumentations pacchetto è installato. In caso contrario, puoi installarlo eseguendo pip install albumentations. Una volta installato, il pacchetto dovrebbe essere rilevato e utilizzato automaticamente da Ultralytics.
Come posso personalizzare le mie aumentazioni?
Puoi personalizzare gli aumenti creando una classe di dataset e un trainer personalizzati. Ad esempio, puoi sostituire gli aumenti di classificazione Ultralytics predefiniti con torchvision.transforms.Resize di PyTorch o altre trasformazioni. Consulta l'esempio di training personalizzato nella documentazione sulla classificazione per i dettagli sull'implementazione.
















































