--- license: openrail datasets: - Nj-1111/Glaucoma_Dataset pipeline_tag: image-segmentation --- # EyeeSEE — Glaucoma Segmentation Model **Repository:** `Nj-1111/EyeeSEE` **Dataset:** [`Nj-1111/Glaucoma_Dataset`](https://huggingface.co/datasets/Nj-1111/Glaucoma_Dataset) **Demo:** [`Nj-1111/EyeeSEE` (Spaces)](https://huggingface.co/spaces/Nj-1111/EyeeSEE) --- ## Model Description EyeeSEE is a U-Net segmentation model trained to delineate the **Optic Disc** and **Optic Cup** in retinal fundus photographs for automated glaucoma screening. It is the core inference engine of a Clinical Decision Support System (CDSS) that computes deterministic clinical metrics — vCDR, ISNT rim thickness, and three-tier risk stratification — from predicted segmentation masks. Monte Carlo Dropout is used at inference time to produce a per-prediction uncertainty score, flagging low-confidence cases for clinical review. --- ## Model Architecture | Component | Detail | |---|---| | Architecture | U-Net with skip connections | | Input | Grayscale fundus image, 512 × 512 | | Output | 3-class segmentation map (Background / Optic Disc / Optic Cup) | | Base filters | 64 | | Dropout | Dropout2d, rate = 0.1 | | Parameters | ~31M | | Uncertainty | Monte Carlo Dropout (N passes at inference) | --- ## Training | Detail | Value | |---|---| | Dataset | Nj-1111/Glaucoma_Dataset | | Training images | ~13,300 | | Validation images | ~770 | | Optimizer | Adam, lr = 5e-5 | | Loss | 0.5 × Dice + 0.5 × Weighted CrossEntropy | | Class weights | Background 0.1 · Disc 1.5 · Cup 3.0 | | Hardware | Kaggle GPU (T4) | | Framework | PyTorch 2.x | --- ## Dataset **[`Nj-1111/Glaucoma_Dataset`](https://huggingface.co/datasets/Nj-1111/Glaucoma_Dataset)** Curated from three public sources with a unified preprocessing pipeline: | Source | Description | |---|---| | EyePACS | Large-scale diabetic retinopathy screening dataset | | SMDG | Structured multi-disease glaucoma dataset | | REFUGE2 | Retinal Fundus Glaucoma Challenge (segmentation reference) | **Split:** | Split | Images | |---|---| | Train | ~13,300 | | Validation | ~770 | | Test | ~770 | Each image is labelled as **NRG** (Non-Referable Glaucoma / Normal) or **RG** (Referable Glaucoma). --- ## Clinical Metrics (Phase 3 Pipeline) After segmentation, the following are computed deterministically: **vCDR — Vertical Cup-to-Disc Ratio** Vertical diameter of cup ÷ vertical diameter of disc. Primary glaucoma screening metric. | vCDR | Clinical Interpretation | |---|---| | < 0.65 | Healthy | | 0.65 – 0.80 | Glaucoma Suspect | | > 0.80 | High Risk | **ISNT Rule** Neuro-retinal rim thickness measured in four quadrants. Healthy eyes satisfy: Inferior > Superior > Nasal > Temporal. Violation is an early indicator of glaucomatous damage. **Risk Stratification** Three-tier output: Healthy · Glaucoma Suspect · High Risk. --- ## Checkpoints Checkpoints are saved to `checkpoints/` during training and named: ``` checkpoints/checkpoint_epoch_NNN.pt ``` Each checkpoint contains model weights, optimiser state, scheduler state, validation metrics, and best validation loss. To load the latest checkpoint for inference: ```python from checkpoint_loader import load_model_for_inference from model import UNet model = UNet(in_channels=1, n_classes=3, base_filters=64, dropout=0.3) model = load_model_for_inference( model=model, repo_id="Nj-1111/EyeeSEE", epoch=None, # None = latest token="hf_..." ) ``` --- ## Inference ### Via HuggingFace Spaces UI Visit [huggingface.co/spaces/Nj-1111/EyeeSEE](https://huggingface.co/spaces/Nj-1111/EyeeSEE), upload a fundus image (JPEG or PNG), and click **Analyse**. ### Via Python Client ```python from gradio_client import Client, handle_file client = Client("Nj-1111/EyeeSEE") result = client.predict( file_path=handle_file("fundus.jpg"), api_name="/analyse" ) text_report = result[0] pdf_path = result[1] print(text_report) ``` ### Via REST API ```bash # JSON report curl -X POST https://nj-1111-eyeesee.hf.space/predict \ -F "file=@fundus.jpg" # PDF report curl -X POST https://nj-1111-eyeesee.hf.space/predict/pdf \ -F "file=@fundus.jpg" --output report.pdf ``` ### Programmatic (Python) ```python from phase3pipeline import Phase3Pipeline pipeline = Phase3Pipeline( repo_id="Nj-1111/EyeeSEE", epoch=None, mc_passes=10, token="hf_..." ) import cv2 image = cv2.imread("fundus.jpg") result = pipeline.run(image) print(result["report"]["vcdr"]) print(result["report"]["risk_level"]) ``` --- ## Limitations - Segmentation masks are trained on synthetic circular approximations of the disc and cup. Performance on pathological cases may be reduced until real ground-truth annotations are incorporated. - vCDR thresholds are population-level estimates and do not account for disc size, ethnicity, or myopia. - Eye laterality (nasal/temporal swap between left and right eyes) is not currently handled. ISNT values should be interpreted directionally with caution. - This model has not been validated in a clinical trial. It is a research prototype. --- ## Intended Use | Use | Status | |---|---| | Research and academic study | ✓ Intended | | Preliminary screening assistance | ✓ Intended with supervision | | Clinical diagnosis without ophthalmologist review | ✗ Not intended | | Standalone medical device | ✗ Not intended | --- ## Disclaimer > This model is a **research prototype** and is **NOT a certified medical device**. > All outputs must be validated by a qualified ophthalmologist before any clinical action is taken. > The authors accept no liability for clinical decisions made on the basis of this model's output. --- ## Citation If you use this model or dataset in your research, please cite: ``` @misc{eyeesee2025, author = {Nj-1111}, title = {EyeeSEE: Glaucoma Clinical Decision Support System}, year = {2025}, publisher = {HuggingFace}, url = {https://huggingface.co/Nj-1111/EyeeSEE} } ``` ---