Chest X-Ray Pneumonia Detection, göğüs röntgeni görüntülerini NORMAL veya PNEUMONIA olarak sınıflandırmanın iki yolunu karşılaştıran bir Python projesidir: elle tasarlanmış (handcrafted) ve piksel tabanlı özelliklere dayanan klasik bir makine öğrenmesi pipeline'ı ile önceden eğitilmiş bir ResNet18'e ince ayar (fine-tuning) yapan bir derin öğrenme pipeline'ı. README'ye göre proje eğitim ve deney amaçlıdır, klinik bir ürün değildir ve tıbbi karar vermede kullanılmamalıdır.
Proje ne yapıyor?
Depo, Kaggle tarzı göğüs röntgeni klasör yapısı üzerinde iki ayrı ikili sınıflandırıcıyı eğitir ve değerlendirir; sınıf klasörlerinin adı tam olarak NORMAL ve PNEUMONIA olmalıdır. Klasik pipeline her görüntüyü birleşik bir özellik vektörüne dönüştürür ve üç model eğitir: RBF çekirdekli bir SVM, bir RandomForest ve SVM, RandomForest ile GradientBoosting'in soft voting ile birleştiği bir topluluk (ensemble) modeli. Derin öğrenme pipeline'ı ResNet18'e ince ayar yapar ve Grad-CAM ısı haritaları üretir. Birleşik çalıştırıcı main.py ikisini de çalıştırır, en iyi klasik modeli F1 skoruna göre seçer ve yan yana bir karşılaştırma grafiği kaydeder. Her iki pipeline da doğruluk (accuracy), duyarlılık (sensitivity), özgüllük (specificity), F1 skoru, AUC-ROC, karışıklık matrisi ve çıkarım süresini raporlar.
İki yaklaşımın arka planı için Makine Nasıl Öğreniyor? ve Derin Öğrenme Nedir? yazılarına bakabilirsin.
Nasıl çalışıyor?
Klasik pipeline gri tonlamalı görüntüleri yükler, 256 x 256 boyutuna getirir, CLAHE kontrast iyileştirmesi ve Gauss bulanıklığıyla gürültü azaltma uygular; ardından GLCM ve LBP doku özellikleri, histogram istatistikleri, HOG tanımlayıcıları, uzamsal ve kenar istatistikleri ile 128 x 128 görüntülerden düzleştirilmiş piksel değerlerini çıkarır. Özellikler standartlaştırılır ve sınıflandırıcılar eğitilmeden önce PCA ile 300 bileşene indirgenir.
Derin öğrenme pipeline'ı görüntüleri 224 x 224 boyutuna getirir, veri artırma (augmentation) ve ImageNet normalizasyonu uygular, IMAGENET1K_V1 ağırlıklı ResNet18'e ince ayar yapar; başlık olarak Dropout(0.4) ve tek bir doğrusal çıkış eklenir. Eğitimde BCEWithLogitsLoss ve Adam kullanılır; varsayılanlar 20 epoch, 32 batch boyutu ve 5e-5 öğrenme oranıdır, CUDA varsa GPU'da çalışır. En düşük doğrulama kaybına sahip checkpoint saklanır.
Tasarım kararları neler?
Derin öğrenme eğitim kümesindeki sınıf dengesizliği WeightedRandomSampler ile ele alınır; eğitim görüntüleri rastgele yatay çevirme, döndürme, afin öteleme ile parlaklık ve kontrast değişimleriyle artırılır. Sabit 0,5 eşiği yerine iki pipeline da karar eşiğini ayarlar: klasik pipeline eşiği eğitim kümesinde 5 katlı çapraz doğrulamayla seçer; derin model ise eğitim kümesi tahminlerini kullanır, duyarlılık ve özgüllükte 0,90'a ulaşmaya çalışır, olmazsa G-mean açısından en iyi eşiğe döner. model.layer4'ün son bloğu üzerinden hesaplanan Grad-CAM, her iki sınıftan örnek test görüntüleri için yorumlanabilirlik amaçlı ısı haritaları üretir. Karşılaştırma raporu farklı hedefler kullanır: klasik metrikler için 0,80, derin öğrenme metrikleri için 0,90.
Sınırlamaları neler?
README bunları açıkça sıralar. Betikler, çalıştırmadan önce düzenlenmesi gereken sabit (hardcoded) mutlak Windows yolları kullanır; depoda requirements.txt veya bağımlılık kilit dosyası yoktur ve tek bir yeni görüntü için tahmin yapan bir betik bulunmaz. Her iki pipeline'da da eşik seçimi yedek olarak test kümesi bilgisini kullanabilir; bu yüzden raporlanan test metrikleri katı bir held-out kıyaslaması olarak değil, deneysel sonuçlar olarak okunmalıdır. Klasik pipeline, duyarlılık ya da özgüllük 0,80'in altında kalırsa test kümesindeki bir çalışma noktasını benimseyebilir. Depo sonuçlarını sayı olarak değil grafik olarak kaydeder; bu yüzden bu sayfada hiçbir sayısal sonuç yer almaz. Proje eğitim amaçlıdır ve tıbbi kararlar için kullanılmamalıdır.
Denemek veya kodu okumak için nereye bakmalı?
Kaynak kod MIT lisansıyla GitHub'da. Veri kümesi depoya dahil değildir: betikler Kaggle tarzı bir göğüs röntgeni klasörü bekler (derin öğrenme pipeline'ı train, val ve test; klasik pipeline ise train ve test kullanır). Kaydedilmiş grafikler (ön işleme, eğitim geçmişi, değerlendirme, Grad-CAM görselleri, karşılaştırma grafiği) results klasöründe. README Python 3.10+ ve elle kurulum önerir; ardından tek komut tüm karşılaştırmayı çalıştırır:
pip install numpy matplotlib opencv-python scikit-image scikit-learn seaborn pillow torch torchvision
python3 main.py
Bunun gibi başka çalışmalar için Projeler sayfasına bakabilirsin.
Tek cümlelik versiyonu
Chest X-Ray Pneumonia Detection, göğüs röntgenlerini NORMAL veya PNEUMONIA olarak sınıflandırmak için klasik bir makine öğrenmesi pipeline'ını ince ayarlı bir ResNet18 ile karşılaştırır, Grad-CAM ısı haritaları ekler ve klinik bir araç değil, eğitim amaçlı bir deneydir.