İçeriğe geç

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 mimarisine, veri artırma stratejilerine, eğitim metodolojilerine ve kayıp hesaplama tekniklerine derinlemesine inmektedir. Bu kapsamlı anlayış, gözetim, otonom araçlar ve görüntü tanıma dahil olmak üzere çeşitli alanlarda nesne algılamanın pratik uygulamasını geliştirmenize yardımcı olacaktır.

1. Model Yapısı

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

  • Backbone: Bu, ağın ana gövdesidir. YOLOv5 için, backbone şu kullanılarak tasarlanmıştır: CSPDarknet53 yapısı, önceki sürümlerde kullanılan Darknet mimarisinin bir modifikasyonudur.
  • Boyun: Bu kısım, backbone ve head'i birbirine bağlar. YOLOv5'te, SPPF (Uzamsal Piramit Havuzu - Hızlı) ve PANet (Yol Toplama Ağı) yapıları kullanılır.
  • Başlık: Bu kısım, nihai çıktıyı oluşturmaktan sorumludur. YOLOv5, YOLOv3 Head bu amaç için.

Modelin yapısı aşağıdaki resimde gösterilmektedir. Model yapısı ayrıntılarına şuradan ulaşılabilir: yolov5l.yaml.

yolov5

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

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

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

SPP ve SPPF hız profil çıkarma örneği (açmak için tıklayın)
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

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 şunları içerir:

  • Mozaik Artırma: Nesne algılama modellerini çeşitli nesne ölçeklerini ve çevirilerini daha iyi işlemesi için teşvik eden, dört eğitim görüntüsünü bir araya getiren bir görüntü işleme tekniğidir.

    mozaik

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

    kopyala-yapıştır

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

    rastgele-affine

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

    mixup

  • 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 edinin.

  • HSV Artırma: Görüntülerin Ton, Doygunluk ve Değerinde rastgele değişiklikler.

    hsv

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

    yatay-çevirme

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 Eğitim: Giriş görüntüleri, eğitim sürecinde orijinal boyutlarının 0,5 ila 1,5 katı aralığında rastgele yeniden ölçeklendirilir.
  • AutoAnchor: Bu strateji, özel verilerinizdeki gerçek değer kutularının istatistiksel özellikleriyle eşleşmesi için önceden belirlenmiş anchor kutularını optimize eder.
  • Isınma ve Kosinüs LR Zamanlayıcısı: Model performansını artırmak için öğrenme oranını ayarlama yöntemi.
  • Üstel Hareketli Ortalama (EMA): Eğitim sürecini dengelemek ve genelleme hatasını azaltmak için geçmiş adımlardaki parametrelerin ortalamasını kullanan bir strateji.
  • Karışık Duyarlıklı Eğitim: Bellek kullanımını azaltan ve hesaplama hızını artıran, yarı duyarlıklı formatta işlemleri gerçekleştirme yöntemi.
  • Hiperparametre Evrimi: Optimum performansı elde etmek için hiperparametreleri otomatik olarak ayarlama stratejisidir. Hiperparametre ayarlama hakkında daha fazla bilgi edinin.

4. Ek Özellikler

4.1 Kayıpları Hesaplama

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

  • Sınıflar Kaybı (BCE Kaybı): İkili Çapraz Entropi kaybı, sınıflandırma görevi için hatayı ölçer.
  • Nesnellik Kaybı (BCE Kaybı): Başka bir İkili Çapraz Entropi kaybı, belirli bir ızgara hücresinde bir nesnenin bulunup bulunmadığını tespit etmedeki hatayı hesaplar.
  • Konum Kaybı (CIoU Kaybı): Tam IoU kaybı, nesneyi ızgara hücresi içinde konumlandırmadaki hatayı ölçer.

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

kayıp

4.2 Kayıpları Dengeleme

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

obj_loss

4.3 Izgara Hassasiyetini Ortadan Kaldırma

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

b_x b_y b_w b_h

YOLOv5 ızgara hesaplaması

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

Tahmin edilen sınırlayıcı kutuyu hesaplamak için revize edilmiş formüller aşağıdaki gibidir:

bx by bw bh

Ölçeklendirme öncesi ve sonrası merkez nokta kaymasını karşılaştırın. Merkez nokta kayma aralığı (0, 1) aralığından (-0.5, 1.5) aralığına ayarlanmıştır. Bu nedenle, kayma kolayca 0 veya 1 olabilir.

YOLOv5 ızgara ölçeklendirmesi

Ayarlamadan önce ve sonra yükseklik ve genişlik ölçekleme oranını (çapaya göre) karşılaştırın. Orijinal yolo/darknet kutu denklemlerinde ciddi bir kusur var. Genişlik ve Yükseklik tamamen sınırsızdır, çünkü bunlar basitçe out=exp(in)'dir, bu da kaçak gradyanlara, kararsızlıklara, NaN kayıplarına ve sonuç olarak eğitimin tamamen kaybına yol açabileceğinden tehlikelidir. Daha fazla ayrıntı için bu soruna bakın.

YOLOv5 sınırsız ölçeklendirme

4.4 Hedefler Oluşturma

YOLOv5'teki yapı hedefi süreci, eğitim verimliliği ve model doğruluğu için kritik öneme sahiptir. Bu süreç, yer doğruluk 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ç aşağıdaki adımları izler:

  • Gerçek değer kutusu boyutlarının ve her bir bağlantı şablonunun boyutlarının oranını hesaplayın.

rw

rh

rwmax

rhmax

rmax

eşleşme

YOLOv5 IoU hesaplaması

  • Hesaplanan oran eşiğin içindeyse, gerçek kutuyu ilgili bağlantı noktasıyla eşleştirin.

YOLOv5 ızgara örtüşmesi

  • Eşleşen bağlantı noktasını uygun hücrelere atayın, revize edilmiş merkez nokta kayması nedeniyle, bir gerçeklik kutusunun birden fazla bağlantı noktasına atanabileceğini unutmayın. Çünkü merkez nokta kayma aralığı (0, 1)'den (-0.5, 1.5)'e ayarlanmıştır. GT Kutusu daha fazla bağlantı noktasına atanabilir.

YOLOv5 bağlantı noktası seçimi

Bu şekilde, derleme hedefleri süreci, her bir temel doğruluk nesnesinin eğitim sürecinde düzgün bir şekilde atanmasını ve eşleştirilmesini sağlayarak YOLOv5'in nesne algılama görevini daha etkili bir şekilde öğrenmesini sağlar.

Sonuç

Sonuç olarak, YOLOv5, gerçek zamanlı nesne algılama modellerinin geliştirilmesinde önemli bir adımı temsil etmektedir. Çeşitli yeni özellikler, geliştirmeler ve eğitim stratejileri ekleyerek, YOLO ailesinin önceki sürümlerini performans ve verimlilik açısından geride bırakmaktadır.

YOLOv5'teki temel geliştirmeler arasında dinamik bir mimarinin kullanılması, kapsamlı bir veri artırma teknikleri yelpazesi, yenilikçi eğitim stratejileri ve ayrıca kayıpları hesaplamada ve hedefler oluşturma sürecinde önemli ayarlamalar yer almaktadır. Tüm bu yenilikler, YOLO modellerinin ticari markası olan yüksek hız derecesini korurken, nesne algılama doğruluğunu ve verimliliğini önemli ölçüde artırır.



📅 1 yıl önce oluşturuldu ✏️ 5 ay önce güncellendi

Yorumlar