Skip to main content

Modular Super-Resolution GAN Framework for Remote Sensing.

Project description

PyPI Python License: MIT CI Docs Coverage

banner

🌍 Single Image Super-Resolution Remote Sensing 'SRGAN'

Remote-Sensing-SRGAN is a research-grade GAN framework for super-resolution of Sentinel-2 and other remote-sensing imagery. It supports arbitrary band counts, configurable generator/discriminator designs, scalable depth/width, and a modular loss system designed for stable GAN training on EO data.


📖 Documentation

Full docs live at srgan.opensr.eu. They cover usage, configuration, training recipes, and deployment tips in depth.

🧠 Highlights

  • Flexible models: swap between SRResNet, RCAB, RRDB, and LKA-style generators with YAML-only changes.
  • Remote-sensing aware losses: combine spectral, perceptual, and adversarial objectives with tunable weights.
  • Stable training loop: generator pretraining, adversarial ramp-ups, EMA, and multi-GPU Lightning support out of the box.
  • PyPI distribution: pip install opensr-srgan for ready-to-use presets or custom configs.
  • Extensive Logging: Logging all important information automatically to WandB for optimal insights.

🏗️ Configuration Examples

All key knobs are exposed via YAML in the opensr_srgan/configs folder:

  • Model: in_channels, n_channels, n_blocks, scale, block_type ∈ {SRResNet, res, rcab, rrdb, lka}
  • Losses: l1_weight, sam_weight, perceptual_weight, tv_weight, adv_loss_beta
  • Training: pretrain_g_only, g_pretrain_steps, adv_loss_ramp_steps, label_smoothing, generator LR warmup (Schedulers.g_warmup_steps, Schedulers.g_warmup_type), discriminator cadence controls
  • Data: band order, normalization stats, crop sizes, augmentations

🎚️ Training Stabilization Strategies

  • G‑only pretraining: Train with content/perceptual losses while the adversarial term is held at zero during the first g_pretrain_steps.
  • Adversarial ramp‑up: Increase the BCE adversarial weight linearly or smoothly (cosine) over adv_loss_ramp_steps until it reaches adv_loss_beta.
  • Generator LR warmup: Ramp the generator optimiser with a cosine or linear schedule for the first 1–5k steps via Schedulers.g_warmup_steps/g_warmup_type before switching to plateau-based reductions.
  • EMA smoothing: Enable Training.EMA.enabled to keep a shadow copy of the generator. Decay values in the 0.995–0.9999 range balance responsiveness with stability and are swapped in automatically for validation/inference.

The schedule and ramp make training easier, safer, and more reproducible.


⚙️ Config‑driven components

Component Options Config keys
Generators SRResNet, res, rcab, rrdb, lka Generator.model_type, depth via Generator.n_blocks, width via Generator.n_channels, kernels and scale.
Discriminators standard SRGAN CNN, patchgan Discriminator.model_type, granularity with Discriminator.n_blocks.
Content losses L1, Spectral Angle Mapper, VGG19/LPIPS perceptual metrics, Total Variation Weighted by Training.Losses.* (e.g. l1_weight, sam_weight, perceptual_weight, perceptual_metric, tv_weight).
Adversarial loss BCE‑with‑logits on real/fake logits Warmup via Training.pretrain_g_only, ramped by adv_loss_ramp_steps, capped at adv_loss_beta, optional label smoothing.

The YAML keeps the SRGAN flexible: swap architectures or rebalance perceptual vs. spectral fidelity without touching the code.

🧰 Installation

Follow the installation instructions for package, source, and dependency setup options.


🚀 Quickstart

  • Datasets: Dataset structure, downloads, and custom loaders are documented in the data guide.
  • Training: Launch training with python -m opensr_srgan.train --config opensr_srgan/configs/config.yaml or follow the training walkthrough.
  • Inference: Ready-made presets and large-scene pipelines are described in the inference section.

🏗️ Configuration & Stabilization

All tunable knobs—architectures, loss weights, schedulers, and EMA—are exposed via YAML files under opensr_srgan/configs. Strategy tips for warm-ups, adversarial ramps, and EMA usage are summarised in the training concepts chapter.

📂 Repository Structure

SISR-RS-SRGAN/
├── opensr_srgan/         # Library + training code
├── docs/                 # MkDocs documentation sources
├── paper/                # Publication, figures, and supporting material
├── pyproject.toml        # Packaging metadata
└── requirements.txt      # Development dependencies

📚 Related Projects

  • OpenSR-Model – Latent Diffusion SR (LDSR-S2)
  • OpenSR-Utils – Large-scale inference & data plumbing
  • OpenSR-Test – Benchmarks & metrics
  • SEN2NEON – Multispectral HR reference dataset

✍️ Citation

If you use this work, please cite:

coming soon...

🧑‍🚀 Authors & Acknowledgements

Developed by Simon Donike (IPL–UV) within the ESA Φ-lab / OpenSR initiative.


🧑‍🚀 ToDOs

  • create inference.py (interface with opensr-test)
  • build interface with SEN2SR (for 10m + 20m SR)
  • incorporate the SEN2NAIP versions + downloading
  • implement different discriminators

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opensr_srgan-0.1.25.tar.gz (65.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opensr_srgan-0.1.25-py3-none-any.whl (76.9 kB view details)

Uploaded Python 3

File details

Details for the file opensr_srgan-0.1.25.tar.gz.

File metadata

  • Download URL: opensr_srgan-0.1.25.tar.gz
  • Upload date:
  • Size: 65.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for opensr_srgan-0.1.25.tar.gz
Algorithm Hash digest
SHA256 6edbd8098d0e05bb3065fb07bc5f2ad3bf12284e25cb11a61f116dce991bf326
MD5 6274742deeb0fefef82883887bd8bd23
BLAKE2b-256 3021e782b418d22ce09b43c112196b2aee656bd2bb64a52f273af17f6740ed21

See more details on using hashes here.

File details

Details for the file opensr_srgan-0.1.25-py3-none-any.whl.

File metadata

  • Download URL: opensr_srgan-0.1.25-py3-none-any.whl
  • Upload date:
  • Size: 76.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for opensr_srgan-0.1.25-py3-none-any.whl
Algorithm Hash digest
SHA256 668b95f298ec2bb936af458ede3f760991c16fe0aedff68ad8c4f15ec31440e0
MD5 c2540af658530a46ef41784c4703f9f9
BLAKE2b-256 b07bed1c4e8a955c4ecd529b2b83daad831ca6032a6f350868d60ccedbc15f49

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page