Veri Artırımının Görme, Dil ve Ses Yapay Zekası İçin Neden Anahtar Olduğu


Tanıtım

Birçok makine öğrenimi pipeline'ında, eğitim verisinin miktarı ve kalitesi, modelin kalitesini belirleyen nihai faktördür. Ancak, büyük ve çeşitli veri setlerini toplamak genellikle pahalı ve zaman alıcıdır, özellikle etiketlerin uzman anotasyonu gerektirdiği durumlarda. Bu soruna yaygın ve zarif bir yaklaşım, mevcut verilerin değiştirilmiş versiyonlarını oluşturmaktır; bu bir süreç olarak veri artırma olarak bilinir.

Bu makalede, görüntü, metin ve ses verileri için veri artırma konusunu uzman seviyesinde ele almayı amaçlıyoruz. Dönüşüm yöntemlerini, otomatik politika arama yaklaşımlarını, GAN'ler kullanarak sentetik veri üretimini ve küçük veya dengesiz veri setleri için gelişmiş teknikleri kapsayacağız. Veri artırma Python kütüphanelerinin karşılaştırma tablosu, size görev için uygun aracı seçmenize yardımcı olacaktır. Temel kavramlar (renk titremesi, Gaussian gürültü ve daha fazlası) vurgulanacak ve açıklanacaktır.

Önemli Noktalar

  • Veri artırma, eğitim verisetini dönüştürülmüş kopyalarla genişleten bir tekniktir, bu da modelin daha iyi genelleştirmesini sağlar ve aşırı öğrenmeyi azaltır. Derin öğrenme için, görüntü işleme, doğal dil işleme ve ses görevlerinde veri elde etmek ve etiketlemek zor olduğundan önemlidir.
  • görüntü artırmada, döndürme, çevirme, kırpma, renk değişiklikleri yapma ve gürültü ekleme gibi basit dönüşümler, görsel modelin girdi verilerindeki değişkenliklere karşı dayanıklılığını artırabilir.
  • Eş anlamlı değiştirme, rastgele ekleme veya geri çeviri gibi teknikler NLP performansını artırabilir. Gürültü eklemek, zaman genişletme veya ton kaydırma, daha dayanıklı konuşma veya ses tanıma modelleri eğitmeye yardımcı olabilir.
  • AutoAugment ve RandAugment, artırma politikalarını bulmak için pekiştirmeli öğrenme veya rastgele arama kullanır. GAN'lar veya simülatörler, az veri bulunan veya son derece dengesiz bir veri setine sahip olduğunuz görevler için tamamen yeni veri örnekleri üretebilir.
  • Python'da veri artırma uygulamak, kullandığınız veri türüne ve derin öğrenme çerçevesine göre Albumentations, NLPAug gibi özel kütüphaneler aracılığıyla daha uygun ve verimli hale gelebilir. Seçilen artırma kütüphanesini veri yükleme ve ön işleme hattına entegre edebilirsiniz. Bu şekilde, her veri partisi eğitim sırasında otomatik olarak anlık olarak dönüştürülecektir. Ayrıca, artırılmış veriyi önceden üretip disk üzerinde kaydederek daha hızlı erişim için de kullanabilirsiniz.
  • Model performansını ve veri artırmanın etkisini izleyin, böylece doğrulama doğruluğunu artıran ve aşırı öğrenmeyi önleyen doğru dengeyi ve artırma kombinasyonunu bulabilirsiniz.

Veri artırımı neden kullanılır?

  • Veri artırma tekniklerini kullanarak daha büyük ve daha çeşitli bir veri seti oluşturabilirsiniz. Sınırlı veya dengesiz veriler varsa faydalıdır.
  • Model için daha fazla varyasyon sağlayarak aşırı uyumu azaltmak için bir düzenleme biçimi olarak işlev görür.
  • Bu, modelinizin girişteki bozulmalara ve gürültülere karşı daha dayanıklı olmasına yardımcı olur.
  • Gerçek dünyadaki dönüşümleri simüle ederek (örneğin, nesnelerin döndürülmesi, metnin yeniden ifade edilmesi) alan bilgisi ekleyebilirsiniz.

Görüntü Artırma Teknikleri

Görüntü artırımı, sınıflandırma, nesne tanıma ve segmentasyon gibi bilgisayarla görme görevlerinde uzun bir geçmişe sahiptir. Aşağıda, bazı temel ve daha ileri düzey artırmaları keşfedeceğiz.

Geometrik Dönüşümler

  • Çevirme ve Döndürme: Rasgele yatay veya dikey çevirme ve döndürmeler (örn., ±90°, küçük rasgele açılar) yaygındır çünkü nesnenin kimliğini korurken yön çeşitliliği sunar.
  • Kırpma ve Yeniden Ölçeklendirme: Rastgele kırpma, modelin bir görüntünün farklı kısımlarına odaklanmasını sağlamak için kullanılır. Yeniden ölçeklendirme (yakınlaştırma veya uzaklaştırma), farklı mesafeleri simüle etmek için kullanılır.
  • Kesme ve Bakış Açısı Dönüşümleri: Küçük kesmeler veya perspektif bozulmaları, kamerada hafif bir eğilmeyi veya kameranın bakış açısındaki bir değişikliği taklit edebilir.

