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
veNew 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 öncekilere kıyasla bazı küçük değişiklikler getiriyor:
- Bu
Focus
yapısı, önceki sürümlerde bulunan bir6x6 Conv2d
yapı. Bu değişiklik verimliliği artırır #4825. - Bu
SPP
yapısı ile değiştirilirSPPF
. Bu değişiklik işlem hızını iki kattan fazla artırır.
Hızını test etmek için SPP
ve SPPF
aş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):
"""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()
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.
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.
Rastgele Afin Dönüşümler: Bu, görüntülerin rastgele döndürülmesini, ölçeklenmesini, ötelenmesini ve kesilmesini içerir.
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.
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.
Rastgele Yatay Çevirme: Görüntüleri rastgele yatay olarak çeviren bir büyütme yöntemi.
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:
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.
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.
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:
Ö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.
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
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. Yer gerçeği kutularının çıktı haritasındaki uygun ızgara hücrelerine 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.
- Hesaplanan oran eşik dahilindeyse, zemin gerçeği kutusunu ilgili çapa ile eşleştirin.
- 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.
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.