# jhansi-07-10/efficiennetb0-vit-reasoning architecture

> Architecture diagram of the GitHub repository jhansi-07-10/efficiennetb0-vit-reasoning, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jhansi-07-10/efficiennetb0-vit-reasoning
- Repository: https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning

## Overview

SkinScan AI is a skin-lesion classification application backed by a hybrid EfficientNet-B0/ViT model. The primary workflow runs from image upload through preprocessing and prediction to class, confidence, risk guidance, probability visualization, and a downloadable PDF report. Separate training and evaluation workflows prepare HAM10000 data, train the model, and calculate metrics. The README also documents class-imbalance handling and seven disease categories. The tree includes no dataset or checkpoint files, so their storage locations and availability cannot be verified from the sampled source.

Main entry points: [`Skin_Cancer_Detection/src/model_def.py`](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py) (Hybrid classifier), [`Skin_Cancer_Detection/src/train.py`](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py) (Training workflow), [`Skin_Cancer_Detection/src/evaluate.py`](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/evaluate.py) (Evaluation workflow), [`Skin_Cancer_Detection/app.py`](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py) (Streamlit app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["User application"]
  node_app["Streamlit app<br/>[app.py]"]
  node_guidance["Risk guidance<br/>[app.py]"]
  node_report["PDF report<br/>[app.py]"]
end

subgraph group_inference["Prediction"]
  node_predictor["Predictor<br/>[predict.py]"]
  node_preprocess["Image preprocessing<br/>[predict.py]"]
end

subgraph group_model["Model architecture"]
  node_hybrid_model["Hybrid classifier<br/>[model_def.py]"]
  node_cnn["EfficientNet-B0<br/>[model_def.py]"]
  node_bridge_vit["Feature bridge and ViT<br/>[model_def.py]"]
  node_classifier["Seven-class head<br/>[model_def.py]"]
end

subgraph group_ml_workflows["Training and evaluation"]
  node_trainer["Training workflow<br/>[train.py]"]
  node_splitter["Stratified split<br/>[utils.py]"]
  node_dataset_loader["HAM10000 loader<br/>[dataset.py]"]
  node_sampler["Class-balanced sampler<br/>[train.py]"]
  node_checkpoint[("Model checkpoint<br/>[train.py]")]
  node_evaluator["Evaluation workflow<br/>[evaluate.py]"]
  node_metrics["Metrics and confusion matrix<br/>[evaluate.py]"]
end

node_user(("Image submitter"))
node_ham_data[("HAM10000 images and metadata")]

node_user -->|"uploads image"| node_app
node_app -->|"requests prediction"| node_predictor
node_predictor -->|"transforms image"| node_preprocess
node_preprocess -->|"provides tensor"| node_hybrid_model
node_predictor -->|"runs inference"| node_hybrid_model
node_hybrid_model -->|"extracts features"| node_cnn
node_hybrid_model -->|"aligns and attends"| node_bridge_vit
node_hybrid_model -->|"classifies features"| node_classifier
node_predictor -->|"returns probabilities"| node_app
node_app -->|"derives risk details"| node_guidance
node_app -->|"generates report"| node_report
node_trainer -->|"requests data split"| node_splitter
node_trainer -->|"creates datasets"| node_dataset_loader
node_splitter -->|"reads metadata"| node_ham_data
node_dataset_loader -->|"reads images"| node_ham_data
node_trainer -->|"balances classes"| node_sampler
node_trainer -->|"trains model"| node_hybrid_model
node_trainer -->|"saves weights"| node_checkpoint
node_evaluator -->|"requests validation split"| node_splitter
node_evaluator -->|"creates validation set"| node_dataset_loader
node_evaluator -->|"evaluates model"| node_hybrid_model
node_evaluator -->|"loads weights"| node_checkpoint
node_evaluator -->|"writes evaluation results"| node_metrics

click node_app "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py"
click node_guidance "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py"
click node_report "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py"
click node_predictor "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/predict.py"
click node_preprocess "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/predict.py"
click node_hybrid_model "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py"
click node_cnn "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py"
click node_bridge_vit "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py"
click node_classifier "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py"
click node_trainer "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py"
click node_splitter "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/utils.py"
click node_dataset_loader "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/dataset.py"
click node_sampler "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py"
click node_checkpoint "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py"
click node_evaluator "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/evaluate.py"
click node_metrics "https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/evaluate.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_guidance,node_report toneBlue
class node_predictor,node_preprocess,node_ham_data toneAmber
class node_hybrid_model,node_cnn,node_bridge_vit,node_classifier toneMint
class node_trainer,node_splitter,node_dataset_loader,node_sampler,node_checkpoint,node_evaluator,node_metrics toneRose
class node_user toneIndigo
```

## Components

### User application

- [Streamlit app](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py): `Skin_Cancer_Detection/app.py`
- [Risk guidance](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py): `Skin_Cancer_Detection/app.py`
- [PDF report](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/app.py): `Skin_Cancer_Detection/app.py`

### Prediction

- [Predictor](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/predict.py): `Skin_Cancer_Detection/src/predict.py`
- [Image preprocessing](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/predict.py): `Skin_Cancer_Detection/src/predict.py`

### Model architecture

- [Hybrid classifier](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py): `Skin_Cancer_Detection/src/model_def.py`
- [EfficientNet-B0](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py): `Skin_Cancer_Detection/src/model_def.py`
- [Feature bridge and ViT](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py): `Skin_Cancer_Detection/src/model_def.py`
- [Seven-class head](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/model_def.py): `Skin_Cancer_Detection/src/model_def.py`

### Training and evaluation

- [Training workflow](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py): `Skin_Cancer_Detection/src/train.py`
- [Stratified split](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/utils.py): `Skin_Cancer_Detection/src/utils.py`
- [HAM10000 loader](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/dataset.py): `Skin_Cancer_Detection/src/dataset.py`
- [Class-balanced sampler](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py): `Skin_Cancer_Detection/src/train.py`
- [Model checkpoint](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/train.py): `Skin_Cancer_Detection/src/train.py`
- [Evaluation workflow](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/evaluate.py): `Skin_Cancer_Detection/src/evaluate.py`
- [Metrics and confusion matrix](https://github.com/jhansi-07-10/efficiennetb0-vit-reasoning/blob/main/Skin_Cancer_Detection/src/evaluate.py): `Skin_Cancer_Detection/src/evaluate.py`

### Other components

- **Image submitter**
- **HAM10000 images and metadata**

## Connections

- Image submitter → Streamlit app: uploads image
- Streamlit app → Predictor: requests prediction
- Predictor → Image preprocessing: transforms image
- Image preprocessing → Hybrid classifier: provides tensor
- Predictor → Hybrid classifier: runs inference
- Hybrid classifier → EfficientNet-B0: extracts features
- Hybrid classifier → Feature bridge and ViT: aligns and attends
- Hybrid classifier → Seven-class head: classifies features
- Predictor → Streamlit app: returns probabilities
- Streamlit app → Risk guidance: derives risk details
- Streamlit app → PDF report: generates report
- Training workflow → Stratified split: requests data split
- Training workflow → HAM10000 loader: creates datasets
- Stratified split → HAM10000 images and metadata: reads metadata
- HAM10000 loader → HAM10000 images and metadata: reads images
- Training workflow → Class-balanced sampler: balances classes
- Training workflow → Hybrid classifier: trains model
- Training workflow → Model checkpoint: saves weights
- Evaluation workflow → Stratified split: requests validation split
- Evaluation workflow → HAM10000 loader: creates validation set
- Evaluation workflow → Hybrid classifier: evaluates model
- Evaluation workflow → Model checkpoint: loads weights
- Evaluation workflow → Metrics and confusion matrix: writes evaluation results
