Ultralytics YOLOv5 Mimarisi

YOLOv5 (v6.0/6.1), Ultralytics tarafından geliştirilen güçlü bir nesne algılama algoritmasıdır. Bu makale, YOLOv5 mimarisini, veri artırma stratejilerini, eğitim metodolojilerini ve kayıp hesaplama tekniklerini derinlemesine incelemektedir. Bu kapsamlı anlayış; gözetim, otonom araçlar ve görüntü tanıma dahil olmak üzere çeşitli alanlarda nesne algılamayı pratik uygulamalarında geliştirmene yardımcı olacaktır.

Model Yapısı

YOLOv5'in mimarisi üç ana bölümden oluşur:

  • Backbone (Omurga): Ağın ana gövdesidir. YOLOv5 için backbone, önceki sürümlerde kullanılan Darknet mimarisinin bir modifikasyonu olan CSPDarknet53 yapısı kullanılarak tasarlanmıştır.
  • Neck (Boyun): Bu bölüm, backbone ve head (baş) kısımlarını birbirine bağlar. YOLOv5'te SPPF (Spatial Pyramid Pooling - Fast) ve PANet (Path Aggregation Network) yapıları kullanılır.
  • Head (Baş): Bu bölüm, nihai çıktıyı üretmekten sorumludur. YOLOv5, bu amaçla YOLOv3 Head yapısını kullanır.

Modelin yapısı aşağıdaki görselde gösterilmektedir. Model yapısının detaylarına models/yolov5l.yaml dosyasından ulaşabilirsin.

Backbone, neck ve head kısımlarını gösteren YOLOv5 mimarisi

YOLOv5, seleflerine kıyasla bazı önemli iyileştirmeler getirmektedir:

  1. Daha önceki sürümlerde bulunan Focus yapısı, 6x6 Conv2d yapısı ile değiştirilmiştir. Bu değişiklik verimliliği artırır #4825.
  2. SPP yapısı SPPF ile değiştirilmiştir. Bu değişiklik, aynı çıktıyı korurken işlem hızını iki katından fazla artırır.

SPP ve SPPF hızını test etmek için aşağıdaki kod kullanılabilir:

SPP vs SPPF speed profiling example (click to open)
import time

import torch
import torch.nn as nn

class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)

class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)

def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")

if __name__ == "__main__":
    main()

sonuç:

True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

Veri Artırma Teknikleri

YOLOv5, modelin genelleme yeteneğini geliştirmek ve aşırı öğrenmeyi (overfitting) azaltmak için çeşitli veri artırma teknikleri uygular. Bu teknikler şunları içerir:

  • Mosaic Artırma: Dört eğitim görüntüsünü, nesne algılama modellerini çeşitli nesne ölçeklerini ve kaymalarını daha iyi işleyecek şekilde teşvik eden yöntemlerle birleştiren bir görüntü işleme tekniği.

    Dört görüntüyü birleştiren YOLOv5 mosaic veri artırma

  • Copy-Paste Artırma: Bir görüntüden rastgele yamalar kopyalayıp bunları rastgele seçilen başka bir görüntü üzerine yapıştırarak etkili bir şekilde yeni bir eğitim örneği oluşturan yenilikçi bir veri artırma yöntemi.

    Örnek segmentasyonu için YOLOv5 copy-paste artırma

  • Rastgele Afin Dönüşümleri: Bu; görüntülerin rastgele döndürülmesini, ölçeklenmesini, kaydırılmasını ve eğilmesini içerir.

    Eğitim için YOLOv5 rastgele afin dönüşümleri

  • MixUp Artırma: İki görüntünün ve bunlara ilişkili etiketlerin doğrusal bir kombinasyonunu alarak bileşik görüntüler oluşturan bir yöntem.

    İki görüntüyü harmanlayan YOLOv5 MixUp veri artırma

  • Albumentations: Çok çeşitli artırma tekniklerini destekleyen güçlü bir görüntü artırma kütüphanesi. Albumentations artırmalarını kullanma hakkında daha fazla bilgi edinebilirsin.

  • HSV Artırma: Görüntülerin Ton (Hue), Doygunluk (Saturation) ve Değer (Value) değerlerinde rastgele değişiklikler.

    YOLOv5 HSV renk uzayı artırma örnekleri

  • Rastgele Yatay Çevirme: Görüntüleri rastgele olarak yatay şekilde çeviren bir artırma yöntemi.

    YOLOv5 rastgele yatay çevirme artırması

