# mpreda01/indus architecture

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

## Overview

This repository trains dense-prediction models for semantic segmentation and depth estimation from driving-scene images. The principal workflow loads split datasets, applies paired image/label transforms, predicts selected tasks, and computes losses and metrics during training and validation; visualization and experiment tracking support monitoring. Synscapes preprocessing converts source data to the dataset layout. The experiment module’s sampled code establishes its dataset, transform, model, loss, metric, and visualization responsibilities; some subsystem wiring and checkpoint details are based on README documentation rather than sampled implementation.

Main entry points: [`source/experiments/experiment_multitask.py`](https://github.com/mpreda01/indus/blob/main/source/experiments/experiment_multitask.py) (Multitask experiment), [`source/datasets/preprocess_synscapes.py`](https://github.com/mpreda01/indus/blob/main/source/datasets/preprocess_synscapes.py) (Synscapes preprocessing), [`source/datasets/dataset_miniscapes.py`](https://github.com/mpreda01/indus/blob/main/source/datasets/dataset_miniscapes.py) (Miniscapes loader), [`source/scripts/train.py`](https://github.com/mpreda01/indus/blob/main/source/scripts/train.py) (Training entry point)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data"]
  node_preprocess["Synscapes preprocessing"]
  node_dataset["Miniscapes loader"]
  node_definitions["Task definitions<br/>[definitions.py]"]
  node_transforms["Image transforms<br/>[transforms.py]"]
  node_labels["Label mappings<br/>[labels.py]"]
end

subgraph group_models["Prediction models"]
  node_deeplab["DeepLab models"]
  node_multitask_model["Multitask model"]
  node_adaptive_depth["Adaptive depth model"]
  node_model_parts["Encoder and decoder<br/>[model_parts.py]"]
end

subgraph group_training["Training"]
  node_train["Training entry point<br/>[train.py]"]
  node_config["Config handling<br/>[config.py]"]
  node_experiment["Multitask experiment"]
  node_losses["Task losses"]
end

subgraph group_monitoring["Evaluation and monitoring"]
  node_metrics["Task metrics<br/>[metrics.py]"]
  node_visualization["Prediction visualization<br/>[visualization.py]"]
end

node_user(("Researcher"))
node_synscapes["Synscapes source"]
node_dataset_files["Dataset files"]
node_wandb(("Weights and Biases"))
node_outputs["Checkpoints and submissions"]

node_user -->|"launches"| node_train
node_train -->|"loads config"| node_config
node_train -->|"starts training"| node_experiment
node_synscapes -->|"source images"| node_preprocess
node_preprocess -->|"uses depth encoding"| node_dataset
node_preprocess -->|"maps labels"| node_labels
node_preprocess -->|"writes layout"| node_dataset_files
node_dataset_files -->|"read samples"| node_dataset
node_experiment -->|"creates splits"| node_dataset
node_experiment -->|"builds transforms"| node_transforms
node_dataset -->|"transforms samples"| node_transforms
node_experiment -->|"selects tasks"| node_definitions
node_experiment -->|"resolves model"| node_deeplab
node_experiment -->|"resolves model"| node_multitask_model
node_experiment -->|"resolves model"| node_adaptive_depth
node_deeplab -->|"uses components"| node_model_parts
node_multitask_model -->|"uses components"| node_model_parts
node_adaptive_depth -->|"uses components"| node_model_parts
node_experiment -->|"computes task losses"| node_losses
node_experiment -->|"updates metrics"| node_metrics
node_experiment -->|"renders predictions"| node_visualization
node_experiment -.->|"logs run"| node_wandb
node_experiment -->|"saves training artifacts"| node_outputs

click node_preprocess "https://github.com/mpreda01/indus/blob/main/source/datasets/preprocess_synscapes.py"
click node_dataset "https://github.com/mpreda01/indus/blob/main/source/datasets/dataset_miniscapes.py"
click node_definitions "https://github.com/mpreda01/indus/blob/main/source/datasets/definitions.py"
click node_transforms "https://github.com/mpreda01/indus/blob/main/source/utils/transforms.py"
click node_labels "https://github.com/mpreda01/indus/blob/main/labels.py"
click node_train "https://github.com/mpreda01/indus/blob/main/source/scripts/train.py"
click node_config "https://github.com/mpreda01/indus/blob/main/source/utils/config.py"
click node_experiment "https://github.com/mpreda01/indus/blob/main/source/experiments/experiment_multitask.py"
click node_deeplab "https://github.com/mpreda01/indus/blob/main/source/models/model_deeplab_v3_plus.py"
click node_multitask_model "https://github.com/mpreda01/indus/blob/main/source/models/model_deeplab_v3_plus_multitask.py"
click node_adaptive_depth "https://github.com/mpreda01/indus/blob/main/source/models/model_adaptive_depth.py"
click node_model_parts "https://github.com/mpreda01/indus/blob/main/source/models/model_parts.py"
click node_losses "https://github.com/mpreda01/indus/tree/main/source/losses"
click node_metrics "https://github.com/mpreda01/indus/blob/main/source/utils/metrics.py"
click node_visualization "https://github.com/mpreda01/indus/blob/main/source/utils/visualization.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_preprocess,node_dataset,node_definitions,node_transforms,node_labels toneBlue
class node_deeplab,node_multitask_model,node_adaptive_depth,node_model_parts toneAmber
class node_train,node_config,node_experiment,node_losses toneMint
class node_metrics,node_visualization toneRose
class node_user,node_synscapes,node_dataset_files,node_wandb,node_outputs toneIndigo
```

## Components

### Data

- [Synscapes preprocessing](https://github.com/mpreda01/indus/blob/main/source/datasets/preprocess_synscapes.py): `source/datasets/preprocess_synscapes.py`
- [Miniscapes loader](https://github.com/mpreda01/indus/blob/main/source/datasets/dataset_miniscapes.py): `source/datasets/dataset_miniscapes.py`
- [Task definitions](https://github.com/mpreda01/indus/blob/main/source/datasets/definitions.py): `source/datasets/definitions.py`
- [Image transforms](https://github.com/mpreda01/indus/blob/main/source/utils/transforms.py): `source/utils/transforms.py`
- [Label mappings](https://github.com/mpreda01/indus/blob/main/labels.py): `labels.py`

### Prediction models

- [DeepLab models](https://github.com/mpreda01/indus/blob/main/source/models/model_deeplab_v3_plus.py): `source/models/model_deeplab_v3_plus.py`
- [Multitask model](https://github.com/mpreda01/indus/blob/main/source/models/model_deeplab_v3_plus_multitask.py): `source/models/model_deeplab_v3_plus_multitask.py`
- [Adaptive depth model](https://github.com/mpreda01/indus/blob/main/source/models/model_adaptive_depth.py): `source/models/model_adaptive_depth.py`
- [Encoder and decoder](https://github.com/mpreda01/indus/blob/main/source/models/model_parts.py): `source/models/model_parts.py`

### Training

- [Training entry point](https://github.com/mpreda01/indus/blob/main/source/scripts/train.py): `source/scripts/train.py`
- [Config handling](https://github.com/mpreda01/indus/blob/main/source/utils/config.py): `source/utils/config.py`
- [Multitask experiment](https://github.com/mpreda01/indus/blob/main/source/experiments/experiment_multitask.py): `source/experiments/experiment_multitask.py`
- [Task losses](https://github.com/mpreda01/indus/tree/main/source/losses): `source/losses`

### Evaluation and monitoring

- [Task metrics](https://github.com/mpreda01/indus/blob/main/source/utils/metrics.py): `source/utils/metrics.py`
- [Prediction visualization](https://github.com/mpreda01/indus/blob/main/source/utils/visualization.py): `source/utils/visualization.py`

### Other components

- **Researcher**
- **Synscapes source**
- **Dataset files**
- **Weights and Biases**
- **Checkpoints and submissions**

## Connections

- Researcher → Training entry point: launches
- Training entry point → Config handling: loads config
- Training entry point → Multitask experiment: starts training
- Synscapes source → Synscapes preprocessing: source images
- Synscapes preprocessing → Miniscapes loader: uses depth encoding
- Synscapes preprocessing → Label mappings: maps labels
- Synscapes preprocessing → Dataset files: writes layout
- Dataset files → Miniscapes loader: read samples
- Multitask experiment → Miniscapes loader: creates splits
- Multitask experiment → Image transforms: builds transforms
- Miniscapes loader → Image transforms: transforms samples
- Multitask experiment → Task definitions: selects tasks
- Multitask experiment → DeepLab models: resolves model
- Multitask experiment → Multitask model: resolves model
- Multitask experiment → Adaptive depth model: resolves model
- DeepLab models → Encoder and decoder: uses components
- Multitask model → Encoder and decoder: uses components
- Adaptive depth model → Encoder and decoder: uses components
- Multitask experiment → Task losses: computes task losses
- Multitask experiment → Task metrics: updates metrics
- Multitask experiment → Prediction visualization: renders predictions
- Multitask experiment → Weights and Biases: logs run
- Multitask experiment → Checkpoints and submissions: saves training artifacts
