Medical AI Project

Chest X-Ray 20-Class Prediction

A multi-class medical imaging system for diagnosing 20 thoracic conditions from chest radiographs using EfficientNet-B0 transfer learning and advanced preprocessing. networks, transfer learning, and explainable visualizations to support faster and more reliable clinical screening.

20-Class Classification NIH Chest X-ray 20 Labels Transfer Learning Medical Imaging
20
Diagnostic Classes
224×224
Image Resolution
EfficientNet-B0
Transfer Learning Model
20 Labels
Expected Accuracy

Project Overview

This project uses the NIH Chest X-ray dataset containing 51,043 training images and 20 diagnostic classes, including Atelectasis, Cardiomegaly, Pneumonia, Pneumothorax, and No Finding. Images are resized to 224×224, augmented, and used to fine-tune EfficientNet-B0 with a custom classification head. The model outputs one of 20 possible thoracic diagnoses.

Diagnostic Examples

Representative visualizations highlighting the contrast between healthy lungs and pneumonia-affected regions.

Normal X-ray Pneumonia X-ray

Pipeline Architecture

X-Ray Images
Preprocessing
Augmentation
EfficientNet-B0
20-Class Prediction

Key Code Snippets

Image Preprocessing

transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485], std=[0.229])
])

Data Augmentation

train_transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(10),
    transforms.Resize((224, 224)),
    transforms.ToTensor()
])

Model Definition

base_model = EfficientNetB0(weights="imagenet", include_top=False,
    input_shape=(224, 224, 3))

x = GlobalAveragePooling2D()(base_model.output)
x = Dropout(0.4)(x)
outputs = Dense(20, activation="softmax")(x)
model = Model(base_model.input, outputs)

Training Loop

for images, labels in train_loader:
    outputs = model(images)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

Prediction

with torch.no_grad():
    probs = torch.softmax(model(x), dim=1)
    pred = torch.argmax(probs, dim=1)

Model Performance

Evaluation Metrics

  • Accuracy: Classification accuracy across 20 thoracic conditions
  • Precision: Positive prediction reliability
  • Recall: Pneumonia detection sensitivity
  • F1 Score: Precision-recall balance
  • ROC-AUC: Threshold-independent performance

Dataset Summary

Training Samples: 51,043
Test Samples: 17,015
Classes: 20 thoracic conditions
Input Shape: 224 × 224 × 3

Included labels: Atelectasis, Cardiomegaly, Consolidation, Edema, Effusion, Emphysema, Fibrosis, Hernia, Infiltration, Mass, Nodule, Pleural Thickening, Pneumonia, Pneumothorax, Pneumoperitoneum, Pneumomediastinum, Subcutaneous Emphysema, Tortuous Aorta, Calcification of the Aorta, and No Finding.

Technologies Used

Python PyTorch Torchvision OpenCV NumPy Matplotlib

Real Images from the Notebook

These are actual figures extracted directly from the Jupyter notebook, including dataset samples, plots, and model visualizations.

Notebook image 1 Notebook image 2 Notebook image 3