Eğitim Stratejileri

YOLOv5, modelin performansını artırmak için çeşitli gelişmiş eğitim stratejileri uygular. Bunlar şunlardır:

  • Çok Ölçekli Eğitim (Multiscale Training): Giriş görüntüleri, eğitim süreci sırasında orijinal boyutlarının 0,5 ile 1,5 katı arasında rastgele ölçeklenir.
  • AutoAnchor: Bu strateji, önceden tanımlanmış çapa (anchor) kutularını, özel verilerindeki ground truth (gerçek) kutularının istatistiksel özellikleriyle eşleşecek şekilde optimize eder.
  • Warmup ve Cosine LR Zamanlayıcı: Model performansını artırmak için öğrenme oranını ayarlama yöntemi.
  • Üstel Hareketli Ortalama (EMA): Eğitim sürecini stabilize etmek ve genelleme hatasını azaltmak için geçmiş adımlardaki parametrelerin ortalamasını kullanan bir strateji.
  • Karma Hassasiyetli Eğitim: İşlemleri yarım hassasiyetli formatta gerçekleştirerek bellek kullanımını azaltan ve hesaplama hızını artıran bir yöntem.
  • Hiperparametre Evrimi: Optimum performansa ulaşmak için hiperparametreleri otomatik olarak ayarlayan bir strateji. Hiperparametre ayarlama hakkında daha fazla bilgi edinebilirsin.

Ek Özellikler

4.1 Kayıpları Hesaplama

YOLOv5'teki kayıp, üç ayrı kayıp bileşeninin birleşimi olarak hesaplanır:

  • Sınıf Kaybı (BCE Loss): İkili Çapraz Entropi (Binary Cross-Entropy) kaybı, sınıflandırma görevi için hatayı ölçer.
  • Nesnellik Kaybı (BCE Loss): Başka bir İkili Çapraz Entropi kaybı, belirli bir ızgara hücresinde bir nesnenin var olup olmadığını algılamadaki hatayı hesaplar.
  • Konum Kaybı (CIoU Loss): Tamamlanmış IoU kaybı, nesneyi ızgara hücresi içinde konumlandırmadaki hatayı ölçer.

Genel kayıp fonksiyonu şu şekilde gösterilir:

YOLOv5 toplam kayıp fonksiyonu formülü

4.2 Kayıpları Dengeleme

Üç tahmin katmanının (P3, P4, P5) nesnellik kayıpları farklı şekilde ağırlıklandırılır. Denge ağırlıkları sırasıyla [4.0, 1.0, 0.4] şeklindedir. Bu yaklaşım, farklı ölçeklerdeki tahminlerin toplam kayba uygun şekilde katkıda bulunmasını sağlar.

YOLOv5 nesnellik kaybı dengeleme formülü

4.3 Izgara Hassasiyetini Ortadan Kaldırma

YOLOv5 mimarisi, önceki YOLO sürümlerine kıyasla kutu tahmin stratejisinde bazı önemli değişiklikler yapar. YOLOv2 ve YOLOv3'te kutu koordinatları, son katmanın aktivasyonu kullanılarak doğrudan tahmin ediliyordu.

Bounding box x-koordinatı tahmin formülü Bounding box y-koordinatı tahmin formülü Bounding box genişlik tahmin formülü Bounding box yükseklik tahmin formülü

YOLOv5 grid computation

