CNN (Evrişimsel Sinir Ağları)

Derin öğrenmenin heyecanlı dünyasına hoşgeldiniz! Şimdi sizler ile birlikte görüntü sınıflandırması adına CNN gibi mucizevi bir mimari ile tanışacağız. Başlıkta da bahsettiğim gibi CNN ( Convolutional Neural Networks -ConvNet) türkçe karşılığı olarak Evrişimsel Sinir Ağına denk gelmektedir.

CNN, öyle sihirli bir yapıdır ki inanın hiçbir çaba sarf etmeden koltuğunuza yaslanacak ve işi bir bilene bırakacaksınız. Bilgisayarlı Görü’ nün yanı sıra derin öğrenmeyi de içinde barındırarak nesne tanıma ve sınıflandırma gibi birçok kabiliyeti beraberinde getirir. Dolayısıyla, derin öğrenmede CNN kullanımı kaçınılmaz olmaktadır!

Andrew NG sayesinde aldığım değerli bilgileri sizler ile de paylaşmak istiyorum. Master eğitimim boyunca birçok projede CNN kullanma fırsatım oldu. Bunun yanı sıra elimizde birçok farklı sinir ağları da mevcut elbette! Ancak elinizde eğer görüntüler mevcut ve sınıflandırma yapılacak ise CNN bulunmaz hint kumaşı olacaktır.

Nedir bu Evrişimsel Sinir Ağları?

Evrişimsel sinir ağları adından da anlaşılacağı üzere veri setinde yer alan görüntüler için her bir pikselde evrişim katmanı uygulamaktadır. Kısaca bahsettikten sonra evrişimsel sinir ağlarının temellerinin nerelere dayandığını öğrenelim. Ana yapısında bilgisayarlı görme ve derin öğrenme temelleri barınmaktadır. Hatta bilgisayarlı görme, derin öğrenme ile hayatımızda daha aktif olan bir alandır.

CNN sinir ağları, belirlediğiniz filtreyi görüntü üzerinde adım adım gezdirerek katmansal olarak farklı bir çıktı elde etmektedir. Proje bazlı bu adımları incelemek isterseniz Keras ile Sınıflandırma yazımı inceleyebilirsiniz. CNN mimarisini oluştururken gerekli katmanların oluşturulmasını da Python kodu olarak yazının içerisinde bulabilirsiniz.

Klasik ConvNet mimarisi yerine farklı mimarileri de kullanmanız mümkün. Literatürde yer alan makalelerde ve projelerde CNN ağının farklı modellerine yer verilmiştir. Bu sonuçlardan yola çıkarak görüntü sınıflandırmalarında farklı derin öğrenme modelleri kullanarak daha doğru sonuçlara ulaşmak mümkündür.

  • AlexNet
  • VGG
  • ZFNet
  • GoogleNet
  • Microsoft RestNet
  • R-CNN

Örnek olarak nesne tanımada ve sınıflandırmada çok sık kullanılan bir veri setinden bahsetmek gerekirse kuşkusuz by MNIST verileri olacaktır. Derin öğrenme ile ilgileniyorsanız mutlaka rakam tanıma videolarına veya çalışmalarına denk gelmişsinizdir. Bu aşamada makineyi eğitime vermeden önce arka planda sinir ağının nasıl çalışma sağladığını bilmemiz faydalı olacaktır.

MNIST Verileri ile Rakam Tanıma (Digit Recognize)

Görüntünün işlenme sürecinde birçok farklı filtreyi uygulama şansım oldu. Laplace, Sobel, Gama ve birçoğu.. Bu filtreler için bir kernel (çekirdek) belirlenir ve ardından uygulanacak görüntü üzerinde gezdirme işlemi gerçekleştirilir. Özellikle bu aşamayı düşünürsek CNN yapısının nasıl çalıştığını anlayabiliriz. Her şeyden önce blok yapısı ile aşama aşama gezdirme sağlanmaktadır.

MNIST verilerini incelemek gerekirse el yazısı ile uyarlanmış verilerdir. Örneğin 9 rakamını ele alalım. Bir tahtaya 9 rakamını yazarak sizlere gösterdiğimi varsayalım. Size gösterdiğim bu rakamın hemen 9 olduğunu anlayabilirsiniz, değil mi? Oysaki bilgisayarlar kendilerine öğretilmediği bir görüntüyü bizim kadar çabuk algılayamayabilirler. Akabinde bu piksellerin komşuluk değerlerine ve yoğunluklarına bağlı olarak tahmin yürütürler. Bunun yanı sıra evrişimsel sinir ağları da kenar tespiti yaparken piksel değerleri üzerinden işlem yapmaktadır.

Örnek olarak 9 rakamının yakınlaştırılmış haline bir makineymiş gibi bakalım.

9 Rakamı [Ref-6]

El yazısı ile biçimlenen bu görselde 9′ un içerisinde yer alan beyaz ve siyah piksellerin yoğunluklarına göre bir tahmin çıkarmamız mümkündür.

Söylemek istediğim şey, görüntü yapısının nasıl çözümlendiği idi. Bu arada unutulmamalıdır ki, CNN iki boyutlu görüntülerde (siyah-beyaz) çalışacağı gibi renk kanalının da var olduğu üç boyutlu görüntülerde de sonuç vermektedir. RGB ve Grayscale (Gri Seviye) yapılarını anlamak adına çok faydalı olacağını düşündüğüm bir kaynak bağlantısı bırakıyorum.

Yukarıda yer alan RGB görüntüdeki sayıları analiz edelim. 6 rakamı width(genişlik), diğer 6 rakamı height(yükseklik) ile temsil edilirken 3 kanal sayısını göstermektedir. Sarı kutucuk ile gösterilen bloklar ise görüntü üzerinde etkili evrişim katmanıdır. Evrişimsel oluşumu daha iyi anlamak adına Andrew NG tarafından anlatılan Coursera platformundaki Convolutional Neural Networks kursunu takip edebilirsiniz.

🚀 Haydi, Kaggle veya herhangi bir veri tabanı kaynağı üzerinden verilerimizi temin edip CNN sinir ağını eğitelim ve nesne tanıma işlemini gelin birlikte gerçekleştirelim! Hiçbir şey için geç değildir! Unutmayın ki tahminleme modeli kurarken doğruluk oranının yüksek olması (istisnalar hariç) genellikle istenen bir durumdur. Tabi ki bu durum farklı verilere, projelere ve hedeflere göre değişkenlik göstermektedir. Başka bir yazımda CNN sinir ağını birlikte kodlamaya ne dersiniz? Sağlıklı günler diliyorum.

REFERANSLAR

  1. Coursera, Convolutional Neural Networks, Andrew NG, Younes Bensouda Mourri, Kian Katanforoosh.
  2. GAZİOSMANPAŞA BİLİMSEL ARAŞTIRMA DERGİSİ (GBAD), Derin Öğrenme ve Görüntü Analizinde Kullanılan Derin Öğrenme Modelleri, Özkan İNİK, Erkan ÜLKER.
  3. https://mc.ai/how-does-convolutional-neural-network-work/
  4. https://github.com/mbadry1/DeepLearning.ai-Summary/tree/master/4-%20Convolutional%20Neural%20Networks#foundations-of-cnns
  5. https://en.wikipedia.org/wiki/MNIST_database
  6. https://medium.com/@himanshubeniwal/handwritten-digit-recognition-using-machine-learning-ad30562a9b64
  7. http://datahacker.rs/convolution-rgb-image/

Leave a Reply

Your email address will not be published. Required fields are marked *