# bundasmanu/skin_mnist architecture

> Architecture diagram of the GitHub repository bundasmanu/skin_mnist, 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/bundasmanu/skin_mnist
- Repository: https://github.com/bundasmanu/skin_mnist

## Overview

This repository is a HAM10000 skin-lesion image classification and model-optimization application. Its principal workflow, orchestrated by Main.py, reads image and patient metadata, prepares train/validation/test data, applies imbalance or augmentation strategies during model training, evaluates predictions, and combines model probabilities in an ensemble. It also includes a U-Net mask-generation path and PSO-based architecture/hyperparameter optimization; the README additionally documents GA support and pre-analysis. The sampled excerpts do not show all data-loading, factory, or ensemble wiring, so uncertain links are omitted.

Main entry points: [`Main.py`](https://github.com/bundasmanu/skin_mnist/blob/master/Main.py) (Workflow), [`models/ModelFactory.py`](https://github.com/bundasmanu/skin_mnist/blob/master/models/ModelFactory.py) (Model factory), [`Data.py`](https://github.com/bundasmanu/skin_mnist/blob/master/Data.py) (Data splits), [`models/Model.py`](https://github.com/bundasmanu/skin_mnist/blob/master/models/Model.py) (Model lifecycle)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_preparation["Data preparation"]
  node_config["Configuration<br/>[config.py]"]
  node_configfunc["Data utilities<br/>[config_func.py]"]
  node_data["Data splits<br/>[Data.py]"]
  node_unet["Mask generation<br/>[UNet.py]"]
end

subgraph group_training["Training"]
  node_model_factory["Model factory<br/>[ModelFactory.py]"]
  node_model_base["Model lifecycle<br/>[Model.py]"]
  node_oversampling["Oversampling<br/>[OverSampling.py]"]
  node_undersampling["Undersampling<br/>[UnderSampling.py]"]
  node_augmentation["Image augmentation"]
end

subgraph group_architectures["CNN architectures"]
  node_alexnet["AlexNet<br/>[AlexNet.py]"]
  node_vggnet["VGGNet<br/>[VGGNet.py]"]
  node_resnet["ResNet<br/>[ResNet.py]"]
  node_densenet["DenseNet<br/>[DenseNet.py]"]
end

subgraph group_optimization["Optimization"]
  node_optimizer_factory["Optimizer factory"]
  node_optimizer_base["Optimizer base<br/>[Optimizer.py]"]
  node_pso["Particle swarm<br/>[PSO.py]"]
  node_ga["Genetic algorithm<br/>[GA.py]"]
end

node_user(("Researcher"))
node_dataset["HAM10000 files"]
node_main["Workflow<br/>[Main.py]"]
node_results["Scores and ensemble<br/>[Main.py]"]

node_user -->|"runs"| node_main
node_dataset -->|"provides files"| node_main
node_main -->|"reads settings"| node_config
node_main -->|"calls utilities"| node_configfunc
node_main -->|"creates splits"| node_data
node_main -->|"requests masks"| node_unet
node_main -->|"creates models"| node_model_factory
node_model_factory -->|"selects architecture"| node_alexnet
node_model_factory -->|"selects architecture"| node_vggnet
node_model_factory -->|"selects architecture"| node_resnet
node_model_factory -->|"selects architecture"| node_densenet
node_alexnet -->|"extends lifecycle"| node_model_base
node_vggnet -->|"extends lifecycle"| node_model_base
node_resnet -->|"extends lifecycle"| node_model_base
node_densenet -->|"extends lifecycle"| node_model_base
node_main -->|"attaches strategy"| node_oversampling
node_main -->|"attaches strategy"| node_augmentation
node_main -.->|"optional strategy"| node_undersampling
node_main -->|"creates optimizer"| node_optimizer_factory
node_optimizer_factory -->|"selects optimizer"| node_pso
node_optimizer_factory -.->|"selects optimizer"| node_ga
node_pso -->|"uses objective"| node_optimizer_base
node_ga -->|"extends optimizer"| node_optimizer_base
node_main -->|"records predictions"| node_results
node_main -->|"trains and predicts"| node_alexnet
node_main -->|"trains and predicts"| node_vggnet
node_main -->|"trains and predicts"| node_resnet
node_main -->|"trains and predicts"| node_densenet
node_data -->|"supplies training data"| node_oversampling
node_data -->|"supplies training data"| node_undersampling
node_data -->|"supplies training data"| node_augmentation

click node_main "https://github.com/bundasmanu/skin_mnist/blob/master/Main.py"
click node_config "https://github.com/bundasmanu/skin_mnist/blob/master/config.py"
click node_configfunc "https://github.com/bundasmanu/skin_mnist/blob/master/config_func.py"
click node_data "https://github.com/bundasmanu/skin_mnist/blob/master/Data.py"
click node_unet "https://github.com/bundasmanu/skin_mnist/blob/master/models/UNet.py"
click node_model_factory "https://github.com/bundasmanu/skin_mnist/blob/master/models/ModelFactory.py"
click node_model_base "https://github.com/bundasmanu/skin_mnist/blob/master/models/Model.py"
click node_oversampling "https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/OverSampling.py"
click node_undersampling "https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/UnderSampling.py"
click node_augmentation "https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/DataAugmentation.py"
click node_alexnet "https://github.com/bundasmanu/skin_mnist/blob/master/models/AlexNet.py"
click node_vggnet "https://github.com/bundasmanu/skin_mnist/blob/master/models/VGGNet.py"
click node_resnet "https://github.com/bundasmanu/skin_mnist/blob/master/models/ResNet.py"
click node_densenet "https://github.com/bundasmanu/skin_mnist/blob/master/models/DenseNet.py"
click node_optimizer_factory "https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/OptimizerFactory.py"
click node_optimizer_base "https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/Optimizer.py"
click node_pso "https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/PSO.py"
click node_ga "https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/GA.py"
click node_results "https://github.com/bundasmanu/skin_mnist/blob/master/Main.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_config,node_configfunc,node_data,node_unet toneBlue
class node_model_factory,node_model_base,node_oversampling,node_undersampling,node_augmentation toneAmber
class node_alexnet,node_vggnet,node_resnet,node_densenet toneMint
class node_optimizer_factory,node_optimizer_base,node_pso,node_ga toneRose
class node_user,node_dataset toneIndigo
class node_main,node_results toneTeal
```

## Components

### Data preparation

- [Configuration](https://github.com/bundasmanu/skin_mnist/blob/master/config.py): `config.py`
- [Data utilities](https://github.com/bundasmanu/skin_mnist/blob/master/config_func.py): `config_func.py`
- [Data splits](https://github.com/bundasmanu/skin_mnist/blob/master/Data.py): `Data.py`
- [Mask generation](https://github.com/bundasmanu/skin_mnist/blob/master/models/UNet.py): `models/UNet.py`

### Training

- [Model factory](https://github.com/bundasmanu/skin_mnist/blob/master/models/ModelFactory.py): `models/ModelFactory.py`
- [Model lifecycle](https://github.com/bundasmanu/skin_mnist/blob/master/models/Model.py): `models/Model.py`
- [Oversampling](https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/OverSampling.py): `models/Strategies_Train/OverSampling.py`
- [Undersampling](https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/UnderSampling.py): `models/Strategies_Train/UnderSampling.py`
- [Image augmentation](https://github.com/bundasmanu/skin_mnist/blob/master/models/Strategies_Train/DataAugmentation.py): `models/Strategies_Train/DataAugmentation.py`

### CNN architectures

- [AlexNet](https://github.com/bundasmanu/skin_mnist/blob/master/models/AlexNet.py): `models/AlexNet.py`
- [VGGNet](https://github.com/bundasmanu/skin_mnist/blob/master/models/VGGNet.py): `models/VGGNet.py`
- [ResNet](https://github.com/bundasmanu/skin_mnist/blob/master/models/ResNet.py): `models/ResNet.py`
- [DenseNet](https://github.com/bundasmanu/skin_mnist/blob/master/models/DenseNet.py): `models/DenseNet.py`

### Optimization

- [Optimizer factory](https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/OptimizerFactory.py): `optimizers/OptimizerFactory.py`
- [Optimizer base](https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/Optimizer.py): `optimizers/Optimizer.py`
- [Particle swarm](https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/PSO.py): `optimizers/PSO.py`
- [Genetic algorithm](https://github.com/bundasmanu/skin_mnist/blob/master/optimizers/GA.py): `optimizers/GA.py`

### Other components

- **Researcher**
- **HAM10000 files**
- [Workflow](https://github.com/bundasmanu/skin_mnist/blob/master/Main.py): `Main.py`
- [Scores and ensemble](https://github.com/bundasmanu/skin_mnist/blob/master/Main.py): `Main.py`

## Connections

- Researcher → Workflow: runs
- HAM10000 files → Workflow: provides files
- Workflow → Configuration: reads settings
- Workflow → Data utilities: calls utilities
- Workflow → Data splits: creates splits
- Workflow → Mask generation: requests masks
- Workflow → Model factory: creates models
- Model factory → AlexNet: selects architecture
- Model factory → VGGNet: selects architecture
- Model factory → ResNet: selects architecture
- Model factory → DenseNet: selects architecture
- AlexNet → Model lifecycle: extends lifecycle
- VGGNet → Model lifecycle: extends lifecycle
- ResNet → Model lifecycle: extends lifecycle
- DenseNet → Model lifecycle: extends lifecycle
- Workflow → Oversampling: attaches strategy
- Workflow → Image augmentation: attaches strategy
- Workflow → Undersampling: optional strategy
- Workflow → Optimizer factory: creates optimizer
- Optimizer factory → Particle swarm: selects optimizer
- Optimizer factory → Genetic algorithm: selects optimizer
- Particle swarm → Optimizer base: uses objective
- Genetic algorithm → Optimizer base: extends optimizer
- Workflow → Scores and ensemble: records predictions
- Workflow → AlexNet: trains and predicts
- Workflow → VGGNet: trains and predicts
- Workflow → ResNet: trains and predicts
- Workflow → DenseNet: trains and predicts
- Data splits → Oversampling: supplies training data
- Data splits → Undersampling: supplies training data
- Data splits → Image augmentation: supplies training data
