Computer Vision (CV), bilgisayarların fotoğraf ve video gibi dijital görüntülerin içeriğini “görmesine”, görüntüde neyin olduğunu (Image Classification) ve nerede olduğunu (Object Detection) anlamasını sağlayacak teknikler geliştirmeye çalışan bir bilgisayar bilimleri alanıdır. CV alanı son 8 yılda çok ilerlemiş ve aşağıdaki şekilde göreceğimiz gibi artık insanlardan bile daha doğru sonuçlar vermeye başlamış.
Resim-1 ImageNet Large Scale Visual Recognition yarışması sonuçları – Top 5 hatası
ImageNet yarışmasında araştırmacılar geliştirdikleri CV modelleri 21 milyon resim (Dataset) üzerinde test edilip bu resimlerin ne olduğunu (21 bin Classes) tahmin etmeleri gerekiyor (Prediction). Deep Learning, 2012 yılından itibaren kullanılmaya başlanmış. Bu yazıda bir Deep Learning modeli neyden oluştuğunu göreceğiz.
Resim-2 : Bir yapay sinir ağı örneği
Deep Learning, insan sinir ağlarından esinlenen yapay zekanın bir alt dalıdır. Modeldeki (yapay sinir ağı) her Neuron bir dizi Input alır, onu kendi Weight’leri ile işler ve dizi Output çıktı olarak verir. Diğer yapay zeka tekniklerinden farkı, bu model Input’lerin önemini (Weight) kendisi öğrenmesi gerekir. CV’de kullanılan Deep Learning tipi Convolutional Neural Network (CNN) ve tipik bir CNN Convolutional Layer, Activation, Pooling Layer, ve Fully Connected Layer katmanlarından oluşur.
Resim-3: Genel bir CNN mimarisi
Convolutional Layer
Bu katman görüntüdeki Feature’ları (özellikleri) ayıklar. Baştaki Convolutional Layer’lar çizgi gibi özellikleri bulurken daha derin olanlar burun, göz, vs.. bulur. Her Convolutional Layer da Filter / Kernel’lardan oluşur. Kernel’lar Weight matrisidir. Convolution işlemi aşağıdaki gibidir.
Resim-4
W: Weights, X:Input, ve B: bias
Resim-5 : Convolution işlemi
Resim-6 : Kernel / Filter örnekleri
Activation
Activation Function, Convolutional Layer’dan aldığı lineer Input’a nonlineerlik katıyor. Bu, modelin Training sürecinde Weight’leri öğrenirken takılmadan minimaya ulaşmasını sağlar. En sık kullanılan Activation Function ReLu’dur (Rectified Linear Unit). Bu Activation Function genelde Convolutional işlemi ile birleştiriliyor.
Resim-7
Pooling Layer
Convolutional Layer ve Activation’dan sonra genelde bu katman gelir. Pooling Layer aldığı Input’un boyutunu küçültür, Training ve Prediction süresini de kısaltır. Bu katman diğer katmanların aksine, Weight’i yoktur. En yaygın Pooling türü olan Max Pooling, Pooling penceresindeki maksimum değerini alır.
Resim-8 Max Pooling
Fully Connected Layer
Fully Connected Layer’lar modelin sonunda gelir ve önceki katmanlardan aldığı 3D Input’u 1D’ye dönüştürür. Bu işleme Flattening denir. Son sonuçlar bu 1D Output’tan gelir.
CNN örneği: VGG-19
VGG-19 CNN modelini inceleyelim:
Resim-9
ImageNet Dataset üzerinde eğitilmiş olan bu model 224 x 224 x 3 formatında bir görüntü alıyor ve 24 katman sonra onu 1000 Class’a sınıflandırıyor. İkinci sütün bu görüntünün boyutu her katmandan sonra nasıl değiştiğini gösteriyor, üçüncü sütün ise her katmanın Weight sayısıdır. Her CNN bu mantıkla çalışıyor ve mimari farklılıkların çoğu katman türlerinde ve aralarındaki bağlantılarda oluyor.
Bir Prediction yapalım şimdi:
Resim-10
ImageNet üzerinde eğitilmiş olan VGG-19’un Top-1 Accuracy (doğrululuğu) %71,5’tur, ve yukarıda yaptığımız Prediction’da köpekleri tanıyamadı. Bu nedenle gerçek bir uygulama yapıyor olsaydık ya sıfırdan kendi modelimizi eğitirdik ya da Transfer Learning tekniği kullanırdık. Yaptığımız deneyi kendi resimleriniz ile yapabilirsiniz. Kod bu link üzerinden erişilebilir.
Bu yazıda Deep Learning ve CV’nın ne olduğunu, CNN’in neyden oluştuğunu gördük. Bir sonraki makalemde Training işlemini göreceğiz, sıfırdan bir CNN modelini oluşturup eğiteceğiz.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://semiengineering.com/new-vision-technologies-for-real-world-applications/
https://towardsdatascience.com/machine-learning-fundamentals-ii-neural-networks-f1e7b2cb3eef
http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
https://keras.io/api/applications/
TAGs:Deep Learning ve Computer Vision, Fully Connected Layer, Pooling Layer
Kısa ve öz, harika paylaşım olmuş! Ellerine sağlık, devamını diliyorum! Özellikle CNN ve alt türleri hakkında :) Başarılar!