euler314 commited on
Commit
832d082
·
verified ·
1 Parent(s): 64471ff

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +102 -12
README.md CHANGED
@@ -10,15 +10,101 @@ tags:
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
  | **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
- **https://github.com/yu314-coder/typhoon-predict** (`models/`).
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
- - Absolute track error (~720 km averaged over 6–120 h) is far from operational quality.
 
 
 
 
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.