Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -10,15 +10,101 @@ tags:
|
|
| 10 |
- ibtracs
|
| 11 |
---
|
| 12 |
|
| 13 |
-
#
|
| 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 |
| **TrackFormer v9** | 17M (fp16, 33MB) | **track history + IBTrACS environment, protected triple-stream** | all basins, 1980+, 193k partial-lead windows |
|
|
@@ -26,10 +112,10 @@ maritime, or emergency decisions.**
|
|
| 26 |
| StormFusion-MT v2 | 3.3M (fp16, 6.7MB) | ERA5 patches + track history | WP, 2000+, 1,337 storm-centered windows |
|
| 27 |
| TrackFormer (v1) | 21M (fp16, 43MB) | track history only (single-stream) | all basins, 1980+, 84,150 windows |
|
| 28 |
|
| 29 |
-
Weights and full reproducible code (dataset builders, training, eval) are in the GitHub repo
|
| 30 |
-
|
| 31 |
|
| 32 |
-
## Results — WP 2020+ held-out test (lower is better)
|
| 33 |
|
| 34 |
| model | track km | vmax kt | pres hPa | rmw km | radius km |
|
| 35 |
|---|---|---|---|---|---|
|
|
@@ -47,9 +133,9 @@ protected dual-stream architecture (separate kinematic/thermodynamic encoders, g
|
|
| 47 |
zero-init gated thermo→track adapter, and a persistence-residual track head), cutting WP-2020+ track
|
| 48 |
error to 659 km (−61, storm-bootstrap 95% CI [−103, −16] km, p≈0.995) while keeping the intensity
|
| 49 |
gains. Full architecture and derivation (incl. a random-matrix block-covariance uncertainty head) in
|
| 50 |
-
`paper/trackformer.pdf` in the GitHub repo.
|
| 51 |
|
| 52 |
-
## Architectures
|
| 53 |
|
| 54 |
- **StormFusion-MT v2** — separate inner/outer ERA5 conv encoders keeping a 3×3 grid of spatial
|
| 55 |
tokens, track/environment token encoders, a temporal Transformer context, learned + sinusoidal
|
|
@@ -58,7 +144,7 @@ gains. Full architecture and derivation (incl. a random-matrix block-covariance
|
|
| 58 |
Transformer context (d_model 384, 8 heads, 4+6 layers) → lead queries → dual heads. No
|
| 59 |
atmospheric inputs.
|
| 60 |
|
| 61 |
-
## Usage
|
| 62 |
|
| 63 |
See the GitHub repo for `model_v2.py` / `train_track.py`, the checkpoints, and normalization
|
| 64 |
stats. Inputs are per-feature standardized (stats saved with each checkpoint / dataset);
|
|
@@ -71,7 +157,11 @@ data under its own access and licensing terms.
|
|
| 71 |
|
| 72 |
## Limitations
|
| 73 |
|
| 74 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
- The real ceiling is storm **diversity** (~13k storms have ever existed); larger models overfit.
|
| 76 |
- Wind-radius labels are sparse; no calibration or comparison against official agency forecasts.
|
| 77 |
- Pre-satellite track/intensity labels are lower quality.
|
|
|
|
| 10 |
- ibtracs
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# Typhoon Predict — tropical-cyclone forecasting
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
**Research models — not an operational warning system. Do not use for evacuation, aviation,
|
| 16 |
maritime, or emergency decisions.**
|
| 17 |
|
| 18 |
+
## Current best model: TrackFormer v23
|
| 19 |
+
|
| 20 |
+
TrackFormer v23 predicts the atmospheric steering flow that carries a storm as an explicit
|
| 21 |
+
chain-of-thought (CoT) intermediate step, conditions that estimate on how the flow has been
|
| 22 |
+
evolving over the previous day (t-24h, t-12h, now), and derives track from it. Result:
|
| 23 |
+
**434.96 km RMS track error** (10-seed ensemble), WP+EP 2020+, full 20-lead-horizon test set
|
| 24 |
+
(3,763 windows).
|
| 25 |
+
|
| 26 |
+
This is the best-performing model in the whole project, reached through a longer architecture
|
| 27 |
+
progression:
|
| 28 |
+
|
| 29 |
+
1. **v10–v20** — a small CNN encoder reads a deep-layer-mean steering-wind patch around the storm.
|
| 30 |
+
2. **v21, v22** — chain-of-thought: predict the steering flow itself, then derive track from it
|
| 31 |
+
(v22 adds a latent CoT with weight-tied feedback rounds).
|
| 32 |
+
3. **v23** — add a temporal history of the CoT steering representation. Best result: **434.96 km**.
|
| 33 |
+
4. **v24–v29** — four further environmental additions on top of v23 (an environmental token, an
|
| 34 |
+
ocean-heat CNN patch, a drift adapter, raw ERA5 steering wind) all came back **null**: once a
|
| 35 |
+
CoT representation already extracts the steering signal that matters, handing the model the raw
|
| 36 |
+
field again is redundant.
|
| 37 |
+
5. **v31–v34** — land/terrain-interaction correction, motivated by real-world reports of typhoons
|
| 38 |
+
stalling at mountainous coastlines (Typhoon Gaemi, 2024, at Taiwan) and terrain-deflection
|
| 39 |
+
literature (AOT-TCNet, arXiv 2603.29200):
|
| 40 |
+
|
| 41 |
+
| model | aggregate track (km) | Typhoon Tip 1979 (km) | Typhoon Noul 2026, ocean/landfall (km) |
|
| 42 |
+
|---|---|---|---|
|
| 43 |
+
| v23 (baseline) | **434.96** | 939 | 267 / 356 |
|
| 44 |
+
| v31 — LandDrag, uniform training | 443.07 (+8.11) | — | — |
|
| 45 |
+
| v32 — LandDrag, window-oversampled | 460.48 (+25.52, backfired) | — | — |
|
| 46 |
+
| v33 — LandDrag, storm-normalized | 442.33 (+7.37) | **876** | **243 / 319** |
|
| 47 |
+
| v34 — LandGate, **frozen v23 backbone** | 460.52 (−0.33 vs. own backbone) | **795** | 287 / 382 |
|
| 48 |
+
|
| 49 |
+
v34 is the methodologically important result: v31–v33 each retrained the *entire* architecture
|
| 50 |
+
from scratch, so their deltas vs. v23 include ~19 km/seed of ordinary retrain noise on top of
|
| 51 |
+
whatever the land correction did. v34 instead freezes a real, already-trained v23 checkpoint and
|
| 52 |
+
trains only a new ~437-parameter gated correction — a true same-backbone-plus-one-addition
|
| 53 |
+
comparison. Result: essentially null everywhere, including the mountainous-near-land regime every
|
| 54 |
+
earlier attempt targeted. On the two real out-of-training storms available, v33 and v34 each split
|
| 55 |
+
1–1 against v23 — a small-n disagreement with the aggregate test set, not a reliable effect.
|
| 56 |
+
|
| 57 |
+
**Methodological lessons:** retrain-to-retrain seed noise (~19 km/seed) is large enough to
|
| 58 |
+
manufacture or hide most small version-to-version deltas; freezing a real backbone and training
|
| 59 |
+
only a small addition isolates a causal effect that comparing two from-scratch runs cannot; and a
|
| 60 |
+
large in-distribution aggregate test set does not always agree with genuinely out-of-training
|
| 61 |
+
real-storm validation.
|
| 62 |
+
|
| 63 |
+
v23's 10-seed ensemble is released in this repo (`v23_seed0.pt`–`v23_seed9.pt`, fp32, 52.6 MB
|
| 64 |
+
each) with a standalone architecture module and CLI — see "Usage — v23" below. Full write-up,
|
| 65 |
+
architecture equations, and every intermediate result: `paper/trackformer.pdf`, "Chain-of-thought
|
| 66 |
+
steering and land-interaction testing," in the GitHub repo
|
| 67 |
+
(**https://github.com/yu314-coder/typhoon-predict**).
|
| 68 |
+
|
| 69 |
+
## Usage — v23
|
| 70 |
+
|
| 71 |
+
Two modes, controlled by whether you pass `--steering`:
|
| 72 |
+
|
| 73 |
+
**IBTrACS-only** (default) — give it nothing but the storm's own recent track (position, max wind,
|
| 74 |
+
central pressure). This is what any best-track record gives you for a storm, nothing more. The
|
| 75 |
+
steering field and its 12h/24h history are zero-filled with an explicit availability flag — the
|
| 76 |
+
same "unavailable == exact zeros, not fabricated" convention used throughout this project.
|
| 77 |
+
|
| 78 |
+
```bash
|
| 79 |
+
python run_v23.py --track my_storm.json --out forecast.json
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
**Full data** — additionally supply a real deep-layer-mean steering-wind patch (850/500/200 hPa
|
| 83 |
+
u/v, 2.5° resolution, ±20° box centered on the storm) for the current fix and, ideally, the two
|
| 84 |
+
fixes 12h/24h before it. This is what the headline **434.96 km** result requires.
|
| 85 |
+
|
| 86 |
+
```bash
|
| 87 |
+
python run_v23.py --track my_storm.json --steering my_steering.npz --out forecast.json
|
| 88 |
+
```
|
| 89 |
+
|
| 90 |
+
`my_storm.json`: a list of fixes, oldest→newest, spaced 6h apart, ending at the fix to forecast
|
| 91 |
+
from — see `run_v23.py`'s docstring for the exact schema. `my_steering.npz`: keyed by the same ISO
|
| 92 |
+
timestamps; the GitHub repo's `_fetch_dolphin_steering.py` is a complete working example of
|
| 93 |
+
building one from NOAA/NOMADS GFS analysis fields for a live storm (ERA5 works the same way for a
|
| 94 |
+
past one).
|
| 95 |
+
|
| 96 |
+
**How much does the steering field matter?** Tested on Typhoon Dolphin (2026, active as of this
|
| 97 |
+
writing): with real fetched GFS steering, v23's 120h forecast was 14.7°N,150.7°E / 99 kt / 951 hPa;
|
| 98 |
+
with the steering field zeroed out (IBTrACS-only) it was 17.5°N,156.3°E / 90 kt / 957 hPa — the
|
| 99 |
+
track moved by several hundred km while intensity only softened modestly. So on this storm the
|
| 100 |
+
steering field mainly earns its keep on **track**, not intensity.
|
| 101 |
+
|
| 102 |
+
## Released checkpoints: StormFusion-MT & TrackFormer v1–v9
|
| 103 |
+
|
| 104 |
+
The earlier, fully released and locally-runnable line. Each predicts, at 20 six-hourly lead times
|
| 105 |
+
(6–120 h), a 17-dim state per lead: east/north storm motion (km), max wind (kt), central pressure
|
| 106 |
+
(hPa), radius of max wind (km), and 34/50/64-kt wind radii in four quadrants.
|
| 107 |
+
|
| 108 |
| model | params | inputs | training data |
|
| 109 |
|---|---|---|---|
|
| 110 |
| **TrackFormer v9** | 17M (fp16, 33MB) | **track history + IBTrACS environment, protected triple-stream** | all basins, 1980+, 193k partial-lead windows |
|
|
|
|
| 112 |
| StormFusion-MT v2 | 3.3M (fp16, 6.7MB) | ERA5 patches + track history | WP, 2000+, 1,337 storm-centered windows |
|
| 113 |
| TrackFormer (v1) | 21M (fp16, 43MB) | track history only (single-stream) | all basins, 1980+, 84,150 windows |
|
| 114 |
|
| 115 |
+
Weights and full reproducible code (dataset builders, training, eval) are in the GitHub repo
|
| 116 |
+
(`models/`).
|
| 117 |
|
| 118 |
+
### Results — WP 2020+ held-out test (lower is better)
|
| 119 |
|
| 120 |
| model | track km | vmax kt | pres hPa | rmw km | radius km |
|
| 121 |
|---|---|---|---|---|---|
|
|
|
|
| 133 |
zero-init gated thermo→track adapter, and a persistence-residual track head), cutting WP-2020+ track
|
| 134 |
error to 659 km (−61, storm-bootstrap 95% CI [−103, −16] km, p≈0.995) while keeping the intensity
|
| 135 |
gains. Full architecture and derivation (incl. a random-matrix block-covariance uncertainty head) in
|
| 136 |
+
`paper/trackformer.pdf`, Appendix A, in the GitHub repo.
|
| 137 |
|
| 138 |
+
### Architectures
|
| 139 |
|
| 140 |
- **StormFusion-MT v2** — separate inner/outer ERA5 conv encoders keeping a 3×3 grid of spatial
|
| 141 |
tokens, track/environment token encoders, a temporal Transformer context, learned + sinusoidal
|
|
|
|
| 144 |
Transformer context (d_model 384, 8 heads, 4+6 layers) → lead queries → dual heads. No
|
| 145 |
atmospheric inputs.
|
| 146 |
|
| 147 |
+
### Usage
|
| 148 |
|
| 149 |
See the GitHub repo for `model_v2.py` / `train_track.py`, the checkpoints, and normalization
|
| 150 |
stats. Inputs are per-feature standardized (stats saved with each checkpoint / dataset);
|
|
|
|
| 157 |
|
| 158 |
## Limitations
|
| 159 |
|
| 160 |
+
- Research models throughout — not operational quality in either line. TrackFormer v23 (434.96 km
|
| 161 |
+
RMS track error, 6–120 h) and the released StormFusion-MT/TrackFormer v1–v9 checkpoints
|
| 162 |
+
(~618–730 km, different test split) are both far from operational.
|
| 163 |
+
- v24–v34 (the further additions and land-interaction line built on top of v23) remain research
|
| 164 |
+
artifacts, not packaged for this card's load/run format — only v23 itself is released.
|
| 165 |
- The real ceiling is storm **diversity** (~13k storms have ever existed); larger models overfit.
|
| 166 |
- Wind-radius labels are sparse; no calibration or comparison against official agency forecasts.
|
| 167 |
- Pre-satellite track/intensity labels are lower quality.
|