# reskyz1/pad-ufes-20-experiments architecture

> Architecture diagram of the GitHub repository reskyz1/pad-ufes-20-experiments, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/reskyz1/pad-ufes-20-experiments
- Repository: https://github.com/reskyz1/pad-ufes-20-experiments

## Overview

PAD-UFES-20 is a PyTorch research project for skin-lesion classification and controlled label-noise experiments. Its main workflow prepares patient-separated data, trains a cross-entropy or robust-method model, evaluates predictions per lesion, and can fit temperature scaling on validation predictions before test-set analysis. The graph also preserves noise-manifest generation and decision-curve analysis. Relationships are limited to those visible in excerpts, the source index, or the README; unsampled implementation details are not assumed.

Main entry points: [`pad_ufes20_idn64/src/pad_idn/train.py`](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/train.py) (CE training), [`pad_ufes20_idn64/src/pad_idn/robust_train.py`](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/robust_train.py) (Robust training), [`pad_ufes20_idn64/src/pad_idn/evaluate.py`](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/evaluate.py) (Run evaluation), [`pad_ufes20_idn64/src/pad_idn/data.py`](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/data.py) (Datasets and transforms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_prepare["Prepare data<br/>[prepare.py]"]
  node_splits["Patient splits<br/>[splits.py]"]
  node_data_loaders["Datasets and transforms<br/>[data.py]"]
  node_noise["IDN generation<br/>[noise.py]"]
  node_noise_manifest["Noise manifests<br/>[noise_manifest.py]"]
end

subgraph group_experiments["Model experiments"]
  node_train["CE training<br/>[train.py]"]
  node_robust_train["Robust training<br/>[robust_train.py]"]
  node_robust_methods["Robust losses<br/>[robust_methods.py]"]
  node_models["ResNet models<br/>[models.py]"]
  node_engine["Train and predict loops<br/>[engine.py]"]
end

subgraph group_analysis["Evaluation and calibration"]
  node_evaluate["Run evaluation<br/>[evaluate.py]"]
  node_metrics["Lesion metrics<br/>[metrics.py]"]
  node_calibration["Temperature scaling<br/>[calibration.py]"]
  node_decision_curve["Decision curves<br/>[decision_curve.py]"]
  node_results["Experiment results<br/>[results.py]"]
end

subgraph group_shared["Shared runtime"]
  node_utils["Shared utilities<br/>[utils.py]"]
end

node_researcher(("Researcher"))
node_dataset[("PAD-UFES-20 data")]

node_researcher -->|"prepares data"| node_prepare
node_dataset -.->|"provides images"| node_prepare
node_researcher -->|"runs training"| node_train
node_prepare -.->|"creates inputs"| node_splits
node_splits -.->|"defines partitions"| node_data_loaders
node_noise -->|"extracts features"| node_models
node_noise -->|"uses manifests"| node_noise_manifest
node_train -->|"builds loaders"| node_data_loaders
node_train -->|"builds model"| node_models
node_train -->|"trains and predicts"| node_engine
node_robust_train -->|"builds loaders"| node_data_loaders
node_robust_train -->|"builds models"| node_models
node_robust_train -->|"uses losses"| node_robust_methods
node_robust_train -->|"uses training loops"| node_engine
node_evaluate -->|"loads evaluation data"| node_data_loaders
node_evaluate -->|"builds model"| node_models
node_evaluate -->|"predicts images"| node_engine
node_evaluate -->|"computes metrics"| node_metrics
node_researcher -->|"calibrates predictions"| node_calibration
node_calibration -->|"reports metrics"| node_metrics
node_calibration -->|"computes curves"| node_decision_curve
node_train -->|"evaluates predictions"| node_metrics

click node_prepare "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/prepare.py"
click node_splits "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/splits.py"
click node_data_loaders "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/data.py"
click node_noise "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/noise.py"
click node_noise_manifest "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/noise_manifest.py"
click node_train "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/train.py"
click node_robust_train "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/robust_train.py"
click node_robust_methods "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/robust_methods.py"
click node_models "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/models.py"
click node_engine "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/engine.py"
click node_evaluate "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/evaluate.py"
click node_metrics "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/metrics.py"
click node_calibration "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/calibration.py"
click node_decision_curve "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/decision_curve.py"
click node_results "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/results.py"
click node_utils "https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/utils.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_prepare,node_splits,node_data_loaders,node_noise,node_noise_manifest toneBlue
class node_train,node_robust_train,node_robust_methods,node_models,node_engine,node_dataset toneAmber
class node_evaluate,node_metrics,node_calibration,node_decision_curve,node_results toneMint
class node_utils toneRose
class node_researcher toneIndigo
```

## Components

### Data preparation

- [Prepare data](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/prepare.py): `pad_ufes20_idn64/src/pad_idn/prepare.py`
- [Patient splits](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/splits.py): `pad_ufes20_idn64/src/pad_idn/splits.py`
- [Datasets and transforms](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/data.py): `pad_ufes20_idn64/src/pad_idn/data.py`
- [IDN generation](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/noise.py): `pad_ufes20_idn64/src/pad_idn/noise.py`
- [Noise manifests](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/noise_manifest.py): `pad_ufes20_idn64/src/pad_idn/noise_manifest.py`

### Model experiments

- [CE training](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/train.py): `pad_ufes20_idn64/src/pad_idn/train.py`
- [Robust training](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/robust_train.py): `pad_ufes20_idn64/src/pad_idn/robust_train.py`
- [Robust losses](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/robust_methods.py): `pad_ufes20_idn64/src/pad_idn/robust_methods.py`
- [ResNet models](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/models.py): `pad_ufes20_idn64/src/pad_idn/models.py`
- [Train and predict loops](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/engine.py): `pad_ufes20_idn64/src/pad_idn/engine.py`

### Evaluation and calibration

- [Run evaluation](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/evaluate.py): `pad_ufes20_idn64/src/pad_idn/evaluate.py`
- [Lesion metrics](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/metrics.py): `pad_ufes20_idn64/src/pad_idn/metrics.py`
- [Temperature scaling](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/calibration.py): `pad_ufes20_idn64/src/pad_idn/calibration.py`
- [Decision curves](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/decision_curve.py): `pad_ufes20_idn64/src/pad_idn/decision_curve.py`
- [Experiment results](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/results.py): `pad_ufes20_idn64/src/pad_idn/results.py`

### Shared runtime

- [Shared utilities](https://github.com/reskyz1/pad-ufes-20-experiments/blob/main/pad_ufes20_idn64/src/pad_idn/utils.py): `pad_ufes20_idn64/src/pad_idn/utils.py`

### Other components

- **Researcher**
- **PAD-UFES-20 data**

## Connections

- Researcher → Prepare data: prepares data (evidence: `README.md`)
- PAD-UFES-20 data → Prepare data: provides images
- Researcher → CE training: runs training (evidence: `README.md`)
- Prepare data → Patient splits: creates inputs
- Patient splits → Datasets and transforms: defines partitions
- IDN generation → ResNet models: extracts features (evidence: `pad_ufes20_idn64/src/pad_idn/noise.py`)
- IDN generation → Noise manifests: uses manifests (evidence: `pad_ufes20_idn64/src/pad_idn/noise.py`)
- CE training → Datasets and transforms: builds loaders (evidence: `pad_ufes20_idn64/src/pad_idn/train.py`)
- CE training → ResNet models: builds model (evidence: `pad_ufes20_idn64/src/pad_idn/train.py`)
- CE training → Train and predict loops: trains and predicts (evidence: `pad_ufes20_idn64/src/pad_idn/train.py`)
- Robust training → Datasets and transforms: builds loaders (evidence: `pad_ufes20_idn64/src/pad_idn/robust_train.py`)
- Robust training → ResNet models: builds models (evidence: `pad_ufes20_idn64/src/pad_idn/robust_train.py`)
- Robust training → Robust losses: uses losses (evidence: `pad_ufes20_idn64/src/pad_idn/robust_train.py`)
- Robust training → Train and predict loops: uses training loops (evidence: `pad_ufes20_idn64/src/pad_idn/robust_train.py`)
- Run evaluation → Datasets and transforms: loads evaluation data (evidence: `pad_ufes20_idn64/src/pad_idn/evaluate.py`)
- Run evaluation → ResNet models: builds model (evidence: `pad_ufes20_idn64/src/pad_idn/evaluate.py`)
- Run evaluation → Train and predict loops: predicts images (evidence: `pad_ufes20_idn64/src/pad_idn/evaluate.py`)
- Run evaluation → Lesion metrics: computes metrics (evidence: `pad_ufes20_idn64/src/pad_idn/evaluate.py`)
- Researcher → Temperature scaling: calibrates predictions (evidence: `README.md`)
- Temperature scaling → Lesion metrics: reports metrics (evidence: `pad_ufes20_idn64/src/pad_idn/calibration.py`)
- Temperature scaling → Decision curves: computes curves (evidence: `pad_ufes20_idn64/src/pad_idn/calibration.py`)
- CE training → Lesion metrics: evaluates predictions (evidence: `pad_ufes20_idn64/src/pad_idn/train.py`)
