Tensorflow MobileNet

Elif Meşeci
4 min readNov 25, 2022

Bu yazıda Tensorflow’ un ilk mobil bilgisayarlı görü modeli olan MobileNet üzerinde duracağız. MobileNet, nesne sınıflandırma, algılama gibi görevlerde kullanılan diğer ağlara göre daha küçük ve düşük gecikme süreli modellerdir. Boyutunun küçük olması sayesinde mobil cihazlarda derin öğrenme modeli olarak kullanılabilir. MobileNet’ler standart evrişimli katmanlar yerine derinlemesine ayrılabilir evrişimli katmanlar kullanır.

Evrişim katmanları arasındaki farkın gösterimi

Derinlemesine ayrılabilir evrişimler sayesinde parametre sayısı azalır. MobileNet mimarisinde bulunan derinlemesine ayrılabilir evrişimler ile geneleksel evrişimler arasındaki temel fark, tek 3x3 evrişim katmanı yerine 3x3 depthwise ve 1x1 pointwise evrişim katmanı olarak ayrı ayrı kullanmasıdır.

MobileNet’ler hakkında daha detaylı bilgi almak için makaleyi inceleyebilirsiniz.

Tensorflow-Keras ile MobileNet

İlk olarak Gerekli kütüphaneleri ve modülleri dahil edelim.

Eğitim için GPU gerekli değildir ancak GPU kullanmak hızlı bir şekilde eğitim yapabilmenizi sağlayacaktır. GPU kullanmak istiyorsanız öncelikle kurulum yapmanız gerekiyor. Eğer kurulu ise aşağıdaki kod ile kullanılabilir olup olmadığını kontrol edebilirsiniz. Ayrıca GPU’da bellek artırımını set_memory_growth()fonksiyonu ile etkinleştirebilirsiniz.

Daha sonra veri setimizi ayarlayalım. Bu yazıda yapılan uygulamada böbrek tomografisi görüntülerinden oluşan veri seti kullanılmıştır. Veri setinde “Cyst” ve “Normal” sınıfları bulunmaktadır. Eğer veriniz train, validation, test olarak önceden ayrılmış bir haldeyse bu adımı atlayabilirsiniz.

Train, validation ve test klasörlerinin yolunu tanımlayalım.

train_path = ‘/data/train/’
val_path = ‘/data/val/’
test_path = ‘/data/test/’

Keras ön işleme modülü olan ImageDataGenerator ile batch’lerimizi ayarlayalım.

Batch_size, model eğitimi esnasında aynı anda kaç adet verinin işleneceği anlamına gelir. Bu durumda batch_size eğitim veriseti sayısından küçük olmalıdır. Genel olarak 2'nin üstel katları (32, 64, 128, 256 …) olarak ayarlanması önerilmektedir.

Keras uygulamalar üzerinden önceden eğitilmiş MobileNet’i kullanacağız. Modelin katmanlarını incelemek için summary()fonksiyonunu kullanabilirsiniz.

Modelde parametre azaltarak çalışma zamanını ve karmaşıklığını azaltmak için katmanlarda değişiklik yapabilirsiniz. Bunu yaparken katmanların girdi ve çıktı boyutunun uygun olmasına dikkat edilmeli.

🧮Eğitim Zamanı

Eğitim aşamasında model compile()fonksiyonu ile yapılandırılır. Optimizer, loss ve metrics gibi parametreler ayarlanır. Bu parametrelere sınıflandırma problemine göre karar verilir. Adam optimizasyonu, birinci dereceden ve ikinci dereceden momentlerin uyarlanabilir tahminine dayanan stokastik bir gradyan iniş yöntemidir. Derin öğrenme modellerinde sıklıkla kullanılan optimize edicilerden biridir. Sınıflandırma modelinizde diğer optimize edicileri de deneyebilirsiniz. Loss parametresi ise loss hesaplamasının neye göre yapılacağını belirler. Örneğin MSE (Mean Square Error) temel alınarak bir loss hesaplaması yapılması gerekiyor ise loss = 'mean_squared_error’olmalı. Veya çok sınıflı bir sınıflandırma problemi için loss = 'categorical_crossentropy'olmalı.

Model, fit()fonksiyonu ile eğitilir. Belli bir epoch sayısında eğitmek için epoch_num belirleyebilir ve callbacks parametresini kullanmayabilirsiniz. Callbacks modülü model eğitimi sırasında belli noktalarda çağırılması için kullanılır. Aşağıdaki gibi EarlyStopping fonksiyonu kullanılarak izlenen bir metrik, burada ‘val_accuracy’ izleniyor, iyileşmeyi durdurduğunda eğitimi durdurulması için ayarlanabilir.

Modelin test veri seti üzerinde tahmin üretmesi için predict() fonksiyonunu kullanıyoruz.

test_labels = test_batches.classes
predictions = model.predict(x=test_batches, steps=len(test_batches), verbose=0)

Modelin performansını görüntülemek için karmaşıklık matrisini kullanabilirsiniz.

cm = confusion_matrix(y_true=test_labels, y_pred=predictions.argmax(axis=1))
cm_plot_labels = [‘Cyst’,’Normal’]
plot_confusion_matrix(cm=cm, classes=cm_plot_labels, title=’Confusion Matrix’)

Karmaşıklık matrisine baktığımızda

  • 356 TP ( cyst olan bir sınıfın cyst olarak tahmin edilmesi),
  • 14 FN ( cyst olan bir sınıfın cyst değil olarak tahmin edilmesi),
  • 81 FP ( cyst olmayan bir sınıfın cyst olarak tahmin edilmesi) ve
  • 425 TN ( cyst olmayan bir sınıfın cyst değil olarak tahmin edilmesi) değerimiz var.

TP ve TN değerleri fazla olması modelin doğruluğunun yüksek olduğu anlamına gelir.

Bir görsel üzerinde tahmin sonuçlarına bakalım. Örneğin test verisinde bulunan bir görsel için modelin tahmin sonuçlarını alalım.

[0.9240576 , cyst
0.07594236 , normal]

Model bu görsel için %92 Cyst sınıfına ait olduğu çıktısını veriyor.

Modelin tüm test verisi üzerindeki doğruluğu (accuracy) ise %89 olarak hesaplanmaktadır.

Referanslar:

--

--

Elif Meşeci

Artificial Intelligence Specialist at SimurgAI || Computer Engineer