Featured Image

HTC (Hybrid Task Cascade) Ağ Mimarisi

Son günlerde görüntü segmentasyonu için yaptığım literatür araştırması sonucunda çok farklı segmentasyon mimarileri ile karşılaştım. Bu yazımdan önce sizlere Mask R-CNN mimarisinden bahsetmiştim. Tıpkı bu Mask R-CNN mimarisi gibi Cascade Mask R-CNN yapısı da literatürde karşıma çıktı. Okuduğum orijinal akademik dokümanlardan ve araştırmalarımdan topladığım bilgiler ile sizleri bu konuda aydınlatmaya çalışacağım.

Cascade,çeşitli görevlerde performansı artıran klasik ama güçlü bir mimaridir. Bununla birlikte, örnek segmentasyonuna basamaklar ile nasıl girilir açık bir soru olmaya devam etmektedir. Cascade R-CNN ve Mask R-CNN’ in basit bir kombinasyonu sadece sınırlı kazanç sağlar. Daha etkili bir yaklaşımı keşfederken, başarılı bir örnek bölümleme (instance segmentation) kademesinin anahtarının, algılama ve bölümleme arasındaki karşılıklı ilişkiden tam olarak yararlanmak olduğu görülmüştür.
Hybrid Task Cascade for Instance Segmentation adlı çalışmada iki önemli açıdan farklılık gösteren yeni bir Hybrid Task Cascade (HTC) çerçevesi önerilmektedir:

  1. Bu iki görevi ayrı ayrı basamaklı olarak rafine etmek yerine, bunları ortak çok aşamalı işleme için birbirine bağlar.
  2. Uzamsal bağlam sağlamak için tamamen evrişimli bir dal benimser, bu da sert ön planı karmaşık arka plandan ayırt etmeye yardımcı olabilir. 

Temel fikir, her aşamada basamak ve çoklu görev dahil ederek bilgi akışını iyileştirmek ve doğruluğu daha da artırmak için mekansal bağlamdan yararlanmaktır. Özellikle, ilerici arıtma için basamaklı bir boru hattı tasarlanmıştır. Her aşamada, hem sınırlayıcı kutu regresyonu hem de maske tahmini, çok görevli bir insanda birleştirilir.

Yenilikler ✨

HTC mimarisinin ana yeniliği, nesne algılama ve segmentasyonu birbirine bağlayarak daha iyi performans sağlayan basamaklı bir çerçevedir. Bilgi akışı, önceki ve sonraki maske belirleyicileri arasındaki doğrudan dallar aracılığıyla da değiştirilir. Mimari ayrıca, dağınık arka planlardan örnekleri daha iyi ayırt ederek performansı artırabilen mekansal bağlamı geliştiren tamamen konvolüsyonel bir dal içerir.
2017 Winner

Hybrid Task Cascade (Hibrit Görev Basamağı) : Örnek Segmentasyon Çerçevesi
  • Paralel olarak yürütmek yerine sınırlayıcı kutu regresyonunu ve maske tahminini birleştirir. 
  • Önceki aşamadaki maske özelliklerini mevcut olana besleyerek maske dalları arasındaki bilgi akışını güçlendirmek için doğrudan bir yol oluşturur.
  • Ek bir semantik segmentasyon dalı ekleyerek kutu ve maske dalları ile kaynaştırarak daha fazla bağlamsal bilgi edinmeyi amaçlamaktadır. 
  • Genel olarak, çerçeve mimarisindeki bu değişiklikler, yalnızca aşamalar arasında değil, görevler arasında da bilgi akışını etkili bir şekilde geliştirir.


HTC ağının Tablo 1′ deki COCO veri kümesindeki en son teknoloji ürünleri ile örnek belirleme yaklaşımlarının karşılaştırılması görülmektedir. Ayrıca, Bölüm 1’de açıklanan Cascade Mask R-CNN’i makalede kullanılan yöntemin güçlü bir temeli olarak değerlendirilmektedir. Mask R-CNN ile karşılaştırıldığında, naif basamaklı taban çizgisi, box AP ve mask AP açısından %3.5 ve %1.2’lik bir artış getiriyor. Bu taban çizgisinin, en gelişmiş örnek segmentasyon yöntemi olan PANet ‘ den daha yüksek olduğu belirtilmektedir. HTC, etkinliğini kanıtlayan farklı omurgalarda tutarlı iyileştirmeler gerçekleştiriyor. ResNet-50, ResNet-101 ve ResNeXt-101 için sırasıyla %1.5, %1.3 ve %1.1 kazanç sağlar.
📌 NOT: Cascade Mask R-CNN, kademeye bir maske başlığı ekleyerek Cascade R-CNN’yi örnek segmentasyonuna genişletir [3].
Aşağıda görmüş olduğunuz görsel ise COCO veri setindeki bu segmentasyon sonuçlarını göstermektedir.
New
Makalede sonuç bölümünde ise oluşturdukları HTC modelinin diğer modellere göre üstünlüklerinden bahsedilmektedir.

Örnek bölümleme (Instance Segmentation) için yeni bir kademeli mimari olan Hibrit Görev Kademesini (HTC) öneriyoruz. Ortak bir çok aşamalı işleme için kutu ve maske dallarını iç içe geçirir ve uzamsal bağlam sağlamak için anlamsal bir bölümleme dalı kullanır. Bu çerçeve, maske tahminlerini aşamalı olarak iyileştirir ve her aşamada tamamlayıcı özellikleri bir araya getirir. Çanlar ve ıslıklar olmadan önerilen yöntem, MS COCO veri setinde güçlü bir Cascade Mask R-CNN taban çizgisine göre% 1.5 iyileştirme elde eder. Özellikle, genel sistemimiz test-sorgulama veri setinde 48.6 maske AP’ye ve test-dev’de 49.0 maske AP’ye ulaşır.

📌 Son olarak tablodaki değişkenlerin değişimlerini anlamanız adına sizlere MS COCO metriklerinin tablosunu not olarak bırakıyorum.

REFERANSLAR

  1. Kai Chen, Jiangmiao Pang, Jiaqi Wang, Yu Xiong, Xiaoxiao Li, Shuyang Sun, Wansen Feng, Ziwei Liu, Jianping Shi, Wanli Ouyang, Chen Change Loy, Hybrid Task Cascade for Instance Segmentation, April 2019.
  2. Zhaowei Cai and Nuno Vasconcelos, Cascader-cnn:Delving into high quality object detection, In IEEE Conference on Computer Vision and Pattern Recognition, 2018.
  3. https://paperswithcode.com/method/cascade-mask-r-cnn.
  4. https://cocodataset.org/#home

A'dan Z'ye SSD (Single Shot Multibox Detector) Modeli

Bu yazıda, SSD MultiBox nesne algılama tekniğini A’dan Z’ye tüm açıklamaları ile birlikte öğreneceğiz. SSD modeli, RCNN hatta Faster R-CNN mimarisine göre çok daha hızlı çalıştığı için kimi zaman nesne tespiti söz konusu olduğunda kullanılmaktadır.
Liu ve arkadaşları tarafından 2016 senesinde ortaya konulan bu model, arka plan bilgisini kullanarak nesneyi algılamaktadır [2]. Single Shot Multibox Detector yani Tek Atış Çoklu Kutu Algılama (SSD) ilehızlı ve kolay modelleme yapılacaktır. Peki ya tek atış derken neden bahsediliyor olabilir? Adından da anlayacağınız üzere tek seferde nesne algılama imkanını bize sunmaktadır.

Doğru bilgiler vermek adına birçok doküman, video kayıtlarını harmanladım ve sizlere işin tüm alfabesini anlatmaya başlıyorum. RCNN ağlarda öncelikli olarak nesne olması muhtemel bölgeler belirleniyordu ve daha sonra Fully Connected katmanlar ile bu bölgeler sınıflandırılıyordu. RCNN ağı ile nesne tespiti 2 ayrı aşamada gerçekleştirilirken SSD bu işlemleri tek adımda uygulamaktadır.
İlk adım olarak SSD mimarisini yakından inceleyelim. Görüntü biraz ufak geliyorsa yakınlaştırarak konvolüsyon katmanlarının içeriklerini ve boyutlarını görebilirsiniz.

Mimariye her zamanki gibi girdi olarak bir görüntü verilmektedir. Daha sonra bu görüntü konvolüsyonel sinir ağlarından geçirilmektedir. Dikkat ettiyseniz konvolüsyonel sinir ağlarının boyutları farklıdır. Bu şekilde modelde farklı özellik haritaları (feature maps) çıkarılmaktadır. Bu durum istenilen bir durumdur. Özellik haritalarında 3x3lük evrişimsel filtre kullanılarak belirli miktarda sınırlayıcı dikdörtgen elde edilmektedir.
Ek Açıklamalar
Oluşturulmuş bu dikdörtgenler aktivasyon haritasında olduğu için farklı boyutlardaki nesneleri algılamada son derece iyi seviyededir. İlk verdiğim görselde girdi olarak 300×300’lük bir görüntü gönderilmiştir. Dikkat edecek olursanız ilerledikçe görüntü boyutları düşürülmüştür. En son gerçekleşen konvolüsyonel sinir modelinde ise boyut 1 olana kadar düşürülmüştür. Eğitim sürecinde belirlenen sınırlar ile test sonucunda gerçekleşen tahminler arasında karşılaştırma yapılmaktadır. Bu tahminler arasında en iyiyi bulmak için %50 methodu kullanılmaktadır. %50′ den büyük olan sonuç seçilmektedir. Tıpkı lojistik regresyonda var olan durum gibi düşünebilirsiniz.
Örneğin, görüntü boyutları Conv8_2’de 10×10×512 boyutundadır. 3×3 konvolüsyonel işlemi uygulandığında ve 4 sınırlayıcı kutu kullanılarak her sınırlayıcı kutu için (classes + 4) çıkışlara sahip olacaktır. Böylece, Conv8_2’de çıkış 10×10×4×(c+4) ‘ dir. Nesne algılama için 10 nesne sınıfı ve ek olarak bir arka plan sınıfı olduğunu varsayalım. Böylelikle çıktı 10×10×4×(11+4)=6000 olacaktır. Sınırlayıcı kutular ise 10×10×4 = 400 sayısına ulaşacaktır. Girdi olarak aldığı görüntüyü büyükçe bir tensör çıktısı olarak sonlandırıyor. Araştırdığım bir videoda bu bölge seçimleri ile ilgili şöyle açıklayıcı bir yorum dinlemiştim:

Her bölge için farklı işlemler yapmak yerine bütün tahminleri tek seferde CNN ağında gerçekleştirmekteyiz.

Yukarıdaki görselde solda görülen görüntü orijinal iken sağ tarafta yer alan bölgedeki her hücrede 4 sınırlayıcı kutu tahmini yapılmaktadır [3]. Burada görülen grid yapıları içerisinde sınırlayıcı dikdörtgenler bulunmaktadır. Bu şekilde nesnenin yer aldığı gerçek bölgenin tahmini yapılmaya çalışılmaktadır.
Results
Araştırdığım dokümanlarda yukarıda verdiğim örnek ile kaşılaştım. Gerçekten SSD mimarisini anlamak adına muazzam bir kaynak olduğu için sizler ile de paylaşmak istedim. Bakın dikkat ettiyseniz görselde olması muhtemel nesnelere bir yüzdelik atamış. Örneğin arabaya %50 sonucunu vermiş. Ancak %50′ nin üzerindeki ihtimaller daha yüksel ihtimal olacağı için kazanmış olacaktır. Yani bu görselde bir insan ve bir bisiklet olma ihtimali araba olmasından daha yüksek ihtimallidir. SSD yapısını anlamış olmanızı diliyorum. Bir sonraki yazımda ise SSD modelinin kodlanmasını göstereceğim. Esen kalmanız dileğiyle ✨
 

REFERANSLAR

  1. Bilgisayar Görüşü ile Yüz ve Nesne Tanıma | R-CNN, SSD, GANs, Udemy.
  2. Dive to Deep Learning, 13.7. Single Shot Multibox Detection (SSD), https://d2l.ai/chapter_computer-vision/ssd.html.
  3. https://jonathan-hui.medium.com/ssd-object-detection-single-shot-multibox-detector-for-real-time-processing-9bd8deac0e06.
  4. https://towardsdatascience.com/review-ssd-single-shot-detector-object-detection-851a94607d11.
  5. https://towardsdatascience.com/understanding-ssd-multibox-real-time-object-detection-in-deep-learning-495ef744fab.
  6. Single-Shot Bidirectional Pyramid Networks for High-Quality Object Detection, https://www.groundai.com/project/single-shot-bidirectional-pyramid-networks-for-high-quality-object-detection/1.

Image Segmentation

Mask R-CNN ile Görüntü Segmentasyonu

Görüntü Segmentasyonu

Son zamanlarda çok sık uğraştığım CNN mimarilerine yenilerini ekleyerek öğrenmeye devam etmekteyim. Daha önceki yazımda görüntü segmentasyonunun ne anlama geldiğini örnekler ile betimlemiştim. Eğer ilgilenirseniz profilimden ulaşabilirsiniz. Görüntü segmentasyonu alanında şöyle açıklayıcı bir yorum okumuştum:

