100 Satır Kod ile Derin Öğrenme
Python, OpenCV kullanarak resimlerde basit obje sistemlerini tanıma. Konu resimler ve obje tanıma olduğu zaman OpenCV kütüphanesi yine bu konuda yardımımıza koşuyor ama sadece o değil bir diğer yardımcı YOLO. Darknet tarafından geliştirilen YOLO açılımı ile You Only Look Once(Sadece Bir kere Bak) anlamına gelmekte olup obje tanıma sistemlerine, hızı açısından fayda sağlamaktadır.
Tek aşama dedektörler(Single Stage Dedectors), yani örnek olarak YOLO İkili aşama dedektörlerine(Two Stage Dedectors örneğin R-CNN) göre daha hızlı çalışır ancak doğruluk oranı daha düşüktür. YOLO saniyede 45 kare işleyebilirken( ki şuan eklemeler ile FastYOLO dediğimiz sistemde 155 kare) R-CNN saniyede 5 kare işlebilmektedir. Yani YOLO R-CNN’e göre 9 kat hızlı!
İkili aşama dedektörleri selektif arama yöntemi(1.Aşama) kullanarak nesneleri kutu içerisine alıp sınıflandırma problemi için konvensiyonel ağa(CNN) aktarır.(2.Aşama). YOLO ise Tek Aşama Dedektör olarak gerileme yani Regression problemini kullanmaktadır. Bu yazıda Microsoft tarafından önceden öğretilmiş ve 80 objeyi tanıyabilen COCO veri setini kullanacağız. COCO veri setini burada ki linkten indirebilirsiniz.
Gerekli kütüphaneler
opencv-python, numpy
opencv-python yüklemek için konsola ;
pip install opencv-python
numpy için ise:
pip install numpy
Gerekli Dosyalar:
Resim, YOLO ayar dosyası, Önceden öğretilmiş veri seti(COCO), Sınıf isimlerini barındıran dosya.
Terimler
Confidence: Gerçekliğe yakın olabilmek için gereken minimum olasılık örneğimiz 0.5 yani %50 olarak kullanacağız.
Threshold: Non-Maxima supression(NMS) dediğimiz obje için çevresine dikdörtgen oluştururken birden fazla oluşturmamıza engel olmak için kullandığımız sayı.
Ortalama Çıkarma(Mean Substraction): Resimlerin RGB olmak üzere 3 kanalı vardır bu kanalların her birinden aynı kanalın ortalamasının çıkarılmasına verilen isim. Yani:
new_R = old_R — mean(R); new_G = old_G — mean(G) …
Çarpma faktörü(Scaling factor): Ortalama çıkarması uygulanan resme belirlenen sayının bölünmesi işlemidir. Bu sayı verinin standart sapması olabilmektedir veya manüel olarak belirlenebilmektedir. Ancak tamamen sistemin mimarisine ve ağın nasıl öğretildiğine bağlıdır. Örneğin: new_R = new_R / scale_factor
NOT: Ortalama Çıkarma ve Çarpma Faktörü, uygulaması verinin konvensiyonel ağa veya YOLO’ya girmeden önce ön işlenme aşamasıdır. Ancak her derin öğrenme uygulamasında kullanıldığı anlamına gelmez.
OpenCV blobFromImage fonksiyonu
Fonksiyon prototipi: blobFromImage(image, scaleFactor, size, mean, swapRB)
Fonksiyon konvensiyonel ağa girmeden önce gereken(veya gerekmeyen) ön işleme aşamasını gerçekleştirmektedir.
image: İşlenecek resim
scaleFactor: Çarpma faktörü
size: Konvensiyonel ağa en uygun uzay.(boyut)
mean: Ortalama çıkarma
swapRB: OpenCV resimleri BGR sırasına göre kabul etmektedir. Bu paremetreye true verdiğimiz zaman OpenCV’ye BGR sırasını değil RGB sırasını kullanmasını söyleriz.