The visual results were striking. The PSNR numbers were embarrassing. Here's what I learned from spending six months on satellite image super-resolution.
The setup
MSc thesis at CNRS GeoAI Group. The task: upscale Sentinel-2 multispectral imagery 4× (40m/px → 10m/px) using deep learning. Four architectures compared: SRCNN, RCAN, SRGAN, ESRGAN.
The question was whether GAN-based methods would outperform CNN baselines — on the metrics that actually matter for remote sensing applications.
What the eye says
Show a geographer the 4× outputs from ESRGAN next to RCAN, and they'll pick ESRGAN every time. The textures are sharper. Field boundaries look crisp. Road edges resolve cleanly. It looks like higher resolution.
What PSNR says
PSNR (peak signal-to-noise ratio) measures pixel-level fidelity to the ground truth. RCAN: 31.8 dB. ESRGAN: 28.4 dB. SRGAN: 27.9 dB. SRCNN (the 2014 baseline): 30.2 dB.
The GAN outputs are less faithful to the actual high-resolution ground truth, even though they look sharper.
Why
Adversarial loss doesn't optimize for pixel accuracy. It optimizes for "looks like a real high-resolution image to a discriminator." Those are different objectives.
In practice, ESRGAN is generating plausible high-frequency texture that wasn't in the input. For a photograph of a mountain, that's fine — the hallucinated texture is visually coherent. For satellite imagery, it's a problem: a hallucinated field boundary that doesn't exist in the real image is a mapping error, not an aesthetic choice.
SSIM tells a similar story. LPIPS (perceptual similarity) goes the other way — GANs win, because LPIPS is correlated with what humans find perceptually convincing, which is what GANs are optimized for.
The domain matters
Super-resolution for visual media and super-resolution for geospatial analysis are different tasks. The literature on SR mostly optimizes for Set5/Set14 benchmarks, which evaluate perceptual quality on natural images. Sentinel-2 imagery is not a natural image — it's a measurement.
For applications that need pixel fidelity (crop yield estimation, building footprint extraction, change detection), PSNR/SSIM are the right metrics and CNN baselines are competitive with or better than GANs. For applications that need visual plausibility (map display, analyst browsing), GANs win.
What I'd do differently
Evaluate on task, not just metric. We evaluated on PSNR/SSIM/LPIPS, but the downstream task was crop boundary detection. I should have run a boundary detection model on the SR outputs and compared boundary accuracy. That would have surfaced the GAN hallucination problem earlier.
Try conditional GANs. Standard SRGAN uses a unconditional discriminator. A discriminator conditioned on the LR input might penalize hallucinations that have no support in the input image. I didn't have time to test this but it's the obvious next experiment.
The adversarial loss weight matters more than the architecture. Late in the thesis, I ran ablations on the GAN loss weight. At low weights, SRGAN approached RCAN on PSNR while retaining some texture sharpness. The sweet spot varied by scene type. This deserved more systematic study.
Closing
GANs for satellite SR are not wrong — they're solving a different problem than I initially thought. The lesson is to be precise about what "better" means before you run the first training job.