Convolutional Neural Network ile Meyve Tanımlama – mc.ai
Image Processing(Fruits) with Convolutional Neural Network
Convolutional Neural Network ile resim işleme ve resim tahminlemesi yapılabilmektedir. Bunu yaparken resme çeşitli fitreler uygulayıp, katmanlar eklenir. Filtrelerde kaydırma işlemi yapılarak (stride) resimlerdeki karmaşıklığın (detayların) azaltılması sağlanır. Ayrıca parametre sayısını azaltmak için de pooling yöntemi kullanılır. Filtrelerin uygulanması sonucunda aktivasyon haritaları ortaya çıkar. Buradaki uygulamada amaç derin öğrenme metotları kullanılarak ağdaki kaybı minimize etmektir. Bunun için çeşitli aktivasyon fonksiyonları kullanarak, epoch sayısını değiştirerek öğrenme ve test süreci geçirilecektir. Aşırı öğrenme (overfitting) olmasını önlemek için Dropout yöntemi kullanılacaktır. Elde edilen sonuçlar grafik olarak belirtilecektir.
Konvolüsyonel nöral ağ (CNN veya ConvNet), yaygın olarak görsel imgelerin analiz edilmesinde kullanılan derin, ileri beslemeli yapay sinir ağlarıdır.
CNN’ler, minimum ön işlem gerektirecek şekilde tasarlanmış çok katmanlı algılayıcı çeşitlerini kullanırlar.
CNN’ler, diğer görüntü sınıflandırma algoritmalarına kıyasla nispeten az ön işlem kullanırlar. Bu, ağın geleneksel algoritmalarda el yapımı olan filtreleri öğreneceği anlamına gelir.
Şekil. 1. CNN mimarileri
CNN’de birçok mimari bulunup farklı katman sayıları, farklı aktivasyon fonksiyonları bulunmaktadır.
“CNN’de AlexNet mimarisi bu alanda araştırma patlamasına neden olan bir mimari olup relu aktivasyon fonksiyonunu da ilk kullanan mimaridir.”
CNN’in görüntü ve video tanıma, öneri sistemleri, görüntü sınıflandırması, medikal görüntü analizi ve doğal dil işleme gibi uygulamaları vardır.
Şekil. 2. Örnek bir CNN’de kullanılan katman yapısı
Bu çalışmanın yapılmasında yukarıda belirtilen daha önce kullanılan mimarilerin çalışma biçimleri benimsenip bazı alanlar farklılaştırılıp alınan sonuçlar incelenecektir.
Burada veri seti olarak Fruits 360 kullanılmaktadır. Bu veri setinde eğitim için 41322, test için ise 13877 meyve resmi bulunmaktadır. Toplamda 81 kategoride sınıflandırılmış meyveye ait kayıt bulunmaktadır. Veri setinde önceden işlenmiş 100X100 boyutunda jpg tipinde resimler kullanılmıştır. Ayrıca sınıflandırılması klasör olarak yapılıp bu şekilde kullanılmaktadır. Proje Pycharm ide’si üzerinde Python 3.6.5 sürümü ile Keras üzerinden gerçekleştirilmektedir. Katmanlar üzerinde aktivasyon fonksiyonlarından Adam, Adadelta, Adamax, Stokastik Gradyan İniş ve Relu kullanılmıştır. Farklı işlemlere tabi tutulduğundan Dropout (0.0.1–0.05 arası değerler) yöntemi de denenmiştir. Padding sabit tutulmuş olup stride(3,3) tür. Resimler başlangıçta 64X64 olacak şekilde yeniden boyutlandırılıp cv2 kütüphanesi kullanılarak BGR2RGB filtresi uygulanmıştır. Pooling yöntemi olarak max pooling(2,2) kullanılmıştır. Grafikler için python kütüphanesi olan matpotlib kullanılmıştır.
VI. Deneysel Sonuçlar
TABLO I. Katmanların ağ üzerindeki etkisi
a. Keras sonuçları toplam değil son epoch baz alınmıştır. Katmanlarda (çıkış hariç) relu fonksiyonu kullanılmıştır.
Yukarıdaki sorun CNN’de “Resudial Block” ile aşılmaya çalışılmıştır.
Şekil. 1. “Resudial Block” Yapısı
TABLO II. Optimizasyon fonksiyonlarının etkisi
b. Diğer değerler Deneysel Sonuçların en son bölümünde belirtilmiştir.
Şekil. 2. Tablo 2’de bulunan Adamax için accuracy ve loss değerleri
Adamax optimizasyon fonksiyonu ve 5 katman kullanılarak ve padding sabit tutularak loss değeri 0.0308 olarak elde edilmiştir.
Şekil. 3. Tablo 2’de bulunan Adadelta için accuracy ve loss değerleri
Adadelta optimizasyon fonksiyonu ve 5 katman kullanılarak ve padding sabit tutularak loss değeri 0.0140 olarak elde edilmiştir
Şekil. 4. Tablo 2’de bulunan SGD için accuracy ve loss değerleri
Gradient Descent optimizasyon fonksiyonu ve 5 katman kullanılarak ve padding sabit tutularak loss değeri 0.0100 olarak elde edilmiştir
Şekil. 5. Tablo 2’de bulunan Adam için accuracy ve loss değerleri
Adam optimizasyon fonksiyonu ve 5 katman kullanılarak ve padding sabit tutularak loss değeri 0.0308 olarak elde edilmiştir
TABLO III. Aktivasyon fonksiyonlarının etkisi
c. Diğer değerler Deneysel Sonuçların en son bölümünde belirtilmiştir.
Modelde varsayılan değerler şu şekilde olup yukarıda değiştirilen değerler belirtilmiştir:
Her katmanda aktivasyon fonksiyonu olarak relu, padding sabit, conv2d(16,(3,3), dropout(0.05), optimizasyon için Adadelta kullanılmıştır.
Çalışma sonucunda çeşitli parametreler kullanılmış ve 0.01 ile 0.10 arasında loss ile 0.95 ile 0.98 arasında accuracy değerleri elde edilmiştir. Burada proje amacı olan loss değerini en düşük seviyeye getirme ise başarılı bir şekilde gerçekleştirilmiş olup tablolar ile yukarıda belirtilmiştir. Fakat buradaki yüksek başarım verisetindeki eğitim ve test görsellerinin birbirine yakın olmasının da payı bulunabilir.
Github Repo(Kaynak Kodları için): https://github.com/mreorhan/Image-Processing-with-Convolutional-Neural-Network
 Alex Krizhevsky Ilya Sutskever Geoffrey E. Hinton, “ImageNet Classification with Deep Convolutional Neural Networks” , NIPS, (2012)
 Deep Learning article on Wikipedia. https://en.wikipedia.org/ wiki/Deep_learning. adresinden alındı.
 Fruits 360 dataset: A dataset of images containing fruits https://github.com/Horea94/Fruit-Images-Dataset
 Grafikler https://www.udemy.com/derin-ogrenmeye-giris/ adresinden alındı.
 Matplotlib https://matplotlib.org/tutorials/index.html adresinden alındı.
 Open Access Theses and Dissertations https://oatd.org/ adresinden alındı.
 Python 3.6.5, https://www.python.org adresinden alındı.
 Pycharm community edition 2018, https://www.jetbrains.com/pycharm adresinden alındı.
 Ulusal Tez Merkezi https://tez.yok.gov.tr/UlusalTezMerkezi/ adresinden alındı.
Previous Post:5 Best Machine Learning & Deep Learning Articles 2018.
Next Post:Where We Are Now