
## 1. Bare-bones project definition

**Input:**
A retinal fundus image.

**Output:**

1. `Image quality` → Accept / Reject
2. `DR grade` → Level 0–4
3. `Referable DR` → Yes / No
4. `Confidence`
5. `Explanation` → Grad-CAM / lesion evidence
6. Eventually: an automated screening report


```text
Fundus Image
     │
     ▼
[Preprocessing]
     │
     ▼
[Image Quality Check]
     │
     ├── Poor → Reject / Recapture
     │
     ▼
[DR Classification Model]
     │
     ├── Grade 0
     ├── Grade 1
     ├── Grade 2
     ├── Grade 3
     └── Grade 4
     │
     ▼
[Referable?]
     │
     ▼
[Grad-CAM + Confidence]
     │
     ▼
[Screening Report]
```

The segmentation/lesion-detection components can then be added incrementally.

---

# 2. Split the project into modules

```text
ml/
│
├── data/
│   ├── raw/
│   ├── processed/
│   ├── train/
│   ├── validation/
│   └── test/
│
├── preprocessing/
│   ├── quality_assessment
│   ├── illumination_normalization
│   ├── denoising
│   └── enhancement
│
├── models/
│   ├── quality_model/
│   ├── dr_classifier/
│   ├── lesion_detection/
│   └── segmentation/
│
├── training/
│   ├── train_quality_model
│   ├── train_classifier
│   └── evaluate
│
├── explainability/
│   ├── gradcam
│   ├── confidence
│   └── lesion_evidence
│
├── pipeline/
│   └── inference
│
├── reports/
│   └── report_generation
│
├── simulink/
│
├── evaluation/
│   ├── metrics
│   ├── confusion_matrix
│   └── benchmark_comparison
│
└── README.md
```
---

# 3. First milestone

### Milestone 1 — Minimum viable ML system


```text
Image
 ↓
Preprocessing
 ↓
DR classifier
 ↓
0–4 prediction
 ↓
Referable / non-referable
 ↓
Confidence
```
Just:

> **Given a fundus image, can our model reliably classify its DR severity?**

---

# 4. Dataset

We need images with **ground-truth DR severity labels** corresponding as closely as possible to:

```text
0 → No DR
1 → Mild NPDR
2 → Moderate NPDR
3 → Severe NPDR
4 → Proliferative DR
```

The problem statement explicitly expects this five-level classification. 

For the initial prototype, the most important dataset properties are:

* fundus photographs
* severity labels
* sufficient samples per class
* preferably publicly documented
* preferably with established use in DR research
* train/test separation that prevents leakage

**Do not start training until the dataset and label mapping are written down.**

---

# 5. Two separate ML problems


### Problem A — 5-class severity

```text
Image → {0,1,2,3,4}
```

### Problem B — screening decision

```text
Image → {Non-referable, Referable}
```

where:

```text
0, 1 → Non-referable
2, 3, 4 → Referable
```

The problem statement specifically defines Level 2+ as referable. 

Our model can therefore produce:

```text
Predicted class: 3
Confidence: 0.87

Referable DR: YES
```

---

# 6. Model plan

Use transfer learning.

Conceptually:

```text
Pretrained CNN
      │
      ▼
Fundus image
      │
      ▼
Feature extraction
      │
      ▼
Classification head
      │
      ▼
5 DR classes
```

Possible backbone families can be decided later based on MATLAB support and compute availability.

Our initial experiment should answer:

> Can a pretrained image-classification network fine-tuned on the chosen dataset achieve useful DR classification performance?

Only after that should we start experimenting with architectures.

---

# 7. Preprocessing pipeline

```text
Raw image
   ↓
Resize
   ↓
Crop / remove irrelevant borders
   ↓
Normalize
   ↓
Optional contrast enhancement
   ↓
Model
```

Later we'll investigate:

```text
CLAHE
illumination normalization
denoising
color normalization
etc.
```

The problem statement specifically calls for CLAHE, illumination normalization and denoising as possible enhancement techniques. 

---

# 8. Image-quality module

This should be a separate model/module rather than mixing it into the DR classifier initially.

Its job:

```text
Fundus image
      ↓
Quality assessment
      ↓
 ┌───────────────┐
 │               │
Good          Ungradeable
 │               │
 ▼               ▼
DR model       Reject
```

Initially, we can even implement a basic rule-based quality check before training a dedicated quality model.

Eventually:

```text
Quality Model

Input image
     ↓
Quality features
     ↓
     ├── Focus
     ├── Illumination
     ├── Field of view
     └── Overall gradability
     ↓
Gradeable / Ungradeable
```

This is important because the problem specifically targets variable-quality portable-camera images. 

---

# 9. One-at-a-time lesion detection

The statement asks for:

* optic disc/fovea localization
* vessel segmentation
* microaneurysm detection
* exudate segmentation
* hemorrhage classification
* neovascularization detection


### Phase 1

```text
Fundus → DR severity
```

### Phase 2

```text
Fundus → DR severity
       ↘
        lesion evidence
```

### Phase 3

```text
Fundus
 ├── optic disc/fovea
 ├── vessels
 ├── microaneurysms
 ├── exudates
 ├── hemorrhages
 └── neovascularization
```

---

# 10. Explainability 

Once we have:

```text
Image → prediction
```

add:

```text
Image
  ↓
Classifier
  ↓
Prediction
  +
Grad-CAM
  ↓
Heatmap
```

The intended question is:

> **What part of the retinal image caused the model to make this prediction?**

Then eventually correlate those regions with actual lesions.

The problem statement explicitly requests Grad-CAM, lesion-level evidence and calibrated confidence. 

So the eventual output could look conceptually like:

```text
DR Grade: 3
Confidence: 91%

Referable DR: YES

Evidence:
 ┌──────────────────────┐
 │ retinal photograph   │
 │       +              │
 │    Grad-CAM          │
 │      overlay         │
 └──────────────────────┘
```

---

# 11. Evaluation

For the **5-class problem**, track:

```text
Accuracy
Precision
Recall
F1
Confusion matrix
```

For the **referable DR problem**, prioritize:

```text
Sensitivity
Specificity
ROC-AUC
PR-AUC
```

The problem statement's explicit targets are:

```text
Sensitivity > 90%
Specificity > 85%
```

for referable DR. 


```text
                    Result
--------------------------------
Sensitivity          XX.XX%
Specificity          XX.XX%
ROC-AUC              X.XXX
Accuracy             XX.XX%
F1                   X.XXX
```

---

# 12. First experiment

```text
Dataset
   ↓
Train / validation / test split
   ↓
Resize + normalize
   ↓
Pretrained CNN
   ↓
5-class classifier
   ↓
Train
   ↓
Evaluate
```

Record:

```text
Dataset version
Number of images
Class distribution
Image resolution
Preprocessing
Model architecture
Learning rate
Batch size
Epochs
Training time
Validation metrics
Test metrics
```

---

# 13. Scientific iteration

Your experiment progression can be:

```text
EXP-001
Baseline CNN
       ↓
EXP-002
+ preprocessing
       ↓
EXP-003
+ augmentation
       ↓
EXP-004
different backbone
       ↓
EXP-005
class imbalance handling
       ↓
EXP-006
hyperparameter tuning
       ↓
EXP-007
referable-DR optimization
       ↓
EXP-008
Grad-CAM
       ↓
EXP-009
quality assessment
       ↓
EXP-010
integrated pipeline
```

---

# 14. Backlog

For the initial skeleton, explicitly put these in the backlog:

*  Simulink resource optimization
*  Telemedicine bandwidth simulation
*  Automated clinical report generation
*  Full lesion segmentation suite
*  Neovascularization detection
*  Ophthalmologist validation interface
*  Deployment infrastructure
*  Mobile/web application

They're part of the eventual solution, but they're **downstream of the fundamental ML pipeline**.

The problem statement ultimately expects the integrated pipeline plus Simulink simulation and benchmark validation. 

---
