YOLO (You Only Look Once) Mimarisi Nedir?

Ayla Bilgin
4 min readApr 30, 2021

--

YOLO, daha önceki yazımda bahsettiğim evrişimsel sinir ağlarını (CNN) kullanarak nesne takibi yapabilen bir algoritmadır. Açılımı “You Only Look Once” olan YOLO, en çok tercih edilen nesne takip algoritmalarındandır. Bunun en büyük nedeni diğer algoritmalara oranla daha hızlı işlem yapmasıdır. Zaman içerisinde farklı versiyonları geliştirilmiştir. Şimdi hem bu versiyonlara hem de YOLO’nun çalışma mantığını inceleyerek yazımıza devam edelim.

[1]

Görüntü işleme yapılırken nesne takibinde diğer algoritmalar görüntünün tamamı üzerinde işlem yaparken YOLO mimarisi görüntüyü bölgelere ayırarak bu bölgelerdeki nesneleri içerisine alan kutular çizer. Bu kutulara Bounding Box denir. Her bölgede nesne bulunma olasılığının hesabını yapar. Bunun yanında Güven Skoru hesaplar. Güven Skoru dediğimiz değer her bir bounding box içerisinde bulunan nesnenin yüzde kaç tahmin edilen nesnenin benzeri olduğunu bize söyler.

Tabii tek neden görüntüyü bölgelere ayırarak çalışması değil. R-CNN gibi nesne takip algoritmaları nesne bulunması muhtemel alanları belirleyip daha sonra ayrı ayrı CNN sınıflandırıcılarını kullanıyor. Bu işlem iki ayrı aşamadan geçtiği için görüntü üzerindeki işlem sayısı artıyor dolayısıyla YOLO bu durumda R-CNN’e göre daha hızlı kalıyor. YOLO görüntüyü tek seferde nöral ağdan geçiriyor.

[2]

Bounding box’lar 3x3, 5x5… gibi boyutlarda çizilebilir. Sınırlayıcı kutular belirlendikten sonra yukarıda da belirttiğimiz gibi kutu içerisinde nesnenin varolup olmadığını ardından da eğer ki nesne kutu içerisinde bulunuyorsa orta noktası bu kutu içerisinde bulunup bulunmadığını daha sonra varsa uzunluğunu, yüksekliğini ve hangi sınıfta bulunduğunu tespit eder. YOLO her bounding box için ayrı ayrı tahmin vektörleri oluşturur. İçerisinde bahsettiğimiz gibi güven skoru, nesnenin koordinatları ve boyutları bulunur.

Yukarıdaki resimde arabanın bulunduğu kutunun vektörü y vektörüdür.

y=(Pc,Bx,By,Bh,Bw,C)

Pc: Güven Skoru, nesnenin tahmin edilen nesneyle yüzde kaç uyumlu olduğundan yüzde kaç emin olduğunu gösterir. Örneğin araba için güven skoru 0,3 ise bunun anlamı o nesnenin araba olma olasılığı çok düşüktür.

Bx: Nesnenin orta noktasının x koordinatı.

By: Nesnenin orta noktasının y koordinatı.

Bh: (Height) Nesnenin genişliği.

Bw: (Weight) Nesnenin yüksekliği.

C: Bağıl Sınıf Olasılığı, modelde ne kadar sınıf varsa o kadar sayıda tahmin değerini barındırır.

Güven skoru, bağıl sınıf olasılığı ve kutu güven skoru dediğimiz değer çarpılarak hesaplanır.

[3]

YOLO’da kutu içerisinde tek bir nesne bulunuyorsa ve orta noktası da kutu içerisindeyse nesneyi nasıl ayırt edeceğimizi anladık. Fakat kutu içerisinde birden fazla nesnenin orta noktası bulunursa bunu YOLOv2 ile çözeriz.

YOLOv1'i geliştirerek ortaya çıkan YOLOv2 algoritmasına Anchor Box dediğimiz metot eklenmiştir. Anchor Box’lar her bir nesne için ayrı kutular oluşturarak her nesne için ayrı ayrı güven skoru, x, y, w, h ve bağıl sınıf olasılığını hesaplar. Bunu hesaplarken de IoU kullanılır. Bu şekilde algoritma daha kararlı hale geliyor. Ama bütün bunları yaparken gereksiz olarak birden fazla kutu elde ediyoruz. Bu karışıklığın önüne geçmek içinse Non Max Suppression algoritması kullanılıyor. En başta hesaplanan güven skoru düşük olan kutuları silerek bu işleme başlanır. En yüksek güven skoruna sahip kutuyu çıktı olarak vermek bu algoritmanın görevi.

Bu versiyon ile YOLOv1'deki birbirine bağlı katmanlar kalktı. Şimdi bir de YOLOv3'e bakalım.

YOLOv2'de 19 evrişimsel katman ve nesne takibi için eklenmiş ekstra 11 katmanı bulunan Darknet-19 olarak adlandırılan derin ağ mimarisi kullanılıyor. Toplamda 30 katmana sahip YOLOv2 genellikle küçük nesneleri algılamada yetersiz kalıyor. Bunun nedeni girdilerin alt örnekleme katmanlarında özniteliklerini kaybederek tespit aşamasında küçük nesnelere ait özniteliklerin işlenememesidir.

[4]

YOLOv3'de artık bloklar (residual blocks), bağlantıyı atla (skip connection) ve yukarı örnekleme (upsampling) gibi özellikler bulunmaktadır. Bu özellikler YOLOv2'de bulunmamaktadır. YOLOv3'de Darknet-53 mimarisi kullanılmaktadır. 53 katmandan oluşmaktadır. Nesne takibi yaparken 53 katman daha kullanarak toplamda 106 evrişimsel katman ile YOLOv3 oluşturulmuştur. Daha fazla katman bulunduğu için YOLOv2'ye göre daha yavaştır. Aşağıdaki şekilde YOLOv3 mimarisi verilmiştir. 5 adet artık blok bulunmaktadır. YOLOv3'ün en belirgin özelliği, üç farklı ölçekte tespit yapmasıdır.

[5]

Nesne tespitin sonucu, öznitelik haritası üzerine uygulanmış 1x1 algılama çekirdeğinin (detection kernels) sonucuna göre belirleniyor. YOLOv3'te 3 farklı yerde 3 farklı ölçekteki görüntüye 1x1 algılama çekirdeği uygulanarak elde edilir.

[6]

Son YOLO versiyonları 2020'de YOLOv4 ve YOLOv5 yayınlandı. Tahmin edileceği üzere YOLOv4 ile diğer sürümlerine göre daha hızlı ve daha doğru sonuçlar elde edilmektedir. YOLOv4'ün yayınlanmasının ardından 3–4 ay içerisinde YOLOv5 yayınlanmıştır. Bu diğer versiyonlarda kullanılan Darknet yerine PyTorch kullanılmıştır. Hız açısından YOLOv5, YOLOv4'ten daha hızlı fakat doğruluklarını kıyaslayacak olursak aynı seviyede olduklarını söyleyebiliriz.

Bir sonraki yazıda görüşmek üzere…

--

--