# biki989/mri-brain-tumour-detection architecture

> Architecture diagram of the GitHub repository biki989/mri-brain-tumour-detection, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/biki989/mri-brain-tumour-detection
- Repository: https://github.com/biki989/mri-brain-tumour-detection

## Overview

This is a PyTorch brain-MRI pipeline and local Flask interface for detecting LGG tumors, segmenting positive slices, and presenting model explanations. The user workflow is upload a TIFF, classify it, conditionally segment it, then display confidence and XAI maps. Separate training and evaluation workflows support the classifier and segmentation ensembles. The README documents model families and XAI capabilities; links below follow sampled source, while unsampled subsystem wiring is omitted.

Main entry points: [`app.py`](https://github.com/biki989/mri-brain-tumour-detection/blob/main/app.py) (Flask app), [`src/explainability/compare.py`](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/compare.py) (Explanation coordinator), [`src/inference.py`](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/inference.py) (Inference orchestration), [`src/dataset.py`](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/dataset.py) (MRI transforms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Clinical interface"]
  node_app["Flask app<br/>[app.py]"]
  node_template["Web interface<br/>[index.html]"]
  node_uploads["Uploaded scans"]
  node_xai_assets["XAI images"]
end

subgraph group_runtime["Inference pipeline"]
  node_inference["Inference orchestration<br/>[inference.py]"]
  node_dataset["MRI transforms<br/>[dataset.py]"]
  node_clf_ensemble["Classifier ensemble<br/>[ensemble.py]"]
  node_seg_ensemble["Segmentor ensemble<br/>[ensemble.py]"]
end

subgraph group_models["Modeling and training"]
  node_classifier["Classifier models<br/>[classifier.py]"]
  node_segmentor["Segmentation models<br/>[segmentor.py]"]
  node_train_clf["Classifier training"]
  node_train_seg["Segmentor training<br/>[train_segmentor.py]"]
end

subgraph group_insight["Evaluation and XAI"]
  node_evaluate["Ensemble evaluation<br/>[evaluate.py]"]
  node_xai["Explanation coordinator<br/>[compare.py]"]
  node_gradcam["Grad-CAM<br/>[gradcam.py]"]
  node_seg_xai["Segmentation XAI"]
end

node_user(("MRI user"))

node_user -->|"uploads TIFF"| node_app
node_app -->|"saves scan"| node_uploads
node_app -->|"runs inference"| node_inference
node_app -->|"requests explanations"| node_xai
node_app -->|"renders results"| node_template
node_app -->|"writes maps"| node_xai_assets
node_inference -->|"transforms image"| node_dataset
node_inference -->|"classifies slice"| node_clf_ensemble
node_inference -->|"segments positive"| node_seg_ensemble
node_clf_ensemble -->|"dispatches models"| node_classifier
node_seg_ensemble -->|"dispatches models"| node_segmentor
node_train_clf -->|"loads samples"| node_dataset
node_train_clf -->|"trains model"| node_classifier
node_train_seg -->|"loads samples"| node_dataset
node_train_seg -->|"trains model"| node_segmentor
node_evaluate -->|"loads evaluation data"| node_dataset
node_evaluate -->|"loads ensembles"| node_inference
node_evaluate -->|"measures classification"| node_clf_ensemble
node_evaluate -->|"measures segmentation"| node_seg_ensemble
node_xai -->|"transforms image"| node_dataset
node_xai -->|"generates heatmap"| node_gradcam
node_xai -->|"generates maps"| node_seg_xai
node_xai -->|"explains classifier"| node_clf_ensemble
node_xai -->|"explains segmentors"| node_seg_ensemble

click node_app "https://github.com/biki989/mri-brain-tumour-detection/blob/main/app.py"
click node_template "https://github.com/biki989/mri-brain-tumour-detection/blob/main/templates/index.html"
click node_uploads "https://github.com/biki989/mri-brain-tumour-detection/tree/main/static/uploads"
click node_xai_assets "https://github.com/biki989/mri-brain-tumour-detection/tree/main/static/xai"
click node_inference "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/inference.py"
click node_dataset "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/dataset.py"
click node_clf_ensemble "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/ensemble.py"
click node_seg_ensemble "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/ensemble.py"
click node_classifier "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/models/classifier.py"
click node_segmentor "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/models/segmentor.py"
click node_train_clf "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/train_classifier.py"
click node_train_seg "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/train_segmentor.py"
click node_evaluate "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/evaluate.py"
click node_xai "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/compare.py"
click node_gradcam "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/gradcam.py"
click node_seg_xai "https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/segmentation_xai.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_template,node_uploads,node_xai_assets,node_user toneBlue
class node_inference,node_dataset,node_clf_ensemble,node_seg_ensemble toneAmber
class node_classifier,node_segmentor,node_train_clf,node_train_seg toneMint
class node_evaluate,node_xai,node_gradcam,node_seg_xai toneRose
```

## Components

### Clinical interface

- [Flask app](https://github.com/biki989/mri-brain-tumour-detection/blob/main/app.py): `app.py`
- [Web interface](https://github.com/biki989/mri-brain-tumour-detection/blob/main/templates/index.html): `templates/index.html`
- [Uploaded scans](https://github.com/biki989/mri-brain-tumour-detection/tree/main/static/uploads): `static/uploads`
- [XAI images](https://github.com/biki989/mri-brain-tumour-detection/tree/main/static/xai): `static/xai`

### Inference pipeline

- [Inference orchestration](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/inference.py): `src/inference.py`
- [MRI transforms](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/dataset.py): `src/dataset.py`
- [Classifier ensemble](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/ensemble.py): `src/ensemble.py`
- [Segmentor ensemble](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/ensemble.py): `src/ensemble.py`

### Modeling and training

- [Classifier models](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/models/classifier.py): `src/models/classifier.py`
- [Segmentation models](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/models/segmentor.py): `src/models/segmentor.py`
- [Classifier training](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/train_classifier.py): `src/train_classifier.py`
- [Segmentor training](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/train_segmentor.py): `src/train_segmentor.py`

### Evaluation and XAI

- [Ensemble evaluation](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/evaluate.py): `src/evaluate.py`
- [Explanation coordinator](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/compare.py): `src/explainability/compare.py`
- [Grad-CAM](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/gradcam.py): `src/explainability/gradcam.py`
- [Segmentation XAI](https://github.com/biki989/mri-brain-tumour-detection/blob/main/src/explainability/segmentation_xai.py): `src/explainability/segmentation_xai.py`

### Other components

- **MRI user**

## Connections

- MRI user → Flask app: uploads TIFF
- Flask app → Uploaded scans: saves scan
- Flask app → Inference orchestration: runs inference
- Flask app → Explanation coordinator: requests explanations
- Flask app → Web interface: renders results
- Flask app → XAI images: writes maps
- Inference orchestration → MRI transforms: transforms image
- Inference orchestration → Classifier ensemble: classifies slice
- Inference orchestration → Segmentor ensemble: segments positive
- Classifier ensemble → Classifier models: dispatches models
- Segmentor ensemble → Segmentation models: dispatches models
- Classifier training → MRI transforms: loads samples
- Classifier training → Classifier models: trains model
- Segmentor training → MRI transforms: loads samples
- Segmentor training → Segmentation models: trains model
- Ensemble evaluation → MRI transforms: loads evaluation data
- Ensemble evaluation → Inference orchestration: loads ensembles
- Ensemble evaluation → Classifier ensemble: measures classification
- Ensemble evaluation → Segmentor ensemble: measures segmentation
- Explanation coordinator → MRI transforms: transforms image
- Explanation coordinator → Grad-CAM: generates heatmap
- Explanation coordinator → Segmentation XAI: generates maps
- Explanation coordinator → Classifier ensemble: explains classifier
- Explanation coordinator → Segmentor ensemble: explains segmentors
