# mingc0816/f2dm architecture

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

## Overview

F2DM is an underwater-image enhancement system built on BasicSR. Its documented workflow takes paired training images or underwater inputs, runs frequency-domain restoration, and produces enhanced images; training also evaluates restoration quality. The README describes wavelet decomposition, separate frequency-band modulation, and cross-frequency fusion. The tree and excerpts support the framework’s training, model, data, loss, and metric layers, but do not include the README’s referenced test entry point or configuration files, so testing orchestration is not mapped.

Main entry points: [`basicsr/models/Wfdiff_model.py`](https://github.com/mingc0816/f2dm/blob/main/basicsr/models/Wfdiff_model.py) (F2DM model), [`basicsr/train.py`](https://github.com/mingc0816/f2dm/blob/main/basicsr/train.py) (Training runner), [`basicsr/data/single_image_dataset.py`](https://github.com/mingc0816/f2dm/blob/main/basicsr/data/single_image_dataset.py) (Single-image data), [`basicsr/archs/wfdiffx2_arch.py`](https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/wfdiffx2_arch.py) (Enhancement network)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Training workflow"]
  node_train["Training runner<br/>[train.py]"]
  node_model["F2DM model<br/>[Wfdiff_model.py]"]
end

subgraph group_data["Image data"]
  node_paired["Paired datasets"]
  node_single["Single-image data"]
  node_transforms["Image transforms<br/>[transforms.py]"]
  node_storage["File access<br/>[file_client.py]"]
end

subgraph group_restoration["F2DM restoration"]
  node_network["Enhancement network<br/>[wfdiffx2_arch.py]"]
  node_wavelet["Wavelet decomposition<br/>[wavelet.py]"]
  node_bands["Band modulation<br/>[dft_arch.py]"]
  node_fusion["Cross-band fusion<br/>[dft_arch.py]"]
end

subgraph group_framework["BasicSR services"]
  node_base["Model base<br/>[base_model.py]"]
  node_loss["Training losses<br/>[losses.py]"]
  node_metrics["Image metrics<br/>[psnr_ssim.py]"]
end

node_engineer(("Researcher"))
node_enhanced["Enhanced images"]
node_targets["Reference images"]

node_engineer -->|"starts training"| node_train
node_engineer -->|"provides inputs"| node_single
node_paired -->|"reads image pairs"| node_storage
node_single -->|"reads images"| node_storage
node_paired -->|"transforms pairs"| node_transforms
node_single -->|"transforms images"| node_transforms
node_train -->|"builds datasets"| node_paired
node_train -->|"optimizes model"| node_model
node_train -->|"evaluates outputs"| node_metrics
node_model -->|"uses model utilities"| node_base
node_model -->|"runs enhancement"| node_network
node_network -->|"decomposes bands"| node_wavelet
node_network -->|"modulates frequencies"| node_bands
node_network -->|"fuses frequencies"| node_fusion
node_model -->|"computes training loss"| node_loss
node_paired -->|"supplies references"| node_targets
node_metrics -->|"compares references"| node_targets
node_model -->|"produces enhanced images"| node_enhanced
node_single -->|"provides input images"| node_model

click node_train "https://github.com/mingc0816/f2dm/blob/main/basicsr/train.py"
click node_paired "https://github.com/mingc0816/f2dm/blob/main/basicsr/data/paired_image_dataset.py"
click node_single "https://github.com/mingc0816/f2dm/blob/main/basicsr/data/single_image_dataset.py"
click node_transforms "https://github.com/mingc0816/f2dm/blob/main/basicsr/data/transforms.py"
click node_storage "https://github.com/mingc0816/f2dm/blob/main/basicsr/utils/file_client.py"
click node_model "https://github.com/mingc0816/f2dm/blob/main/basicsr/models/Wfdiff_model.py"
click node_base "https://github.com/mingc0816/f2dm/blob/main/basicsr/models/base_model.py"
click node_network "https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/wfdiffx2_arch.py"
click node_wavelet "https://github.com/mingc0816/f2dm/blob/main/basicsr/models/wavelet.py"
click node_bands "https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/Padiff_arch/dft_arch.py"
click node_fusion "https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/Padiff_arch/dft_arch.py"
click node_loss "https://github.com/mingc0816/f2dm/blob/main/basicsr/losses/losses.py"
click node_metrics "https://github.com/mingc0816/f2dm/blob/main/basicsr/metrics/psnr_ssim.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_train,node_model toneBlue
class node_paired,node_single,node_transforms,node_storage toneAmber
class node_network,node_wavelet,node_bands,node_fusion toneMint
class node_base,node_loss,node_metrics toneRose
class node_engineer,node_enhanced,node_targets toneIndigo
```

## Components

### Training workflow

- [Training runner](https://github.com/mingc0816/f2dm/blob/main/basicsr/train.py): `basicsr/train.py`
- [F2DM model](https://github.com/mingc0816/f2dm/blob/main/basicsr/models/Wfdiff_model.py): `basicsr/models/Wfdiff_model.py`

### Image data

- [Paired datasets](https://github.com/mingc0816/f2dm/blob/main/basicsr/data/paired_image_dataset.py): `basicsr/data/paired_image_dataset.py`
- [Single-image data](https://github.com/mingc0816/f2dm/blob/main/basicsr/data/single_image_dataset.py): `basicsr/data/single_image_dataset.py`
- [Image transforms](https://github.com/mingc0816/f2dm/blob/main/basicsr/data/transforms.py): `basicsr/data/transforms.py`
- [File access](https://github.com/mingc0816/f2dm/blob/main/basicsr/utils/file_client.py): `basicsr/utils/file_client.py`

### F2DM restoration

- [Enhancement network](https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/wfdiffx2_arch.py): `basicsr/archs/wfdiffx2_arch.py`
- [Wavelet decomposition](https://github.com/mingc0816/f2dm/blob/main/basicsr/models/wavelet.py): `basicsr/models/wavelet.py`
- [Band modulation](https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/Padiff_arch/dft_arch.py): `basicsr/archs/Padiff_arch/dft_arch.py`
- [Cross-band fusion](https://github.com/mingc0816/f2dm/blob/main/basicsr/archs/Padiff_arch/dft_arch.py): `basicsr/archs/Padiff_arch/dft_arch.py`

### BasicSR services

- [Model base](https://github.com/mingc0816/f2dm/blob/main/basicsr/models/base_model.py): `basicsr/models/base_model.py`
- [Training losses](https://github.com/mingc0816/f2dm/blob/main/basicsr/losses/losses.py): `basicsr/losses/losses.py`
- [Image metrics](https://github.com/mingc0816/f2dm/blob/main/basicsr/metrics/psnr_ssim.py): `basicsr/metrics/psnr_ssim.py`

### Other components

- **Researcher**
- **Enhanced images**
- **Reference images**

## Connections

- Researcher → Training runner: starts training
- Researcher → Single-image data: provides inputs
- Paired datasets → File access: reads image pairs
- Single-image data → File access: reads images
- Paired datasets → Image transforms: transforms pairs
- Single-image data → Image transforms: transforms images
- Training runner → Paired datasets: builds datasets
- Training runner → F2DM model: optimizes model
- Training runner → Image metrics: evaluates outputs
- F2DM model → Model base: uses model utilities
- F2DM model → Enhancement network: runs enhancement
- Enhancement network → Wavelet decomposition: decomposes bands
- Enhancement network → Band modulation: modulates frequencies
- Enhancement network → Cross-band fusion: fuses frequencies
- F2DM model → Training losses: computes training loss
- Paired datasets → Reference images: supplies references
- Image metrics → Reference images: compares references
- F2DM model → Enhanced images: produces enhanced images
- Single-image data → F2DM model: provides input images
