XRay-Classifier / README.md
Sudheer17's picture
Update README.md
940b2c2 verified
|
Raw
History Blame Contribute Delete
9.01 kB
# 🩺 Chest X-Ray Pneumonia Detection using Deep Learning
<div align="center">
![Python](https://img.shields.io/badge/Python-3.10-blue?style=for-the-badge&logo=python)
![TensorFlow](https://img.shields.io/badge/TensorFlow-2.x-orange?style=for-the-badge&logo=tensorflow)
![Keras](https://img.shields.io/badge/Keras-Deep%20Learning-red?style=for-the-badge&logo=keras)
![Flask](https://img.shields.io/badge/Flask-Backend-black?style=for-the-badge&logo=flask)
![Streamlit](https://img.shields.io/badge/Streamlit-Web_App-ff4b4b?style=for-the-badge&logo=streamlit)
![OpenCV](https://img.shields.io/badge/OpenCV-Image_Processing-green?style=for-the-badge&logo=opencv)
![CNN](https://img.shields.io/badge/CNN-Custom_Model-success?style=for-the-badge)
![VGG16](https://img.shields.io/badge/VGG16-Transfer_Learning-blueviolet?style=for-the-badge)
</div>
---
# πŸ“Œ Project Overview
This project is an **AI-powered Chest X-Ray Pneumonia Detection System** that automatically classifies chest X-ray images into:
- βœ… NORMAL
- 🦠 PNEUMONIA
The project demonstrates multiple Deep Learning approaches and compares their performance using:
- Custom CNN (10 Epochs)
- Improved CNN (20 Epochs)
- Transfer Learning (VGG16)
The trained models are deployed using **Flask**, while the frontend is developed using **Streamlit**, creating a complete end-to-end AI medical imaging application.
---
# πŸš€ Features
βœ” Binary Classification
βœ” Three Deep Learning Models
βœ” Custom CNN Architecture
βœ” Improved CNN Architecture
βœ” Transfer Learning using VGG16
βœ” Real-time Image Prediction
βœ” Flask REST Backend
βœ” Streamlit Interactive UI
βœ” Hugging Face Model Hosting
βœ” GPU Training Support
βœ” Model Comparison
βœ” Confidence Score Prediction
βœ” Production Ready
---
# 🧠 Problem Statement
Pneumonia is one of the leading causes of death worldwide.
Radiologists inspect Chest X-rays manually which is:
- Time Consuming
- Error Prone
- Expensive
This project automates the diagnosis process using Deep Learning.
---
# πŸ“‚ Dataset
## Chest X-Ray Dataset
```
Dataset
β”‚
β”œβ”€β”€ train
β”‚ β”œβ”€β”€ NORMAL
β”‚ └── PNEUMONIA
β”‚
β”œβ”€β”€ validation
β”‚ β”œβ”€β”€ NORMAL
β”‚ └── PNEUMONIA
β”‚
└── test
β”œβ”€β”€ NORMAL
└── PNEUMONIA
```
Image Format
- JPG
- JPEG
- PNG
Classes
| Label | Description |
|---------|-------------|
| NORMAL | Healthy Lung |
| PNEUMONIA | Infected Lung |
---
# βš™οΈ Tech Stack
## Programming
- Python
---
## Deep Learning
- TensorFlow
- Keras
---
## Computer Vision
- OpenCV
- NumPy
- Matplotlib
---
## Backend
- Flask
---
## Frontend
- Streamlit
---
## Deployment
- Hugging Face
- Render
---
## Version Control
- Git
- GitHub
---
# πŸ— Complete Project Architecture
```
Chest X-Ray Image
β”‚
β–Ό
Upload Image (UI)
β”‚
β–Ό
Streamlit Frontend
β”‚
β–Ό
Flask REST API
β”‚
β–Ό
Image Preprocessing
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
CNN Model CNN 20 Model VGG16 Model
β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
Prediction Probability
β”‚
β–Ό
NORMAL / PNEUMONIA Result
β”‚
β–Ό
Display Prediction
```
---
# πŸ“Š End-to-End Workflow
```
Dataset
β”‚
β–Ό
Image Loading
β”‚
β–Ό
Image Preprocessing
β”‚
β–Ό
Resize Images (100x100)
β”‚
β–Ό
Convert to Array
β”‚
β–Ό
Normalize Images
β”‚
β–Ό
Train / Validation Split
β”‚
β–Ό
Model Training
β”‚
β–Ό
Model Evaluation
β”‚
β–Ό
Save Best Model
β”‚
β–Ό
Deploy Model
β”‚
β–Ό
User Upload Image
β”‚
β–Ό
Prediction
```
---
# 🧹 Image Preprocessing Pipeline
Each X-Ray undergoes the following preprocessing steps:
### Step 1
Load Image
↓
### Step 2
Convert to Grayscale (CNN Models)
↓
### Step 3
Convert to RGB (VGG16)
↓
### Step 4
Resize
```
100 Γ— 100
```
↓
### Step 5
Convert to NumPy Array
↓
### Step 6
Normalize Pixel Values
```
0 β†’ 255
↓
0 β†’ 1
```
↓
### Step 7
Feed into Model
---
# πŸ€– Model 1
## Custom CNN (10 Epochs)
Architecture
```
Input (100Γ—100Γ—1)
↓
Conv2D (64)
↓
MaxPooling
↓
Dropout
↓
Conv2D (128)
↓
MaxPooling
↓
Dropout
↓
Conv2D (256)
↓
MaxPooling
↓
Dropout
↓
Flatten
↓
Dense (64)
↓
Dropout
↓
Dense (1)
↓
Sigmoid
```
Loss
```
Binary Crossentropy
```
Optimizer
```
Adam
```
Epochs
```
10
```
---
# πŸ€– Model 2
## Improved CNN (20 Epochs)
Architecture
```
Input
↓
Conv2D (64)
↓
ReLU
↓
MaxPooling
↓
Dropout
↓
Conv2D (128)
↓
ReLU
↓
MaxPooling
↓
Dropout
↓
Conv2D (256)
↓
ReLU
↓
MaxPooling
↓
Dropout
↓
Flatten
↓
Dense (64)
↓
Dropout
↓
Dense (1)
↓
Sigmoid
```
Epochs
```
20
```
Optimizer
```
Adam
```
Loss
```
Binary Crossentropy
```
---
# πŸ€– Model 3
## Transfer Learning (VGG16)
Pretrained
```
ImageNet
```
Frozen Layers
```
All VGG16 Convolution Layers
```
Custom Head
```
Flatten
↓
Dense (256)
↓
Dense (128)
↓
Dense (64)
↓
Dense (1)
↓
Sigmoid
```
Callbacks
- ModelCheckpoint
- EarlyStopping
---
# 🧠 Why VGG16?
Instead of training from scratch,
VGG16 already knows how to detect
- Edges
- Shapes
- Textures
- Patterns
Only the classifier is trained on Chest X-rays.
This greatly improves performance while reducing training time.
---
# πŸ“ Saved Models
```
model_xray.h5
```
Custom CNN
---
```
model_pre.h5
```
Improved CNN
---
```
best_model.keras
```
Best Transfer Learning Model
---
# πŸ“ˆ Training Strategy
- GPU Training
- Batch Size = 4 (CNN)
- Batch Size = 32 (VGG16)
- Validation Dataset
- Binary Crossentropy
- Adam Optimizer
- Early Stopping
- Model Checkpoint
---
# πŸ“Š Prediction Pipeline
```
Upload Image
↓
Read Image
↓
Resize
↓
Preprocess
↓
Load Model
↓
Predict Probability
↓
Threshold = 0.5
↓
NORMAL
or
PNEUMONIA
```
---
# 🌐 Deployment Architecture
```
User
β”‚
β–Ό
Streamlit Frontend
β”‚
β–Ό
Flask Backend
β”‚
β–Ό
Load Selected Model
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό β–Ό
CNN10 CNN20 VGG16
β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β–Ό
Prediction Engine
β”‚
β–Ό
Display Result
```
---
# πŸ“‚ Project Structure
```
Chest-XRay-Pneumonia-Detection
β”‚
β”œβ”€β”€ app.py
β”œβ”€β”€ config.py
β”œβ”€β”€ predictor.py
β”œβ”€β”€ utils.py
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ README.md
β”‚
β”œβ”€β”€ models
β”‚ β”œβ”€β”€ model_xray.h5
β”‚ β”œβ”€β”€ model_pre.h5
β”‚ └── best_model.keras
β”‚
β”œβ”€β”€ static
β”‚
β”œβ”€β”€ templates
β”‚
β”œβ”€β”€ css
β”‚
β”œβ”€β”€ dataset
β”‚
└── screenshots
```
---
# ▢️ Installation
Clone Repository
```bash
git clone https://github.com/yourusername/Chest-XRay-Pneumonia-Detection.git
```
Install Dependencies
```bash
pip install -r requirements.txt
```
Run Flask
```bash
python app.py
```
Run Streamlit
```bash
streamlit run app.py
```
---
# πŸ–₯ Example Prediction
Input
```
Chest X-Ray Image
```
↓
Model Prediction
```
Probability : 0.9821
Prediction :
🦠 PNEUMONIA
```
---
# πŸ“ˆ Future Improvements
- EfficientNet
- ResNet50
- DenseNet121
- Grad-CAM Heatmaps
- Multi-Class Disease Detection
- DICOM Support
- Cloud Deployment
- Docker
- CI/CD Pipeline
- REST API Authentication
---
# πŸ‘¨β€πŸ’» Author
**Sudheer Muthyala**
B.Tech – Electronics and Communication Engineering
Machine Learning | Deep Learning | Computer Vision | Python | Flask | Streamlit
GitHub:
https://github.com/M-Sudheer18
---
# ⭐ If you found this project helpful
Please consider giving this repository a ⭐ on GitHub.
It motivates future improvements and helps others discover the project.