Fotometrik Dönüşümler

  • Renk Gürültüsü: Renk gürültüsü işlemi, parlaklık, kontrast, doygunluk ve tonlamayı rastgele ayarlayacaktır.
  • Gaussian Gürültü: Gauss dağılımından örneklenmiş gürültü eklemek, modellerin sensör gürültüsüne veya sıkıştırma artefaktlarına karşı dayanıklı olmasını sağlayabilir.
  • Bulanıklaştırma ve Keskinleştirme: Gauss bulanıklığı veya keskinleştirme filtresi uygulamak, odak varyasyonlarını simüle edebilir.
  • Koparma veya Rastgele Silme: Modelin genel bağlama daha fazla odaklanmasını teşvik etmek için görüntünün rastgele kare parçalarını maskeler.

Bir Artırma Boru Hattı Kurma

Genellikle Python'da Albumentations veya Torchvision gibi paketleri kullanarak görüntü artırmalarını gerçekleştiriyoruz. Albumentations, çok sayıda dönüşümü (döndürmeler, ayna görüntüler, renk dalgalanmaları, CutMix gibi ileri düzey yöntemler vb.) destekleyen hızlı ve esnek bir kütüphanedir ve NumPy/PyTorch ile iyi çalışır. Torchvision, torchvision.transformsden birçok yaygın dönüşüm sunar ve PyTorch veri kümesi nesneleriyle doğrudan entegre olur.

Bir veri seti örneği yükleyin
Örneğin, PyTorch kullanarak CIFAR-10'u yükleyebilir ve bir görüntü alabilirsiniz:

from torchvision import datasets
import matplotlib.pyplot as plt
import numpy as np

Download CIFAR-10 and get the first image and label
cifar = datasets.CIFAR10(root='./data', download=True)
img, label = cifar[0]  # PIL image and class index

Display the image inline
plt.imshow(np.array(img))
plt.axis('off')
plt.show()

Çıktı:

Artırımları tanımlayın Bir dönüşüm boru hattı oluşturacağız. Örneğin, rastgele bir kesim, yatay çevirme ve renk titretmesi oluşturmak için Albumentations kullanarak: Bu boru hattı, görüntüyü alanının %80-100'üne rastgele kesecek, 32×32 boyutuna yeniden boyutlandıracak, bazen çevirip, parlaklık/kontrast/doygunluk/tonu rastgele ayarlayacak.

If needed:
pip install torchaudio audiomentations
import albumentations as A
from albumentations.pytorch import ToTensorV2

transform = A.Compose([
    A.RandomResizedCrop(size=(32, 32), scale=(0.8, 1.0)),  # random crop & resize
    A.HorizontalFlip(p=0.5),                                    # 50% chance horizontal flip
    A.ColorJitter(brightness=0.3, contrast=0.3, saturation=0.3, hue=0.1, p=0.7),  # random color jitter
    ToTensorV2()  # convert to PyTorch tensor
])

Uygulama ve artırmaları görselleştir. Artırılmış sonuçları görmek, akıl sağlığını kontrol etmek için sıklıkla faydalıdır:

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

augmented = transform(image=np.array(img))['image']  # apply transforms
aug_img = Image.fromarray(augmented.permute(1,2,0).numpy().astype('uint8'))  # tensor to PIL
Show side by side
plt.subplot(1,2,1); plt.imshow(img); plt.title("Original")
plt.subplot(1,2,2); plt.imshow(aug_img); plt.title("Augmented")
plt.show()

Çıktı:

Soldaki resim, model için gerçeklik olarak işlev gören ham, değiştirilmemiş CIFAR-10 eğitim örneğidir. Sağdaki resim ise bunun bozulmuş bir versiyonudur (rastgele kesim, renk varyasyonu veya çevirme kullanılarak artırılmıştır). Piksel ve renk dağılımında farklı bir mekansal düzenlemeye sahiptir, ancak aynı sınıf etiketini (“kurbağa”) korur.

Görüntülere Gauss Gürültüsü Ekleme

Temiz veri setleri üzerinde eğitilmiş derin öğrenme modelleri, bulanıklık, kötü aydınlatma koşulları veya sıkıştırma artefaktları gibi etkileri içerebilecek gürültülü veya düşük kaliteli gerçek dünya verilerine iyi genelleme yapamayabilir. Bir modelin bu tür koşullara dayanıklılığını artırmanın basit bir yöntemi, eğitim sırasında bu granüllülüğü simüle etmek için Gauss gürültü artırması uygulamaktır.

Veriyi Yükleyin ve Hazırlayın

CIFAR-10'dan ilk resmi tekrar yükleyecek ve işleme için bir NumPy dizisine dönüştüreceğiz.

If needed:
pip install torchaudio audiomentations
from torchvision import datasets
import matplotlib.pyplot as plt
import numpy as np
import albumentations as A

Download and load the first CIFAR-10 image
cifar = datasets.CIFAR10(root='./data', download=True)
img, label = cifar[0]
img_np = np.array(img)  # Convert PIL image to numpy array

Gaussian Gürültü Artırımı Uygula Albumentations kontrollü rastgele gürültü eklemeyi kolaylaştırır.

Define the Gaussian noise augmentation
gauss_noise = A.Compose([
    A.GaussNoise(var_limit=(20.0, 50.0), mean=0, p=1.0)
])
Apply the augmentation
noisy_img = gauss_noise(image=img_np)['image']
  • var_limit=(20.0, 50.0) – Bu, Gauss gürültüsü için varyans aralığını belirtir. Varyans ne kadar büyükse, gürültü o kadar fazladır. Bu durumda, gürültü varyansı 20 ile 50 arasında rastgele bir değer olacaktır.
  • ortalama=0 – Gürültüyü örneklemek için kullanılan Gauss dağılımının ortalaması. 0 değeri, gürültüyü sıfır etrafında merkezler (piksel parlaklığını artırma veya azaltma olasılığı eşittir).
  • p=1.0 – Dönüşümün uygulanma olasılığı. 1.0 değeri, gürültünün görüntüye her zaman uygulanacağı anlamına gelir.

