--- 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)") ```