YOLO Vision 2026:

Ultralytics YOLOv5 Mimarisi#

YOLOv5 (v6.0/6.1), Ultralytics tarafından geliştirilen güçlü bir nesne algılama algoritmasıdır. Bu makalede YOLOv5 mimarisi, veri artırma stratejileri, eğitim metodolojileri ve kayıp hesaplama teknikleri ayrıntılı olarak incelenir. Bu kapsamlı anlayış; gözetim, otonom araçlar ve görüntü tanıma dahil olmak üzere çeşitli alanlarda nesne algılamayı pratikte daha iyi uygulamana yardımcı olur.

1. Model Yapısı#

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

  • Backbone: Ağın ana gövdesidir. YOLOv5'te backbone, önceki sürümlerde kullanılan Darknet mimarisinin değiştirilmiş hâli olan CSPDarknet53 yapısı kullanılarak tasarlanmıştır.
  • Neck: Bu bölüm backbone ile head'i birbirine bağlar. YOLOv5'te SPPF (Uzamsal Piramit Havuzlama - Hızlı) ve PANet (Yol Birleştirme Ağı) yapıları kullanılır.
  • Head: Son çıktının oluşturulmasından sorumlu bölümdür. YOLOv5 bu amaçla YOLOv3 Head kullanır.

Modelin yapısı aşağıdaki görselde gösterilmiştir. Model yapısının ayrıntılarını models/yolov5l.yaml bölümünde bulabilirsin.

Backbone, neck ve head'i gösteren YOLOv5 mimarisi

YOLOv5, önceki sürümlerine kıyasla dikkate değer bazı iyileştirmeler sunar:

  1. Önceki sürümlerde bulunan Focus yapısı, 6x6 Conv2d yapısıyla 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şleme 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
from torch import 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

2. Veri Artırma Teknikleri#

YOLOv5, modelin genelleme yeteneğini geliştirmek ve aşırı öğrenmeyi azaltmak için çeşitli veri artırma teknikleri kullanır. Bu teknikler şunlardır:

  • Mozaik Artırma: Dört eğitim görüntüsünü, nesne algılama modellerinin çeşitli nesne ölçeklerini ve ötelemelerini daha iyi ele almasını sağlayacak şekilde tek bir görüntüde birleştiren görüntü işleme tekniğidir.

    Dört görüntüyü birleştiren YOLOv5 mozaik veri artırması

  • Kopyala-Yapıştır Artırması: Bir görüntüden rastgele parçaları kopyalayıp rastgele seçilen başka bir görüntünün üzerine yapıştırarak etkili bir şekilde yeni bir eğitim örneği oluşturan yenilikçi veri artırma yöntemidir.

    Örnek segmentasyonu için YOLOv5 kopyala-yapıştır artırması

  • Rastgele Afin Dönüşümleri: Görüntülerin rastgele döndürülmesini, ölçeklendirilmesini, ötelenmesini ve eğilmesini içerir.

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

  • MixUp Artırması: İki görüntünün ve bunlarla ilişkili etiketlerin doğrusal birleşimini alarak bileşik görüntüler oluşturan bir yöntemdir.

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

  • Albumentations: Çok çeşitli artırma tekniklerini destekleyen güçlü bir görüntü artırma kitaplığıdır. Albumentations artırmalarını kullanma hakkında daha fazla bilgi edin.

  • HSV Artırması: Görüntülerin Ton, Doygunluk ve Değer bileşenlerinde rastgele değişiklikler yapılmasıdır.

    YOLOv5 HSV renk uzayı artırması örnekleri

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

    YOLOv5 rastgele yatay çevirme artırması

3. 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: Eğitim sürecinde giriş görüntüleri, özgün boyutlarının 0,5 ile 1,5 katı arasındaki bir aralıkta rastgele yeniden ölçeklendirilir.
  • AutoAnchor: Bu strateji, öncelikli anchor box'ları özel verilerindeki ground truth box'larının istatistiksel özellikleriyle eşleşecek şekilde optimize eder.
  • Warmup ve Cosine LR Zamanlayıcısı: Model performansını artırmak için öğrenme oranını ayarlayan bir yöntemdir.
  • Üstel Hareketli Ortalama (EMA): Eğitim sürecini kararlı hâle getirmek ve genelleme hatasını azaltmak için geçmiş adımlardaki parametrelerin ortalamasını kullanan bir stratejidir.
  • Karma Hassasiyet Eğitimi: İşlemleri yarı-hassasiyet biçiminde gerçekleştirerek bellek kullanımını azaltan ve hesaplama hızını artıran bir yöntemdir.
  • Hiperparametre Evrimi: En iyi performansı elde etmek için hiperparametreleri otomatik olarak ayarlayan bir stratejidir. Hiperparametre ayarlama hakkında daha fazla bilgi edin.

