İçeriğe geç

Ultralytics YOLOv5 Mimarlık

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ılama pratik uygulamalarınızı geliştirmenize yardımcı olacaktır.

1. Model Yapısı

YOLOv5'in mimarisi üç ana bölümden oluşmaktadır:

  • Omurga: Bu, ağın ana gövdesidir. YOLOv5 için omurga şu şekilde tasarlanmıştır New CSP-Darknet53 yapısı, önceki sürümlerde kullanılan Darknet mimarisinin bir modifikasyonu.
  • Boyun: Bu kısım omurga ile başı birbirine bağlar. İçinde YOLOv5, SPPF ve New CSP-PAN yapılar kullanılmaktadır.
  • Kafa: Bu bölüm nihai çıktının üretilmesinden sorumludur. YOLOv5 YOLOv3 Head bu amaç için.

Modelin yapısı aşağıdaki resimde gösterilmektedir. Model yapısının detaylarını şurada bulabilirsiniz yolov5l.yaml.

yolov5

YOLOv5 öncekilere kıyasla bazı küçük değişiklikler getiriyor:

  1. Bu Focus yapısı, önceki sürümlerde bulunan bir 6x6 Conv2d yapı. Bu değişiklik verimliliği artırır #4825.
  2. Bu SPP yapısı ile değiştirilir SPPF. Bu değişiklik işlem hızını iki kattan fazla artırır.

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

SPP vs SPPF hız profili oluşturma ö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):
        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):
        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):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


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

  • Mozaik Büyütme: Nesne algılama modellerini çeşitli nesne ölçeklerini ve ötelemelerini daha iyi ele almaya 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.

Mozaik

  • Kopyala-Yapıştır Artırma: Bir görüntüden rastgele yamaları kopyalayan ve bunları rastgele seçilen başka bir 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öntemi.

kopyala-yapıştır

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

random-affine

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

karışıklık

  • Albumentations: Çok çeşitli büyütme tekniklerini destekleyen görüntü büyütme için güçlü bir kütüphane.

  • HSV Büyütme: 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 büyütme yöntemi.

yatay çevirme

3. Eğitim Stratejileri

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

  • Çok Ölçekli Eğitim: Giriş görüntüleri, eğitim süreci sırasında orijinal boyutlarının 0,5 ila 1,5 katı aralığında rastgele yeniden ölçeklendirilir.
  • Otomatik Çapa: Bu strateji, önceki çapa kutularını özel verilerinizdeki temel gerçek kutularının istatistiksel özellikleriyle eşleşecek şekilde optimize eder.
  • Isınma ve Kosinüs LR Zamanlayıcısı: Model performansını artırmak için öğrenme oranını ayarlamaya yönelik bir yöntem.
  • Ü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.
  • Karışık Hassasiyet Eğitimi: İşlemleri yarı hassas formatta gerçekleştirerek bellek kullanımını azaltan ve hesaplama hızını artıran bir yöntem.
  • Hiperparametre Evrimi: Optimum performans elde etmek için hiperparametreleri otomatik olarak ayarlamaya yönelik bir strateji.

4. Ek Özellikler

4.1 Kayıpları Hesaplayın

YOLOv5 adresindeki 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 mevcut olup olmadığını tespit etmedeki hatayı hesaplar.
  • Konum Kaybı (CIoU Kaybı): Tam IoU kaybı, ızgara hücresi içindeki nesnenin yerini belirlemedeki hatayı ölçer.

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

kayıp

4.2 Denge Kayıpları

Üç 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 Şebeke Hassasiyetini Ortadan Kaldırın

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

b_x b_y b_w b_h

YOLOv5 ızgara hesaplama

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

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

bx tarafından bw bh

Ölçeklemeden önce ve sonra merkez noktası ofsetini karşılaştırın. Merkez noktası ofset aralığı (0, 1) ile (-0,5, 1,5) arasında ayarlanır. Bu nedenle, ofset kolayca 0 veya 1 olabilir.

YOLOv5 ızgara ölçeklendirme

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 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 kaçak gradyanlara, kararsızlıklara, NaN kayıplarına ve nihayetinde eğitimin tamamen kaybedilmesine yol açabileceğinden tehlikelidir. bu konuya bakın

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

4.4 Yapı Hedefleri

YOLOv5 adresindeki hedef oluşturma süreci, eğitim verimliliği ve model doğruluğu açısından kritik öneme sahiptir. Bu işlem, çıktı haritasındaki uygun grid hücrelerine yer gerçeği kutularının atanmasını ve bunların uygun çapa kutularıyla eşleştirilmesini içerir.

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

  • Temel gerçek kutu boyutlarının ve her bir çapa şablonunun boyutlarının oranını hesaplayın.

rw

rh

rwmax

rhmax

rmax

maç

YOLOv5 IoU hesaplaması

  • Hesaplanan oran eşik dahilindeyse, zemin gerçeği kutusunu ilgili çapa ile eşleştirin.

YOLOv5 ızgara örtüşmesi

  • Revize edilen merkez noktası ofseti nedeniyle bir zemin doğruluk kutusunun birden fazla çapaya atanabileceğini göz önünde bulundurarak eşleşen çapayı uygun hücrelere atayın. Çünkü merkez noktası ofset aralığı (0, 1)'den (-0,5, 1,5)'e ayarlanmıştır. GT Kutusu daha fazla çapaya atanabilir.

YOLOv5 çapa seçimi

Bu şekilde, hedef oluşturma süreci, her bir temel gerçek nesnesinin eğitim sürecinde doğru şekilde atanmasını ve eşleştirilmesini sağlayarak YOLOv5 'un nesne algılama görevini daha etkili bir şekilde öğrenmesine olanak tanır.

Sonuç

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

YOLOv5 'daki başlıca geliştirmeler arasında dinamik bir mimarinin kullanımı, çok çeşitli veri artırma teknikleri, yenilikçi eğitim stratejilerinin yanı sıra hesaplama kayıpları ve hedef oluşturma sürecindeki önemli ayarlamalar yer almaktadır. Tüm bu yenilikler, YOLO modellerinin alametifarikası olan yüksek hızı korurken nesne tespitinin doğruluğunu ve verimliliğini önemli ölçüde artırmaktadır.



Oluşturma 2023-11-12, Güncelleme 2024-01-14
Yazarlar: glenn-jocher (5), sergiuwaxmann (1)

Yorumlar