Ders: YZM309 – Görüntü İşleme (Image Processing)
Öğrenci: Emir Çabalak — 230212012
Üç farklı doğa kategorisindeki 467 türü sınıflandırabilen derin öğrenme tabanlı bir görüntü sınıflandırma projesidir. Proje kapsamında sıfırdan tasarlanan CNN modelleri ile Transfer Learning yaklaşımları karşılaştırmalı olarak değerlendirilmiştir.
| Özellik | Detay |
|---|---|
| Görev | Çoklu sınıf görüntü sınıflandırma (Multi-class Image Classification) |
| Toplam Sınıf | 467 tür |
| Kategoriler | 🦋 Kelebek (100) · 🌸 Çiçek (102) · 🐦 Kuş (265) |
| Eğitim Ortamı | Google Colab (GPU) |
| Test Ortamı | Yerel bilgisayar (Tkinter GUI) |
| Framework | TensorFlow / Keras |
Image_Processing_Final_Project/
│
├── Custom_128 (underfit)/ # Özel CNN — 128×128, BS:64 (underfit gözlemi)
│ ├── Model_Creator.py # Colab eğitim betiği
│ ├── Tester.py # Yerel test betiği (Tkinter GUI)
│ ├── best_model.keras # En iyi eğitilmiş model
│ └── ...
│
├── Custom_224_bs128 (overfit)/ # Özel CNN — 224×224, BS:64 (overfit gözlemi)
│ ├── Model_Creator.py
│ ├── Tester.py
│ ├── best_model.keras
│ └── ...
│
├── EfficientNet/ # Transfer Learning — EfficientNetB0
│ ├── Model_Creator.py
│ ├── Tester.py
│ ├── best_model.keras
│ └── ...
│
├── MobileNetV2/ # Transfer Learning — MobileNetV2
│ ├── Model_Creator.py
│ ├── Tester.py
│ ├── best_model_mobilenet.keras
│ └── ...
│
├── ResNet50/ # Transfer Learning — ResNet50
│ ├── Model_Creator.py
│ ├── Tester.py
│ ├── best_model_resnet.keras
│ └── ...
│
├── datasets/ # Veri setleri (Kaggle + TFDS)
│ ├── birds/ # 265 kuş türü
│ ├── butterflies/ # 100 kelebek türü
│ └── tfds_data/ # Oxford Flowers 102
│
├── ornek.webp # Örnek test görseli (Albatros)
└── 230212012_EmirÇabalak.pdf # Proje raporu
Sıfırdan tasarlanan Convolutional Neural Network mimarileri ile deneme yapılmıştır:
- Custom_128 (underfit): 128×128 giriş boyutu, 64 batch size. Modelin kapasitesi yetersiz kaldığından underfit gözlemlenmiştir.
- Custom_224 (overfit): 224×224 giriş boyutu, 5 bloklu derin mimari (32→64→128→256→512 filtreler), BatchNormalization ve Dropout katmanları. Daha yüksek kapasite nedeniyle overfit eğilimi gözlemlenmiştir.
Giriş (224×224×3)
→ [Conv2D(32) → BN → Conv2D(32) → BN → MaxPool → Dropout(0.25)] # Blok 1
→ [Conv2D(64) → BN → Conv2D(64) → BN → MaxPool → Dropout(0.30)] # Blok 2
→ [Conv2D(128) → BN → Conv2D(128) → BN → MaxPool → Dropout(0.40)] # Blok 3
→ [Conv2D(256) → BN → Conv2D(256) → BN → MaxPool → Dropout(0.40)] # Blok 4
→ [Conv2D(512) → BN → Conv2D(512) → BN → MaxPool → Dropout(0.40)] # Blok 5
→ Flatten → Dense(1024) → BN → Dropout(0.5)
→ Dense(467, softmax)
ImageNet üzerinde önceden eğitilmiş ağırlıklar kullanılarak iki fazlı eğitim uygulanmıştır:
| Model | Giriş Boyutu | Dropout | Faz 1 (Kafa) | Faz 2 (İnce Ayar) | Açılan Katman |
|---|---|---|---|---|---|
| EfficientNetB0 | 224×224 | 0.3 | 15 epoch, lr=0.001 | 50 epoch, lr=1e-5 | Son 30 katman |
| MobileNetV2 | 224×224 | 0.4 | 15 epoch, lr=Adam | 50 epoch, lr=1e-5 | Son 30 katman |
| ResNet50 | 224×224 | 0.5 | 15 epoch, lr=Adam | 50 epoch, lr=1e-5 | Son 40 katman |
Faz 1 (Feature Extraction): Önceden eğitilmiş katmanlar dondurulur, sadece eklenen sınıflandırma kafası (Dense + Softmax) eğitilir.
Faz 2 (Fine-Tuning): Temel modelin son N katmanı açılır ve çok düşük öğrenme oranıyla tüm model birlikte eğitilir.
Üç farklı kaynaktan toplanan veri setleri birleştirilerek tek bir büyük veri seti oluşturulmuştur:
| Veri Seti | Kaynak | Sınıf Sayısı | Açıklama |
|---|---|---|---|
| Kelebek Türleri | Kaggle — Butterfly Images | 100 | 100 farklı kelebek türü |
| Oxford Flowers 102 | TensorFlow Datasets (TFDS) | 102 | 102 farklı çiçek türü |
| Kuş Türleri | Kaggle — 100 Bird Species | 265 | 265 farklı kuş türü |
Eğitim sırasında aşağıdaki augmentation teknikleri uygulanmıştır:
RandomFlip("horizontal")– Yatay çevirmeRandomRotation(0.1)– Rastgele döndürme (±10%)RandomZoom(0.1)– Rastgele yakınlaştırma (±10%)
pip install tensorflow tensorflow-datasets numpy matplotlib pillow kaggleHer model klasöründeki Model_Creator.py dosyası Google Colab üzerinde çalıştırılmak üzere tasarlanmıştır:
Model_Creator.pydosyasını Colab'a yükleyinkaggle.jsonAPI anahtarınızı hazır bulundurun- Google Drive bağlantısını onaylayın
- Betik otomatik olarak veri setlerini indirir, modeli eğitir ve en iyi ağırlıkları Drive'a kaydeder
⚠️ Eğitim betikleri Colab-specific komutlar (!kaggle ...,drive.mount(...)) içerdiğinden yerel ortamda doğrudan çalışmaz.
Her model klasöründeki Tester.py dosyası yerel bilgisayarda çalıştırılmak üzere tasarlanmıştır:
# Örnek: EfficientNet modelini test etme
cd EfficientNet
python Tester.py- Script çalıştığında etiket haritasını oluşturmak için veri setlerini kontrol eder (eksikse otomatik indirir)
- Eğitilmiş modeli (
best_model.keras) yükler - Tkinter dosya seçici penceresi açılır — test edilecek görseli seçin
- Tahmin sonucu, güven oranı ve kategori (Kuş/Çiçek/Kelebek) ekrana yazdırılır ve matplotlib ile görselleştirilir
- Loss Fonksiyonu:
sparse_categorical_crossentropy - Optimizasyon: Adam optimizer
- Metrik: Accuracy
- Checkpoint Sistemi:
ModelCheckpoint(en iyi val_accuracy) + epoch takibi (last_epoch.json) - Erken Durdurma:
EarlyStopping(val_loss izleme, patience: 5–15 epoch) - Etiket Sıralaması: Kelebek [0–99] → Çiçek [100–201] → Kuş [202–466]
- Ön İşleme: Model tipine göre farklı (normalize
/255.0, EfficientNet preprocess, ResNet caffe-mode)
| Dosya | Açıklama |
|---|---|
Model_Creator.py |
Google Colab üzerinde model eğitimi: veri indirme, augmentation, model oluşturma, eğitim ve checkpoint kaydetme |
Tester.py |
Yerel bilgisayarda tahmin: etiket haritası oluşturma, model yükleme, Tkinter ile görsel seçme ve sınıflandırma |
best_model*.keras |
Eğitim sırasında en yüksek val_accuracy'ye sahip kaydedilmiş model |
latest_checkpoint.weights.h5 |
Eğitimin kaldığı yerden devam edebilmesi için son epoch ağırlıkları |
last_epoch.json |
En son tamamlanan epoch numarası |
ornek.webp |
Test için kullanılan örnek albatros görseli |
Bu proje, YZM309 – Görüntü İşleme dersi kapsamında final projesi olarak geliştirilmiştir.
