This project presents an innovative approach to pediatric chest pneumonia classification using deep learning techniques. We address the critical challenge of class imbalance in medical imaging datasets by employing Generative Adversarial Networks (GANs) for synthetic data generation, combined with traditional data augmentation methods. Our methodology demonstrates significant improvements in classification accuracy and model robustness for pneumonia detection in pediatric chest X-rays.
- Introduction
- Methodology
- Dataset
- Model Architecture
- Experimental Setup
- Results
- Demo
- Installation
- Usage
- Project Structure
- Contributing
- Citation
- License
Pneumonia is a leading cause of mortality in children under 5 years globally. Early and accurate diagnosis through chest X-ray analysis is crucial for effective treatment. However, medical imaging datasets often suffer from class imbalance, where normal cases significantly outnumber pneumonia cases. This project addresses this challenge by:
- Data Balancing: Using GANs to generate synthetic normal chest X-ray images
- Data Augmentation: Applying traditional augmentation techniques
- Deep Learning: Implementing a CNN architecture optimized for binary classification
- Model Evaluation: Comprehensive comparison across different data balancing strategies
- Image Resizing: All images resized to 148×148 pixels
- Normalization: Pixel values normalized to [0,1] range
- Grayscale Conversion: Converted to single-channel grayscale images
- Rotation (±35°)
- Width/Height shifts (0.1/0.08)
- Shear transformation (0.2)
- Zoom (0.2)
- Architecture: Deep Convolutional GAN (DCGAN)
- Generator: 4-layer transposed convolution network
- Discriminator: 4-layer convolution network
- Training: 40,000 iterations with RMSprop optimizer
- Output: 2,534 synthetic normal X-ray images
- Integration of augmented and GAN-generated images
- Comprehensive dataset balancing
Our CNN architecture consists of:
- Convolutional Layers: Multiple Conv2D layers with ReLU activation
- Pooling Layers: MaxPooling2D for dimensionality reduction
- Normalization: BatchNormalization for training stability
- Regularization: Dropout layers to prevent overfitting
- Output: Single sigmoid neuron for binary classification
- Source: Kaggle Chest X-Ray Pneumonia Dataset
- Total Images: 5,863 X-ray images
- Classes: Normal, Pneumonia
- Split: Train (5,216), Validation (16), Test (624)
- Image Format: JPEG
- Resolution: Variable (resized to 148×148)
- Training Set:
- Normal: 1,341 images
- Pneumonia: 3,875 images
- Test Set:
- Normal: 234 images
- Pneumonia: 390 images
model = Sequential([
Conv2D(32, (3, 3), input_shape=(148, 148, 1), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
BatchNormalization(),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(1, activation='sigmoid')
])
Hyperparameters:
- Optimizer: Adam
- Loss Function: Binary Crossentropy
- Batch Size: 132
- Epochs: 15-50 (varies by experiment)
- Learning Rate: Default Adam (0.001)
We conducted four comprehensive experiments:
- Baseline: Original imbalanced dataset
- Augmentation: Traditional data augmentation
- GAN Generation: Synthetic data generation
- Combined: Augmentation + GAN generation
- Convolutional Layers: [32,64], [32,64,128], [32,64,128,128], [32,64,128,256], [64,128,256,256]
- Dense Layers: [], [512], [256], [256,256], [512,256], [512,512]
- Dropout Rates: [0.2], [0.5], [0.2,0.2], [0.2,0.5], [0.5,0.5]
- Batch Normalization: True/False
Experiment | Accuracy | Precision | Recall | F1-Score |
---|---|---|---|---|
Baseline (Imbalanced) | 85.26% | 0.85 | 0.85 | 0.85 |
Augmentation | 86.06% | 0.86 | 0.86 | 0.86 |
GAN Generation | 84.78% | 0.85 | 0.85 | 0.85 |
Combined Approach | 87.18% | 0.87 | 0.87 | 0.87 |
- Data Balancing Effectiveness: Combined approach achieved highest accuracy (87.18%)
- GAN Quality: Generated images maintained realistic chest X-ray characteristics
- Model Robustness: Balanced datasets showed improved generalization
- Clinical Relevance: High recall for pneumonia detection (87%)
- Hugging Face Space: Try the model online
- Web Application: http://abdulmanaf12.pythonanywhere.com/
- Real-time chest X-ray classification
- Probability scores for predictions
- User-friendly web interface
- Support for various image formats
Python 3.8+
TensorFlow 2.x
OpenCV
Flask
NumPy
Matplotlib
# Clone the repository
git clone https://github.com/AbdulManaf12/Pediatric-Chest-Pneumonia-Classification-System.git
cd Pediatric-Chest-Pneumonia-Classification-System
# Install dependencies
pip install -r requirements.txt
# Download the pre-trained model weights
# (weights.h5 should be placed in the static/ directory)
python main.py
Navigate to http://localhost:5000
to access the web interface.
from Model import MyModel
# Initialize model
model = MyModel()
# Make prediction (assumes image.png in static/ directory)
prediction, probability = model.predict()
print(f"Prediction: {prediction}, Probability: {probability}")
Run the Jupyter notebooks in the following order:
notebooks/image_generation.ipynb
- GAN training and synthetic data generationnotebooks/Project.ipynb
- Main training pipelinenotebooks/xai_experiment.ipynb
- Explainable AI experiments
├── Model.py # CNN model definition and prediction logic
├── main.py # Flask web application
├── static/ # Static files (CSS, images, model weights)
│ ├── weights.h5 # Pre-trained model weights
│ ├── style.css # Web interface styling
│ └── ...
├── templates/ # HTML templates
│ ├── index.html # Main interface
│ └── results.html # Results page
├── notebooks/ # Jupyter notebooks
│ ├── Project.ipynb # Main training pipeline
│ ├── image_generation.ipynb # GAN implementation
│ └── xai_experiment.ipynb # Explainable AI
├── requirements.txt # Python dependencies
└── README.md # This file
Generator Network:
Dense(image_resize * image_resize * 128) →
Reshape →
Conv2DTranspose(128) → BatchNorm → ReLU →
Conv2DTranspose(64) → BatchNorm → ReLU →
Conv2DTranspose(32) → BatchNorm → ReLU →
Conv2DTranspose(1) → Sigmoid
Discriminator Network:
Conv2D(32) → LeakyReLU →
Conv2D(64) → LeakyReLU →
Conv2D(128) → LeakyReLU →
Conv2D(256) → LeakyReLU →
Flatten → Dense(1) → Sigmoid
- Loading: Multi-threaded image loading with OpenCV
- Preprocessing: Resize, normalize, convert to grayscale
- Augmentation: Real-time augmentation during training
- Generation: Batch generation of synthetic images
- Balancing: Strategic dataset composition
- Accuracy: Overall classification correctness
- Precision: True positive rate for pneumonia detection
- Recall: Sensitivity for pneumonia cases
- F1-Score: Harmonic mean of precision and recall
- Confusion Matrix: Detailed classification breakdown
- Multi-class Classification: Extend to different types of pneumonia
- Advanced Architectures: Implement ResNet, DenseNet, or Vision Transformers
- Federated Learning: Enable privacy-preserving collaborative training
- Real-time Processing: Optimize for mobile deployment
- Clinical Validation: Collaborate with medical institutions for validation
We welcome contributions! Please see our contributing guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
If you use this work in your research, please cite:
@article{manaf2024pediatric,
title={Pediatric Chest Pneumonia Classification: Leveraging Traditional CNN with GAN for Data Balancing},
author={Abdul Manaf, Nimra Mughal},
journal={arXiv preprint arXiv:2024.xxxxx},
year={2024}
}
- Kaggle for providing the chest X-ray pneumonia dataset
- The medical imaging research community
- Open-source contributors to TensorFlow and related libraries
This project is licensed under the MIT License - see the LICENSE file for details.
Disclaimer: This tool is for research and educational purposes only. It should not be used as a substitute for professional medical diagnosis. Always consult with qualified healthcare professionals for medical decisions.