Skip to content

Repository files navigation

Blood Cell Classification CNN

A CNN built from scratch (no pretrained models) to classify 8 types of blood cells from microscopic images, achieving 93.8% accuracy on a confidential hidden test set.

Overview

This project was completed as part of Deep Learning Fundamentals (COMP SCI 7318) at the University of Adelaide. The task was to design, implement, and evaluate a deep learning model for classifying microscopic blood cell images into 8 categories (Basophil, Eosinophil, Erythroblast, Immature Granulocyte, Lymphocyte, Monocyte, Neutrophil, Platelet), using 3,200 training images.

Key Results

Model Parameters Epochs Val Accuracy
SVM (baseline) N/A - 69.38%
Simple CNN (baseline) 10,344 30 81.25%
Main model (BatchNorm + Dropout) 163,848 30 87.97%
Main model (extended training) 163,848 50 90.16%
Final model (BatchNorm only) 163,848 30 96.25%

Hidden test set (GradeScope autograder): 93.8%

Approach

  • Designed a 3-block CNN (3→32→64→128 channels) with 2 fully-connected layers, built entirely from scratch in PyTorch.
  • Applied data augmentation (horizontal flip, rotation, colour jitter) tailored to microscope image characteristics.
  • Compared against SVM and a simple CNN baseline to contextualise performance.
  • Ran a systematic ablation study on BatchNorm and Dropout, finding that Dropout caused over-regularisation on this dataset.
  • Verified the finding wasn't due to undertraining by running the BatchNorm+Dropout model for an extra 20 epochs (50 total) — it still underperformed the BatchNorm-only model by 6.09%p, despite the additional training time.

Key Finding

More regularisation isn't always better. On this relatively small, well-balanced dataset, BatchNorm alone (combined with data augmentation) provided sufficient regularisation, while adding Dropout actively hurt performance by over-constraining the model's representational capacity — a pattern confirmed by both extended training and the final hidden test set result.

Tech Stack

Python, PyTorch, scikit-learn, NumPy

Report

Full methodology, related work, and discussion available in report.pdf, main.ipynb.

About

An 8-class CNN built from scratch in PyTorch to classify blood cell types, achieving 93.8% accuracy on a hidden test set, with a systematic ablation study on BatchNorm and Dropout.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages