Semantik Bölütleme ve FCN

0
496

Semantik Bölütleme ve FCN, resimde nelerin olduğu dışında,  konumlarını da öğrenmemizi gerektiren pek çok durum vardır. Mesela otonom araç etrafındaki nesneleri konumları ile tanıya bilmelidir ki çarpışma olmaksızın hareket edebilsin. Resimde konum belirlemenin iki şekli var.

  • Kutu içerisine alma
  • Semantik Bölütleme – Sematic Segmentation –

Biz bu yazımızda semantik bölütleme üzerine bir örnek gösterceğiz.  Resimde semantik bölütleme dediğimizde kast edilen, Resimdeki her pikselin neye ait olduğunu ayırabilmektir.

Yukarda resimde görüldüğü gibi köpeğe, kediye, ve kanepeye ait pikseller ayrıştırılmış. Peki Nasıl yapılıyor ?

Görüntü sınıflandırma için CNN yapsından bahsetmiştik.  ( bakınız )

Yıllardır görüntü bazlı problemler için CNN in eline su dökebilecek bir metod çıkmadı. Ağ yapılarında düzenlemeler, yeniliklerle , kendi kendiyle yarıştı.  Ağın genel yapısı yukarda gördüğünüz gibidir.  Kabaca giriş resmi üzerinde uygulanan konvolüsyon katmanları  ile öznitelik çıkarma, sondaki YSA katmanları ile çıkarılmış özniteliklerden sınıflandırmayı öğrenme işlemi yapılmaktaydı. Semantik bölütleme içinde bu yapıdan faydalanıldı.

Yukarda görüdüğünüz şekilde bir ağ yapısı oluşturuldu. CNN den farklı olarak, baştan sona  konvolüsyon katmanları kullanıldı.  Bu yeni tip Ağ yapısıda Fully Convolutional Networks olarak adlandırıldı. YSA yerine geçen katmanlarla, ağın çıkışı ebatları girişiyle aynı hale getirildi. Ek olarak ayrıştıracağı sınıf sayısı kadar kanala sahip bir matris üretildi. Mesela 5 sınıfa ait bir bölütleme işlemi yaptığımızı varsayalım

HxWx3 ( RGB )   —–>  FCN  —–>   HxWx5

 

Çıktı

Çıktıyı iki şekilde düşünebiliriz.

Giriş resminin hep pikseli için sınıflandırma sonuç vektörü. yani HxW tane 5 lik vektör
Her sınıf için piksellerin o sınıfa ait olma ihtimalini gösterer Matrisler

İşin teferruatları ve terorisi için aşağıdaki makaleleri incelemenizi tavsiye ediyoruz

  1. Fully Convolutional Networks for Semantic Segmentation 2015
  2. Fully Convolutional Networks for Semantic Segmentation 2016

Makelelerinde tarihlerinden anlaşılacağı gibi çok yeni konular.  Medikal görüntülerden uydu görüntülerine, IHA görüntülerine, Radar görüntülerine, vs  vs .. kullanılabilecek uygulama alanı çok geniş bir metod.

Makalelerde geçen  FCN-32s, FCN-16s ve FCN-8s  tabirlerinin sizin ne ifade ettiğini

yukardaki resimle gösterelim. Bölütleme kesinliği sondaki sayı ile ters orantılı. Gerçek bölütleme sonucuna en uygun sonuçlar FCN-8s ile elde ediliyor.

Gelelim bizim uygulamamıza. FCN ağ yapısının caffe kütüphanesi ile uygulanmış olduğu açık kaynak kodlu proje sayası var.

http://fcn.berkeleyvision.org

Bu sayfa sizi bir github sayfasına yönlenidir. Orada  değişik veri setleri ve için değişik ağ yapılara ve modellere ulaşabilirsiniz

Biz örneğimiz için  ‘fcn8s-heavy-pascal’  model tanım ve  ağırlık dosyalarını indirdik

  • fcn8s-heavy-pascal.prototxt
  • fcn8s-heavy-pascal.caffemodel

Bir ipython dosyası yazdık. Bu model 500×500 ebatında renkli resim alıp 20 sınıf + 1 Arka plan  olmak üzre 21 sınıflı 500x500x21 lik bir matris çıktısı veriyor. bir    Sonuçlar şöyle

Bisiklet sınıfı için  ihtimal  görüntüsü

Bölütleme sonucuda
Bisiklet için

Köpek İçin

gibi görünmektedir. Sonuç olarak bıyık filtrresinin !  🙂  çıkardığı aksilik dışında gayet iyi çalışıyor.

Kodun içine elimizden geldiğince açıklama satırlarıda koyduğumuzdan burda ek açıklama yapmaya gerek duymadık.   Kod için bakınız

https://github.com/birolkuyumcu/ddm_blog_examples/tree/master/fcn-caffe

Yinede anlaşılmayan yerler varsa, yada bu konularda görüş ve önerileriniz varsa iletişime geçebilirsiniz.

 

Birol Kuyumcu

Facebook Yorumları