Blog Yazılarım

Keras ile CNN Kullanarak Görüntü Sınıflandırma

Keras ile CNN Kullanarak Görüntü Sınıflandırma


Görüntü sınıflandırma işlemi temelinde bir CNN yapısıyla oluşturulmuş bir model ile işlem yapılıyor.

1. Convolutional Neural Network (CNN) Nedir ?

CNN modeli, görüntünün özniteliklerini(features) ortaya çıkartmak için kullanılan bir sinir ağıdır. CNN katmanları arttıkça daha fazla öznitelik ortaya çıkartır. Özniteliklerin fazla olması görüntü tanıma başarsını arttıran özelliklerdendir. CNN yapısında bazı katmanlar vardır bunlara göz atalım.

A) Convolutional(Evrişim) Katmanı

Bu katmanda öznitelik çıkarımı yapılır. Bu çıkarımlar için bazı filtreler kullanılır. Filtrelerin çalışma yapısı birkaç matris işlemidir yani ana görüntü matrisini, seçtiğimiz başka bir matris ile çarpmaktır.Örneğin;

5×5 ‘ lik bir görüntü matrisini 3X3 boyutunda bir filtreye sokalım. Filtre matrisini görüntü matrisinin üzerinde koyduğumuzda üst üste gelen hücre değerlerini matris çarpımına sokalım ve onu yeni bir matrise yazalım. Bu işlemi tüm görüntü üzerinde yaptığımızda oluşan matris, bizim öznitelik matrisimizdir.

Kenar İşaretleme( Edge Detection) Filtresi

Kenar bilgileri, görüntüden elde edilen öznitelikler içindedir. Görüntünün yüksek frekanslı bölgelerini bulmamıza yardımcı olur.

Stride(Adım Kaydırma)

Matris hesaplama yaparken filtrenin ne kadar kaydırılarak işlem yapılacağını belirleyen bir parametredir. Çıkış boyutunu doğrudan etkiler.

Padding( Piksel Ekleme)

Convolutional işleminden sonra giriş matrisi ile çıkış matrisi arasındaki boyut farkını yok etmek için eklenir. Bu işlem giriş matrisine eklenecek ekstra pikseller ile sağlanır.

Padding ile filtreleme işlemi (Karnel filtre matrisi)

Pooling (Ortaklama)

Görüntü matrisinin kanal sayısını(RGB veya grey) sabit tutarak yükseklik ve genişlik bilgisini azaltır. Öznitelik çıkarımı olmaz. Maksimum,average ve L2-norm pooling gibi farklı hesaplama algoritmaları vardır. Çalışma sistemi, bir filtre matrisinin gezindiği görüntü matrisinin kullanılan algoritmaya göre değer seçerek yeni bir matris oluşturmasıdır.

Max Pooling Örneği

Çıkış Matrisi Bulma Formülü

Çıkış Matris Boyutu Hesaplanma Formülü

B) Flattening Layer

Bu katmanın görevi, Fully Connected Layer’a gönderilecek verileri hazırlamaktır. Yapılan işlem ise convolutional pooling katmanından gelen matrislerin tek boyutlu matrise çevrilmesidir.

C) Fully Connected Layer

Sinir ağları ile öğrenme işleminin geçekleştiği bölümdür.

2.Keras İle İmplement Edilmesi

Kullanacağımız veri seti keras ile gelen CİFAR-10 veri seti olacak.

Veri Yükleme

from keras.datasets import cifar10
(x_train,y_train),(x_test,y_test) = cifar10.load_data()

Veri Tanıma ve Görüntüleme

# explore datadatanum=1000import matplotlib.pyplot as pltimg=plt.imshow(x_train[datanum])# See labelprint("Label:",y_train[datanum])

One Hot Encoding

One Hot Encoding, kategorik değişkenlerin ikili (binary) olarak adlandırlması işlemidir.

from keras.utils import to_categoricaly_train_ohe=to_categorical(y_train)y_test_ohe=to_categorical(y_test)# Ohe işleminden sonra y_trainprint(y_train_ohe)

Görüntü piksellerini normalize etmek

x_train=x_train/255x_test=x_test/255

CNN Katmanı Oluşturarak Model Oluşturma

from keras.models import Sequentialfrom keras.layers import Dense,Flatten,Conv2D,MaxPool2D# Model tanımlanırmodel=Sequential()#CNN ve pooling katmanları eklenirmodel.add(Conv2D(32,(5,5),activation='relu',input_shape=(32,32,3)))model.add(MaxPool2D(pool_size=(2,2)))model.add(Conv2D(32,(5,5),activation='relu'))model.add(Conv2D(32,(5,5),activation='relu'))model.add(MaxPool2D(pool_size=(2,2)))#Flatten katmanı eklenirmodel.add(Flatten( ))model.add(Dense(1000,activation='relu') )model.add(Dense(10,activation='softmax') )# 10 tane etiket olduğu için 10 tane sinir node uluşturuldu.# Model compilemodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

Model Özeti

Model Başarısı Ölçme ve Görselleştirme

150 Epoch ile Başarı Oranı

Başarı ve Loss Değerleri

Modelin Tahmin İşlemi

İmageClassifiar() adında bir modül oluşturuldu. Dahili depolama üzerinden görüntü yüklenerek modele tahmin yaptırıldı.

Eğitilen Modelin Kayıt Edilmesi

model.save('model_1.h5')

Önceden Hazırlanan Modelin Yeniden Kullanılması

from keras.models import load_modelmodel=load_model('model_1.h5')



Bu yazıyı paylaş


Yorumlar (0)

Yorum Yap