Cumartesi, Aralık 09, 2017

Eski Kodlar...

Blogdaki eski yazılarımız halen okunuyor ve paylaştığımız kod ve dökümanlara ulaşılmaya çalışılıyor.  Zaman zaman ulaşılamadığına dair yorumlar ve iletilerde geliyor.

Neler varmış mesela











FAQ kısmımızda bahsettik burda yine tekrarlıyalım. Eski kodlarımızı genelikle "Google-Code"  projesi olarak yayınlıyorduk. Google bu hizmetini kaldırdı hali hazırda sadece eski projeleri indirmek için kullanabiliyorsunuz. 
code.google.com/archive/p/derin-deli-mavi/
Ama buda bir süre sonra tümden kaldırılacak.
Bizde halen kullanılabilecek fadalana bileceğinizi düşündüğümüz kodları githubda bir proje açıp içine aktardık
github.com/birolkuyumcu/ddm_projects_old
Bu github kod deposudan ulaşabilirsiniz...

Çarşamba, Aralık 06, 2017

OpenCv ve Derin Öğrenme

OpenCv nin yeni versiyonundan bahsetmiştik.
Windowsda Python için OpenCv kurulumu
En büyük yenilik  Derin öğrenme modellerini  opencv içinden çalıştırmanıza imkan  sağlayan DNN  modülünün, ana dağıtıma eklenmesi olmuştur.  Halen yoğun bir şekilde geliştirilen bir modül. Derin öğrenmenin üst düzey popülerliğinde  opencv camiasıda buna kayıtsız kalamazdı. Bizde bu yazımızda bu modülü kullanan bir örneği anlatıp paylaşacağız.

Öncelikle DNN den bahsedelim. OpenCv nin DNN modülü genel bir ihtiyaç aslında. DNN ağlarını eğitmek için pek çok kütüphane meydan çıkdı. Her birsinin değişik iyi ve kötü yanları var. Bizde iki yazıyla bu konudan bahsettik
Derin Öğrenmede Kütüphane Savaşları 1 , 2
Bir başka ve daha yaygın ihtiyaç daha var. Eğitilmiş modellerin kullanılması. Elbette kendi kütüphaneleri içinden kullanmanız mümkün. Ama hem caffe, hem torch , hem tensorflow  kütüphanesini kullanmak istersek ne olacak ? her birisiyle ayrı ayrı uğraşmak yerine bir kütüphane olsa eğitilmiş modelleri sadece çalıştırmak için kullanabilsek.  İşte OpenCv de DNN tamda bu iş için geliştiriliyor. Şimdilik en büyük eksikliği sadece cpu üzerinden çalıştırılıyor olması. Halen vadettiklerini hepsini gerçekleştiremiyor ama yoğun olarak geliştiriliyor.

Gelelim DNN örneğimize. Biz bu yazımızda bir nesne tespit ağı olan SSD nin hafif versiyonu Mobil SSD ağını çalıştıracağız.
SSD bahsedelim ,  Single Shot MultiBox Detector   kelimelerinden oluşturulmuş bir kıslatma.
2015 yılında,  Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg  kişiler tarafından yayınlanan
SSD: Single Shot MultiBox Detector
makalesiyle ortaya çıktı. Ağ yapısı

başlangıcı VGG sonunda ise nesne sınıfı ve konumunu gösteren çerçeve veriyor.



Ana SSD github sayfası
github.com/weiliu89/caffe/tree/ssd
Bizim bu gün kullanacağımız Mobile SSD github sayfası
 github.com/chuanqi305/MobileNet-SSD
 Gelelim koda ;

Kodu kullanabilmeniz için OpenCV  3.3 ve üstü lazım.

OpenCV de caffe modeli kullanabilmek için  2 dosya lazım
  • Ağ yapısını tutan prototxt dosyası
  • Eğitilmiş Ağ ağırlıklarını içeren caffemodel uzantılı dosya

cv2.dnn.readNetFromCaffe fonksiyonuyla bu ikisini kullanarak ağı  oluşturyoruz.



Ağı çalıştırmak için kullacağımız görüntüyü öncelikle ağın giriş ebatına (300x300) çeviriyoruz. Sonrasında görüntüyü cv2.dnn.blobFromImage fonksiyonuyla blob a çeviriyoruz.  Oluşturduğumuz ağ nesnesine bu blobu verip ağı çalıştırıyoruz.


Çalışan ağ bize tespit ettiği nesneleri ve konumlarını ve tespitin eminlik değerini verir. Bundan sonrasında resim üzerinde çerçeve ver sınıf bilgilerini yazdırıyoruz.



Koda OpenCv kitabının kodlarının python versiyonlarını yazdığımız 
github.com/birolkuyumcu/opencvbook_python
ders 13 olarak ulaşabilirsiniz
her türlü görüş ve önerilerinizi bekleriz