Derin Öğrenme ile Polen Sınıflandırma: Teknik ve Uygulamalı Rehber | by ECE DALPOLAT | Aug, 2024


Polen sınıflandırma, biyoinformatik ve çevre bilimi gibi alanlarda büyük öneme sahip. Derin öğrenme teknikleri sayesinde bu alandaki projelerde daha yüksek doğruluk oranları elde edilebiliyor. Eğer sen de derin öğrenme ile polen sınıflandırması üzerine çalışmak istiyorsan, bu yazı tam sana göre. Bu yazıda, kendi gerçekleştirdiğim polen sınıflandırma projesinin adımlarını, kullandığım teknolojileri, karşılaştığım zorlukları ve bunları nasıl aştığımı paylaşacağım. Yazının sonunda, sen de benzer bir projeyi hayata geçirebilecek bilgi birikimine sahip olacaksın.

1. Proje İçin Gerekli Teknolojiler ve Kütüphaneler

Polen sınıflandırma projemde aşağıdaki araçları ve kütüphaneleri kullandım:

  • Python: Genel programlama dili olarak seçtim, çünkü geniş bir kütüphane desteği var.
  • TensorFlow ve Keras: Derin öğrenme modelini oluşturmak ve eğitmek için.
  • Pandas: Veri işleme ve analiz için.
  • ImageDataGenerator: Görüntü veri setlerini yüklemek ve ön işleme yapmak için.

2. Veri Setinin Hazırlanması

