- Kutu içerisine alma
- Semantik Bölütleme - Sematic Segmentation -
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ı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
- Fully Convolutional Networks for Semantic Segmentation 2015
- Fully Convolutional Networks for Semantic Segmentation 2016
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
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.
Hiç yorum yok:
Yorum Gönder