glori: LDM + SWIIT for LOFAR radio sky maps

Pretrained weights for glori (Generate LOFAR Radio Images) — a latent diffusion model (LDM) that generates realistic, synthetic radio-continuum survey maps (simulated LOFAR skies), with explicit control over the position, brightness, and size of sources via a catalog context vector. Paired with SWIIT sampling, a sliding-window technique, it can generate maps of arbitrary size.

Reference implementation and full documentation: github.com/tmartinezML/glori

Paper

T. Vicánek Martínez and M. Brüggen (2026), "Generating radio continuum survey maps of arbitrary size with latent diffusion models", A&A, arXiv:2609.06549

If you use these weights, please cite the paper above.

Files in this repository

File Component Notes
VQ-VAE-256-DR3opt-FT.ckpt VQ-VAE image ↔ latent compression, downsampling factor 4
LDM-Denoiser-WnetCC-v5.ckpt Denoiser catalog-context-conditioned diffusion U-Net
scalers/LOFAR_scaler_II.pt Image scaler inverse-transforms generated latents/maps back to physical (Jy/beam-like) units
scalers/ctxt_scaler_ftot.pt Context scaler used only if you construct catalog context via ContextScaler (see repo)
scalers/ctxt_scaler_fpeak.pt Context scaler "
scalers/ctxt_scaler_maj.pt Context scaler "

Both checkpoints are stripped to inference-only state (weights + hyperparameters, no optimizer/training state) via the reference repo's scripts/release/strip_checkpoint.py.

How to use

Requires the glori package (see the reference repo for installation — pinned dependencies including torch==2.2.1, numpy==1.25.2, and a specific vqtorch commit).

import torch
from glori.config.swiit_config import SWIITSamplerConfig
from glori.inference.swiit_sampler import SWIITSampler
from glori.data.trf.scalers import LOFARScaler
from glori.hub import download_pretrained

DENOISER_CKPT = download_pretrained("denoiser")
VAE_CKPT = download_pretrained("vae")
SCALER_PATH = download_pretrained("scaler")

config = SWIITSamplerConfig(
    denoiser="unused",  # ignored: an explicit "/" path in *_ckpt below bypasses name lookup
    denoiser_ckpt=DENOISER_CKPT,
    vae="unused",
    vae_ckpt=VAE_CKPT,
    device="cuda:0" if torch.cuda.is_available() else "cpu",
)
sampler = SWIITSampler(config=config)
sampler.scaler = LOFARScaler(**torch.load(SCALER_PATH, weights_only=False))

map_image, latent_map = sampler.sample(sampling_steps=(2, 2), timesteps=25)
physical_map = sampler.scaler.inverse_scale(map_image)  # back to Jy/beam-like units

For catalog-conditioned generation, larger maps, and the sampling parameters, see tutorials/tutorial_getting_started.ipynb in the reference repo.

Intended use & limitations

These models generate synthetic radio-continuum sky maps for augmenting training sets, testing pipelines, and methodology research — outputs are not real observations and should not be presented as such. Generated maps carry known, characteristic SWIIT-sampling artifacts (e.g. faint striping at patch-overlap boundaries at full mask coverage); see the paper's Section on quality evaluation for details.

Training data

Both models were trained on image patches derived from LoTSS-DR2 (LOFAR Two-metre Sky Survey, Data Release 2) Stokes I continuum maps.

License

CC BY-SA 4.0. License inherited from the training data (LoTSS-DR2) as this data itself is licensed CC BY-SA 3.0. Commercial use is permitted, but if you redistribute a modified/fine-tuned version of these weights, it must also be released under a compatible CC BY-SA license with attribution.

If you use these weights, please cite both:

  • T. Vicánek Martínez and M. Brüggen (2026), "Generating radio continuum survey maps of arbitrary size with latent diffusion models", A&A, arXiv:2609.06549
  • Shimwell et al. (2022), "The LOFAR Two-metre Sky Survey. V. Second data release", A&A, 10.1051/0004-6361/202142484
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for astrokevin/glori-ldm-swiit