YOLO Vision 2026:

Ultralytics YOLOv5 Mimarisi#

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

1. Model Yapısı#

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

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

Modelin yapısı aşağıdaki görselde gösterilmektedir. Model yapısı detayları models/yolov5l.yaml adresinde bulunabilir.

Omurga, boyun ve başlığı gösteren YOLOv5 mimarisi

YOLOv5, kendinden önceki sürümlere kıyasla bazı önemli iyileştirmeler sunar:

  1. Daha önceki sürümlerde bulunan Focus yapısının yerini 6x6 Conv2d yapısı almıştır. 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ı ikiden fazla katlar.

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 (overfitting) azaltmak için çeşitli veri artırma teknikleri kullanır. Bu teknikler şunları içerir:

  • Mozaik Veri Artırma (Mosaic Augmentation): Nesne tespiti modellerinin çeşitli nesne ölçeklerini ve ötelemelerini daha iyi yönetmesini teşvik edecek şekilde dört eğitim görüntüsünü tek bir görüntüde birleştiren bir görüntü işleme tekniği.

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

  • Copy-Paste (Kopyala-Yapıştır) Artırma: Bir görüntüden rastgele parçaları kopyalayıp bunları başka bir rastgele seçilmiş 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öntemidir.

    Örnek bölütleme için YOLOv5 kopyala-yapıştır veri artırma

  • Rastgele Afin Dönüşümler: Bu, görüntülerin rastgele döndürülmesini, ölçeklenmesini, ötelenmesini ve eğilmesini (shearing) içerir.

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

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

    İ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 edin.

  • 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ı veri artırma örnekleri

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

    YOLOv5 rastgele yatay çevirme veri artırma

3. Eğitim Stratejileri#

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

  • Çok Ölçekli (Multiscale) Eğitim: Eğitim sürecinde girdi görüntüleri, orijinal boyutlarının 0,5 ile 1,5 katı aralığında rastgele ölçeklendirilir.
  • AutoAnchor: Bu strateji, önceden tanımlanmış anchor kutularını, özel verilerindeki ground truth kutularının istatistiksel özellikleriyle eşleşecek şekilde optimize eder.
  • Isınma ve Kosinüs LR Zamanlayıcısı (Warmup and Cosine LR Scheduler): Model performansını artırmak için öğrenme oranını (learning rate) 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 stratejidir.
  • Karma Hassasiyetli (Mixed Precision) Eğitim: İşlemleri yarı hassasiyet formatında gerçekleştirerek bellek kullanımını azaltan ve hesaplama hızını artıran bir yöntem.
  • Hiperparametre Evrimi: Optimal performansa ulaşmak için hiperparametreleri otomatik olarak ayarlayan bir strateji. Hiperparametre ayarı hakkında daha fazla bilgi edin.

4. Ek Özellikler#

4.1 Kayıpları Hesapla#

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 bulunup bulunmadığını algılamadaki hatayı hesaplar.
  • Konum Kaybı (CIoU Loss): Tam IoU kaybı, nesnenin ızgara hücresi içinde konumlandırılmasındaki hatayı ölçer.

Genel kayıp fonksiyonu şununla gösterilir:

YOLOv5 toplam kayıp fonksiyonu formülü

4.2 Kayıpları Dengele#

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

YOLOv5 nesnesellik kaybı denge formülü

4.3 Izgara Duyarlılığını Ortadan Kaldır#

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.

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

Ancak YOLOv5'te, ızgara duyarlılığını 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 sınırlayıcı kutuyu (bounding box) hesaplamak için revize edilen formüller şunlardır:

YOLOv5 revize edilmiş sınırlayıcı kutu x-koordinatı formülü YOLOv5 revize edilmiş sınırlayıcı kutu y-koordinatı formülü YOLOv5 revize edilmiş sınırlayıcı kutu genişliği formülü YOLOv5 revize edilmiş sınırlayıcı kutu yüksekliği formülü

Ölçeklendirme öncesi ve sonrası merkez nokta ofsetini karşılaştır. Merkez nokta ofset aralığı (0, 1)'den (-0,5, 1,5)'e ayarlanmıştır. Bu nedenle, ofset kolayca 0 veya 1 değerini alabilir.

YOLOv5 grid scaling

Ayarlamadan önce ve sonra yükseklik ve genişlik ölçeklendirme oranını (çapa/anchor'a göre) karşılaştır. Orijinal yolo/darknet kutu denklemlerinin ciddi bir kusuru vardır. Genişlik ve Yükseklik tamamen sınırsızdır çünkü basitçe out=exp(in) şeklindedir; bu tehlikelidir çünkü kontrolden çıkan gradyanlara, kararsızlıklara, NaN kayıplarına ve nihayetinde eğitimin tamamen kaybolmasına yol açabilir. Daha fazla detay için bu soruna göz at.

YOLOv5 unbounded scaling

4.4 Hedefleri Oluştur#

YOLOv5'teki hedef oluşturma süreci, eğitim verimliliği ve model doğruluğu için kritik önem taşır. Zemin gerçekliği (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ı izler:

  • Ground truth kutusu boyutlarının ve her bir anchor şablonunun boyutlarının oranını hesapla.

Zemin gerçekliği ile çapa genişliği oran formülü

Zemin gerçekliği ile çapa yüksekliği 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 karşılık gelen anchor ile eşleştir.
YOLOv5 grid overlap
  • Eşleşen anchor'ı uygun hücrelere ata. Revize edilen merkez nokta ofseti nedeniyle, bir ground truth kutusunun birden fazla anchor'a atanabileceğini unutma, çünkü merkez nokta ofset aralığı (0, 1)'den (-0,5, 1,5)'e ayarlanmıştır ve bu da 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ürecinde düzgün bir şekilde atanmasını ve eşleştirilmesini sağlar, böylece 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 göre güçlü performans ve verimlilik sağlar.

YOLOv5'teki temel geliştirmeler; dinamik bir mimarinin kullanımını, çok çeşitli veri artırma tekniklerini, yenilikçi eğitim stratejilerini ve ayrıca kayıpların hesaplanması ve hedef oluşturma sürecindeki önemli ayarlamaları içerir. Tüm bu yenilikler, YOLO modellerinin alametifarikası 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