Projede kullandığım veri seti (https://www.kaggle.com/datasets/nataliakhanzhina/pollen20ldet), polen görüntülerinden oluşmakta olup, ilgili etiketler CSV dosyası olarak sağlanmıştır. Görseller bir dizinde saklanmış ve etiketler bboxes2.csv adlı CSV dosyasında tutulmuştur. Bu CSV dosyası iki sütun içermektedir: filename (görsel dosyasının ismi) ve label (ilgili görselin sınıf etiketi).

Veri, sklearn.model_selection modülünden train_test_split kullanılarak %80 eğitim ve %20 test seti olarak ayırdım. Bu yöntem, modelin öğrenmesi için yeterli veri sağlayacaktı ve modelin performansını değerlendirmek için bir kısmını test verisi olarak ayırdım.

Veri setinin hazırlanışı:

3.Görüntüleri Hazırlama ve Veri Artırımı

Veri çoğaltma, özellikle sınırlı veri setleri ile çalışırken, modelin genelleme kabiliyetini artırmak için önemlidir. Eğitim görüntüleri, tensorflow.keras.preprocessing.image’dan ImageDataGenerator kullanılarak çoğalttım. Uyguladığım çoğaltma teknikleri şunlardır:

  • Ölçekleme (Rescaling): Piksel değerleri, 1/255 faktörüyle ölçeklendirilerek normalize ettim, bu da piksel değerlerini [0, 1] aralığına getirir. Bu, modelin görüntüleri tutarlı bir şekilde işlemesini sağlar ve eğitim sırasında büyük gradyanlardan kaçınılmasına yardımcı olur.
  • Döndürme (Rotation): Görüntüler, 20 dereceye kadar rastgele döndürdüm. Bu, modele döndürme değişmezliğini öğrenmesi için çeşitlilik kazandırır.
  • Genişlik ve Yükseklik Kaydırmaları (Width and Height Shifts): Görüntüler, toplam genişlik ve yüksekliğin %20’si kadar rastgele yatay ve dikey olarak kaydırdım. Bu, modelin mükemmel bir şekilde ortalanmamış nesneleri tanımasına olanak tanır.
  • Shear Dönüşümü: Görüntülere 0.2’lik bir shear aralığı uygulayarak, modele hafifçe deforme olmuş nesneleri tanıma yeteneği kazandırılır.
  • Yakınlaştırma (Zooming): Görüntüler %20 oranında rastgele yakınlaştırdım, bu da modelin nesnelerin farklı ölçeklerine odaklanmasına olanak tanır.
  • Yatay Çevirme (Horizontal Flipping): Görüntüler yatay olarak çevirdim, bu da modelin sol-sağ yönlendirme değişmezliğini öğrenmesine yardımcı olur.

Test verisi için yalnızca ölçekleme uyguladım, bu da eğitim verileriyle tutarlılığı koruyarak ek bir değişkenlik eklenmesini önler.

4. Modelin Oluşturulması

Projede, bir Convolutional Neural Network (CNN) modeli tensorflow.keras.models’den Sequential API kullanılarak uyguladım. CNN’ler, görüntü sınıflandırmada oldukça başarılıdır çünkü görüntülerdeki uzaysal ilişkileri öğrenebilirler.

Modelin mimarisi:

Mimari şu katmanlardan oluşmaktadır:

  1. Konvolüsyonel Katman 1: 32 filtreli, 3×3 boyutunda ve ReLU aktivasyonu kullanan bir Conv2D katmanı, giriş görüntülerinden düşük seviyeli özellikleri çıkarmak için kullandım.
  2. Maksimum Havuzlama Katmanı 1: 2×2 boyutunda bir MaxPooling2D katmanı, öznitelik haritalarının uzaysal boyutlarını azaltmak için uyguladım. Bu, hesaplama karmaşıklığını azaltmaya ve aşırı öğrenmeyi kontrol altına almaya yardımcı olur.
  3. Konvolüsyonel Katman 2: 64 filtreli, 3×3 boyutunda ve ReLU aktivasyonu kullanan bir Conv2D katmanı, daha karmaşık özellikleri çıkarmak için ekledim.
  4. Maksimum Havuzlama Katmanı 2: 2×2 havuz boyutuna sahip ikinci bir MaxPooling2D katmanı, uzaysal boyutları daha da azaltmak için uyguladım.
  5. Konvolüsyonel Katman 3: 128 filtreli, 3×3 boyutunda ve ReLU aktivasyonu kullanan üçüncü bir Conv2D katmanı, daha karmaşık desenleri yakalamak için ekledim.
  6. Maksimum Havuzlama Katmanı 3: Üçüncü bir MaxPooling2D katmanı, boyutları azaltmaya devam etmek için kullandım.
  7. Düzleştirme Katmanı: Öznitelik haritaları, yoğun katmanlara hazırlık amacıyla bir 1D vektöre dönüştürdüm.
  8. Yoğun Katman 1: 512 nöronlu ve ReLU aktivasyonlu bir Dense katmanı, yüksek seviyeli öznitelik kombinasyonlarını öğrenmek için ekledim.
  9. Çıktı Katmanı: Son katman, sınıf sayısı kadar nöron ve softmax aktivasyonu içeren bir Dense katmandır. Bu katman, tüm sınıflar üzerinde bir olasılık dağılımı sağlar.

4. Modelin Eğitilmesi

Model, Adaptive Gradient Algorithm (AdaGrad) ve Root Mean Square Propagation (RMSProp) avantajlarını birleştiren Adam optimizatörü kullanılarak derledim. Adam, adaptif öğrenme hızı yetenekleri sayesinde daha hızlı bir şekilde yakınsama sağlar ve geniş kapsamlı ayar gerektirmez.

Kayıp fonksiyonu olarak, categorical_crossentropy kullanılmıştır; bu, sınıfların birbirini dışladığı çok sınıflı sınıflandırma problemleri için uygundur. Model, 30 epoch boyunca, 32 görüntüden oluşan mini-batch’ler ile eğittim. Eğitim verileri batch-wise şekilde modele beslenirken, validasyon verileri (test setinin bir parçası) her epoch sonrası model performansını izlemek için kullandım.

Eğitim ve doğrulama adımları:

Adam Optimizer: Modelin öğrenme hızını optimize etmek için kullandım. Categorical crossentropy ise çok sınıflı sınıflandırma problemlerinde yaygın bir kayıp fonksiyonudur.

5. Modeli Kaydetme ve Test Etme

Modeli eğittikten sonra, hem modeli hem de sonuçları kaydettim. Bu, daha sonra tekrar kullanmak veya başkalarıyla paylaşmak için faydalıdır.

6. Gerçek Dünya Verileri ile Modeli Test Etme

Yeni görüntüleri sınıflandırmak için, eğitilmiş model, yeni bir dizinden gelen görüntülerin sınıflarını tahmin etmek için kullandım. Görseller, eğitim verilerine benzer şekilde ön işleme tabi tuttum ve model, güven skorları ile birlikte tahminler sağladım.

Yeni veri setini sınıflandırma:

7. Sonuçları Raporlama

Tahmin edilen sınıf, en yüksek olasılığa sahip sınıf olarak belirlenmiştir. Sonuçları CSV formatında kaydedip, sınıflandırmaların doğruluğunu inceledim. Gerçek etiketler elimde olmadığından, modelin çıktısını referans olarak kullandım.

8.Neden Bu Seçimler Yapıldı?

  • CNN Mimarisi: CNN modeli, giriş görüntülerinden uzaysal hiyerarşileri otomatik olarak öğrenebilmesi nedeniyle görüntü sınıflandırma görevleri için güçlü bir araçtır. Seçilen mimari, basit ancak etkili olup, karmaşıklık ve performans arasında denge kurar.
  • Veri Çoğaltma: Seçilen çoğaltma teknikleri, veri setinde çeşitli gerçek dünya varyasyonlarını simüle ederek modelin sağlamlığını artırır; bu, sınırlı bir veri setiyle çalışırken özellikle önemlidir.
  • Adam Optimizatörü: Adam, seyrek gradyanları ve gürültülü verileri ele alma yeteneği nedeniyle seçilmiştir. Ayrıca, diğer optimizatörlere (örneğin, SGD) göre daha az ayar gerektirir.
  • ImageDataGenerator: Keras’tan bu araç, veri çoğaltma sürecini basitleştirir ve eğitim sırasında verilerin modele batch-wise şekilde beslenmesini sağlar, bu da büyük veri setleriyle çalışırken önemlidir.

Alternatif Yaklaşımlar

  • Diğer Mimariler: Daha karmaşık mimariler (örneğin, ResNet veya VGG) potansiyel olarak daha yüksek doğruluk için düşünülebilir, ancak bu mimariler daha fazla hesaplama maliyeti gerektirir.
  • Farklı Optimizatörler: RMSprop veya SGD gibi optimizatörler, verinin ve modelin yakınsama davranışına bağlı olarak kullanılabilir.
  • İleri Düzey Veri Çoğaltma: imgaug veya Albumentations gibi kütüphaneler, daha ileri düzey çoğaltma teknikleri sunar, ancak ek kurulum ve ayar gerektirebilir.

Bu proje, polen sınıflandırma konusunda derin öğrenmenin nasıl uygulanabileceğine dair pratik bir rehber sunuyor. Gelecekte, daha büyük ve daha çeşitli veri setleri ile modelin doğruluğunu artırmayı planlıyorum. Ayrıca, polen sınıflandırma üzerine çalışanlar için, daha geniş kapsamlı veri işleme ve model optimizasyonu yöntemleri üzerine çalışmaları öneririm.

Eğer bu yazıdan ilham aldıysan ve benzer bir proje üzerinde çalışmak istiyorsan, adım adım rehberimi takip edebilirsin. Unutma, derin öğrenme projeleri sabır ve sürekli öğrenme gerektirir. Başarılar!



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*