Sonuçları Yan Yana Göster Karşılaştırma için orijinal ve gürültülü görüntüleri görselleştirelim:

Show original and noisy images
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plt.imshow(img_np)
plt.title('Original')
plt.axis('off')

plt.subplot(1,2,2)
plt.imshow(noisy_img)
plt.title('Gaussian Noise')
plt.axis('off')

plt.tight_layout()
plt.show()

Çıktı:

Ne Oluyor?

  • CIFAR-10'dan orijinal, temiz görüntü.
  • Gauss Gürültüsü: Resme piksel seviyesinde rastgele gürültü eklenir. Düşük kaliteli bir kameradan veya kötü aydınlatma koşullarından gelen granüllü fotoğrafları düşünün.

Neden Gauss Gürültüsü Kullanılır?

  • Geliştirilmiş Dayanıklılık: Gürültülü verilerle eğitim, modellerin önemsiz detayları göz ardı etmeyi öğrenmeye zorlanmasını sağlar ve temel olanlara odaklanır.
  • Daha İyi Genelleme: Bu modeller, yalnızca temiz veri setleri değil, gerçek dünya ve kusurlu girdilerle başa çıkmada daha iyidir.

Torchvision Dönüşümleri Kullanma (Alternatif)

Torchvision'ın dönüşümleri, işlevlerin bir bileşimi kullanarak benzer etkiler elde edebilir:

import torchvision.transforms as T
torchvision_transform = T.Compose([
    T.RandomResizedCrop(32, scale=(0.8,1.0)),
    T.RandomHorizontalFlip(p=0.5),
    T.ColorJitter(brightness=0.3, contrast=0.3, saturation=0.3, hue=0.1),
    T.ToTensor()
])

