Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics YOLOv5 Mimarisi#

YOLOv5 (v6.0/6.1), Ultralytics tarafından geliştirilmiş 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 inceler. Bu kapsamlı anlayış, gözetleme, 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.

Link to this section1. Model Yapısı#

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

  • Backbone (Omurga): 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.
  • Neck (Boyun): Bu bölüm omurga ile başı 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 resimde gösterilmiştir. Model yapısı ile ilgili detaylar models/yolov5l.yaml dosyasında bulunabilir.

YOLOv5 mimarisini gösteren backbone, neck ve head

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

  1. Ö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

Link to this section2. 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 şunları içerir:

  • Mosaic Artırma: Dört eğitim görüntüsünü, nesne algılama modellerinin çeşitli nesne ölçeklerini ve yer değiştirmelerini daha iyi işlemesini teşvik edecek şekilde tek bir görüntüde birleştiren bir görüntü işleme tekniğidir.

    Dört görüntüyü birleştiren YOLOv5 mosaic 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 segmentasyonu için YOLOv5 copy-paste 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üphanesidir. 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ı 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 artırma

Link to this section3. 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.
  • Warmup ve Kosinüs LR Zamanlayıcı: Model performansını artırmak için öğrenme hızını ayarlama yöntemidir.
  • Ü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ım hassasiyetli formatta gerçekleştirerek bellek kullanımını azaltan ve hesaplama hızını artıran bir yöntemdir.
  • Hiperparametre Evrimi: Optimal performansa ulaşmak için hiperparametreleri otomatik olarak ayarlama stratejisidir. Hiperparametre ayarlama hakkında daha fazla bilgi edin.

Link to this section4. Ek Özellikler#

Link to this section4.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 şu şekilde gösterilir:

YOLOv5 toplam kayıp fonksiyonu formülü

Link to this section4.2 Kayıpları Dengele#

Üç 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ı denge formülü

Link to this section4.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şlik tahmin formülü Sınırlayıcı kutu yükseklik 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 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şlik formülü YOLOv5 revize edilmiş sınırlayıcı kutu yükseklik 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

Yükseklik ve genişlik ölçeklendirme oranını (anchor'a göre) ayarlama öncesi ve sonrası 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 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 bak.

YOLOv5 unbounded scaling

Link to this section4.4 Hedefleri Oluştur#

YOLOv5'teki hedef oluşturma süreci, eğitim verimliliği ve model doğruluğu için kritiktir. Bu süreç, ground truth kutularını çıktı haritasındaki uygun ızgara hücrelerine atamayı ve bunları uygun anchor kutularıyla eşleştirmeyi 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.

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

Ground truth - 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 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.

Link to this sectionSonuç#

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