Upload ConvGRU-Ensemble model
Browse files- README.md +82 -0
- config.json +23 -0
- model.ckpt +3 -0
README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: bsd-2-clause
|
| 3 |
+
language: en
|
| 4 |
+
tags:
|
| 5 |
+
- weather
|
| 6 |
+
- nowcasting
|
| 7 |
+
- radar
|
| 8 |
+
- precipitation
|
| 9 |
+
- ensemble-forecasting
|
| 10 |
+
- convgru
|
| 11 |
+
- earth-observation
|
| 12 |
+
library_name: pytorch
|
| 13 |
+
pipeline_tag: image-to-image
|
| 14 |
+
---
|
| 15 |
+
|
| 16 |
+
# IRENE — Italian Radar Ensemble Nowcasting Experiment
|
| 17 |
+
|
| 18 |
+
**IRENE** is a ConvGRU encoder-decoder model for short-term precipitation forecasting (nowcasting) from radar data. The model generates probabilistic ensemble forecasts, producing multiple plausible future scenarios from a single input sequence.
|
| 19 |
+
|
| 20 |
+
## Model Description
|
| 21 |
+
|
| 22 |
+
- **Architecture**: ConvGRU encoder-decoder with PixelShuffle/PixelUnshuffle for spatial scaling
|
| 23 |
+
- **Input**: Sequence of past radar rain rate fields (T, H, W) in mm/h
|
| 24 |
+
- **Output**: Ensemble of future rain rate forecasts (E, T, H, W) in mm/h
|
| 25 |
+
- **Temporal resolution**: 5 minutes per timestep
|
| 26 |
+
- **Training loss**: Continuous Ranked Probability Score (CRPS) with temporal consistency regularization
|
| 27 |
+
|
| 28 |
+
The model encodes past radar observations into multi-scale hidden states using stacked ConvGRU blocks with PixelUnshuffle downsampling. The decoder generates forecasts by unrolling with different random noise inputs, producing diverse ensemble members that capture forecast uncertainty.
|
| 29 |
+
|
| 30 |
+
## Intended Uses
|
| 31 |
+
|
| 32 |
+
- Short-term precipitation forecasting (0-60 min ahead) from radar reflectivity data
|
| 33 |
+
- Probabilistic nowcasting with uncertainty quantification via ensemble spread
|
| 34 |
+
- Research on deep learning for weather prediction
|
| 35 |
+
- Fine-tuning on regional radar datasets
|
| 36 |
+
|
| 37 |
+
## How to Use
|
| 38 |
+
|
| 39 |
+
```python
|
| 40 |
+
from convgru_ensemble import RadarLightningModel
|
| 41 |
+
|
| 42 |
+
# Load from HuggingFace Hub
|
| 43 |
+
model = RadarLightningModel.from_pretrained("it4lia/irene")
|
| 44 |
+
|
| 45 |
+
# Run inference on past radar data (rain rate in mm/h)
|
| 46 |
+
import numpy as np
|
| 47 |
+
past = np.random.rand(6, 256, 256).astype(np.float32) # 6 past timesteps
|
| 48 |
+
forecasts = model.predict(past, forecast_steps=12, ensemble_size=10)
|
| 49 |
+
# forecasts.shape = (10, 12, 256, 256) — 10 ensemble members, 12 future steps
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
## Training Data
|
| 53 |
+
|
| 54 |
+
Trained on the Italian DPC (Dipartimento della Protezione Civile) radar mosaic surface rain intensity (SRI) dataset, covering the Italian territory at ~1 km resolution with 5-minute temporal resolution.
|
| 55 |
+
|
| 56 |
+
## Training Procedure
|
| 57 |
+
|
| 58 |
+
- **Optimizer**: Adam (lr=1e-4)
|
| 59 |
+
- **Loss**: CRPS with temporal consistency penalty (lambda=0.01)
|
| 60 |
+
- **Batch size**: 16
|
| 61 |
+
- **Ensemble size during training**: 2 members
|
| 62 |
+
- **Input window**: 6 past timesteps (30 min)
|
| 63 |
+
- **Forecast horizon**: 12 future timesteps (60 min)
|
| 64 |
+
- **Data augmentation**: Random rotations and flips
|
| 65 |
+
- **NaN handling**: Masked loss for missing radar data
|
| 66 |
+
|
| 67 |
+
## Limitations
|
| 68 |
+
|
| 69 |
+
- Trained on Italian radar data; performance may degrade on other domains without fine-tuning
|
| 70 |
+
- 5-minute temporal resolution only
|
| 71 |
+
- Best suited for convective and stratiform precipitation; extreme events may be underrepresented
|
| 72 |
+
- Ensemble spread is generated via noisy decoder inputs, not a full Bayesian approach
|
| 73 |
+
|
| 74 |
+
## Acknowledgements
|
| 75 |
+
|
| 76 |
+
This model was developed as part of the **Italian AI-Factory** (IT4LIA), an EU-funded initiative supporting the adoption of AI across SMEs, academia, and public/private sectors. The AI-Factory provides free HPC compute, consultancy, and AI-ready datasets. This work showcases capabilities in the **Earth (weather and climate) vertical domain**.
|
| 77 |
+
|
| 78 |
+
Developed at **Fondazione Bruno Kessler (FBK)**, Trento, Italy.
|
| 79 |
+
|
| 80 |
+
## License
|
| 81 |
+
|
| 82 |
+
BSD 2-Clause License
|
config.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"input_channels": 1,
|
| 3 |
+
"forecast_steps": 12,
|
| 4 |
+
"num_blocks": 5,
|
| 5 |
+
"ensemble_size": 10,
|
| 6 |
+
"noisy_decoder": true,
|
| 7 |
+
"loss_class": "crps",
|
| 8 |
+
"loss_params": {
|
| 9 |
+
"temporal_lambda": 0.01
|
| 10 |
+
},
|
| 11 |
+
"masked_loss": false,
|
| 12 |
+
"optimizer_class": "<class 'torch.optim.adam.Adam'>",
|
| 13 |
+
"optimizer_params": {
|
| 14 |
+
"lr": 0.0001,
|
| 15 |
+
"fused": true
|
| 16 |
+
},
|
| 17 |
+
"lr_scheduler_class": "<class 'torch.optim.lr_scheduler.ReduceLROnPlateau'>",
|
| 18 |
+
"lr_scheduler_params": {
|
| 19 |
+
"mode": "min",
|
| 20 |
+
"factor": 0.5,
|
| 21 |
+
"patience": 10
|
| 22 |
+
}
|
| 23 |
+
}
|
model.ckpt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:58df5c2d43e131b632ec9cf41e66465b7c7167202a851a4aaa84951308f74699
|
| 3 |
+
size 770192441
|