Makine öğrenmesi · Web arayüzü
NeuroVision (MRI)
Transfer learning ile MRI görüntülerinin dört sınıfa ayrılması.
Uygulama ekranları

Ana sayfa1 / 4
Test sonuçları
| Model | Doğru / Toplam | Doğruluk |
|---|---|---|
| ResNet50 | 1368 / 1405 | %97,4 |
| ResNet101 | 1395 / 1405 | %99,3 |
Sınıflar: glioma, meningioma, notumor (tümör yok), pituitary.
Neler yaptım
Veri
Kaggle Brain Tumor MRI Dataset içindeki Training ve Testing klasörlerini birleştirerek 7.023 görüntüyle çalıştım: glioma 1.621, meningioma 1.645, notumor 2.000 ve pituitary 1.757. Rastgele bölmeyle %72 eğitim, %8 doğrulama ve %20 test kümesi oluşturdum.
- 7.023 görüntü
- 4 sınıf
- %72 / %8 / %20
Ön işleme ve veri artırma
Görüntüleri 224×224×3 boyutuna getirdim ve etiketleri one-hot kodladım. Eğitimde 40° döndürme, 0,2 kaydırma/shear/zoom ve yatay çevirme kullandım; boşluklar nearest yöntemiyle dolduruldu.
- 224×224×3
- One-hot
- ImageDataGenerator
Model kurulumu
ImageNet ağırlıklı ResNet50 ve ResNet101 ağlarında ilk 30 / 50 katmanı dondurdum; kalan katmanları eğitime açık bıraktım. Sınıflandırma katmanlarına GlobalAveragePooling2D, iki dropout katmanı, 128 ReLU birimi ve dört sınıflı softmax ekledim; dropout oranları sırasıyla 0,5 / 0,6 idi.
- ImageNet
- 30 / 50 dondurulmuş
- Dropout 0,5 / 0,6
Eğitim
Adam ile öğrenme oranlarını 0,001 / 0,0001, batch boyutlarını 32 / 16 seçtim. ModelCheckpoint, ReduceLROnPlateau ve EarlyStopping kullandım; 50 epoch sınırına karşı eğitimler 18 / 36. epoch’ta durdu. ResNet50 yerel CPU’da, ResNet101 Google Colab Tesla T4 üzerinde eğitildi.
- Adam
- Batch 32 / 16
- 18 / 36 epoch
Değerlendirme
İki modeli aynı 1.405 görüntülük test kümesinde karşılaştırdım. Doğruluk ve kayıp eğrilerinin yanında karışıklık matrisi, precision, recall ve F1 ile sınıf bazındaki hataları inceledim.
- 1.405 test görüntüsü
- Karışıklık matrisi
- Precision / recall / F1
Web arayüzü
İlk Flask prototipini Django arayüzüne taşıdım. MRI yükleme ve ResNet50/101 seçimini, tahmin edilen sınıfı ve sınıf olasılıklarını gösteren bir akışta birleştirdim.
- Flask → Django
- Model seçimi
- Sınıf olasılıkları
Model eğitimi
- MRI girişi224×224×3
- ResNet50 / ResNet101 · ImageNetİlk 30 / 50 katman: dondurulmuşKalan katmanlar: eğitilen
- GlobalAveragePooling2D
- Dropout · 0.5 / 0.6
- Dense 128 · ReLU
- Dropout · 0.5 / 0.6
- Dense 4 · softmax
- glioma / meningioma / notumor / pituitary
| Ayar | ResNet50 | ResNet101 |
|---|---|---|
| Giriş | 224×224×3 | 224×224×3 |
| Ön eğitim | ImageNet | ImageNet |
| Dondurulan ilk katman | 30 | 50 |
| Dropout (iki katman) | 0.5 | 0.6 |
| Optimizer | Adam | Adam |
| Öğrenme oranı | 0.001 | 0.0001 |
| Kayıp | categorical_crossentropy | categorical_crossentropy |
| Batch size | 32 | 16 |
| Epoch sınırı | 50 | 50 |
| Durduğu epoch | 18 | 36 |
| ModelCheckpoint | val_loss · save_best_only | val_loss · save_best_only |
| EarlyStopping patience | 5 | 7 |
| ReduceLROnPlateau patience | 3 | 5 |
| ReduceLROnPlateau factor / min_lr | 0.1 / 0.000001 | 0.1 / 0.000001 |
| Ortam | Yerel CPU | Colab · Tesla T4 |
Sonuçlar ve analiz
Karışıklık matrisleri
ResNet50 toplam 37, ResNet101 10 görüntüyü yanlış sınıflandırdı. ResNet50'de en büyük hata 18 meningioma görüntüsünün pituitary olarak tahmin edilmesi; ayrıca 5 meningioma görüntüsü 'tümör yok' olarak etiketlendi. ResNet101'in 10 hatasının tamamı meningioma ile ilgili (meningioma'nın başka sınıf sanılması ya da başka sınıfların meningioma sanılması); ResNet50'nin 37 hatasının 31'i meningioma ile ilgili. Meningioma her iki modelde de en zor sınıf.
ResNet50 — karışıklık matrisi
ResNet101 — karışıklık matrisi
Sınıf bazlı rapor
Meningioma recall’u (0,92) ve pituitary precision’ı (0,94) en düşük değerler; ikisi büyük ölçüde aynı hatadan, meningioma görüntülerinin pituitary sanılmasından kaynaklanıyor. “Tümör yok” sınıfında recall, raporun iki ondalık gösteriminde 1,00 (418/419).
ResNet50, test — sınıf bazlı rapor
Doğruluk ve kayıp eğrileri
ResNet101 — doğruluk
Eğitim ve doğrulama doğruluğu yaklaşık 10. epoch’tan sonra %99 civarında birleşiyor. Sonraki bölümde büyük bir ayrışma görünmüyor; bu grafik tek başına genelleme başarısını kanıtlamaz.
ResNet101 — kayıp
Eğitim ve doğrulama kaybı ilk epoch’lardaki dalgalanmanın ardından hızla düşüyor. Yaklaşık 10. epoch’tan sonra ikisi de düşük seviyede; doğrulama kaybında sürekli bir yükseliş görünmüyor.
ResNet50 — doğruluk
Doğrulama doğruluğu başlangıçta dalgalanıyor ve yaklaşık 6. epoch’ta belirgin biçimde yükseliyor. Son bölümde eğitim yaklaşık %99, doğrulama %97 civarında; küçük fark aşırı öğrenmeyi tek başına kanıtlamaz. Grafiğin “test” etiketi notebook’taki val_accuracy, yani doğrulama serisidir.
ResNet50 — kayıp
Başlangıçtaki doğrulama kaybı yaklaşık 450’ye ulaştığı için dikey ölçek çok geniş. Sonraki değerler sıfıra yakın sıkışıyor; geç epoch’lardaki küçük değişimler bu grafikten güvenilir biçimde okunamıyor. Grafiğin “test” etiketi notebook’taki val_loss, yani doğrulama serisidir.
Veri dağılımı
Dört sınıf birbirine yakın dengede (1.621–2.000); en küçük sınıf glioma, en büyük notumor. Bölme grafiği %72 eğitim, %8 doğrulama ve %20 testi; test sınıf grafiği ise 310 / 326 / 419 / 350 görüntüyü gösteriyor.
Veri dağılımı — eğitim %72, doğrulama %8, test %20
Test kümesinin sınıf dağılımı
Veri artırma örneği
Eğitim görüntülerine 40° döndürme, 0,2 genişlik/yükseklik kaydırma, shear ve zoom ile yatay çevirme uygulandı. Boşluklar nearest yöntemiyle dolduruldu; doğrulama ve test için yeni artırılmış örnekler üretilmedi.
Veri artırma örneği
Temel kavramlar
CNN (evrişimli sinir ağı)
Görüntüyü küçük filtrelerle tarayarak desenleri öğrenir: ilk katmanlar kenar ve doku, derin katmanlar şekil ve yapı. Projede ResNet50 ve ResNet101 bu tür ağlardır.
Havuzlama (pooling)
Havuzlama (pooling): özellik haritasını küçültür, önemli bilgiyi korur; işlem yükünü azaltır. Türleri: max pooling (her pencerenin en büyük değeri), average pooling (pencere ortalaması), global average pooling (her kanalın tamamını tek sayıya indirir). Projede iki tür kullanıldı. ResNet'in ilk bloğunda max pooling, görüntüyü küçültürken her bölgedeki en büyük değeri korur. ResNet'in son katmanından sonra ise global average pooling kullanıldı: her özellik haritasını tek bir ortalama değere indirir ve elde edilen sayılar, sınıflandırma yapan katmanlara giriş olur.
Öğretici örnek: örtüşmeyen 2×2 pencereler, adım 2. Her renk bir çeyreği ve sonucunu eşler.
Transfer öğrenme ve katman dondurma
ImageNet’te önceden eğitilmiş ağın ilk katmanlarını (ResNet50’de 30, ResNet101’de 50) dondurup, eklediğimiz sınıflandırma katmanlarını ve ağın kalan katmanlarını MRI verisiyle eğittik.
Aşırı öğrenmeyi önleme
Veri artırma, dropout (0,5 / 0,6) ve EarlyStopping ile modelin eğitim verisini ezberlemesini sınırladık.
Başarı ölçütleri
Doğruluk, precision, recall, F1 ve karışıklık matrisiyle değerlendirdik. Matriste satırlar gerçek sınıf, sütunlar tahmin; köşegen doğru tahminlerdir. ResNet50’de 18 meningioma görüntüsü pituitary olarak tahmin edildi.
Teknolojiler
Model ve görüntü işleme
- Pythonuygulama ve eğitim kodu
- TensorFlowmodel eğitimi ve çıkarım
- Keras (tf.keras)sınıflandırma katmanları ve eğitim API’si
- NumPydizi işlemleri
- scikit-learnveri bölme ve değerlendirme
- OpenCVgörüntü okuma ve boyutlandırma
Web arayüzü ve kayıtlar
- Djangoweb arayüzü, kullanıcı girişi ve kayıtlar
- Pillowyüklenen görüntüyü işleme
- SQLiteDjango kayıtlarının saklanması
Görselleştirme
- Matplotlibdoğruluk, kayıp ve dağılım grafikleri
- seabornkarışıklık matrisi görselleştirmesi


