GoogleNet Nedir?
GoogleNet, 2014 yılında Google tarafından geliştirilen bir derin öğrenme mimarisidir. Özellikle görüntü tanıma ve nesne algılama konularında etkili olan bu yapay zeka modeli, ILSVRC (ImageNet Large Scale Visual Recognition Challenge) yarışmasında birinci olarak dikkat çekmiştir. GoogleNet, Inception modüllerini temel alan bir yapı kullanarak, katman sayısını artırmadan daha derin ve etkili bir öğrenme sağlayabilmektedir. Bu sayede, daha az hesaplama gereksinimi ile daha iyi sonuçlar elde edilmiştir.
GoogleNet’in temel bileşeni olan Inception modülleri, çoklu boyutlarda özelleştirilen filtreler içerir. Bu, modelin farklı boyutlardaki özellikleri aynı anda yakalayabilmesine olanak tanır. Modelin mimarisi, binlerce parametre ile birlikte oldukça derindir ve bu derinlik, görsel verilerin karmaşıklığını anlamak için kritiktir.
GoogleNet, geniş bir nesne kategorisini tanımak için uygun bir çözüm sunarken, aşırı fitting (overfitting) sorununu en aza indirir. Bunun yanı sıra, modelin tasarımında kullanılan teknikler, düşük hesaplama maliyetine rağmen yüksek doğruluk oranı sağlamaktadır. Bu sebeplerden ötürü, GoogleNet hala birçok görüntü tanıma projesinde popüler bir seçim olmaya devam etmektedir.
GoogleNet ile Neler Yapabilirsiniz?
GoogleNet, görüntü tanıma, nesne algılama ve video analizi gibi birçok alanda kullanılmaktadır. Örneğin, tıbbi görüntü analizleri, güvenlik kameralarındaki hareket izleme, otomatik etiketleme sistemleri ve hatta sanal gerçeklik uygulamaları gibi birçok farklı senaryoda bu derin öğrenme mimarisi uygulanabilir. Geliştiriciler, GoogleNet’i çeşitli Python kütüphaneleri ile entegre ederek kendi projelerinde kullanabilirler.
Ayrıca, GoogleNet’in transfer öğrenme yaklaşımıyla, önceden eğitilmiş modeller üzerinde ince ayar (fine-tuning) yapılabilir. Bu, yeni bir veri kümesine hızlı bir şekilde adapte olmasını sağlar ve projelerin geliştirme süresini kısaltır. Özellikle sınırlı veriye sahip projelerde, önceden eğitilmiş bir modelin kullanımı, performansı artıracak ve geliştiriciye zaman kazandıracaktır.
Bu makalede, GoogleNet kullanarak Python’da nasıl görüntü tanıma işlemi yapılacağını öğreneceksiniz. Adım adım ilerleyerek kod örnekleri, açıklayıcı bilgiler ve öneriler ile bu süreci takip edebileceksiniz.
GoogleNet ile Python’da Görüntü Tanıma Projesine Başlangıç
Projenize başlamadan önce, gerekli kütüphaneleri kurmalısınız. GoogleNet, TensorFlow ve Keras kütüphanelerini kullanarak kolay bir şekilde uygulanabilir.
!pip install tensorflow keras
Kurulum tamamlandıktan sonra, projemizde kullanacağımız temel bileşenleri ve veriyi hazırlamak gerekmektedir. Aşağıda bu süreç için gerekli adımları bulabilirsiniz.
Öncelikle, kullanmak istediğiniz görüntü verisini belirlemeniz gerekiyor. Bu veri, kendi imajlarınız olabileceği gibi, açık kaynaklı veri kümelerinden de temin edilebilir (Örn: CIFAR-10, ImageNet gibi). Veriyi yüklemek için basit bir yol olarak Keras kütüphanesinin sunduğu yükleme fonksiyonlarını kullanabilirsiniz.
Görüntü Verisini Yükleme
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
Burada, CIFAR-10 veri kümesini kullanarak eğitim ve test verilerini yüklüyoruz. CIFAR-10, 10 farklı sınıfa ait 60000 görüntü içeren bir veri kümesidir ve bu projenin başlangıcı için uygun bir seçim olacaktır. Şimdi veri setimizi ön işleme tabi tutalım.
Veri Ön İşleme
Modelin doğru bir şekilde eğitilmesi için veri setinizin belli bir ön işleme sürecinden geçmesi önemlidir. Görüntülerin boyutları ve değer aralıkları, modelin performansı üzerinde büyük etki yapabilir.
import numpy as np
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
from keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
Yukarıdaki kod ile görüntüleri 0 ile 1 arasına normalize ediyoruz. Ayrıca, kategorik değişkenlerimizi one-hot encoding yöntemi ile dönüştürüyoruz. Şimdi modelimizi oluşturmaya başlayabiliriz.
GoogleNet Modelinin Oluşturulması
GoogleNet mimarisini kurmak için Keras kütüphanesindeki Sequential veya Functional API’yi kullanabilirsiniz. Aşağıda, GoogleNet modelini tanımlamak için gerekli adımlar yer almaktadır.
from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Flatten, Dense, Dropout, Input
from keras.models import Model
input_tensor = Input(shape=(32, 32, 3))
Modelimizi oluşturma aşamasında ilk olarak giriş katmanımızı belirliyoruz. CIFAR-10 veri setinin görüntü boyutları 32×32 piksel olduğundan, giriş şeklimizi bu boyutlara göre ayarlıyoruz.
Inception Modüllerinin Oluşturulması
GoogleNet’in temel yapı taşı olan Inception modülünü oluşturmamız gerekiyor. Aşağıda, Inception modülünü oluşturan birkaç katmanı tanımlıyoruz.
def inception_module(x, filters):
branch1x1 = Conv2D(filters[0], (1, 1), padding='same', activation='relu')(x)
branch3x3 = Conv2D(filters[1], (1, 1), padding='same', activation='relu')(x)
branch3x3 = Conv2D(filters[2], (3, 3), padding='same', activation='relu')(branch3x3)
branch5x5 = Conv2D(filters[3], (1, 1), padding='same', activation='relu')(x)
branch5x5 = Conv2D(filters[4], (5, 5), padding='same', activation='relu')(branch5x5)
branch_pool = AveragePooling2D(pool_size=(3, 3), strides=1, padding='same')(x)
branch_pool = Conv2D(filters[5], (1, 1), padding='same', activation='relu')(branch_pool)
outputs = [branch1x1, branch3x3, branch5x5, branch_pool]
return keras.layers.Concatenate()(outputs)
Inception modülümüzü oluşturduktan sonra, bu modülü modelimizin çeşitli katmanlarında kullanacağız. Modeli oluştururken, farklı katmanlarda Inception modüllerini kullanarak çeşitlilik sağlamış olacağız.
Modelin Eğitimi
Modelimizi tamamladıktan sonra, eğitime başlamak için artık yeterli alt yapıya sahibiz. Modelin derlenmesinde uygun kayıp fonksiyonunu ve optimizasyon algoritmasını seçmek kritik öneme sahiptir.
model = Model(inputs=input_tensor, outputs=output)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Modelimizi ‘adam’ optimizasyon algoritması ile derledikten sonra, verimizi kullanarak modeli eğitmeye başlayabiliriz. Eğitim verimizi kullanarak modelin başarı oranını ölçmek için fit fonksiyonunu kullanacağız.
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))
Veriyi yükledikten ve modelimizi eğittikten sonra, modelin başarımını değerlendirmek için test verisi ile bakabiliriz.
Sonuçların Değerlendirilmesi
Model eğitimi tamamlandıktan sonra, sonuçların değerlendirilmesi büyük önem arz etmektedir. Modelin performansını değerlendirebilir ve doğruluk oranını görmek için aşağıdaki kodu kullanabilirsiniz.
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
Eğitilmiş modelin test seti üzerindeki kayıplarını ve doğruluğunu analiz ederek, modelin performansı hakkında daha fazla bilgi sahibi olabiliriz. Bu bilgiler, modelin güncellenmesi ve iyileştirilmesi için oldukça değerlidir.
Geri Bildirim ve İyileştirme
Model üzerine yapılan çalışmaların ardından, kullanıcıların geri bildirimleri ve test sonuçlarına göre, modelinizi daha da geliştirebilir ve iyileştirebilirsiniz. Yeni verilerle eğiterek, modelinizin genel başarı oranını artırabilir ve daha iyi sonuçlar elde edebilirsiniz. Ayrıca, daha derin öğrenme teknikleri veya diğer mimariler deneyerek projelerinizi zenginleştirmek faydalı olacaktır.
Sonuç
GoogleNet ve Python kullanarak görüntü tanıma projesini başarıyla tamamladınız. Bu süreç boyunca, verilerin hazırlanmasından modelin oluşturulmasına ve eğitilmesine kadar bir dizi adımı takip ettiniz. GoogleNet’in sunduğu derin öğrenme avantajları ve görüntü ayrıştırma yetenekleri, projelerinizde büyük fayda sağlayacaktır.
Ayrıca, elde ettiğiniz bilgileri genişletmek ve bu bilgileri daha fazla projeye uygulamak için, ele aldığınız konuyu derinlemesine keşfetmekten çekinmeyin. Artık, GoogleNet ile ilgili temel bilgilere sahip oldunuz ve bu bilgileri kendi projelerinizde hayata geçirebilirsiniz.
Unutmayın ki, her proje ve model, sürekli bir öğrenme ve iyileştirme sürecidir. Yeni yaklaşımları, modelleri ve verileri deneyerek kendinizi sürekli geliştirin ve Python dünyasında daha fazla keşif yaparak yolunuza devam edin!