Model card: StormFusion-MT v2 + TrackFormer (track-only), WP-2020+ results
Browse files
README.md
CHANGED
|
@@ -1,74 +1,67 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
| 4 |
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
|
|
|
|
| 8 |
|
| 9 |
-
|
| 10 |
-
-
|
| 11 |
-
-
|
| 12 |
-
|
| 13 |
-
- A latent projection used to create correlated ensemble members for uncertainty-aware forecasts.
|
| 14 |
|
| 15 |
-
|
|
|
|
| 16 |
|
| 17 |
-
##
|
| 18 |
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
- ERA5
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
- Storm-centered patches with an 8 degree half-width at 0.5 degree resolution.
|
| 26 |
-
- Chronological split: training through 2015 and validation through 2019.
|
| 27 |
-
- Batch size 64, learning rate 2e-4, weight decay 1e-4.
|
| 28 |
-
- Up to 80 epochs with early stopping patience of 12 epochs.
|
| 29 |
-
- 50 ensemble members for uncertainty sampling.
|
| 30 |
|
| 31 |
-
|
| 32 |
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
-
|
| 36 |
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
4. Historical track sequences paired with future positions at the configured lead times.
|
| 41 |
-
5. Chronological train and validation splits.
|
| 42 |
|
| 43 |
-
|
| 44 |
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
The local inference script loads a PyTorch checkpoint, prepares the configured input sequence, runs ensemble sampling, and writes forecast points plus an optional HTML map. See run_inference.py and the GitHub repository for the current command-line workflow.
|
| 48 |
-
|
| 49 |
-
When live ERA5 data is unavailable, the example inference path uses normalized atmospheric inputs as a software smoke test. Operational or scientific use requires real, correctly aligned atmospheric analysis data.
|
| 50 |
-
|
| 51 |
-
## Minimum System Requirements
|
| 52 |
-
|
| 53 |
-
For local inference with the released PyTorch checkpoint:
|
| 54 |
-
|
| 55 |
-
- Operating system: macOS, Linux, or Windows
|
| 56 |
-
- Python: 3.10 or newer
|
| 57 |
-
- Processor: 64-bit CPU with four cores or more
|
| 58 |
-
- Memory: 8 GB RAM minimum; 16 GB recommended
|
| 59 |
-
- Storage: 2 GB free space for the repository, environment, checkpoint, and generated forecasts
|
| 60 |
-
- GPU: not required; CPU inference is supported. Apple Silicon can use MPS when available.
|
| 61 |
-
|
| 62 |
-
For faster experimentation, training, or batch inference, use a CUDA-capable NVIDIA GPU with at least 16 GB VRAM. An A100 or H100 is suitable for full training, but is not required to run the released checkpoint.
|
| 63 |
-
|
| 64 |
-
## Model Formats
|
| 65 |
-
|
| 66 |
-
The native release format is PyTorch. GGUF is designed primarily for transformer-style language models and is not a suitable interchange format for this custom CNN-GRU probabilistic model. ONNX or TorchScript conversion may be possible, but any converted model must be validated against the native checkpoint for numerical and forecast consistency.
|
| 67 |
|
| 68 |
## Limitations
|
| 69 |
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
Review the repository license and source-data terms before redistribution or commercial use. ERA5 data is provided by the Copernicus Climate Change Service and follows its applicable terms.
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
library_name: pytorch
|
| 4 |
+
pipeline_tag: time-series-forecasting
|
| 5 |
+
tags:
|
| 6 |
+
- tropical-cyclone
|
| 7 |
+
- weather-forecasting
|
| 8 |
+
- pytorch
|
| 9 |
+
- era5
|
| 10 |
+
- ibtracs
|
| 11 |
+
---
|
| 12 |
|
| 13 |
+
# StormFusion-MT & TrackFormer β tropical-cyclone forecasting
|
| 14 |
|
| 15 |
+
Two research checkpoints for tropical-cyclone forecasting. Each predicts, at 20 six-hourly lead
|
| 16 |
+
times (6β120 h), a 17-dim state per lead: east/north storm motion (km), max wind (kt), central
|
| 17 |
+
pressure (hPa), radius of max wind (km), and 34/50/64-kt wind radii in four quadrants.
|
| 18 |
|
| 19 |
+
**Research models β not an operational warning system. Do not use for evacuation, aviation,
|
| 20 |
+
maritime, or emergency decisions.**
|
| 21 |
|
| 22 |
+
| model | params | inputs | training data |
|
| 23 |
+
|---|---|---|---|
|
| 24 |
+
| StormFusion-MT v2 | 3.3M | ERA5 patches + track history | WP, 2000+, 1,337 storm-centered windows |
|
| 25 |
+
| **TrackFormer** | 21M (fp16, 43MB) | **track history only (no ERA5)** | all basins, 1980+, 84,150 windows |
|
|
|
|
| 26 |
|
| 27 |
+
Weights and full reproducible code (dataset builders, training, eval) are in the GitHub repo:
|
| 28 |
+
**https://github.com/yu314-coder/typhoon-predict** (`models/`).
|
| 29 |
|
| 30 |
+
## Results β WP 2020+ held-out test (lower is better)
|
| 31 |
|
| 32 |
+
| model | track km | vmax kt | pres hPa | rmw km | radius km |
|
| 33 |
+
|---|---|---|---|---|---|
|
| 34 |
+
| StormFusion-MT v2 (3.3M, ERA5) | 729 | 24.2 | 21.6 | 16.2 | 31.8 |
|
| 35 |
+
| **TrackFormer (21M, no ERA5)** | **720** | **22.1** | 21.2 | **12.9** | 31.5 |
|
| 36 |
|
| 37 |
+
**Key finding:** a track-only model that never sees ERA5 **matches or beats** the full ERA5
|
| 38 |
+
model on every metric. The expensive ERA5 atmospheric patches add little over past-track history
|
| 39 |
+
plus more storms. Across experiments the pattern was consistent: **data diversity > engineered
|
| 40 |
+
features > parameters** β a 17.7M ERA5 model overfit and did *worse* than the 3.3M one.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
+
## Architectures
|
| 43 |
|
| 44 |
+
- **StormFusion-MT v2** β separate inner/outer ERA5 conv encoders keeping a 3Γ3 grid of spatial
|
| 45 |
+
tokens, track/environment token encoders, a temporal Transformer context, learned + sinusoidal
|
| 46 |
+
lead-time queries, cross-attention decoding, and multi-task state / log-scale heads.
|
| 47 |
+
- **TrackFormer** β the same decoder design, track-only: a 40-dim track-history projection β
|
| 48 |
+
Transformer context (d_model 384, 8 heads, 4+6 layers) β lead queries β dual heads. No
|
| 49 |
+
atmospheric inputs.
|
| 50 |
|
| 51 |
+
## Usage
|
| 52 |
|
| 53 |
+
See the GitHub repo for `model_v2.py` / `train_track.py`, the checkpoints, and normalization
|
| 54 |
+
stats. Inputs are per-feature standardized (stats saved with each checkpoint / dataset);
|
| 55 |
+
multiply predictions by `TARGET_SCALE = [100,100,35,20,50] + [50]*12` for physical units.
|
|
|
|
|
|
|
| 56 |
|
| 57 |
+
## Data
|
| 58 |
|
| 59 |
+
IBTrACS v04r01 best tracks (NOAA NCEI) and ERA5 reanalysis (Copernicus/ECMWF). Obtain the source
|
| 60 |
+
data under its own access and licensing terms.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
|
| 62 |
## Limitations
|
| 63 |
|
| 64 |
+
- Absolute track error (~720 km averaged over 6β120 h) is far from operational quality.
|
| 65 |
+
- The real ceiling is storm **diversity** (~13k storms have ever existed); larger models overfit.
|
| 66 |
+
- Wind-radius labels are sparse; no calibration or comparison against official agency forecasts.
|
| 67 |
+
- Pre-satellite track/intensity labels are lower quality.
|
|
|