Giriş: Görüntü Sınıflandırmanın Önemi
Görüntü sınıflandırma, makine öğrenmesi ve yapay zeka alanında oldukça yaygın bir uygulamadır. Özellikle derin öğrenme tekniklerinin yükselişiyle birlikte, konvolüsyonel sinir ağları (CNN) görüntü sınıflandırmada devrim niteliğinde sonuçlar elde etmemizi sağlamıştır. Bu yazıda, Python kullanarak CNN ile nasıl görüntü sınıflandırma yapabileceğimizi adım adım keşfedeceğiz.
Görüntü verisi genellikle büyük boyutlarda ve karmaşıktır. Bu nedenle, geleneksel makine öğrenmesi algoritmaları bu verilerle etkili bir şekilde başa çıkamadığından, derin öğrenme yöntemleri bu alanda daha etkili sonuçlar üretir. CNN’ler, görüntülerdeki öznitelikleri otomatik olarak öğrenme yeteneğine sahiptir, böylece farklı nesne ve kavramları tanıyabilirler.
Bu yazıda, TensorFlow ve Keras kütüphanelerini kullanarak CNN tabanlı bir görüntü sınıflandırma modeli nasıl oluşturabileceğimizi göreceğiz. Basit bir veri seti ile başlayarak, modelimizi eğitecek ve test edeceğiz.
Gerekli Kütüphaneleri Kurmak
Projemize başlamadan önce, gerekli Python kütüphanelerini kurmamız gerekiyor. TensorFlow, Keras ve diğer yardımcı kütüphaneleri kullanarak görüntü sınıflandırma modelimizi geliştireceğiz. Aşağıdaki komutları terminalde çalıştırarak bu kütüphaneleri kolayca kurabilirsiniz:
pip install tensorflow numpy matplotlib
Bu komutlar, TensorFlow adlı derin öğrenme kütüphanesi ile birlikte NumPy ve Matplotlib kütüphanelerini de kuracaktır. NumPy, matris işlemlerimiz için kullanılırken, Matplotlib ise sonuçlarımızı görselleştirmek için faydalı olacaktır.
Eğer Jupyter Notebook kullanıyorsanız, kurulumları gerçekleştirdikten sonra projenizi başlatabilirsiniz. Jupyter Notebook, kod yazma ve sonuçları görselleştirme açısından son derece kullanıcı dostu bir ortam sunar.
Veri Setini Hazırlama
Görüntü sınıflandırma işlemi için uygun bir veri setine ihtiyacımız var. CIFAR-10 veya MNIST gibi popüler veri setlerini kullanabiliriz. Bu veri setleri, sınıflandırma problemleri için yaygın olarak kullanılır ve Keras kütüphanesi doğrudan bu veri setlerini indirme ve yükleme imkanı sunar.
CIFAR-10 veri setini Keras ile kullanmak için aşağıdaki kodu kullanarak veri setini yükleyebiliriz:
from tensorflow.keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
Yukarıdaki kod parçacığı, CIFAR-10 veri setini yükleyecek ve eğitim ve test verilerine bölecektir. CIFAR-10 veri seti, 10 farklı sınıfa ait 60.000 renkli görüntü içerir. Eğitim verisi 50.000 görüntüden oluşurken, test verisi 10.000 görüntüden oluşmaktadır.
Veri Ön İşleme
Veri setimizi yükledikten sonra, görüntüleri modelimize uygun hale getirmek için ön işleme yapmamız gerekecek. Bu adımda, görüntüleri normalleştirerek modelin daha iyi sonuç vermesini sağlayacağız. Normalizasyon, görüntülerin piksel değerlerini 0 ile 1 arasına düşürerek yapılır.
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
Ayrıca, sınıf etiketlerimizi tek bir vektör halinde temsil edebilmek için one-hot encoding yöntemini kullanacağız. Bu yöntem, her sınıf için ayrı bir özellik oluşturur ve o sınıfa ait görüntüyü temsil eder.
from tensorflow.keras.utils import to_categorical
num_classes = 10
y_train = to_categorical(y_train, num_classes)
y_test = to_categorical(y_test, num_classes)
Bu şekilde, modelimiz verileri daha etkili bir biçimde öğrenecektir. Şimdi modelimizi oluşturmak için bir sonraki adıma geçebiliriz.
Konvolüsyonel Sinir Ağı (CNN) Modelini Oluşturma
Şimdi, CNN modelimizi tanımlamak için Keras API’sini kullanacağız. Keras, modelimizi oluşturmak için yüksek seviyeli bir arayüz sağlar. Aşağıda, basit bir CNN mimarisinin örneğini bulabilirsiniz:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
Bu modelde, ilk olarak 32 filtreli bir konvolüsyon katmanı ekliyoruz. Ardından, bu katmandan sonra bir maks havuzlama katmanı kullanarak görüntüyü boyutunu azaltıyoruz. Bu adımları birden fazla kez tekrarlayarak derinlemesine bir mimari elde etmiş oluyoruz.
Son olarak, son katmanımızda sınıf sayımıza göre bir softmax katmanı ekleyerek sınıflandırma işlemini gerçekleştireceğiz. Modelimizin mimarisini belirledikten sonra, modelimizi derleyelim.
Modeli Derleme ve Eğitme
Modelimizi oluşturduktan sonra, derlemesi için gerekli ayarları yapacağız. Kullanacağımız kayıp fonksiyonu ‘categorical_crossentropy’, optimizer olarak ise ‘adam’ kullanacağız. Ayrıca, başarı oranını izlemek için ‘accuracy’ metrik olarak ayarlanabilir:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
Modelimizi derledikten sonra, eğitim verilerimizi kullanarak modeli eğitebiliriz. Keras, modelimizi eğitmek için fit() fonksiyonunu kullanmamızı sağlar. Eğitim süreci için epoch sayısını ve batch size’ı ayarlamamız gerekecek.
history = model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))
Bu işlemi gerçekleştirdiğimizde, modelimiz eğitim verileri üzerinde öğrenmeye başlayacak. Eğitim süreciyle birlikte, kayıp ve doğruluk değerleri de her epokta güncellenecek.
Sonuçları Değerlendirme ve Görselleştirme
Modelimizi eğittikten sonra, test verisi ile sonuçlarımızı değerlendirebiliriz. Modelin ne kadar iyi performans gösterdiğini görmek için test verilerimizde doğruluk oranını hesaplayacağız:
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print('Test Kaybı:', test_loss)
print('Test Doğruluğu:', test_accuracy)
Modelimizin sonuçlarını değerlendirdikten sonra eğitim sürecinin doğruluğunu görselleştirmek için Matplotlib kütüphanesini kullanabiliriz. Aşağıdaki kod, eğitim ve doğrulama doğruluğunun grafiklerini çizecektir:
import matplotlib.pyplot as plt
plt.plot(history.history['accuracy'], label='Eğitim Doğruluğu')
plt.plot(history.history['val_accuracy'], label='Doğrulama Doğruluğu')
plt.title('Eğitim ve Doğrulama Doğruluğu')
plt.ylabel('Doğruluk')
plt.xlabel('Epok')
plt.legend()
plt.show()
Bu grafik, eğitim ve test sürecindeki modelin doğruluğunu görselleştirmekte, hangi epokta ne kadar başarılı olduğunu görmek için oldukça faydalıdır.
Sonuç ve Gelecek Adımlar
Bu makalede, Python ile konvolüsyonel sinir ağı (CNN) kullanarak görüntü sınıflandırmanın temel adımlarını öğrendik. Modelimizi Keras ile oluşturarak veri setimizi eğittik ve sonuçlarımızı değerlendirdik. Hatanızı çözmeye çalışırken dikkat etmeniz gereken bazı noktaları belirttik.
Gelecekte, modelinizin performansını artırmak için daha karmaşık mimariler denemek, veri artırma tekniklerini uygulamak ya da transfer öğreniminden faydalanmak gibi yöntemleri göz önünde bulundurabilirsiniz. Özellikle transfer öğrenimi, önceden eğitilmiş güçlü modellerin üzerine yeni verilerle nasıl bilgi ekleyebileceğinizi gösterir.
Son olarak, makine öğrenimi ve derin öğrenme alanında kendinizi geliştirmeye devam edin! Her yeni proje, sizi bir adım daha ileriye götürecektir. Python ve derin öğrenme kütüphanelerini kullanarak daha fazla projeye imza atmanızı ve öğrenmeye devam etmenizi öneriyorum.