Yukarıdaki Albumentations boru hattına benzerdir. Albumentations, daha güçlü dönüşümlerle iyi performans gösterir (ve PyTorch veya TensorFlow'u destekler). Torchvision, PyTorch veri kümesi ve veri yükleyicileri ile daha sıkı bir entegrasyon sağlar.

Özet: CIFAR-10 Kurbağa Görselinde Veri Artırmanın Görselleştirilmesi

Aşağıdaki örnekte, bir kurbağa CIFAR-10 görüntüsü ile başlayıp, birkaç artırma (kırpma, çevirme, renk gürültüsü, gürültü) uygularız.

from torchvision import datasets
import matplotlib.pyplot as plt
import numpy as np
import albumentations as A
import random

Load first 10 images to find a frog
cifar = datasets.CIFAR10(root='./data', download=True)
frog_idx = [i for i, (_, l) in enumerate(cifar) if l == 6][0]  # label 6 is 'frog'
img, label = cifar[frog_idx]
img_np = np.array(img)

Define several augmentation pipelines
augs = [
    ("Original", lambda x: x),
    ("Random Crop", A.Compose([A.RandomCrop(24, 24, p=1.0), A.Resize(32, 32)])),
    ("Horizontal Flip", A.Compose([A.HorizontalFlip(p=1.0)])),
    ("Color Jitter", A.Compose([A.ColorJitter(brightness=0.8, contrast=0.8, saturation=0.8, hue=0.2, p=1.0)])),
    ("Gaussian Noise", A.Compose([A.GaussNoise(var_limit=(20.0, 50.0), mean=0, p=1.0)])),
]

Apply augmentations
aug_imgs = []
for name, aug in augs:
    if name == "Original":
        aug_imgs.append((name, img_np))
    else:
        aug_imgs.append((name, aug(image=img_np)['image']))

Display
plt.figure(figsize=(15,3))
for i, (name, im) in enumerate(aug_imgs):
    plt.subplot(1, len(aug_imgs), i+1)
    plt.imshow(im)
    plt.title(name)
    plt.axis('off')
plt.suptitle('CIFAR-10 "Frog": Original and Augmented Variations\n(Label always: "frog")')
plt.show()

Çıktı :

Bunun yaptığı:

  • CIFAR-10'dan bir kurbağa resmi bulun.
  • Birlikte birkaç “artırılmış varyasyon” (kesim, çevirmek, renk, gürültü) ile gösterir.
  • Etiket her zaman "kurbağa"dır - varyasyonlar, modelinizin kurbağaları farklı koşullarda tanımasına yardımcı olur.

Her eğitim görüntüsüne birkaç varyasyon uygulayarak (genellikle her dönem), veri setinin boyutunu artırabiliriz. Bu, klasik görsel modellerde bile kritik öneme sahipti – orijinal ImageNet CNN'leri, örneğin, performanslarını artırmak için rastgele kesimlerle/çevirmelerle eğitildi.

Özel Artırmalar (Döndürme, Kaydırma, vb.)

Standart görüntü sınıflandırma artırmaları (döndürmeler, kesmeler), görüntü etiketinin aynı kaldığı varsayımı altında çalışır. Nesne tespiti gibi görevlerde, döndürme veya kaydırma gibi dönüşümlerin sınırlayıcı kutu koordinatlarına da uygulanması gerekir. Diyelim ki elinizde bir sınırlayıcı kutuya sahip bir araba resmi var. Resmi döndürdüğünüzde, kutu koordinatlarını da buna göre döndürmelisiniz. Döndürme ve kaydırma, bir tespit modelinin nesneleri farklı açılardan ve perspektiflerden tanımlamasına yardımcı olabilir. Döndürme/kaydırma yoluyla görüntüleri ve sınırlayıcı kutuları artırma konusunda uygulamalı bir rehber için, nesne tespiti modelleri için döndürme ve kaydırma üzerine bu eğitime bakın.

Metin Veri Artırma

Metin artırma, resimleri artırmaktan daha karmaşık çünkü bazı kelimeleri değiştirdiğinizde, başka bir şey anlamına gelen veya dilbilgisi açısından doğru olmayan bir cümle elde edebilirsiniz. Duygu analizi veya amaç sınıflandırması gibi NLP görevlerinde, küçük veya dengesiz metin veri setleri ile çalışırken metin artırma ile performansı artırabilirsiniz. Duygu analizi için müşteri yorumlarından oluşan bir veri setimiz olduğunu varsayalım. Veri setindeki bir yorum şöyle olabilir: Orijinal: “Telefon kılıfı harika ve dayanıklı. Kesinlikle bayıldım.”

Bu pozitif bir inceleme. Artırılmış versiyonlar oluşturabiliriz:

  • Eşanlamlı Kelime Değişimi: Bazı kelimeleri benzer duygu veya anlamda eşanlamlılarıyla değiştirin.
  • Rasgele Ekleme/Silme: Duyguyu tersine çevirmeyen bir kelime ekleyin veya çıkarın.
  • Geri Çeviri: Fransızcaya çevirip tekrar İngilizceye çevirmek (örneğin), yeniden ifade edilmiş bir cümle almak için.

Örneğin, yukarıdaki cümlede bir eş anlamlı değiştirme yapalım. NLPAug kütüphanesini (WordNet tabanlı eş anlamlı artırma ile çalışır) veya daha gelişmiş artırma için TextAttack kullanabiliriz. NLPAug kullandığımızda:

import nltk
nltk.download('averaged_perceptron_tagger_eng')
pip install nlpaug  # (install nlpaug if not already)
import nlpaug.augmenter.word as naw
augmenter = naw.SynonymAug(aug_src='wordnet', stopwords=['I'])  # use WordNet synonyms
text = "The phone case is great and durable. I absolutely love it."
aug_text = augmenter.augment(text)
print("Augmented:", aug_text)

(Durak kelimeler gibi “Ben” ekleme işlemlerinden hariç tutulur, cümle yapısını korumak için.)

Genişletilmiş cümle şöyle görünebilir:
Genişletilmiş: “Telefon seti kılıfı canlı, düzenli ve dayanıklıdır. Onu tamamen seviyorum.”

Bu değişiklikler, olumlu duyguyu ve temel anlamı korur. Bu tür çok sayıda varyant üreterek, NLP modelimizi neat*/perfectly*'nin orijinal kelimelerle benzer bir duyguyu ilettiğini etkin bir şekilde öğretmiş oluyoruz, böylece farklı ifadeleri anlama konusunda daha dayanıklı hale geliyor.

TextAttack Çerçevesi Kullanımı TextAttack, ayrıca veri artırımı destekleyen bir düşmanca saldırı çerçevesidir. BERT veya diğer dil modelleri gibi bağlamsal kelime değiştirme işlemleri gerçekleştiren artırıcılar sağlar; bu, basit eşanlamlı sözlük değiştirmelerinden daha akıcı artırımlar elde edilmesine yol açabilir. Örneğin:

Step 1: Install the library (if not already installed)
pip install textattack

Step 2: Import the necessary class
from textattack.augmentation import WordNetAugmenter

Step 3: Instantiate the augmenter
augmenter = WordNetAugmenter()

Step 4: Define the input text (this was the missing part)
text = "I was billed twice for the service and this is the second time it has happened"

Step 5: Augment the text and print the result
augmented_texts = augmenter.augment(text)
print(augmented_texts)

Çıktı:

TextAttack ayrıca EDA (Kolay Veri Artırma) yöntemleri (rastgele değiştir, ekle, sil) ve BackTranslationAugmenter gibi daha fazlasını sunar. Önemli bir avantaj, dil modellerinden yararlanarak bağlamsal artırma yapabilme yeteneğidir (örneğin, bir kelimeyi bağlama daha uygun bir kelime ile değiştirmek).

Bazı girdilerde argo veya yanlış yazılmış kelimeleri normalleştirmek için artırma uygulamak isteyebiliriz. Örneğin, `Bu telefon kılıfını seviyorum` tweeti için, `Bu telefon kılıfını gerçekten seviyorum` (yazımın normalleştirilmesi) veya `Bu telefon kılıfını çok seviyorum` (ekleme) artırımlarını üretebiliriz. Artırımlar, modeli girdilerin bozulmalarına maruz bırakmak için kullanılabilir, bunlar arasında yazım hataları veya diğer günlük ifadeler bulunur.

NLP artırımı ve karşıt eğitim hakkında daha fazla bilgi için, NLP Veri Artırımı için TextAttack ile ilgili eğitimleri ve Karşıt Saldırılara Karşı Sağlamlık için NLP Modellerini Geliştirme konularını kontrol edin. Bu kaynaklar, TextAttack çerçevesini ve artırılmış metin verileriyle yapılan karşıt eğitim gibi teknikleri tanıtmaktadır.

Ses Veri Artırımı

Görüntüler ve metinler gibi, ses verilerini (konuşma, çevresel sesler, vb.) de artırabiliriz. Ses için yaygın faydalı artırmalar arasında gürültü enjekte etme, zaman kaydırma, zaman uzatma, ton kaydırma, hacim perturbasyonu ve daha fazlası bulunmaktadır. Diyelim ki bir ses klibimiz var. Onu birçok şekilde artırabiliriz:

  • Arka Plan Gürültüsü: Konuşma sinyalinin arkasında Gauss gürültüsü ekleyin (sessiz bir arka plan sesi çalın) (gürültülü bir ortamı simüle eder).
  • Zaman Kaydırma: Dalga formunun başlangıcından küçük bir dilim kesip sonuna ekleyin (ya da tersine) dalga formunu zamansal olarak kaydırmak için.
  • Zaman Uzatma: Ses hızı değişir, ancak perdede bir etki yaratmadan (veya yöntemine bağlı olarak yan etki olarak perde değişebilir).
  • Ses Yüksekliği Değiştirme: Sesin süresini etkilemeden sesin yüksekliğini değiştirin.
  • Ses Değişikliği: Genel sesi artırın veya azaltın.

Aşağıdaki kod, bir ses dalgasına uygulanmış Gauss gürültüsü, zaman uzatma ve ton kaydırma kullanımının bir örneğini sunmaktadır. Örnek ses, açık erişimli bir torchaudio öğreticisi varlığından gelmektedir.

If needed:
pip install torchaudio audiomentations
from audiomentations import Compose, AddGaussianNoise, TimeStretch, PitchShift, Shift
import numpy as np
import matplotlib.pyplot as plt
import torchaudio
import torch

---- Load an open sample (torchaudio tutorial asset) ----
waveform, sample_rate = torchaudio.load(
    torchaudio.utils.download_asset("tutorial-assets/steam-train-whistle-daniel_simon.wav")
)
samples = waveform.numpy()[0]  # mono


---- Audiomentations pipeline without Shift ----
augment = Compose([
    AddGaussianNoise(min_amplitude=0.001, max_amplitude=0.015, p=0.5),
    TimeStretch(min_rate=0.8, max_rate=1.25, p=0.5),       # speed change
    PitchShift(min_semitones=-4, max_semitones=4, p=0.5),  # pitch change
])

aug_samples = augment(samples=samples, sample_rate=sample_rate)
## aug_samples = random_time_shift(aug_samples, (-0.1, 0.1))  # apply shift robustly

---- Plot waveforms ----
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.title("Original")
plt.plot(samples)
plt.xlabel("Samples")

plt.subplot(1, 2, 2)
plt.title("Augmented (stretch/pitch + shift)")
plt.plot(aug_samples)
plt.xlabel("Samples")

plt.tight_layout()
plt.show()
---- Save WAVs for offline listening ----
torchaudio.save("original.wav", torch.from_numpy(samples).unsqueeze(0), sample_rate)
torchaudio.save("augmented.wav", torch.from_numpy(aug_samples).unsqueeze(0), sample_rate)

Çıktı :

Boruhattı rastgele uygulanır:

  • Gauss gürültüsü - sinyale 0.001 ile 0.015 arasında rastgele gürültü ekler (olasılık 0.5).
  • Zaman uzatma - sesi 0.8× ile 1.25× arasında rastgele bir faktörle yavaşlatır veya hızlandırır (olasılık 0.5).
  • Frekans kaydırma - frekansı rastgele ±4 yarımton kadar yukarı veya aşağı kaydırır (olasılık 0.5).

Solda, dalga formu orijinal sesin tutarlı genlik zarfını gösteriyor. Sağda, perde kaydırma ve zaman germesinden sonra, zarflar benzer kalıyor ancak iç dalga formu osilasyonları değişiyor; bu, artırmadan kaynaklanan zamanlama ve frekans değişikliklerini yansıtıyor.

Gelişmiş Veri Çoğaltma Teknikleri

Bu bölüm, otomatik politika aramasından generatif modellere kadar bazı daha ileri düzey veri artırma tekniklerini ve bunların model performansı ile pratik kullanım alanları üzerindeki etkisini inceliyor.

AutoAugment ve RandAugment

AutoAugment, en iyi artırma politikasını pekiştirmeli öğrenme kullanarak bulmayı öğrenir. Hangi artırmaların kullanılacağını manuel olarak ayarlamak yerine, AutoAugment süreci algoritmik olarak artırma işlemleri (olasılıklar ve büyüklükler dahil) için bir set arar ve bunu hedef veri setinde doğrulama performansını optimize edecek şekilde yapar. Sonuç, üstün doğruluk sağlayabilen bir öğrenilmiş politikadır (örneğin, "Dönüşüm 30° %50 oranında, Kaydırma 20° %40 oranında uygula, ..." vb.). AutoAugment, CIFAR-10, ImageNet vb. için politikalar bulur ve bunlar sıfırdan eğitimde kullanıldığında önceki en iyi durumu aşan sonuçlar elde edilmiştir. Bunun dezavantajı, bu politika arayışının pahalı olmasıdır. Artırma stratejilerini değerlendirmek için birçok model varyantı eğitmek mümkündür.

RandAugment, pahalı arama gerektirmeyen basit bir alternatiftir. Her bir resim için aynı setten rastgele N dönüşümü örnekler, hepsi aynı şiddet M ile birlikte. Tek hiperparametreler N ve M'dir. RandAugment'in basitliği, birçok görevde AutoAugment ile karşılaştırılabilir veya daha iyi performans sağlayabilir. Her bir resme eğitim sırasında birkaç rastgele güçlü artırma uygulamak, belirli bir politika gerektirmeden genelleştirmeyi geliştirmek için güçlü bir yol sağlar. TrivialAugment gibi daha fazla basitleştirme yapılabilir, bu yöntem her bir resme rastgele bir artırma uygular ve rastgele bir şiddetle (tamamen hiperparametre yoktur).

Birçok framework, torchvision.transforms.AutoAugment (makaleden önceden ayarlanmış politikalarla) ve RandAugment gibi uygulamalara sahiptir. Bunlar birkaç satır kod ile uygulanabilir:

import torchvision.transforms as T
from torchvision.transforms import AutoAugment, AutoAugmentPolicy, RandAugment

transform_auto = T.Compose([
 AutoAugment(policy=AutoAugmentPolicy.CIFAR10),
 T.ToTensor()
])

transform_rand = T.Compose([
 RandAugment(num_ops=3, magnitude=5),
 T.ToTensor()
])

Yukarıdaki örnekte, AutoAugmentPolicy.CIFAR10, makalede sağlanan CIFAR-10 için önceden belirlenmiş bir politikadır. RandAugment(num_ops=3, magnitude=5) 3 rastgele işlemi büyüklük 5 ile uygulayacaktır. Bu, geleneksel artırmaya göre eğitim sırasında daha agresif ve çeşitli dönüşümlerin uygulanmasına yol açacaktır.

Test Zamanı Artırımı (Çıktı Birleştirme)

Test Zamanı Artırımı (TTA), tahmin zamanı (eğitim zamanı değil) yapılan veri artırma uygulamasıdır. Yeni bir örnek için tahmin yaptığınızda, aynı girdinin birkaç artırılmış versiyonunu üretebilir, bunları modelinize verebilir ve tahminleri birleştirebilirsiniz (örneğin, olasılıkları ortalayarak).

Bu genellikle bilgisayarla görme modellerine uygulanır. Eğer bir görüntü sınıflandırma modeliniz varsa, bir görüntüyü ve onun ters çevrilmiş versiyonunu girdi olarak alabilir ve modelin orijinal ve ters çevrilmiş görüntülerdeki tahminlerini ortalayabilirsiniz. Bu, model tahmininin dönüşümler altında daha kararlı olmasından dolayı doğruluğu biraz artırma eğilimindedir.

TTA (dönüşümlü, çoklu kesimler, döndürmeler vb. ile) Kaggle yarışmalarında ve üretim CV sistemlerinde performansı artırmak için standart bir tekniktir. Birçok görevde, sınıflandırma doğruluğundaki tek tahmin referansının üzerinde iyileşme sağladığı gösterilmiştir (girişin artırılmış görünümleri üzerinden tahminlerin ortalamasını alarak). Ancak, bu ek çıkarım süresi maliyetine gelir (her artırma için ileri geçiş yapma).

Jeneratif Artırma (GAN'ler ve Sentezlenmiş Veri)

Yeni sentetik veriler oluşturmak için jeneratif modelleri (GAN'ler veya diğer VAE'ler, Difüzyon Modelleri vb.) kullanmak mümkündür. Bir görüntünün dönüştürülmüş bir versiyonunu üretmek yerine, sahip olduğunuz bir görüntünün varyasyonu değil, tamamen yeni (ama yine de gerçekçi) bir örnek oluşturursunuz.

GAN tabanlı artırmanın, karaciğer lezyonu sınıflandırma modelinin performansını %78.6'dan %85.7 hassasiyete (spesifitedeki benzer iyileşmelerle) yükselttiği gösterilmiştir ve diğer artırma türlerini geride bırakmıştır. Eğer yalnızca az temsil edilen bir hastalığa ait 100 görüntünüz varsa, o hastalığın daha fazla görüntüsünü oluşturmak için bir GAN eğitmek mümkündür; bu, modele daha fazla eğitim verisi sağlamaktadır. Üretken modeller tarafından oluşturulan artefaktlara dikkat edin; filtreleme yapmayı garanti edin (berbat sentetik veriler, eğitimi daha fazla zarara uğratacaktır).

GAN'ların ötesinde, sentetik veriler için bir diğer yaklaşım simülasyon motorları aracılığıyladır (otonom araç veya robot simülasyonu, vb.). Birçok otonom sürüş şirketi, gerçek verileri artırmak için yeni sürüş senaryoları ve sensör verileri (kamera/LiDAR) üretmek amacıyla simülatörler kullanmaktadır. Sentetik veriler, gerçek verilerde bulamayabileceğiniz köşe vakalarını (nadir, tehlikeli durumlar) yakalayabilir.

Küçük veya Dengesiz Veri Setleri için Artırma

Küçük veri setleri (örnek sayısı açısından) veya sınıf dengesizliği (bazı sınıflar diğerlerine göre çok daha az temsil ediliyorsa) için artırma, sadece yardımcı olmakla kalmaz – genellikle zorunludur. Modeller, özellikle karmaşık olanlar, küçük veri setlerinde hızla aşırı uyum sağlar. Ancak, artırma, modele varyans sağlamak için kullanılabilir, daha büyük bir veri setini simüle eder. Dengesiz verilerde, modeller çoğunluk sınıf(lar)ını tahmin etme eğiliminde olabilir ve artırma, azınlık sınıfları için örnekler üreterek bu sınıfları aşırı örneklemek için kullanılacaktır.

Stratejiler:

  • Her bir azınlık sınıfı için veripoint'lerin sayısını dengelemek amacıyla daha yoğun artırma (veya örnekleri sentezleme) uygulayın. Örneğin, eğer A sınıfında 50 resim ve B sınıfında 500 resim varsa, A sınıfındaki resimlere çeşitli dönüşümler kullanarak 10 kat artırma uygulayın.
  • hedeflenmiş artırma kullanın: Bazı sınıflar, farklı dönüşüm tekniklerine daha iyi cevap verebilir. Örneğin, A sınıfı görüntüleri ölçek açısından daha değişken olabilir, bu yüzden bu sınıfa öncelikle rastgele ölçek artırma uygularız.
  • Tablo verileri için SMOTE'u (Sentetik Azınlık Aşırı Örnekleme Tekniği) veya görüntüler (görüntülerin veya özellik vektörlerinin karıştırılması) ve metin için diğer varyasyonlarını göz önünde bulundurun (metin üzerinde SMOTE uygulamak doğrudan değildir). Bilgisayarla görmede, Mixup veya CutMix (görüntü ve etiket karıştırma) gibi yöntemler de artırma olarak düşünülebilir. Bu, yeni örnekler oluşturmak için örnekleri harmanlar.

Dengesiz bir niyet veri kümesi ile NLP'de, nadir niyetin eş anlamlılarını bir dil modeli ile üretebilirsiniz. Bir görüntü sınıflandırma ortamında, yeterince temsil edilmeyen bir sınıfınız varsa, o sınıf için güçlü bir şekilde artırma (dönmeler, eğrilme, renk değişimi vb.) yapabilirsiniz ve bu, örnek sayısını etkili bir şekilde çarpar. Basit flip'ler ve döndürmelerin bile az sayıda örneğe sahip bir sınıfa önemli ölçüde fayda sağladığı bulunmuştur.

Ancak, dikkatli bir şekilde artırın: örneğin, bir sınıf için yalnızca 5 görüntünüz varsa, bunları güçlü dönüşümlerle 500'e artırmak muhtemelen artırılmış varyantlar üzerinde aşırı uyuma (overfitting) neden olacaktır (çünkü bu 5 orijinal, gerçek çeşitliliği sınırlamaya devam eder). Bu durumlarda, artırmayı diğer yöntemlerle (aktarım öğrenimi veya GAN'lar/VAE'ler aracılığıyla sentetik veri üretimi) birleştirmek zorunda kalabilirsiniz.

Python Veri Artırma Kütüphanelerinin Karşılaştırması

Veri artırımı gerçekleştirmek için birçok kütüphane kullanabiliriz. İşte görüntü, metin ve ses dahil olmak üzere bazı yaygın kütüphanelerin karşılaştırması:

KütüphaneVeri TipiAna Özellikler ve Dönüşümler
AlbumentationsGörüntülerBüyük bir görüntü dönüştürme çeşitliliği: çevirmeler, döndürmeler, kesimler, renk gürültüsü, bulanıklaştırma, gürültü, CutOut, CutMix, GridDistortion vb. Son derece optimize edilmiştir (hızlı, OpenCV kullanır).
torchvision.transformsGörüntülerPyTorch için yaygın görüntü işlemleri: Resize, RandomCrop, ColorJitter, HorizontalFlip gibi işlemlerden oluşan boru hatları oluşturma. Ayrıca AutoAugment, RandAugment'i kutudan çıkar çıkmaz destekler.
img augGörüntülerGenel amaçlı artırma kütüphanesi. Esnek: hava etkileri, geometrik dönüşümler, algılama için anahtar noktalar.
Keras Görüntü Veri ÜreticiGörüntülerGerçek zamanlı artırma için yerleşik Keras aracı. Dönme, kaydırma, eğme, yakınlaştırma, çevirmek ve parlaklık destekler.
NLPAugMetin, SesGeniş NLP artırımı: eş anlamlı değişimi, rastgele yer değiştirme, bağlamsal gömme (BERT tabanlı), yazım gürültüsü vb. Ayrıca, ses modülleri (ton, gürültü, hız).
TextAttackMetinGelişmiş NLP artırımı ve karşıt araç takımı: eşanlamlı değişimi, yeniden ifade etme, geri çeviri; kolay veri kümesi artırımı; dayanıklılığa odaklanma.
AudiomentasyonlarSesAlbumentations'ın ses analoğu: gürültü, kaydırmalar, ton/zaman değişimi, yankı, filtreler vb.; kolayca bağlanabilir.
torchaudio.transformsSesYerel PyTorch ses dönüştürmeleri: Zaman Germe (spektrogramlar), Frekans/Zaman Maskesi (SpecAugment), Ses Seviyesi, Yeniden Örnekleme; SoXEffects (EQ, yankı, ton).
AugLyGörüntü, Metin, Ses, VideoMultimodal artırma: görseller (kaplamalar, bozulmalar), metin (yazım hataları, yeniden ifade etme), ses (ses seviyesi, efektler), video (dönmeler, kırpmalar, vb.).

Veri Artırmanın Avantajları ve Dezavantajları

Artırılmış veri kullanmanın avantajlarını ve dezavantajlarını özetleyelim:

ArtılarKons
Artırılmış veriler, modellerin yeni, daha önce görülmemiş verilere daha iyi genelleşmesine yardımcı olur. Aşırı uyumu azaltarak eğitim dağılımını çeşitlendirerek bir düzenleyici işlevi görür.Tüm dönüşümler etiketleri korumaz. Güvenli olmayan artırmalar etiket gürültüsü introduce edebilir (örneğin, rakam sınıflandırmasında bir '6'yı '9'a döndürmek). Anlamın korunmasını sağlamak için dikkatli olunmalıdır.
Küçük veya dengesiz veri setleri için kritik olan, küçük veri setlerini sanal olarak genişletir. Modellerin sınırlı orijinal verilerden eksik olan özellikleri öğrenmesine yardımcı olur.Augmentasyon, mevcut verileri yeniden birleştirir ve gerçekten yeni özellikler oluşturamaz. Örnek: Bir köpek resmini döndürmek, diğer ırkları öğrenmeye yardımcı olmayacaktır.
Azınlık sınıflarını yeni varyantlarla aşırı örnekleme ile dengeleyebilir. Modellerin nadir sınıfları göz ardı etmesini önler.Aşırı artırma, modeli kafa karıştırarak gerçek dışı veriler oluşturabilir. Bazı artırmalar doğruluğu azaltabilir (örneğin, MNIST'teki rakamları döndürmek).
Yeni veri toplamakla kıyaslandığında çok daha ucuz ve hızlıdır, veri maliyetli veya nadir olduğunda değerlidir.Anlık artırma, eğitimi yavaşlatabilir. AutoAugment gibi karmaşık politikalar, hesaplama açısından yoğundur.
Gürültü, engellemeler, aydınlatma değişiklikleri gibi gerçek dünya bozulmalarına karşı dayanıklılığı artırır. NLP için, modellerin çeşitli ifadelerle sağlam olmasını sağlar.Artırılmış veriler gramatik olarak yanlış (metin) veya anlamsal olarak değiştirilmiş olabilir ve manuel kontroller gerektirebilir. Orijinal verilerdeki önyargılar devam eder ve güçlendirilebilir.
Alan kaymalarını yönetir (örneğin, renk sıcaklığı değişiklikleri, kameralar arası genelleştirmeye yardımcı olur).Büyük veri setlerinde, kazançlar marjinal olabilir ve artırma gereksiz gürültü getirebilir.

SSS BÖLÜMÜ

  • Görüntüler için en iyi veri artırma tekniği nedir? Bu sizin alanınıza bağlıdır, ancak döndürmeler, titremeler ve gürültü genellikle iyi sonuç verir. Ayrıca, genellikle en son teknolojiye sahip iyileştirmelere yol açan AutoAugment veya RandAugment gibi daha gelişmiş yaklaşımları da düşünün.

  • Metin verisi artırımı, NLP modellerini nasıl geliştirir? Veri artırımı, daha iyi genelleme ve yeniden ifade edilmelere veya nadir dil yapılarına karşı dayanıklılık sağlayarak sözlüksel ve sözdizimsel çeşitlilik (örneğin, eş anlamlı kelime değiştirme yoluyla) sunabilir.

  • Python'da veri artırımı için en iyi kütüphaneler hangileridir? Görseller için Albumentations veya torchvision, metin için NLPAug veya AugLy, ses için torchaudio veya AugLy kullanın.

  • Veri artırımı kullanmaktan ne zaman kaçınmalıyım? Sınıfın anlamsal anlamını bozabilecek veya sinyal kalitesini düşürebilecek aşırı artırma stratejilerinden kaçının, özellikle tıbbi görüntüleme, ses biyometrisi gibi hassas alanlarda veya etiket gürültüsü introduce edilebilecek durumlarda.

Sonuç

Veri artırma, küçük, gürültülü veri kümelerini bilgisayarla görme, doğal dil işleme ve konuşma işleme görevleri için daha sağlam modellere dönüştürmek için kullanılabilir. Öncelikle görevden bağımsız dönüşümleri (çevirmek/kırpmak, eşanlamlı kelime değiştirme/ekleme/silme, artı gürültü, zaman uzatması) göz önünde bulundurun ve eğer bunlar bir performans tavanına ulaşıyorsa, o zaman algoritmik artırma politikaları (örneğin, AutoAugment veya RandAugment) ekleyin. Veri kıtlığı veya dengesizliği için, dikkatlice filtrelenmiş sentetik verilerin (GAN'lar, simüle edilen veriler) büyük miktarlarda eklenmesini ve/veya çıkarım sırasında test zamanı artırması (TTA) için küçük bir iyileştirme sağlamayı düşünün. Mevcut teknoloji yığınınızla entegre olan bir çerçeve seçin (Albumentations/torchvision, NLPAug/TextAttack, torchaudio/Audiomentations), eğitim sırasında anında çalışacak şekilde dönüşümleri uygulayın ve etiket kaymasına dikkat edin.
Son olarak, ablation çalışmaları yapın, doğrulama performansını izleyin ve genelleme pahasına eğitim kaybını artıran her şeyden uzak durun.

Kaynaklar ve Referanslar

  • Veri Çoğaltma için Tam Bir Kılavuz
  • Neden Otomatik Artırmanın Önemi Var?
  • Seçici test zamanı artırımı ile sınıflandırma doğruluğunun etkili bir şekilde artırılması
  • Mikroskop görüntülerinde derin öğrenmeye dayalı hücre segmentasyonu için test zamanı artırımı
  • Derin Öğrenme için Görüntü Veri Artırımı Üzerine Bir Anket
  • Dengesiz Veri Setleri için Veri Çoğaltma Teknikleri