Görüntü segmentasyonu, görüntüdeki her pikseli belirli bir kategoriye ait olarak sınıflandırma işlemidir.

Buradan yola çıkarak amacımızın sınıflandırmaya yönelik yardımcı maskelerin belirlenmesi olduğunu da gözlemleyebiliriz. Daha önceki yazımda sizlere segmentasyon işleminin neden ve nasıl yapıldığını aktarmıştım. Bu konuda daha çok bilgilenmek istiyorsanız eğer yazımı incelemenizi tavsiye ederim. Görüntü işleme ve derin öğrenme alanında yaptığım birçok çalışmada baz aldığım bir site önerisi vereceğim. Umarım benim kadar sizlere de yardımcı olabilir. Takıldığım her noktada

Sınıflandırma gerçekleştirilirken bir girdi (input) görüntüsünün içeriğini analiz etmek için bir dizi etiket tahmin edilmektedir. Ancak segmentasyonda bu tahmin işlemi gerçekleştirilirken aynı nesne olma ihtimali olan pikseller boyanmaktadır. Segmentasyonun anlaşıldığını umut ederek biraz daha teknik yaklaşıyorum ve konunun Mask RCNN kısmına geçiyorum.

Mask R-CNN

Mask-RCNN, mantıksal açıdan Faster-RCNN’ e benzerlik göstermektedir. Peki bu Faster-RCNN tam olarak ne yapmaktadır? Görüntüde bulunan objeleri maskeleyerek bizlere nesne tanıma imkanı sağlamaktadır. Bakın bu maskeleme işlemi çok mühimdir. Mask-RCNN de maskeleme işlemi yapılmaktadır. Ancak şöyle bir durum mevcut, Mask-RCNN yapısı gereği eklenen bölüm için binary değer kullanmaktadır. Yani demek istediğim tanınacak obje için maske kullanılacak ise 1, kullanılmayacak ise 0 değeri çıkarmaktadır.

Semantic segmentation (Anlamsal bölümleme)’ ın amacı, nesne örneklerini ayırt etmeden bir nesnenin her pikselini bilinen kategoriler halinde sınıflandırmaktır. Instance Segmentation ise, tespit edilen her nesnenin sınıflandırıldığı, yerelleştirildiği ve bölümlere ayrıldığı bu iki klasik bilgisayarlı görü görevini (algılama ve anlamsal bölümleme) birleştirir [2]. Burada önereceğim sistemde görüntüler için nesnelerin segmentasyonunda Mask R-CNN kullanmaktadır. Bunun yanı sıra terimleri dikkat ettiyseniz İngilizce kullanıyorum çünkü terimler kalıplaştığı için Türkçe söylendiğinde kulağıma tuhaf geliyor. Siz nasıl isterseniz öyle devam edebilirsiniz.

Faster R-CNN’nin bir uzantısı olarak Mask R-CNN, instance segmentation görevini gerçekleştirmek için evrişimli ağların bir dalını içerir. ResNet101’den özellikleri çıkardıktan sonra, bu özellikler bir feature pyramid network (FPN) oluşturur; burada nihai olarak bağlantılar (anchors) tanımlanır ve ilgili bölgeler (RoI’ler) çıkarılır [3].

Mask R-CNN Çalışma Yapısı

ROI Align modülünden çıkan iki adet evrişim CONV katmanı bulunmaktadır. Bu katmanlar, görüntüdeki maskemizin gerçekte oluşturulduğu yerdir [1]. CONV katmanından daha önce bahsetmiştim. Görüntüde yer alan pikseller teker teker taranıp evrişim işlemi uygulanmaktadır. Şimdi sizlere çok daha önemli bir detay paylaşacağım. Bildiğimiz gibi, Faster R-CNN / Mask R-CNN mimarileri, bir görüntünün potansiyel olarak bir nesne içeren bölgelerini oluşturmak için Bölge Teklif Ağı’ndan (RPN-Region Proposal Network) yararlanır. Bu bölgelerin her biri,“objectness score” yani “nesnelik puanına” ( belirli bir bölgenin potansiyel olarak bir nesne içerme olasılığı) göre sıralanır ve ardından en güvenli ilk N adet nesne bölgesi tutulur [1]. Böylelikle tespit edilecek nesneye daha dikkatli yaklaşmış olmaktayız. Görüntülerde seçilen 300 adet ROI (Region of Interest) bölgesinin her biri, ağın üç paralel şubesinden geçecektir:

  • Etiket tahmini (Label prediction): Nesnenin hangi sınıfa (türe) ait olduğunu belirleyen etiketler tahmin edilir.
  • Sınırlayıcı kutu tahmini (Bounding box prediction): Belirlenen nesne etiketleri sınırlayıcı kutular ile çizilir.
  • Maske tahmini (Mask prediction): Daha sonra alınan etiketler baz alınarak kutuların sınırlarından itibaren nesne boyanarak maskelenir.

