Drishti Flood Nowcaster — Baseline U-Net (SIH 26085)
Baseline urban-flood nowcasting model for Smart India Hackathon 26085 (Urban Flood Nowcasting System, MoES/NCMRWF): 30-min rainfall/depth history + static terrain maps → flood depth at 9 lead times (5–180 min) on a 110×160 @5 m grid.
⚠️ Trained on SYNTHETIC data. All drainage networks are terrain-inferred (
verified=false), never surveyed KIET infrastructure. Flood depths are physics-model output, never observed flooding. Demo/research use only — not for engineering decisions.
Files
pytorch_model.bin— main weights (100-scenario train, 1.9 MB;{"model": state_dict, "in_ch": 36})baseline_subset30.pt— earlier 30-scenario smoke-run weightsbaseline_unet.py— architecture (BaselineUNet, 476k params)training.log— full training log
Metrics (validation, 49 scenarios / 542 windows)
| +30 min | +180 min | |
|---|---|---|
| RMSE (m) | 0.048 | 0.049 |
| Train loss | 0.1374 → 0.1362 (10 epochs, batch 16, Adam 1e-3) |
Loss = MSE(depth) + 0.2·BCE(flooded mask ≥ 5 cm). Test/OOD eval pending (streaming loader).
Usage
import torch
from baseline_unet import BaselineUNet
m = BaselineUNet(in_ch=36, n_leads=9)
m.load_state_dict(torch.load("pytorch_model.bin", map_location="cpu")["model"])
m.eval()
# x: (B, 36, 110, 160) = 9 static + 18 dyn-hist + 9 future-rain (train-normed)
# y: (B, 9, 110, 160) flood depth in metres at leads [5,10,20,30,40,60,90,120,180] min
with torch.no_grad():
y = m(torch.zeros(1, 36, 110, 160))
Training data
Stratified synthetic scenarios (rainfall class quotas + Latin-Hypercube sampling):
227 train / 49 val / 48 test scenarios + 34 OOD. Physics: diffusive-wave storage-cell
solver (Bates & De Roo 2000) + Manning pipes, mass conserved ~1e-8.
Normalization (normalization_train.json) computed from TRAIN only.
Source
Built in the Drishti repo — see report.md §§16–18,
docs/dataset_report.md, knowledge.md §6.1.