Nesne Tespit Algoritmalarının Gelişimi (CNN, R-CNN, Fast R-CNN ve Faster R-CNN) — 1

Dilara Özdemir
5 min readAug 9, 2021

👋 Merhabalar, bu yazımda nesne tespit algoritmalarının neler olduğuna ve nasıl çalıştığına dair yaptığım araştırmalarımı sizlerle paylaşmaya karar verdim. Nesne tespit algoritmalarının temeli olan Evrişimli Sinir Ağlarını inceleyerek başlayalım.

🏮 Evrişimli Sinir Ağları (CNN — Convolutional Neural Networks)

CNN, genellikle görüntüler üzerinde kullanılan ve görselleri girdi olarak alan bir yapay sinir ağı sınıfıdır. CNN’i tanımadan önce görüntülerin belirli değerlere sahip piksellerden oluşan bir matris olduğunu bilmemiz gerekir. CNN, 3 ana katmandan oluşur.

Bunlardan ilki olan Evrişim Katmanı’nda (Convolutional Layer), girdi görüntüsünün üzerinde bir filtre gezdirilerek görüntüden belirli özellikler (features) yakalanmaya çalışılır. Daha sonrasında yakalanan özellikler bir özellik haritası (feature map — bir diğer adıyla aktivasyon haritası) üzerine yazılır. Bu şekilde algoritmanın öğreneceği parametreler, Evrişim katmanı’nda elde edilmiş olur.

Şekil 1. Evrişim Katmanı.

Mimarinin ikinci katmanı olan Ortaklama (Pooling) katmanında ise boyut indirgenmesi hedeflenir. Çünkü boyutların çok olması gereken işlem gücünün yüksek olması ve aynı zamanda gereksiz özelliklerin yakalanmasına sebebiyet verir. Boyut indirgenmesi yapılarak önemli özelliklere yoğunlaşılır. Ortaklama katmanında yaygın olarak kullanılan iki tür bulunmaktadır. Üzerinde işlem yapılan matrisin maksimum değerinin seçildiği “Maksimum Ortaklama” ve matriste bulunan değerlerin ortalamasının alındığı “Ortalama Ortaklama”.

Şekil 2. Ortaklama Katmanı Türleri.

Son olarak Tam Bağlı (Fully Connected) katmanda matris halinde olan görüntü düz bir vektöre dönüştürülür. Bu oluşturulan düz vektör girdi olarak alınır ve her girdi bir nörona bağlanarak tam bağlı bir yapı oluşturularak klasik sinir ağının çalışma mantığı uygulanır.

Şekil 3. Tam Bağlı Katman.

Güncel olarak kullanılan CNN Mimarilerini aşağıda bulabilirsiniz:

🔷 LeNet

🔷 AlexNet

🔷 VGGNet

🔷 GoogLeNet

🔷 ResNet

🔷 ZFNet

🔷 ErfNet

🔷 CapsuleNet

🔷 PANet

🏮 Bölge Tabanlı Evrişimli Sinir Ağı (R-CNN — Region Based Convolutional Neural Networks)

R-CNN mimarisi, nesne tespitini yapabilmek için üç modüllü bir sistem kullanır. İlk modül, sınıflardan bağımsız bir şekilde bölge önerileri üretir. Bu öneriler sayesinde bir dizi aday bölgeler tanımlanır. İkinci modül ise her bölgeden belirli boyutta bir özellik vektörü çıkaran bir CNN’dir. Son ve üçüncü modül de sınıflara özgü doğrusal bir Destek Vektör Makinesi (SVM — Support Vector Machine) kullanılır.

🏮 Hızlı Bölge Tabanlı Evrişimli Sinir Ağı (Fast R-CNN — Fast Region Based Convolutional Neural Networks)

Şekil 4. Kaynak: R. Girshick. Fast R-CNN. arXiv:1504.08083, 2015.

Fast R-CNN’nin R-CNN’e göre daha hızlı olmasının başlıca nedeni, alınan her bölge önerisiyle evrişimli sinir ağını beslemek zorunda olmamasıdır. Bu nedenle, Fast R-CNN’nin eğitilmesi ve test edilmesi daha hızlıdır. Bununla birlikte çoğu avantajı da yanında getirir. Kısaca özetlemek gerekirse, Fast R-CNN daha yüksek doğruluk (mAP — Mean Average Precision) sağlar. Fast R-CNN’de eğitim tek aşamalıdır ve eğitim yapılırken tüm ağ katmanları güncellenebilir. Özellikleri ön belleğe almak için disk depolaması gerektirmez.