Mask R-CNN Kod Dizimi

En sık kullandığım Mask R-CNN Github bağlantısını sizler için linkliyorum. Bu kod üzerinden çalışarak nesneler için segmentasyon işlemini birlikte başarabiliriz. Feature Pyramid Network (FPN) ve ResNet101 ağına dayalı oluşturulmuştur.

Oluşturulmuş bu repository içerisinde adım adım tespit anlatılmaktadır. Adım adım ilerlediğinizde önce anchorların filtrelendiğini daha sonra sınırlayıcı kutuların ve maskelerin oluştuğunu göreceksiniz. Daha önceden eğitilmiş COCO veri seti üzerinde nesne tespiti gerçekleştiriliyor. Eğer sizin kendinize ait bir veri setiniz mevcut ise bu verilerde kullanmanızı tavsiye ederim. Bununla birlikte Tensorflow Object Detection API ile nesnelerinizi tespit edecek modeli oluştumanız da mümkün. Bunun ile ilgili bilgilendirici nitelikte bir yazı daha oluşturmuştum, dilerseniz okuyabilirsiniz.

COCO Nedir?

COCO

 

Yukarıdaki görselde de görüldüğü üzere İngilizce Bağlam İçinde Ortak Nesneler anlamına gelen Common Objects in Context kelimesinin belirli harflerinden oluşmaktadır.

Ne İşe Yarar? [6]

  • Nesne segmentasyonu
  • Bağlam içinde tanıma
  • Superpiksel malzeme segmentasyonu
  • 330.000 görüntü (> 200.000 etiketli)
  • 1,5 milyon nesne örneği
  • 80 nesne kategorisi
  • 91 malzeme kategorisi
  • Resim başına 5 başlık
  • Kilit noktalara (keypoints) sahip 250.000 kişi görüntüsü

Görselde eğitilmiş Coco veri setini ve modülleri kullanabileceğimiz kodlara yer verilmektedir. Referans olarak verdiğim Mask RCNN Github bağlantısı üzerinden bu kodlara erişim sağlayabilirsiniz.

Uploading Libraries

Model Direction 

Gördüğünüz üzere Mask RCNN modülünü dahil ederek modeli yüklemeyi başardık. ResNet101 mimarisinin kullanıldığını belirgin konfigürasyonlardan da anlayabiliriz.

Backbone ResNet101

Ardından COCO veri setinde yer alan sınıfları bu şekilde inceleyebiliriz.

Class Names

Sonuç olarak nesne tespitinde son adıma gelmiş bulunmaktayız. Görüntüde yer alan objeleri yüzde değerleri vererek tanımayı başarmıştır. Umarım anlattıklarım sizler için bir nebze faydalı olabilmiştir. Herkese iyi kodlamalar ve güzel günler dilerim 😇

 

REFERANSLAR

  1. https://www.pyimagesearch.com/2018/11/19/mask-r-cnn-with-opencv/
  2. Gil Jader, Jefferson Fontinele, Marco Ruiz, Kalyf Abdalla, Matheus Pithon, Luciano Oliveira, Intelligent Vision Research Lab, Deep instance segmentation of teeth in panoramic X-ray images, 2018 31st SIBGRAPI Conference on Graphics.
  3. S. Ren, K. He, R. Girshick, and J. Sun, “Faster r-cnn: Towards real-time object detection with region proposal networks,” in Advances in neural information processing systems, 2015, pp. 91–99.
  4. https://en.wikipedia.org/wiki/Image_segmentation.
  5. https://github.com/matterport/Mask_RCNN.
  6. https://cocodataset.org/#home.
  7. https://modelzoo.co/model/mask-r-cnn-keras.

Sağlık Sektöründe Yapay Zeka

Sağlık hizmetlerinde yapay zekâ, karmaşık tıbbi ve sağlık verilerinin analizinde, yorumlanmasında ve anlaşılmasında insan bilimini taklit etmek için karmaşık algoritmaların veya başka bir deyişle yapay zekanın (AI) kullanılmasıdır. Bir bilgisayar mühendisi olmama rağmen daha önce hayata geçirdiğim uygulamalar genellikle sağlık hizmetlerine de dokunmaktadır.