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')
Yorum Yap