--- license: mit metrics: - accuracy - precision - recall - f1 base_model: - google/efficientnet-b7 pipeline_tag: image-classification tags: - medical - cervical-cancer - histopathology - undersampling --- # Model Card: EfficientNet-B7 for Cervical Cancer Image Classification This model fine-tunes **EfficientNet-B7** for the task of binary cervical cancer image classification (Negative vs. Positive). It was trained using undersampling to handle class imbalance. --- ## Model Details - **Developed by:** Beijuka / Pathogen Lab - **Funded by:** STI - **Model type:** Convolutional Neural Network (CNN) - **Input type:** Histopathology images (600x600, RGB) - **Output type:** Binary classification (Negative, Positive) - **License:** MIT - **Finetuned from:** `google/efficientnet-b7` --- ## Uses ### Direct Use - classification of cervical cancer images into Negative vs Positive cases. ### Downstream Use - Could be integrated into diagnostic support pipelines. - Adapted for related medical imaging classification tasks. ### Out-of-Scope Use - **Not** a replacement for professional medical diagnosis. - Should not be deployed clinically without regulatory approval. - Not suitable for non-cervical images. --- ## Bias, Risks, and Limitations - The dataset was undersampled → may affect generalizability. - Model performance varies by threshold (see below). - Limited dataset size (19 test images) means results may not generalize. - Potential domain shift if applied to different staining/preparation protocols. ### Recommendations - Validate on larger, more diverse datasets. - Carefully calibrate decision threshold depending on application (screening vs confirmatory). - Use alongside clinical expertise, not as a standalone tool. --- ## How to Get Started ```python from huggingface_hub import hf_hub_download from tensorflow import keras model_path = hf_hub_download( "Beijuka/cancer-efficientnetb7-undersampling", "cancer_efficientnetB7_undersampling.keras" ) model = keras.models.load_model(model_path) ```` --- ## Training Details ### Training Data * Histopathology images of cervical cancer (size 600x600, RGB). * Class imbalance addressed via **undersampling**: * Positive: 84 images * Negative: 100 images * Preprocessing: Normalization + resizing. ### Training Procedure * Optimizer: Adam * Loss: Binary Crossentropy * Batch size: 8 * Learning rate: 1e-3 (initial), 1e-5 (fine-tuning) * Epochs: 50 (initial), 20 (fine-tuning) * EarlyStopping and ModelCheckpoint callbacks used. ### Data Splits (70:20:10) * **Training:** 128 images (70 Negative, 29 Positive Post-stained, 29 Positive Pre-stained) * **Validation:** 37 images (20 Negative, 8 Positive Post-stained, 9 Positive Pre-stained) * **Test:** 19 images (10 Negative, 5 Positive Post-stained, 4 Positive Pre-stained) ### Hardware * GPU: Tesla T4 (14GB) * CUDA Version: 12.4 * Software: TensorFlow/Keras --- ## Evaluation ### Testing Data * Independent test set: 19 images (10 Negative, 9 Positive) ### Metrics at Threshold 0.5 * **Accuracy:** 0.7368 * **Precision (Positive):** 0.8333 * **Recall (Positive):** 0.5556 * **F1-Score (Positive):** 0.6667 #### Confusion Matrix ``` [[9, 1], [4, 5]] ``` #### Sensitivity / Specificity * Negative: Sensitivity 0.90, Specificity 0.56 * Positive: Sensitivity 0.56, Specificity 0.90 ### Threshold Analysis * Best balance observed near 0.45–0.50 * Lower thresholds → higher recall, more false positives * Higher thresholds (>0.65) → model collapses to predicting only one class | Threshold | Accuracy | Precision | Recall | F1 | | --------- | -------- | --------- | ------ | ------ | | 0.00 | 0.4737 | 0.4737 | 1.0000 | 0.6429 | | 0.05 | 0.4737 | 0.4737 | 1.0000 | 0.6429 | | 0.10 | 0.5263 | 0.5000 | 1.0000 | 0.6667 | | 0.15 | 0.5263 | 0.5000 | 0.8889 | 0.6400 | | 0.20 | 0.6316 | 0.5714 | 0.8889 | 0.6957 | | 0.25 | 0.6316 | 0.5833 | 0.7778 | 0.6667 | | 0.30 | 0.6316 | 0.6250 | 0.5556 | 0.5882 | | 0.35 | 0.6316 | 0.6250 | 0.5556 | 0.5882 | | 0.40 | 0.6842 | 0.7143 | 0.5556 | 0.6250 | | 0.45 | 0.7368 | 0.8333 | 0.5556 | 0.6667 | | 0.50 | 0.7368 | 0.8333 | 0.5556 | 0.6667 | | 0.55 | 0.6842 | 0.8000 | 0.4444 | 0.5714 | | 0.60 | 0.6842 | 1.0000 | 0.3333 | 0.5000 | | 0.65 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.70 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.75 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.80 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.85 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.90 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | | 0.95 | 0.5263 | 0.0000 | 0.0000 | 0.0000 | ### Comparison of performance on Pre vs Post-stained images | Comparison | Accuracy | F1-Score | Precision |Recall | | ------------------------------ | -------- | -------- | -------- | ------- | | Pre-stained Prediction | 0.6087 | 0.2703 |0.1613 |0.8333| | Post-stained Prediction | 0.7474 | 0.3441 |0.2222 |0.7619| --- ## Technical Specifications ### Model Architecture * EfficientNet-B7 backbone * Final Dense layer with sigmoid activation for binary classification ### Compute Infrastructure * **Hardware:** Tesla T4 GPU * **Software:** TensorFlow/Keras ---