pneumonia_detector / README.md
dlopez350's picture
Create README.md
6c6a390 verified
---
language: en
tags:
- deep-learning
- computer-vision
- medical-imaging
- chest-xray
- pneumonia
- keras
- tensorflow
license: cc-by-4.0
datasets:
- chest-xray-pneumonia
widget:
- text: Upload a chest X-ray image (.jpg or .png)
---
# 🩻 Pneumonia Detection Model (CNN)
## 🧠 Overview
This model is a **Convolutional Neural Network (CNN)** trained to classify **chest X-ray images** as either **Normal** or **Pneumonia**.
It demonstrates the application of **deep learning** to **medical imaging classification** and serves as an **educational and research tool****not** for clinical use.
---
## ⚙️ Model Details
- **Architecture:** Custom CNN (3 convolutional + 2 dense layers)
- **Framework:** TensorFlow / Keras
- **Input size:** 150×150 RGB images
- **Output:** Binary classification — `0 = Normal`, `1 = Pneumonia`
- **Dataset:** *Chest X-Ray Images (Pneumonia)* — [Kermany et al., *Cell* (2018)](http://www.cell.com/cell/fulltext/S0092-8674(18)30154-5)
---
## 📚 Dataset Information
**Source:**
Kermany, D.S., Goldbaum, M., Cai, W. *et al.*
*Identifying Medical Diagnoses and Treatable Diseases by Image-Based Deep Learning*,
*Cell* (2018), 172(5), 1122–1131.e9
[DOI: 10.1016/j.cell.2018.02.010](https://doi.org/10.1016/j.cell.2018.02.010)
**License:** [Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
---
## 🩺 Intended Use
This model is designed for:
- Machine learning and data science education
- Research in medical image analysis
- Prototyping of AI healthcare applications
⚠️ **Disclaimer:**
This model is **not a medical device** and **should not be used for clinical or diagnostic purposes**.
It is provided **solely for educational and research use**.
---
## 🧩 How It Works
1. The user uploads a **chest X-ray image** (`.jpg` or `.png`).
2. The image is resized to **150×150** pixels and normalized to `[0, 1]`.
3. The CNN processes the image and outputs a probability:
- `0 → Normal`
- `1 → Pneumonia`
4. The final classification is the class with the highest confidence score.
---
## 📊 Evaluation Report
### 🧾 Classification Metrics
| Metric | Normal | Pneumonia |
|:--------|:--------:|:-----------:|
| **Precision** | 0.962 | 0.829 |
| **Recall** | 0.659 | 0.985 |
| **F1-score** | 0.783 | 0.900 |
| **Support** | 232 | 389 |
**Overall accuracy:** 0.863
**Macro F1-score:** 0.841
**Weighted F1-score:** 0.856
---
### 📉 ROC Curve
![ROC Curve](https://huggingface.co/dlopez350/pneumonia_detector/resolve/main/roc_curve.png)
**AUC = 0.959**
---
### 📊 Confusion Matrix
![Confusion Matrix](https://huggingface.co/dlopez350/pneumonia_detector/resolve/main/confusion_matrix.png)
| True Label | Predicted Normal | Predicted Pneumonia |
|-------------|------------------|---------------------|
| **Normal** | 153 | 79 |
| **Pneumonia** | 6 | 383 |
---
## 💡 Example Usage
```python
import tensorflow as tf
import numpy as np
from tensorflow.keras.preprocessing import image
# Load model
model = tf.keras.models.load_model("cnn_pneumonia.keras")
# Load and preprocess image
img_path = "test_image.jpg"
img = image.load_img(img_path, target_size=(150, 150))
img_array = image.img_to_array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)
# Predict
prediction = model.predict(img_array)[0][0]
label = "Pneumonia" if prediction > 0.5 else "Normal"
confidence = prediction if prediction > 0.5 else 1 - prediction
print(f"Prediction: {label} ({confidence:.2f} confidence)")
```