Ancak YOLOv5'te, ızgara hassasiyetini azaltmak ve modelin sınırsız kutu boyutları tahmin etmesini önlemek için kutu koordinatlarını tahmin etme formülü güncellenmiştir.

Tahmin edilen bounding box hesaplaması için revize edilmiş formüller şöyledir:

YOLOv5 revize edilmiş bounding box x-koordinatı formülü YOLOv5 revize edilmiş bounding box y-koordinatı formülü YOLOv5 revize edilmiş bounding box genişlik formülü YOLOv5 revize edilmiş bounding box yükseklik formülü

Ölçeklemeden önceki ve sonraki merkez noktası kaymasını karşılaştır. Merkez noktası kayma aralığı (0, 1) değerinden (-0,5, 1,5) aralığına ayarlanmıştır. Bu nedenle, kayma kolayca 0 veya 1 değerini alabilir.

YOLOv5 grid scaling

Ayarlamadan önceki ve sonraki yükseklik ve genişlik ölçekleme oranını (çapaya göre) karşılaştır. Orijinal yolo/darknet kutu denklemlerinin ciddi bir kusuru vardır. Genişlik ve Yükseklik, basitçe out=exp(in) olduğu için tamamen sınırsızdır, bu da tehlikelidir çünkü kontrolden çıkmış gradyanlara, kararsızlıklara, NaN kayıplarına ve nihayetinde eğitimin tamamen başarısız olmasına yol açabilir. Daha fazla ayrıntı için bu konuya başvur.

YOLOv5 unbounded scaling

4.4 Hedefler Oluşturma

YOLOv5'teki hedef oluşturma süreci, eğitim verimliliği ve model doğruluğu için kritiktir. Bu, ground truth kutularının çıktı haritasındaki uygun ızgara hücrelerine atanmasını ve uygun çapa kutularıyla eşleştirilmesini içerir.

Bu süreç şu adımları takip eder:

  • Ground truth kutu boyutlarının ve her bir çapa şablonunun boyutlarının oranını hesapla.

Ground truth ile çapa genişlik oranı formülü

Ground truth ile çapa yükseklik oranı formülü

Maksimum genişlik oranı formülü

Maksimum yükseklik oranı formülü

Genel maksimum oran formülü

Çapa eşleştirme eşik formülü

YOLOv5 IoU computation
  • Hesaplanan oran eşik içindeyse, ground truth kutusunu ilgili çapa ile eşleştir.
YOLOv5 grid overlap
  • Eşleşen çapayı uygun hücrelere ata. Merkez noktası kayma aralığının (0, 1) değerinden (-0,5, 1,5) aralığına ayarlanması nedeniyle bir ground truth kutusunun birden fazla çapaya atanabileceğini ve bunun ek eşleşmeleri mümkün kıldığını unutma.
YOLOv5 anchor selection

Bu şekilde, hedef oluşturma süreci, her bir ground truth nesnesinin eğitim süreci sırasında düzgün bir şekilde atanmasını ve eşleştirilmesini sağlayarak YOLOv5'in nesne algılama görevini daha etkili bir şekilde öğrenmesine olanak tanır.

Sonuç

YOLOv5, gerçek zamanlı nesne algılamanın evriminde anlamlı bir adımı temsil eder. Mimari tercihleri, eğitim stratejileri ve mühendislik iyileştirmeleri, önceki YOLO sürümlerine kıyasla güçlü performans ve verimlilik sağlar.

YOLOv5'teki temel geliştirmeler; dinamik bir mimarinin kullanımı, çok çeşitli veri artırma teknikleri, yenilikçi eğitim stratejileri ve ayrıca kayıpların hesaplanmasında ve hedef oluşturma sürecinde önemli ayarlamaları içerir. Tüm bu yenilikler, YOLO modellerinin alametifarikası olan yüksek hız derecesini korurken, nesne algılamanın doğruluğunu ve verimliliğini önemli ölçüde artırır.

Yorumlar