NPPE-3: Low-Light Denoising + 4x Super-Resolution
DLP 26T2 NPPE-3 — roll number 22f3000985
EDSR-style residual CNN (16 residual blocks, 128 channels, ~6.0M parameters) trained with Charbonnier loss on 48x48 low-resolution patches.
- Input: low-resolution, noisy, low-light RGB image (160x256)
- Output: 4x upscaled, denoised, exposure-corrected RGB image (640x1024)
- Validation PSNR: 38.97 dB (grayscale, 1-in-8 subsampled, matching the competition metric)
- Kaggle public leaderboard: 39.508 dB
Architecture
head: 3x3 conv, 3 -> 128 channelsbody: 16 residual blocks (conv-ReLU-conv, res_scale 0.1, no BatchNorm) with a long skiptail: two conv + PixelShuffle(2) stages for 4x upsampling, then 3x3 conv back to RGB- A bilinear-upsampled copy of the input is added at the output, so the network learns the residual
Training
Adam (lr 2e-4, cosine annealed to 1e-6), mixed precision, 125 epochs on 1105 image pairs, random 48x48 crops with flip and 90-degree rotation augmentation. Inference uses x8 self-ensemble (flip/rotate TTA).
Usage
import torch
ckpt = torch.load('best_model.pth', map_location='cpu')
model = EDSR(scale=4, n_feats=128, n_blocks=16) # see the notebook for the class definition
model.load_state_dict(ckpt['model'])
model.eval()
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support