Bu proje, CNN kullanarak özellik çıkarma ve sınıflandırma çalışması için hazırlanmıştır. Veri seti olarak CIFAR-10 kullanılmıştır. Kodlar hem Jupyter Notebook hem de Python script olarak verilmiştir.
pip install -r requirements.txt
jupyter notebook YZM304_Proje2_CNN_CIFAR10.ipynbScript olarak çalıştırmak için:
python proje2_cnn_cifar10.pyKod ilk çalıştırmada CIFAR-10 veri setini data/ klasörüne indirir. Sonuçlar outputs/ klasörüne kaydedilir.
YZM304_Proje2_CNN/
├── YZM304_Proje2_CNN_CIFAR10.ipynb
├── proje2_cnn_cifar10.py
├── README.md
├── requirements.txt
├── .gitignore
└── CALISTIRMA_NOTLARI.txt
Bu çalışmanın amacı, görüntü verileri üzerinde evrişimli sinir ağları ile sınıflandırma yapmak, farklı CNN mimarilerini karşılaştırmak ve CNN özellik çıkarımı ile klasik makine öğrenmesi modelini hibrit biçimde kullanmaktır. CIFAR-10, 10 sınıflı 32x32 RGB görüntüler içerdiği için bu proje için uygun bir benchmark veri setidir.
Projede beş model vardır: LeNet-5 benzeri CNN, aynı hiperparametreleri koruyarak BatchNorm ve Dropout eklenmiş CNN, torchvision üzerinden ResNet18, CNN feature extractor + RandomForest hibrit model ve aynı veri setinde eğitilen tam CNN.
CIFAR-10 veri seti train ve test olarak kullanılır. Eğitim verisine RandomHorizontalFlip ve RandomCrop uygulanır. Train ve test görüntüleri tensöre çevrilir ve CIFAR-10 ortalama/std değerleri ile normalize edilir.
Model 1 açık yazılmış LeNet-5 benzeri CNN sınıfıdır. Conv2d, ReLU, AvgPool2d, Flatten ve Linear katmanları kullanılır. Model 2, Model 1'deki convolution ve fully connected boyutlarını korur; ek olarak BatchNorm2d ve Dropout kullanır. Model 3 için torchvision.models.resnet18 kullanılır; CIFAR-10 için ilk convolution katmanı değiştirilir ve maxpool kaldırılır. Model 4'te tam CNN'in feature extractor kısmı ile .npy feature ve label dosyaları üretilir, ardından RandomForestClassifier eğitilir. Model 5 ise daha derin ve uçtan uca eğitilen tam CNN mimarisidir.
Eğitimde nn.CrossEntropyLoss() ve Adam optimizer kullanılır. Varsayılan learning rate 1e-3, batch size 128, epoch sayısı 5 olarak seçilmiştir. Daha güçlü sonuç için epoch sayısı artırılabilir.
Kod çalıştırılınca her model için loss grafiği, accuracy grafiği, karmaşıklık matrisi, sınıflandırma raporu ve sonuç CSV dosyaları otomatik üretilir. Hibrit model için aşağıdaki .npy dosyaları oluşturulur:
outputs/features/X_train_features.npyoutputs/features/y_train_labels.npyoutputs/features/X_test_features.npyoutputs/features/y_test_labels.npy
Genel sonuçlar outputs/results_summary.csv ve outputs/results_summary_with_hybrid.csv dosyalarına yazılır.
LeNet benzeri model basit ve yorumlanabilir bir CNN mimarisidir; fakat CIFAR-10 için kapasitesi sınırlı kalabilir. BatchNorm ve Dropout eklenen ikinci model, aynı temel yapı korunurken daha kararlı eğitim ve daha iyi genelleme sağlayabilir. ResNet18, residual bağlantılar sayesinde daha derin özellikler öğrenebilir ve genellikle basit CNN'lerden daha başarılıdır. Hibrit model, CNN'in öğrendiği feature vektörlerini Random Forest ile sınıflandırır; bu yöntem klasik makine öğrenmesi ile derin öğrenme özelliklerini birleştirir. Tam CNN ise feature extraction ve sınıflandırmayı birlikte optimize ettiği için çoğu durumda hibrit modele göre avantajlı olabilir.
- Krizhevsky, A. (2009). Learning Multiple Layers of Features from Tiny Images.
- LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition.
- He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition.
- PyTorch Documentation: torch.nn, torch.optim, torchvision.datasets, torchvision.models.
- Scikit-learn Documentation: RandomForestClassifier and metrics.