Precipitation Downsampling

Using a Dual-Branch U-Net CNN to downscale NASA IMERG satellite precipitation from 10 km to 250 m resolution over the Big Island of Hawaiʼi.

The Problem

NASA's IMERG satellite product provides global daily precipitation estimates, but at a coarse 0.1° resolution (~10 km per pixel). This resolution is too coarse to capture the fine-scale rainfall gradients driven by Hawaiʼi's complex topography — a single pixel can span everything from a coastal rain shadow to a windward summit receiving over 10 meters of rain per year.

The goal of this project is to use a convolutional neural network to downscale the satellite data from 10 km to 250 m resolution, using high-resolution topographic data (elevation, slope, aspect) and GOES-17 cloud cover as auxiliary inputs. Ground-truth supervision comes from ~165 rain gauge stations operated by the Hawaiʼi Climate Data Portal (HCDP).

InputSourceResolution
Daily precipitationNASA IMERG Early Run V07B~10 km
Binary cloud maskGOES-17 BCM~2 km
Elevation / Slope / AspectSRTM DEM30 m

Approach

The model is a Dual-Branch U-Net that processes two input modalities through independent encoder branches before fusing them at a shared bottleneck.

Branch 1IMERG precipitation + GOES-17 cloud mask (2 channels)
Branch 2DEM elevation, slope, aspect (3 channels)

Architecture

Input (B, 5, 32, 32)
        │
        ├─── Branch 1 (IMERG + GOES, 2 ch) ─── Branch 2 (Topo, 3 ch) ───┐
        │    ConvBlock(2→32) → Pool              ConvBlock(3→32) → Pool   │
        │    ConvBlock(32→64) → Pool             ConvBlock(32→64) → Pool  │
        │    ConvBlock(64→128) → Pool            ConvBlock(64→128) → Pool │
        └──────────── cat(dim=1) → (B, 256, 4, 4) ───────────────────────┘
                          ConvBlock(256→256)
                               │
                    ── Shared Decoder ──
              ConvTranspose2d(256→128) → ConvBlock(128→128)
              ConvTranspose2d(128→64)  → ConvBlock(64→64)
              ConvTranspose2d(64→32)   → ConvBlock(32→32)
                       Conv2d(32→1, 1×1)
                               │
                      Output (B, 1, 32, 32)

Loss Function

Loss = λ₁ · MaskedMSE + λ₂ · TVLoss

MaskedMSE computes error only at rain gauge pixels (station mask). TVLoss penalises abrupt spatial gradients, encouraging smooth precipitation fields. λ₁ = 1.0, λ₂ = 0.1.

Results

MetricValueNote
Best val loss0.0361epoch 24 / 50
Test loss0.0332Apr–Jun 2021
Train/val MSE gap~0.006mild overfit
Total parameters2.3 M

Training Loss Curve

Loss curve showing train and validation loss over 50 epochs

Interactive Demo

Slide to blend between the raw IMERG input (10 km) and the Dual-Branch U-Net prediction (250 m). Pick a date to load a different day.

IMERGPrediction
0 mm/day → high (normalised)

About

This project uses a Dual-Branch U-Net convolutional neural network to downscale NASA IMERG precipitation data from 10 km to 250 m resolution over the Big Island of Hawaiʼi. The model fuses satellite precipitation and cloud cover with high-resolution topographic data to produce fine-scale daily rainfall fields, supervised by ~165 ground-truth rain gauge stations from the Hawaiʼi Climate Data Portal.

Special Thanks

Special thanks to Elisabeth Tappert and Gabriela de Leon for their support throughout this project — helping with data reprojection, building the input DataLoader pipeline, and rasterising rain gauge station data into training targets.