Convolutional Neural Network ile Meyve Tanımlama

Source: Deep Learning on Medium


Go to the profile of Emre Orhan

Image Processing(Fruits) with Convolutional Neural Network

I. Özet

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.

II. Giriş

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.

III. Yöntem

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.

Sonuç

Ç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


Kaynaklar

[1] Alex Krizhevsky Ilya Sutskever Geoffrey E. Hinton, “ImageNet Classification with Deep Convolutional Neural Networks” , NIPS, (2012)

[2] Deep Learning article on Wikipedia. https://en.wikipedia.org/ wiki/Deep_learning. adresinden alındı.

[3] Fruits 360 dataset: A dataset of images containing fruits https://github.com/Horea94/Fruit-Images-Dataset

[4] Grafikler https://www.udemy.com/derin-ogrenmeye-giris/ adresinden alındı.

[5] Matplotlib https://matplotlib.org/tutorials/index.html adresinden alındı.

[6] Open Access Theses and Dissertations https://oatd.org/ adresinden alındı.

[7] Python 3.6.5, https://www.python.org adresinden alındı.

[8] Pycharm community edition 2018, https://www.jetbrains.com/pycharm adresinden alındı.

[9] Ulusal Tez Merkezi https://tez.yok.gov.tr/UlusalTezMerkezi/ adresinden alındı.