Data Augmentation
Veri artırma, modelleri çevirme, kırpma ve renk kaydırma gibi mevcut görüntülerin rastgele dönüştürülmüş kopyalarıyla eğiterek daha iyi genelleme yapmalarını sağlar.
Veri artırma, mevcut örneklere yatay çevirme, kırpma, yeniden ölçekleme, renk kaydırma ve görüntüleri karıştırma gibi rastgele dönüşümler uygulayarak bir eğitim veri kümesinin çeşitliliğini artırır. Dönüştürülmüş her kopya özgün etiketini korur; böylece model, bakış açısı, ışık ve konum değişse de bir nesnenin aynı nesne kaldığını öğrenir. Yeni görüntüler toplamak ve etiketlemek yavaş ve pahalıdır; bu nedenle artırma, aşırı öğrenmeye karşı en ucuz savunmadır ve neredeyse her modern bilgisayarlı görü modeli artırmayla eğitilir.
Veri Artırma Nasıl Çalışır#
Çoğu eğitim hattı çevrimiçi artırma uygular: veri yükleyici bir yığın oluştururken her görüntüyü dönüştürür ve her seferinde yeni rastgele parametreler seçer; böylece her epokta tüm görüntülerin farklı bir sürümü görülür. Çevrimdışı artırma ise eğitimden önce sabit sayıda dönüştürülmüş kopyayı diske yazar; bu, depolama ihtiyacını artırır ve modele çok daha az sayıda farklı varyant sunar.
Veri artırmanın veriyi bozmamasını iki kural sağlar. Birincisi, etiketler piksellerle birlikte hareket etmelidir: nesne algılama, örnek segmentasyonu ve poz kestiriminde geometrik dönüşüm her sınırlayıcı kutuyu, maskeyi ve anahtar noktayı güncellemelidir; yatay çevirme ayrıca sol ve sağ anahtar noktaları değiştirir. İkincisi, dönüşüm gerçek dünyada gerçekleşebilecek türden olmalıdır: dikey çevirmeler havadan çekilmiş ve mikroskop görüntülerine uygundur; sokak sahnelerinde ise çıkarım sırasında hiç görülmeyecek ters dönmüş otomobiller oluşturur. Görüntünün yanında kutular da verildiğinde Torchvision dönüşümleri ilk kuralı otomatik olarak uygular:
from urllib.request import urlopen
from PIL import Image
from torchvision import tv_tensors
from torchvision.transforms import v2
image = Image.open(urlopen("https://ultralytics.com/images/bus.jpg")) # 810 x 1080 pixels
boxes = tv_tensors.BoundingBoxes([[50, 400, 250, 900]], format="XYXY", canvas_size=(1080, 810))
# Flip every time (p=1.0) and shift colors; the box must move with the pixels
augment = v2.Compose([v2.RandomHorizontalFlip(p=1.0), v2.ColorJitter(brightness=0.4, saturation=0.7)])
new_image, new_boxes = augment(image, boxes)
print(f"Original box: {boxes.tolist()}")
print(f"Flipped box: {new_boxes.tolist()}")Görüntünün solundaki adamı çevreleyen kutu, 810 piksel genişliğinde yansıtılarak [50, 400, 250, 900] konumundan [560, 400, 760, 900] konumuna taşınır; renk titreşimi ise kutuya dokunmadan pikselleri değiştirir.
Yaygın Teknikler#
- Geometrik dönüşümler: Çevirmeler, döndürmeler, ölçekleme, öteleme, kırpma, kesme ve perspektif bozulmaları farklı kamera konumlarını ve nesne boyutlarını taklit eder.
- Fotometrik dönüşümler: Parlaklık, kontrast, doygunluk ve renk tonu değişikliklerinin yanı sıra bulanıklaştırma ve gürültü, farklı ışıklandırmaları, sensörleri ve görüntü kalitesini taklit eder.
- Örtülme: Rastgele silme ve kesip çıkarma yöntemleri dikdörtgen alanları boşaltır; böylece model bir nesnenin tek bir parçasına güvenemez.
- Görüntüleri karıştırma: MixUp iki görüntüyü ve etiketlerini harmanlar; CutMix bir görüntüden aldığı parçayı diğerine yapıştırır; mozaik dört görüntüyü tek bir eğitim örneğinde birleştirir; kopyala-yapıştır ise bölütlenmiş nesneleri yeni arka planlara taşır.
- Otomatik politikalar: RandAugment, yalnızca iki ayarla (dönüşüm sayısı ve dönüşümlerin şiddeti) denetlenen rastgele bir dönüşüm dizisi uygular; böylece önceki öğrenilmiş politikaların gerektirdiği maliyetli arama ortadan kalkar.
Nesne Algılama için Artırma Hatları#
Algılama hatları, her biri kendi olasılığıyla uygulanan birkaç dönüşümü art arda kullanır; böylece her eğitim görüntüsü farklı bir rastgele birleşim alır.
Ultralytics YOLO eğitimi bu hattı varsayılan olarak çalıştırır: her görüntüde mozaik (mosaic=1.0), yatay çevirme için %50 olasılık (fliplr=0.5), ±%50'ye kadar ölçekleme ve HSV renk kaydırmaları uygular; modelin eğitimi tam ve doğal görünümlü görüntülerle bitirmesi için son 10 epokta mozaik uygulamasını kapatır (close_mosaic=10).
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26n modeli yükle
model = YOLO("yolo26n.pt")
# fliplr: yatay çevirme olasılığı; scale: yakınlaştırma aralığı (+/- 70%); degrees: döndürme aralığı (+/- 5)
results = model.train(data="coco8.yaml", epochs=10, fliplr=0.5, scale=0.7, degrees=5.0)Bu çalışma sırasında YOLO26 eğiticisi, kutular çizilmiş ilk üç artırılmış yığını train_batch0.jpg, train_batch1.jpg ve train_batch2.jpg olarak kaydeder; böylece uzun bir çalışmayı başlatmadan önce her ayarın etkisi kontrol edilebilir.
Veri Artırma ve İlgili Terimler#
- Sentetik veri: İşleme motorları, simülatörler veya difüzyon modelleri kullanılarak sıfırdan üretilir. Artırma, hâlihazırda var olan gerçek görüntüleri değiştirir.
- Veri ön işleme: Yeniden boyutlandırma ve normalleştirme gibi, eğitim ve çıkarım sırasında her görüntüye aynı biçimde uygulanan belirleyici adımlardır. Artırma rastgeledir ve yalnızca eğitim sırasında uygulanır.
- Test zamanı artırma (TTA): Aynı girdinin çevrilmiş ve yeniden ölçeklenmiş kopyaları gibi birkaç artırılmış sürümünde çıkarım yapar ve tahminleri birleştirir; küçük bir doğruluk kazanımı karşılığında ek hesaplama gerektirir.










