Ç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





Hiç yorum yok: