# bryanogya/multimodal-personalized-eq-prediction architecture

> Architecture diagram of the GitHub repository bryanogya/multimodal-personalized-eq-prediction, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bryanogya/multimodal-personalized-eq-prediction
- Repository: https://github.com/bryanogya/multimodal-personalized-eq-prediction

## Overview

1. **Repository purpose and end-to-end flow**
   - This is an offline ML research pipeline for predicting personalized EQ curves.
   - The core flow is: raw audio/device/preference data → preprocessing and feature generation → multimodal training → checkpointed evaluation → visualizations and inference.

2. **Configuration layer**
   - `configs/` centralizes experiment parameters and file locations.
   - It separates concerns by modality and purpose: audio, device, preferences, EQ frequency definitions, model shape, dataset splits, training hyperparameters, plot styling, and filesystem paths.
   - This makes the rest of the code base largely config-driven rather than hardcoding paths or dimensions.

3. **Data sources and repository-managed assets**
   - `data/raw/audio`, `data/raw/device`, and `data/raw/harman` contain source material for the three main signal types.
   - `data/metadata/` stores CSV metadata used to align samples, devices, and preference profiles.
   - `data/splits/` defines train/validation/test partitions, so dataset membership is explicit and reproducible.

4. **Preprocessing subsystem**
   - `src/preprocessing/` transforms raw inputs into model-ready artifacts.
   - Audio preprocessing likely converts waveforms into compact spectral features such as mel-spectrograms.
   - Device preprocessing normalizes or interpolates frequency response curves into a common EQ band representation.
   - Harman preprocessing and `utils/generate_target_eq.py` indicate the project also builds target EQ curves from a reference response target.

5. **Preference generation and personalization**
   - `src/preprocessing/generate_preferences.py` and `configs/preferences.py` define how user preference vectors are created or encoded.
   - Preferences are treated as a separate modality rather than metadata-only, which is important architecturally: they feed the model as learnable or precomputed embeddings.

6. **Dataset and loading boundary**
   - `src/dataset/` is the boundary between stored artifacts and training-time tensors.
   - `data_loader.py` and `dataset.py` package audio, device, and preference inputs together with target EQ labels.
   - `test_dataset.py` suggests a special dataset path for inference or evaluation-only samples, keeping test-time access patterns separate from training.

7. **Model architecture**
   - `src/models/` contains separate encoders for audio, device, and preference streams, plus multimodal fusion models.
   - `multimodal_model.py` is the main predictor; `multimodal_model_aux.py` indicates a secondary model for auxiliary response-curve prediction.
   - The architecture is therefore modular: modality-specific encoders feed a fused predictor rather than one monolithic network.

8. **Training subsystem**
   - `src/training/` contains the training loops, validation logic, and loss definitions.
   - `train.py` and `validate.py` handle the main multimodal model; `train_aux.py` and `validate_aux.py` handle the auxiliary model.
   - `losses.py` suggests the optimization objective is tailored to EQ/curve regression rather than generic classification.
   - Training outputs are persisted under `checkpoints/`, including histories and test metrics.

9. **Evaluation and experiment comparison**
   - `src/evaluation/` handles the post-training analysis path.
   - `baseline.py` compares against simple reference strategies such as zero EQ and mean EQ.
   - `ablation.py` isolates the contribution of each modality by running reduced-input variants.
   - `test.py`, `metrics.py`, and `worst_prediction.py` imply a detailed test pass with aggregate scores plus error inspection.

10. **Inference path**
   - `src/inference/predict.py` is the user-facing prediction entry point.
   - It consumes processed audio, device, and preference artifacts and returns EQ predictions for a specific preference index.
   - This is separate from training/evaluation so the inference boundary stays lightweight and does not depend on training-only code paths.

11. **Utility and signal-processing helpers**
   - `src/utils/` contains supporting functions for EQ interpolation, distribution checks, sanity checks, and experiment bookkeeping.
   - These utilities bridge data-format mismatches, validate assumptions, and support reproducible experiment management.
   - `generate_target_eq.py` and `interpolate_eq.py` are especially important for keeping all EQ curves aligned to the same frequency grid.

12. **Visualization and reporting**
   - `src/visualization/` turns experiment outputs into figures for training curves, prediction scatter plots, correlation matrices, histogram/error analysis, sensitivity plots, and ablation/baseline comparisons.
   - `outputs/figures/` is organized by analysis type, while `checkpoints/*/*.json` stores the numerical results that these plots summarize.
   - This makes reporting a first-class subsystem rather than an ad hoc notebook step.

13. **Experiment artifacts and lifecycle**
   - The `checkpoints/` hierarchy records distinct experiment families: `full_model`, `baseline`, `ablation`, and `aux_model`.
   - Each family stores histories, test metrics, and case studies like `worst_predictions.json`.
   - The repo therefore supports repeatable experiment tracking across model variants, not just a single trained network.

14. **Top-level orchestration**
   - `main.py` is the command-line dispatcher that selects training, auxiliary training, evaluation, baseline comparison, ablation, prediction, and plotting modes.
   - Architecturally, it is the integration point that wires configs, datasets, models, training/evaluation code, and visualization outputs into a single workflow.

Main entry points: [`main.py`](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/main.py) (main.py), [`src/dataset/dataset.py`](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/dataset.py) (Dataset), [`src/dataset/data_loader.py`](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/data_loader.py) (Loader), [`src/models/multimodal_model.py`](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/multimodal_model.py) (Fusion model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_configs_data["Config & data"]
  node_configs_audio["Audio cfg<br/>config<br/>[audio.py]"]
  node_configs_dataset["Dataset cfg<br/>config<br/>[dataset.py]"]
  node_configs_eq["EQ cfg<br/>config<br/>[eq.py]"]
  node_configs_freq["Freq cfg<br/>config<br/>[frequencies.py]"]
  node_configs_model["Model cfg<br/>config<br/>[model.py]"]
  node_configs_paths["Paths<br/>config<br/>[paths.py]"]
  node_configs_prefs["Prefs cfg<br/>config<br/>[preferences.py]"]
  node_data_metadata["Metadata CSVs<br/>repository data"]
  node_data_splits["Splits<br/>repository data"]
  node_raw_sources["Raw sources<br/>repository data"]
end

subgraph group_group_prep_utils["Prep & utils"]
  node_preprocess_audio["Audio prep<br/>preprocessing"]
  node_preprocess_device["Device prep<br/>preprocessing"]
  node_preprocess_harman["Harman prep<br/>preprocessing"]
  node_generate_prefs["Prefs gen<br/>preprocessing"]
  node_utils_eq["EQ utils<br/>signal utils<br/>[interpolate_eq.py]"]
  node_utils_exp["Experiment utils<br/>ops utils<br/>[experiment.py]"]
end

subgraph group_group_model_train["Model & training"]
  node_main_py["main.py<br/>CLI orchestrator<br/>[main.py]"]
  node_dataset_boundary[("Dataset<br/>data boundary<br/>[dataset.py]")]
  node_data_loader["Loader<br/>[data_loader.py]"]
  node_test_dataset["Test set<br/>eval dataset<br/>[test_dataset.py]"]
  node_audio_encoder["Audio encoder<br/>modality encoder<br/>[audio_encoder.py]"]
  node_device_encoder["Device encoder<br/>modality encoder<br/>[device_encoder.py]"]
  node_preference_encoder["Pref encoder<br/>modality encoder"]
  node_multimodal_model["Fusion model<br/>predictor"]
  node_multimodal_aux["Aux model<br/>aux predictor"]
  node_losses["Losses<br/>objective<br/>[losses.py]"]
  node_train_main["Train<br/>[train.py]"]
  node_validate_main["Validate<br/>validation<br/>[validate.py]"]
  node_train_aux["Train aux<br/>training loop<br/>[train_aux.py]"]
  node_validate_aux["Validate aux<br/>validation<br/>[validate_aux.py]"]
end

subgraph group_group_eval_vis["Eval & reporting"]
  node_evaluate_test["Test eval<br/>evaluation<br/>[test.py]"]
  node_baseline_eval["Baseline<br/>evaluation<br/>[baseline.py]"]
  node_ablation_eval["Ablation<br/>evaluation<br/>[ablation.py]"]
  node_metrics["Metrics<br/>analysis<br/>[metrics.py]"]
end

subgraph group_group_artifacts["Artifacts"]
end

node_main_py -->|"run"| node_train_main
node_main_py -->|"run"| node_train_aux
node_main_py -->|"run"| node_evaluate_test
node_main_py -->|"run"| node_baseline_eval
node_main_py -->|"run"| node_ablation_eval
node_main_py -->|"predict"| node_baseline_eval
node_main_py -->|"plot"| node_utils_exp
node_configs_paths -->|"locates"| node_raw_sources
node_configs_paths -->|"locates"| node_data_metadata
node_configs_paths -->|"locates"| node_data_splits
node_configs_audio -->|"drives"| node_preprocess_audio
node_configs_eq -->|"drives"| node_preprocess_harman
node_configs_prefs -->|"drives"| node_generate_prefs
node_configs_freq -->|"defines grid"| node_utils_eq
node_raw_sources -->|"input"| node_preprocess_audio
node_raw_sources -->|"input"| node_preprocess_device
node_raw_sources -->|"input"| node_preprocess_harman
node_data_metadata -->|"aligns"| node_dataset_boundary
node_data_splits -->|"partitions"| node_data_loader
node_preprocess_audio -->|"feeds"| node_dataset_boundary
node_preprocess_device -->|"feeds"| node_dataset_boundary
node_generate_prefs -->|"feeds"| node_dataset_boundary
node_dataset_boundary -->|"batching"| node_data_loader
node_dataset_boundary -->|"specializes"| node_test_dataset
node_data_loader -->|"routes"| node_audio_encoder
node_data_loader -->|"routes"| node_device_encoder
node_data_loader -->|"routes"| node_preference_encoder
node_audio_encoder -->|"fuses into"| node_multimodal_model
node_device_encoder -->|"fuses into"| node_multimodal_model
node_preference_encoder -->|"fuses into"| node_multimodal_model
node_multimodal_model -->|"optimized by"| node_losses
node_multimodal_aux -->|"optimized by"| node_losses
node_train_main -->|"updates"| node_multimodal_model
node_train_main -->|"checks"| node_validate_main
node_train_main -->|"uses"| node_losses
node_train_aux -->|"updates"| node_multimodal_aux
node_train_aux -->|"checks"| node_validate_aux
node_train_aux -->|"uses"| node_losses
node_evaluate_test -->|"computes"| node_metrics
node_evaluate_test -->|"compares"| node_baseline_eval
node_ablation_eval -->|"computes"| node_metrics
node_baseline_eval -->|"computes"| node_metrics

click node_main_py "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/main.py"
click node_configs_audio "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/audio.py"
click node_configs_dataset "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/dataset.py"
click node_configs_eq "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/eq.py"
click node_configs_freq "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/frequencies.py"
click node_configs_model "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/model.py"
click node_configs_paths "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/paths.py"
click node_configs_prefs "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/preferences.py"
click node_data_metadata "https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/metadata"
click node_data_splits "https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/splits"
click node_raw_sources "https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/raw"
click node_preprocess_audio "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_audio.py"
click node_preprocess_device "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_device.py"
click node_preprocess_harman "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_harman.py"
click node_generate_prefs "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/generate_preferences.py"
click node_utils_eq "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/utils/interpolate_eq.py"
click node_utils_exp "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/utils/experiment.py"
click node_dataset_boundary "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/dataset.py"
click node_data_loader "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/data_loader.py"
click node_test_dataset "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/test_dataset.py"
click node_audio_encoder "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/audio_encoder.py"
click node_device_encoder "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/device_encoder.py"
click node_preference_encoder "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/preference_encoder.py"
click node_multimodal_model "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/multimodal_model.py"
click node_multimodal_aux "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/multimodal_model_aux.py"
click node_losses "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/losses.py"
click node_train_main "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/train.py"
click node_validate_main "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/validate.py"
click node_train_aux "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/train_aux.py"
click node_validate_aux "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/validate_aux.py"
click node_evaluate_test "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/test.py"
click node_baseline_eval "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/baseline.py"
click node_ablation_eval "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/ablation.py"
click node_metrics "https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/metrics.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_configs_audio,node_configs_dataset,node_configs_eq,node_configs_freq,node_configs_model,node_configs_paths,node_configs_prefs,node_data_metadata,node_data_splits,node_raw_sources toneBlue
class node_preprocess_audio,node_preprocess_device,node_preprocess_harman,node_generate_prefs,node_utils_eq,node_utils_exp toneAmber
class node_main_py,node_dataset_boundary,node_data_loader,node_test_dataset,node_audio_encoder,node_device_encoder,node_preference_encoder,node_multimodal_model,node_multimodal_aux,node_losses,node_train_main,node_validate_main,node_train_aux,node_validate_aux toneMint
class node_evaluate_test,node_baseline_eval,node_ablation_eval,node_metrics toneRose
```

## Components

### Config & data

Experiment settings, raw inputs, and split metadata.

- [Audio cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/audio.py): config · Audio feature and preprocessing parameters. · `configs/audio.py`
- [Dataset cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/dataset.py): config · Dataset split and sample-shaping parameters. · `configs/dataset.py`
- [EQ cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/eq.py): config · EQ target and curve-shaping settings. · `configs/eq.py`
- [Freq cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/frequencies.py): config · Frequency grid definitions used across the pipeline. · `configs/frequencies.py`
- [Model cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/model.py): config · Architecture and hidden-size settings. · `configs/model.py`
- [Paths](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/paths.py): config · Repository locations for data, checkpoints, and outputs. · `configs/paths.py`
- [Prefs cfg](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/configs/preferences.py): config · Preference encoding and conditioning settings. · `configs/preferences.py`
- [Metadata CSVs](https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/metadata): repository data · Audio, device, and preference alignment tables. · `data/metadata`
- [Splits](https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/splits): repository data · Train, validation, and test partition definitions. · `data/splits`
- [Raw sources](https://github.com/bryanogya/multimodal-personalized-eq-prediction/tree/main/data/raw): repository data · Audio, device responses, and Harman target source files. · `data/raw`

### Prep & utils

Feature generation, alignment, and EQ helpers.

- [Audio prep](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_audio.py): preprocessing · Converts raw audio into model-ready features. · `src/preprocessing/preprocess_audio.py`
- [Device prep](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_device.py): preprocessing · Normalizes and interpolates device response curves. · `src/preprocessing/preprocess_device.py`
- [Harman prep](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/preprocess_harman.py): preprocessing · Builds target EQ curves from the Harman reference. · `src/preprocessing/preprocess_harman.py`
- [Prefs gen](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/preprocessing/generate_preferences.py): preprocessing · Creates or encodes preference vectors. · `src/preprocessing/generate_preferences.py`
- [EQ utils](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/utils/interpolate_eq.py): signal utils · Interpolation, target generation, and EQ consistency checks. · `src/utils/interpolate_eq.py`
- [Experiment utils](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/utils/experiment.py): ops utils · Sanity checks and experiment bookkeeping helpers. · `src/utils/experiment.py`

### Model & training

Dataset boundary, encoders, fusion model, and optimization.

- [main.py](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/main.py): CLI orchestrator · Dispatches training, evaluation, inference, and plotting workflows. · `main.py`
- [Dataset](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/dataset.py): data boundary · Packages stored artifacts into training-time tensors. · `src/dataset/dataset.py`
- [Loader](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/data_loader.py): data loader · Builds batch loading and sample collation. · `src/dataset/data_loader.py`
- [Test set](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/dataset/test_dataset.py): eval dataset · Inference/evaluation-only dataset path. · `src/dataset/test_dataset.py`
- [Audio encoder](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/audio_encoder.py): modality encoder · Encodes audio-derived features. · `src/models/audio_encoder.py`
- [Device encoder](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/device_encoder.py): modality encoder · Encodes device response features. · `src/models/device_encoder.py`
- [Pref encoder](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/preference_encoder.py): modality encoder · Encodes user preference vectors. · `src/models/preference_encoder.py`
- [Fusion model](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/multimodal_model.py): predictor · Main multimodal EQ predictor. · `src/models/multimodal_model.py`
- [Aux model](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/models/multimodal_model_aux.py): aux predictor · Secondary response-curve prediction model. · `src/models/multimodal_model_aux.py`
- [Losses](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/losses.py): objective · Regression losses tailored to EQ prediction. · `src/training/losses.py`
- [Train](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/train.py): training loop · Main model training routine. · `src/training/train.py`
- [Validate](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/validate.py): validation · Main model validation routine. · `src/training/validate.py`
- [Train aux](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/train_aux.py): training loop · Auxiliary model training routine. · `src/training/train_aux.py`
- [Validate aux](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/training/validate_aux.py): validation · Auxiliary model validation routine. · `src/training/validate_aux.py`

### Eval & reporting

Testing, baselines, ablations, inference, and plots.

- [Test eval](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/test.py): evaluation · Runs checkpointed test-set evaluation. · `src/evaluation/test.py`
- [Baseline](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/baseline.py): evaluation · Compares against simple reference strategies. · `src/evaluation/baseline.py`
- [Ablation](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/ablation.py): evaluation · Measures modality contribution via reduced-input runs. · `src/evaluation/ablation.py`
- [Metrics](https://github.com/bryanogya/multimodal-personalized-eq-prediction/blob/main/src/evaluation/metrics.py): analysis · Aggregates test scores and error statistics. · `src/evaluation/metrics.py`

## Connections

- main.py → Train: run · Dispatches main training mode.
- main.py → Train aux: run · Dispatches auxiliary training mode.
- main.py → Test eval: run · Dispatches checkpoint evaluation.
- main.py → Baseline: run · Dispatches baseline comparison mode.
- main.py → Ablation: run · Dispatches ablation analysis mode.
- main.py → Baseline: predict · Dispatches prediction workflow.
- main.py → Experiment utils: plot · Dispatches reporting and experiment utilities.
- Paths → Raw sources: locates · Defines source-data locations.
- Paths → Metadata CSVs: locates · Defines metadata locations.
- Paths → Splits: locates · Defines split locations.
- Audio cfg → Audio prep: drives · Controls audio feature generation.
- EQ cfg → Harman prep: drives · Controls target EQ generation.
- Prefs cfg → Prefs gen: drives · Controls preference encoding.
- Freq cfg → EQ utils: defines grid · Shared frequency axis for interpolation and targets.
- Raw sources → Audio prep: input · Raw audio is transformed into features.
- Raw sources → Device prep: input · Raw device curves are normalized.
- Raw sources → Harman prep: input · Reference target data is processed.
- Metadata CSVs → Dataset: aligns · Metadata joins modalities and labels.
- Splits → Loader: partitions · Determines train/val/test membership.
- Audio prep → Dataset: feeds · Provides audio tensors or features.
- Device prep → Dataset: feeds · Provides device-response tensors.
- Prefs gen → Dataset: feeds · Provides preference vectors.
- Dataset → Loader: batching · Batched into training and evaluation samples.
- Dataset → Test set: specializes · Separate access path for inference/eval samples.
- Loader → Audio encoder: routes · Supplies audio modality inputs.
- Loader → Device encoder: routes · Supplies device modality inputs.
- Loader → Pref encoder: routes · Supplies preference modality inputs.
- Audio encoder → Fusion model: fuses into · Audio embedding enters the predictor.
- Device encoder → Fusion model: fuses into · Device embedding enters the predictor.
- Pref encoder → Fusion model: fuses into · Preference embedding enters the predictor.
- Fusion model → Losses: optimized by · Main predictor is trained with EQ regression losses.
- Aux model → Losses: optimized by · Auxiliary predictor uses the same regression family.
- Train → Fusion model: updates · Main loop trains the fusion model.
- Train → Validate: checks · Validation follows each training phase.
- Train → Losses: uses · Main optimization objective.
- Train aux → Aux model: updates · Auxiliary loop trains the secondary model.
- Train aux → Validate aux: checks · Validation for auxiliary model.
- Train aux → Losses: uses · Auxiliary optimization objective.
- Test eval → Metrics: computes · Produces aggregate test metrics.
- Test eval → Baseline: compares · Shares evaluation outputs with baseline analysis.
- Ablation → Metrics: computes · Produces ablation results.
- Baseline → Metrics: computes · Produces baseline metrics.