🔷 Kaynak kodunu aşağıda bulabilirsiniz.

🏮 Daha Hızlı Bölge Tabanlı Evrişimli Sinir Ağı (Faster R-CNN — Faster Region Based Convolutional Neural Networks)

Bu noktada öncelikle bilinmesi gereken, R-CNN ve Fast R-CNN bölge önerilerini bulmak için seçici arama (selective search) kullanır. Seçici aramanın yavaş ve zaman alıcı bir süreç olmasından dolayı ağın bölge önerilerini öğrenmesini sağlayan Faster R-CNN geliştirilmiştir.

Faster R-CNN’in mimarisinden bahsedecek olursak, oldukça karmaşık bir mimariye sahiptir. Her şey elde etmek istediğimiz sınırlayıcı kutuların listesine, her sınırlayıcı kutuya atanan bir etikete ve bunların olasılık değerlerine sahip bir görselle başlar.

Girdi görüntüleri, tensörler (çok boyutlu diziler) olarak temsil edilir ve boyutları Yükseklik(Height) × Width(Genişlik)× Depth(Derinlik) olarak gösterilir. Bu görüntüler önceden eğitilmiş bir CNN’den geçirilirler ve bir evrişimli özellik haritası ile sonuçlandırılırlar. Burada bu yöntem bir sonraki bölüm için özellik çıkarıcı olarak kullanılır. Aynı zamanda bu yöntem Öğrenme Aktarımı (Transfer Learning) olarak bilinir. Öğrenme Aktarımı yaygın olarak büyük bir veri kümesinde eğitim yapılarak elde edilen ağırlıkların daha küçük bir veri kümesinde oluşturulacak sınıflandırıcıyı eğitmek için kullanılır.

Şekil 3. Öğrenme Aktarımı (Transfer Learning).

Bu işlemden sonra Bölge Teklif Ağı (Region Proposal Network — RPN) elde edilir ve bu ağ CNN’nin hesapladığı özellikleri kullanır. RPN, nesne içerme ihtimaline sahip bölgelerin (sınırlayıcı kutular) bulunmasında kullanılır.

Nesne tespiti için Derin Öğrenme kullanmanın en zor kısmı, değişken bir boyuta sahip sınırlayıcı kutu listesi oluşturulmasıdır diyebiliriz.

NOT 📝 Sinir ağlarının çıktısı genellikle sabit boyutlu bir tensördür.

Değişken boyut sorunu, RPN’de çapalar (anchors) kullanılarak çözülür. Çözümü daha net açıklamak gerekirse; nesne tespit sorununu iki parçaya modelliyoruz. Birinci parçada “Bu çapa ilgili bir nesne içeriyor mu?”, ikinci parçada ise “İlgili nesneye uyması için bu çapayı nasıl ayarlayacağız?” sorularını soruyoruz.

Çapalar sorularımıza cevap haline geldiği zaman çözülmesi daha kolay bir problem haline gelir. Daha sonrasında, çıkarılan özellikler ile sınırlayıcı kutular kullanılarak İlgi Bölgesi (Region of Interest — RoI) Havuzlaması uygulanır ve ilgili nesnelere karşılık gelen özellikler yeni bir tensöre çıkarılır.

Son olarak ise R-CNN bu bilgileri şu amaçlarla kullanır:

  • İlgi bölgesi dışındaki içeriği, sınırlayıcı kutuda sınırlandırır ya da “arkaplan” etiketini kullanarak çıkarır.
  • Nesneye daha iyi oturabilmesi için sınırlayıcı kutu koordinatlarını ayarlar.

🔷 Orjinal makale kodunu aşağıdan bulabilirsiniz:

Ayrıca Faster R-CNN’in uygulamasını anlattığım yazıma bakabilirsiniz.

İkinci yazımda en güncel olarak kullanılan Mask R-CNN’i anlatacağım, görüşmek üzere 🏄

--

--