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 channels
  • body: 16 residual blocks (conv-ReLU-conv, res_scale 0.1, no BatchNorm) with a long skip
  • tail: 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()
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support