YOLO Algoritması Nedir?

M. Fatih Türkoğlu
4 min readAug 31, 2021

--

Bu yazımda YOLO yani ‘You Look Only Once’ gerçek zamanlı nesne takibi için kullanılan oldukça popüler bir algoritmadan bahsedeceğim. Umarım yazım faydalı olur.

Bu algoritmanın bu kadar popüler olması diğer algoritmalardan daha hızlı işlem yapabilmesi ve tek seferde nesne tespiti yapabilmesindendir. Bu hızlı işleminide YOLO’nun resimleri tek seferde nöral bir ağdan geçirmesine borçludur. Nesne takibi için kullanılan popüler Fast R CNN, Faster R CNN gibi diğer algoritmalarında hızlarını bir grafik ile gözlemleyelim ve YOLO’nun diğerlerinden ne kadar daha efektif çalıştığı gözlemleyelim.

Grafikte de görüldüğü üzere YOLO’nun diğer nesne takip uygulamalarından daha efektif çalıştığı grafik üzerinde görülüyor. Kısaca YOLO algoritmasından bahsettiğimize göre nasıl çalıştığına bir bakalım.

YOLO’nun Çalışma Mantığı

YOLO’nun basitçe çalışma mantığı CNN algoritmasına dayanır. CNN de bir tür derin öğrenmenin bir alt dalıdır. CNN kısaca alınan görüntüyü sınıflandırma, nesne tespiti ve takibi gibi problemleri çözmek için geliştirilmiş bir algoritmadır. Bahsettiğimiz gibi YOLO algoritmasının bukadar hızlı olması herhangi bir görüntüyü tek seferde nöral ağdan geçirmesinden kaynaklanıyor. Bu nöral ağdan geçirme işlemi içinde öncelikle girdi resmini YOLO algoritması SxS’lik ızgaralara bölüyor. Bu ızgaralar örneğin 3x3 6x6 23x23 olabiliyor.

Her bir ızgara bölmesi o alanda nesnenin orada olup olmadığını, olması durumunda orta noktasında olup olmadığını ve orta noktasında ise de uzunluğunu, yüksekliğini ve hangi sınıftan olduğuna karar verir ve bulur.

Yukarıda görüldüğü gibi görüntüye ızgara uygulanmış ve arabanın orta noktası yeşil olarak işaretlemiştir. İşaretlenen noktanın da 2. satır 3. sütunda olduğu görülüyor. Bu nedenden dolayı belirtilen ızgaranın arabayı tespit etmesinden ve etrafını çevreleyecek kutu çizmesinden (resimde sarı kutu) sorumlu olduğu görülür. Burada çizilen kutu bounding box diye de geçer. Fakat buradaki ızgaralar kendi içlerinde merkez noktaya sahip olduğunu düşünebilir ki üstteki görselde tek bir nesne olduğundan bunun yaşanmaması gerekir. Bunu düzeltmek için ise Non-Maximun Suppression algoritması kulanılır. Şimdi bu algoritmadan kısaca bahsedelim.

Non-Maximun Suppression Algoritması

Non-max Suppression algoritması kısaca görüntü üzerinde tespit edilen nesneler için ızgaralar tarafından çizilmiş olan bounding boxlar dan güven skoru en yüksek olanı ekrana çizer ve skoru düşük olanlar çizilmez bu da birden çok bounding boxın çizilmesini önler. Güven skoru dediğimiz kavram ise ızgara içerisinde gerçekten de bir nesnenin olup olmadığının skorudur. Bu skor ne kadar fazlaysa o ızgara bölmesi içerisinde bir nesnenin olması okadar muhtemeldir. Bundan dolayı skoru en fazla olan çizilir. Bu skor 1 ve 0 arasında değerlere bölünür. 0 kesinlikle olmadığı 1 ise kesinlikle orada bir nesnenin olduğunu işaret eder.

Görüldüğü üzere 1–0 arasındaki değerler burada yüzdelik olarak verilmiş. İnsan ve köpek için 3 er bounding box oluşturulmuş fakat her birinin güven değerinin farklı olduğu görülmüştür. Örneğin alttaki köpeğin %82 güven skoruna sahip olduğu bounding boxın köpeği tamamen içermediği görülebilir. Fakat %98 skora sahip olanda neredeyse köpeğin tamamı kutunun içerisindedir ki buda o kutunun seçilmesi gerektiğini bize gösterir.

YOLO algoritmasının geliştirildiği birçok versiyon mevcuttur. Bu versiyonlar arasındaki farkları inceleyelim. 5 versiyonu vardır ilkinden başlayalım.

YOLO algoritmasının 1. versiyonu Joseph Redmon tarafından 2015 yılında geliştirilmiştir. İlk versiyonu olmasına rağmen nesne tespit algoritmalarına farklı bir açı getirmiş büyük bir avantaj yakalamıştır. CNN modelini kullanması diğer algoritmalardan öne geçmesini sağlamıştır. Kısaca oluşturulan her bir ızgara hücresi sadece iki kutu kutu öngördüğünden ve sadece bir sınıfa sahip olabileceğinden küçük ve fazla nesneli görsellerde verimsiz çalışır. Bunun başka bir nedeni olarak 1. versiyonun yalnızca 49 nesne algılayabilmesi de gösterilebilir.

YOLO algoritmasının 2. versiyonu 2017 yılında geliştirilmiştir. 1. versiyonun belirttiğimiz sorunlarını çözmek için geliştirilmiştir. Hız arttırılmış görüntü giriş boyutu çözünürlüğü arttırılmıştır. 2. versiyona Anchor Box metotu eklenmiştir. Bu mettota görüntüdeki her bir nesne için kutular oluşturulur ve her oluşturulan kutu için güven skorlarını hesaplar. Bu hesaplamalar algoritmanın daha güvenilir çalışmasını sağlar.

YOLO algoritmasının 3. versiyonu 2018 yılında geliştirilmiş olunup önceki versiyonların kararlıklarını arttırmak için çıkmıştır. 2. versiyonda kullanılan Darknet-19 mimarisi yerini evrişimli katamana sahip Darknet-53 ‘e bırakmıştır. Katmanların sayısı artması 2. versiyondan biraz daha yavaş ama daha kararlı hale gelmiştir.

YOLO algoritmasının 4. versiyonu 2020 yılında geliştirilmiştir. Kısaca diğer versiyonlarından farkları FPS hızlarının arttırılması, nesne tespitinin daha kararlı hale getirilmesi ve 3. versiyon ile artmış olan işlem süresinin kısaltılması verilebilir.

YOLO algoritmasının 5. ve günümüze kadar gelen en son sürümünü Glenn Jocher geliştirmiştir. Yaklaşık 4. versiyondan 2 ay sonra piyasaya çıkmıştır ve diğer 4 versiyondan farklı olarak Darknet mimarisinden farklı olarak PyTorch altında geliştirilmiştir. En önemli güncellemeler otomatik öğrenme sınırlayıcısının ve omozaik veri büyütmenin geliştirilmesidir.

--

--