← writing
2026-02-18ml10 min read

GANs are great until you check PSNR

Closing notes from my MSc thesis: where adversarial loss helps satellite super-resolution and where it actively lies.

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.