4. 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 Kaybı): Sınıflandırma görevinin hatasını ölçen İkili Çapraz Entropi kaybıdır.
  • Nesne Varlığı Kaybı (BCE Kaybı): Belirli bir grid hücresinde nesne bulunup bulunmadığının algılanmasındaki hatayı hesaplayan başka bir İkili Çapraz Entropi kaybıdır.
  • Konum Kaybı (CIoU Kaybı): Nesnenin grid hücresi içindeki konumlandırma hatasını ölçen Tam IoU kaybıdır.

Genel kayıp işlevi şu şekilde gösterilir:

YOLOv5 toplam kayıp işlevi formülü

4.2 Kayıpları Dengeleme#

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

YOLOv5 nesne varlığı kaybı dengeleme formülü

4.3 Grid Hassasiyetini Ortadan Kaldırma#

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

Sınırlayıcı kutu x-koordinatı tahmin formülü Sınırlayıcı kutu y-koordinatı tahmin formülü Sınırlayıcı kutu genişliği tahmin formülü Sınırlayıcı kutu yüksekliği tahmin formülü

YOLOv5 grid computation

Bununla birlikte YOLOv5'te box koordinatlarını tahmin etme formülü, grid hassasiyetini azaltmak ve modelin sınırsız box boyutları tahmin etmesini önlemek üzere güncellenmiştir.

Tahmin edilen sınırlayıcı kutunun hesaplanmasına ilişkin gözden geçirilmiş formüller aşağıdaki gibidir:

YOLOv5 gözden geçirilmiş sınırlayıcı kutu x-koordinatı formülü YOLOv5 gözden geçirilmiş sınırlayıcı kutu y-koordinatı formülü YOLOv5 gözden geçirilmiş sınırlayıcı kutu genişliği formülü YOLOv5 gözden geçirilmiş sınırlayıcı kutu yüksekliği formülü

Ölçeklendirme öncesi ve sonrasında merkez noktası ofsetini karşılaştır. Merkez noktası ofset aralığı (0, 1) değerinden (-0.5, 1.5) değerine ayarlanır. Böylece ofset kolayca 0 veya 1 olabilir.

YOLOv5 grid scaling

Ayarlama öncesi ve sonrasında yükseklik ve genişlik ölçeklendirme oranını (anchor'a göre) karşılaştır. Özgün yolo/darknet box denklemlerinde ciddi bir kusur vardır. Genişlik ve yükseklik tamamen sınırsızdır; çünkü bunlar basitçe out=exp(in) şeklindedir. Bu durum tehlikelidir; kontrolsüz gradyanlara, kararsızlıklara, NaN kayıplarına ve nihayetinde eğitimin tamamen kaybedilmesine yol açabilir. Daha fazla ayrıntı için bu soruna bak.

YOLOv5 unbounded scaling

4.4 Hedefleri Oluşturma#

YOLOv5'te hedef oluşturma süreci, eğitim verimliliği ve model doğruluğu açısından kritik öneme sahiptir. Bu süreç, ground truth box'larının çıktı haritasındaki uygun grid hücrelerine atanmasını ve uygun anchor box'larıyla eşleştirilmesini içerir.

Bu süreç şu adımları izler:

  • Ground truth box boyutlarının oranını her anchor şablonunun boyutlarına göre hesapla.

Ground truth ile anchor genişlik oranı formülü

Ground truth ile anchor yükseklik oranı formülü

Maksimum genişlik oranı formülü

Maksimum yükseklik oranı formülü

Genel maksimum oran formülü

Anchor eşleştirme eşik değeri formülü

YOLOv5 IoU computation
  • Hesaplanan oran eşik değeri içindeyse ground truth box'ını karşılık gelen anchor ile eşleştir.
YOLOv5 grid overlap
  • Eşleşen anchor'ı uygun hücrelere ata. Gözden geçirilmiş merkez noktası ofseti nedeniyle bir ground truth box'ının birden fazla anchor'a atanabileceğini unutma; merkez noktası ofset aralığının (0, 1) değerinden (-0.5, 1.5) değerine ayarlanması ek eşleşmeleri mümkün kılar.
YOLOv5 anchor selection

Bu şekilde hedef oluşturma süreci, her ground truth nesnesinin eğitim sırasında uygun şekilde atanmasını ve eşleştirilmesini sağlar; böylece YOLOv5 nesne algılama görevini daha etkili bir şekilde öğrenebilir.

Sonuç#

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

YOLOv5'teki başlıca iyileştirmeler arasında dinamik bir mimarinin kullanılması, kapsamlı veri artırma teknikleri, yenilikçi eğitim stratejileri, kayıpların hesaplanmasında ve hedeflerin oluşturulması sürecinde yapılan önemli düzenlemeler yer alır. Tüm bu yenilikler, YOLO modellerinin ayırt edici özelliği olan yüksek hızı korurken nesne algılamanın doğruluğunu ve verimliliğini önemli ölçüde artırır.

Katkıda Bulunanlar

Yorumlar