Denoise images without ever seeing a clean photo
A Keras sandbox for the counterintuitive Noise2Noise paper: train on pairs of noisy images and still learn to clean them up.

What it does
This repo implements the core Noise2Noise training trick in Keras: you feed a neural network two independently corrupted versions of the same image, and it learns to map from one noise sample to the other. Because the noise is random and zero-mean, the network effectively averages it away and learns to predict the underlying clean signal—without ever being shown ground-truth clean data during training.
The interesting bit
The author swaps in SRResNet or UNet for the paper’s original RED30 architecture, and trades ImageNet for a much smaller super-resolution dataset. The README is admirably honest about the gaps: noisy-target training works, but PSNR lags behind clean-target training by roughly half a decibel on Gaussian noise.
Key highlights
- Supports Gaussian, text insertion, and random-valued impulse noise models via simple string arguments (
gaussian,0,50,text,0,50, etc.) - Includes pre-trained weights for all three noise types, both noise-target and clean-target baselines
- UNet or SRResNet selectable with
--model unet - Training resumable from checkpoint weights
test_model.pyhandles both synthetic-noise evaluation and denoising of already-noisy images
Caveats
- The author explicitly calls this “partial” and “unofficial”; dataset and architecture differ from the paper
- Noisy-target results trail clean-target results in the reported benchmarks, so this is more proof-of-concept than SOTA
- L0 loss for impulse noise is included, but the README doesn’t explain why it was chosen or how it behaves
Verdict
Worth a spin if you want to see Noise2Noise work without wrangling the official (nonexistent?) release, or if you’re teaching the concept. Skip it if you need production denoising or a faithful paper reproduction.