Mamba vs. Transformers for satellite super-resolution
My undergraduate thesis at St Andrews. I implemented SwinIR and MambaIR from scratch in PyTorch and Triton and trained them on a cross-sensor dataset I built myself (Sentinel-2 to NAIP), reaching 20.5 dB PSNR and 0.484 SSIM. I hadn't worked with satellite imagery, state-space models or Triton before this project.
- Role
- Solo, supervised by Dr Oggie Arandelovic
- Timeline
- 2024 — 2025
- Stack
- PyTorch, Triton, SwinIR, MambaIR, Sentinel-2, NAIP
- Status
- Thesis and repo below
The problem
High-resolution satellite imagery is expensive, while Sentinel-2 is free at 10 m resolution. I wanted to know whether generative models could bridge that gap for non-commercial users, and whether the compute cost of a vision transformer was really necessary or a state-space model could do the same work.
What I built
A geospatial pipeline with cross-sensor alignment, tiling and augmentation, both architectures implemented from scratch with no pretrained weights, and a full evaluation suite with visual comparisons and an ablation study.
Results
20.5 dB PSNR and 0.484 SSIM on the held-out set. The ablation showed the state-space model's efficiency advantage on restoration at comparable quality, which was the answer I was hoping to find.
What I'd do differently
This was the project where I learned that I can pick up a field from zero and ship something measurable in it, and that's been the pattern ever since. The metric is the weak point, though. PSNR rewards blur. I'd add a downstream task like detection on the upscaled tiles as the real test.

