Important!!!!
Read Explainable AI project - pneumonia diagnosis from a dataset of x-rays.pdf for complete and easy to understand project documentation!
A comprehensive deep learning system for pneumonia diagnosis from chest X-ray images using three state-of-the-art CNN architectures (EfficientNetB0, DenseNet121, ResNet50) with Explainable AI (XAI) capabilities through Grad-CAM visualizations.
- Overview
- Features
- Architecture
- Prerequisites
- Installation
- Project Structure
- Usage
- Testing
- API Documentation
- Troubleshooting
- Documentation
- License
This project implements an end-to-end machine learning system for automated pneumonia detection from chest X-ray images. The system employs an ensemble approach using three pre-trained and fine-tuned deep learning models to provide robust and accurate diagnoses, enhanced with explainable AI visualizations to help medical professionals understand model predictions.
For comprehensive documentation including methodology, experimental results, model architecture details, and in-depth analysis, please refer to the PDF document: Explainable AI project - pneumonia diagnosis from a dataset of x-rays.pdf
-
Multi-Model Ensemble: Three state-of-the-art CNN architectures for robust predictions
- EfficientNetB0
- DenseNet121
- ResNet50 (Fine-tuned)
-
Explainable AI (XAI): Grad-CAM visualizations showing which image regions influence predictions
-
Web Interface: User-friendly Django frontend for image upload and result visualization
-
RESTful API: FastAPI backend providing programmatic access to the diagnosis service
-
Real-time Processing: Instant predictions with visual feedback
-
Best Model Selection: Automatic identification of the highest-confidence prediction
The system follows a client-server architecture:
βββββββββββββββββββ
β Django Frontend β (Port 8001)
β (UI/UX) β
ββββββββββ¬βββββββββ
β HTTP/REST
βΌ
βββββββββββββββββββ
β FastAPI Backend β (Port 8002)
β (API Server) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Diagnosis Service β
β - EfficientNetB0 β
β - DenseNet121 β
β - ResNet50 β
β - Grad-CAM XAI β
βββββββββββββββββββ
- Python: 3.10 or higher
- Operating System: Windows, Linux, or macOS
- Memory: Minimum 8GB RAM (16GB recommended for model loading)
- Storage: ~500MB for dependencies + ~300MB for model files
- GPU: Optional but recommended for faster inference (CUDA-compatible GPU)
git clone <repository-url>
cd xai-chest-xray-pneumoniaWindows:
python -m venv .venv
.venv\Scripts\activateLinux/macOS:
python3 -m venv .venv
source .venv/bin/activatepip install -r model_api/requirements.txtBackend dependencies include:
fastapi>=0.104.0- Web framework for APIuvicorn[standard]>=0.24.0- ASGI serverpython-multipart>=0.0.6- File upload supporttensorflow>=2.13.0- Deep learning frameworknumpy>=1.24.0- Numerical computationspillow>=10.0.0- Image processingmatplotlib>=3.7.0- Visualization for Grad-CAMpydantic>=2.0.0- Data validation
pip install -r Django_frontend/requirements.txtFrontend dependencies include:
Django>=4.2.7- Web frameworkPillow>=10.0.0- Image handlingnumpy>=1.24.0- Array operationstensorflow>=2.15.0- (Optional, for client-side processing if needed)
Ensure all three trained models are present in saved_models/successful_models/:
efficientnetb0_fixed.kerasdensenet121_qai.kerasFINETUNED_resnet50_mc_pneumonia_classifier.keras
xai-chest-xray-pneumonia/
βββ Django_frontend/ # Django web application
β βββ diagnosis/ # Main app
β β βββ templates/ # HTML templates
β β βββ static/ # CSS, JavaScript, images
β β βββ views.py # View handlers
β βββ proiectpy/ # Django project settings
β βββ manage.py # Django management script
β
βββ model_api/ # FastAPI backend
β βββ main.py # FastAPI application
β βββ requirements.txt # Backend dependencies
β
βββ Services/ # Core ML services
β βββ xray_diagnosis_service.py # Main diagnosis service
β βββ test_service.py # Service testing utilities
β
βββ Notebooks/ # Jupyter notebooks
β βββ 1_EDA_Data_Prep_and_Model_Training.ipynb
β βββ 2_Fine_Tuning_All_Models.ipynb
β βββ 3_XAI_Grad-CAM.ipynb
β
βββ saved_models/ # Trained model files
β βββ successful_models/ # Production models
β βββ unsuccessful_models/ # Experimental models
β
βββ initial_model_results/ # Training metrics and visualizations
β
βββ run_fastapi.py # FastAPI launcher script
βββ start_fastapi.bat # Windows batch file for FastAPI
βββ start_django.bat # Windows batch file for Django
β
βββ Explainable AI project - pneumonia diagnosis from a dataset of x-rays.pdf
βββ **Complete project documentation (READ THIS!)**
-
Start FastAPI Backend:
start_fastapi.bat
Or manually:
python run_fastapi.py
Server will start on
http://127.0.0.1:8002 -
Start Django Frontend (in a new terminal):
start_django.bat
Or manually:
cd Django_frontend python manage.py runserver 8001Server will start on
http://127.0.0.1:8001 -
Access the Application:
- Open your browser and navigate to
http://127.0.0.1:8001 - Upload a chest X-ray image
- View diagnosis results from all three models with XAI visualizations
- Open your browser and navigate to
Terminal 1 - FastAPI:
cd xai-chest-xray-pneumonia
python run_fastapi.pyTerminal 2 - Django:
cd xai-chest-xray-pneumonia/Django_frontend
python manage.py runserver 8001Visit http://127.0.0.1:8002/ in your browser or use curl:
curl http://127.0.0.1:8002/Expected response:
{
"status": "ok",
"message": "XAI Chest X-Ray API is running and models are loaded."
}Interactive API documentation is available at:
- Swagger UI:
http://127.0.0.1:8002/docs - ReDoc:
http://127.0.0.1:8002/redoc
Using curl:
curl -X POST "http://127.0.0.1:8002/diagnosis" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "file=@/path/to/xray_image.jpeg"- Navigate to
http://127.0.0.1:8001 - Upload a chest X-ray image (JPEG or PNG)
- Click "Analyze Image"
- Verify results show:
- Three model predictions (EfficientNetB0, DenseNet121, ResNet50)
- Diagnosis labels (NORMAL or PNEUMONIA)
- Confidence percentages
- XAI heatmap visualizations
- Best model indicator
{
"results": [
{
"model_name": "EfficientNetB0",
"diagnosis": "PNEUMONIA",
"confidence": 0.838,
"xai_image_base64": "base64_encoded_image_data..."
},
{
"model_name": "DenseNet121",
"diagnosis": "PNEUMONIA",
"confidence": 0.572,
"xai_image_base64": "base64_encoded_image_data..."
},
{
"model_name": "ResNet50",
"diagnosis": "PNEUMONIA",
"confidence": 0.999,
"xai_image_base64": "base64_encoded_image_data..."
}
],
"best_model_name": "ResNet50"
}Health check endpoint.
Response:
{
"status": "ok",
"message": "XAI Chest X-Ray API is running and models are loaded."
}Process a chest X-ray image through all three models.
Request:
- Method:
POST - Content-Type:
multipart/form-data - Body:
file(image file)
Response:
- Status:
200 OK - Body: JSON with results from all three models
See http://127.0.0.1:8002/docs for interactive API documentation.
Issue: FastAPI shows errors loading models
- Solution: Verify model files exist in
saved_models/successful_models/ - Check file permissions
- Ensure sufficient memory (models are ~100-200MB each)
Issue: Port 8002 or 8001 already in use
- Solution:
- Kill existing processes:
netstat -ano | findstr :8002(Windows) - Change ports in
run_fastapi.pyandDjango_frontend/static/js/main.js
- Kill existing processes:
Issue: Browser console shows CORS errors
- Solution: CORS is already configured in
model_api/main.py. Verify:allow_origins=["http://127.0.0.1:8001", "http://localhost:8001"]
Issue: "Failed to fetch" error
- Solution:
- Verify FastAPI is running on port 8002
- Check browser console (F12) for detailed errors
- Ensure image is valid JPEG/PNG format
- Check firewall settings
Issue: All predictions show NORMAL or incorrect results
- Solution:
- Verify image preprocessing matches training pipeline
- Check that models loaded successfully (see FastAPI startup logs)
- Ensure correct class mapping (0=NORMAL, 1=PNEUMONIA)
Issue: Error generating heatmaps
- Solution:
- Models use binary classification (sigmoid output), which is handled automatically
- Check console logs for specific layer errors
- Verify TensorFlow version compatibility
Explainable AI project - pneumonia diagnosis from a dataset of x-rays.pdf
This PDF document contains:
- Complete project overview and objectives
- Dataset description and preprocessing steps
- Model architecture details for all three CNNs
- Training methodology and hyperparameters
- Fine-tuning strategies
- Experimental results and performance metrics
- XAI (Explainable AI) implementation details
- Model comparison and analysis
- Future work and conclusions
The PDF provides comprehensive documentation that complements this technical setup guide.
- EfficientNetB0: Efficient CNN with compound scaling
- DenseNet121: Densely connected convolutional network
- ResNet50: Residual network with 50 layers (fine-tuned)
All models were:
- Pre-trained on ImageNet
- Fine-tuned on chest X-ray pneumonia dataset
- Trained with binary cross-entropy loss
- Using sigmoid activation for binary classification
See the PDF documentation for detailed performance metrics, confusion matrices, ROC curves, and comparison charts.
# Test the diagnosis service
python Services/test_service.py
# Test API endpoints
curl http://127.0.0.1:8002/Models can be retrained using the Jupyter notebooks in the Notebooks/ directory:
1_EDA_Data_Prep_and_Model_Training.ipynb- Initial training2_Fine_Tuning_All_Models.ipynb- Fine-tuning3_XAI_Grad-CAM.ipynb- XAI visualization
- First model load takes 30-60 seconds (models are loaded lazily on first request)
- Models are loaded into memory and persist for subsequent requests
- Image preprocessing is model-specific (EfficientNet, DenseNet, ResNet50 preprocessing functions)
- Grad-CAM visualizations show which image regions influence predictions
This is a research/academic project. For questions or contributions, please refer to the PDF documentation.
[Specify your license here]
[Your name/institution]
- Chest X-Ray dataset providers
- TensorFlow/Keras team
- FastAPI and Django communities
- All contributors to open-source ML libraries
Remember to read Explainable AI project - pneumonia diagnosis from a dataset of x-rays.pdf for complete project documentation!