TechieMoon commited on
Commit
3b8bc10
·
verified ·
1 Parent(s): b4ffddb

Upload RainMap Nowcasting demo model

Browse files
README.md CHANGED
@@ -5,12 +5,13 @@ tags:
5
  - precipitation-nowcasting
6
  - rainmap
7
  - pytorch
8
- - demo
 
9
  ---
10
 
11
  # RainMap Nowcasting
12
 
13
- This repository hosts the demo weights for
14
  [`TechieMoon/rainmap-nowcasting`](https://github.com/TechieMoon/rainmap-nowcasting).
15
 
16
  ## Intended use
@@ -20,15 +21,36 @@ frames. Pixel intensity is interpreted as `0..255 -> 0..1` rain intensity.
20
 
21
  ## Important warning
22
 
23
- These first weights are trained on synthetic moving rain blobs only. They are
24
- for validating installation, model download, inference, and the local client.
25
- They are not suitable for operational weather forecasting.
 
 
 
 
 
 
26
 
27
  ## Files
28
 
29
- - `rainmap-nowcasting-demo.safetensors`: PyTorch state dict.
30
  - `model_config.json`: architecture, frame count, image size, and encoding.
31
- - `training_metrics.json`: synthetic-demo training metrics.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  ## Example
34
 
 
5
  - precipitation-nowcasting
6
  - rainmap
7
  - pytorch
8
+ - sevir
9
+ - fine-tuning
10
  ---
11
 
12
  # RainMap Nowcasting
13
 
14
+ This repository hosts model weights for
15
  [`TechieMoon/rainmap-nowcasting`](https://github.com/TechieMoon/rainmap-nowcasting).
16
 
17
  ## Intended use
 
21
 
22
  ## Important warning
23
 
24
+ Small SEVIR VIL subset fine-tuned benchmark model. Not for operational weather forecasting.
25
+
26
+ ## Model
27
+
28
+ - Dataset: `SEVIR VIL mini local fine-tune`
29
+ - Weights: `rainmap-nowcasting-sevir-finetuned.safetensors`
30
+ - Input frames: `6`
31
+ - Target frames: `6`
32
+ - Image size: `[64, 64]`
33
 
34
  ## Files
35
 
36
+ - `rainmap-nowcasting-sevir-finetuned.safetensors`: PyTorch state dict.
37
  - `model_config.json`: architecture, frame count, image size, and encoding.
38
+ - `training_metrics.json`: training metrics.
39
+
40
+
41
+ ## Benchmark
42
+
43
+ - Dataset: `data\sevir_mini\local\val`
44
+ - Sequences: 4
45
+
46
+ | Model | MAE | RMSE | CSI@0.3 | HSS@0.3 | ETS@0.3 | FSS@0.3/w15 |
47
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: |
48
+ | persistence | 0.0406 | 0.0930 | 0.5944 | 0.7117 | 0.5524 | 0.9675 |
49
+ | base | 0.0764 | 0.0983 | 0.6432 | 0.7520 | 0.6026 | 0.9605 |
50
+ | fine_tuned | 0.0694 | 0.0888 | 0.6699 | 0.7747 | 0.6323 | 0.9727 |
51
+
52
+ Small-subset benchmark results are not operational forecasting claims.
53
+
54
 
55
  ## Example
56
 
benchmark_results.json ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset": "data\\sevir_mini\\local\\val",
3
+ "sequence_count": 4,
4
+ "input_frames": 6,
5
+ "target_frames": 6,
6
+ "image_size": [
7
+ 64,
8
+ 64
9
+ ],
10
+ "thresholds": [
11
+ 0.1,
12
+ 0.3,
13
+ 0.5
14
+ ],
15
+ "fss_windows": [
16
+ 5,
17
+ 15
18
+ ],
19
+ "models": {
20
+ "persistence": {
21
+ "continuous": {
22
+ "mse": 0.0086515536531806,
23
+ "mae": 0.040590811520814896,
24
+ "rmse": 0.09301372830491529,
25
+ "bias": -0.005234941840171814
26
+ },
27
+ "categorical": {
28
+ "0.100": {
29
+ "threshold": 0.1,
30
+ "hits": 18704,
31
+ "misses": 5214,
32
+ "false_alarms": 3754,
33
+ "correct_negatives": 70632,
34
+ "csi": 0.6759178953454755,
35
+ "pod": 0.7820051843799649,
36
+ "far": 0.16715646985484015,
37
+ "bias_score": 0.9389581068651225,
38
+ "hss": 0.7470071795677934,
39
+ "ets": 0.5961783398807673,
40
+ "f1": 0.8066241159220287
41
+ },
42
+ "0.300": {
43
+ "threshold": 0.3,
44
+ "hits": 8627,
45
+ "misses": 3138,
46
+ "false_alarms": 2749,
47
+ "correct_negatives": 83790,
48
+ "csi": 0.5943916218823205,
49
+ "pod": 0.7332766680832979,
50
+ "far": 0.2416490857946554,
51
+ "bias_score": 0.9669358266043349,
52
+ "hss": 0.7116766203150466,
53
+ "ets": 0.552405266827557,
54
+ "f1": 0.7456030422194374
55
+ },
56
+ "0.500": {
57
+ "threshold": 0.5,
58
+ "hits": 3018,
59
+ "misses": 1598,
60
+ "false_alarms": 1224,
61
+ "correct_negatives": 92464,
62
+ "csi": 0.5167808219178082,
63
+ "pod": 0.6538128249566725,
64
+ "far": 0.28854314002828857,
65
+ "bias_score": 0.9189774696707106,
66
+ "hss": 0.6664153579740525,
67
+ "ets": 0.499717330998692,
68
+ "f1": 0.6814179272973583
69
+ }
70
+ },
71
+ "fss": {
72
+ "0.100/w5": 0.9372061464199974,
73
+ "0.100/w15": 0.9764737604166347,
74
+ "0.300/w5": 0.9126242762769905,
75
+ "0.300/w15": 0.9675365843173683,
76
+ "0.500/w5": 0.8918994826891421,
77
+ "0.500/w15": 0.9581558810543496
78
+ }
79
+ },
80
+ "base": {
81
+ "continuous": {
82
+ "mse": 0.009671105071902275,
83
+ "mae": 0.07636328786611557,
84
+ "rmse": 0.09834177683925725,
85
+ "bias": 0.04423200711607933
86
+ },
87
+ "categorical": {
88
+ "0.100": {
89
+ "threshold": 0.1,
90
+ "hits": 22325,
91
+ "misses": 1593,
92
+ "false_alarms": 12811,
93
+ "correct_negatives": 61575,
94
+ "csi": 0.6078303248114569,
95
+ "pod": 0.9333974412576302,
96
+ "far": 0.3646117941712204,
97
+ "bias_score": 1.4690191487582573,
98
+ "hss": 0.6566909633613045,
99
+ "ets": 0.4888606757269452,
100
+ "f1": 0.7560876485928134
101
+ },
102
+ "0.300": {
103
+ "threshold": 0.3,
104
+ "hits": 9573,
105
+ "misses": 2192,
106
+ "false_alarms": 3119,
107
+ "correct_negatives": 83420,
108
+ "csi": 0.6431738779897876,
109
+ "pod": 0.8136846578835529,
110
+ "far": 0.24574535140245823,
111
+ "bias_score": 1.0787930301742457,
112
+ "hss": 0.7520431433348714,
113
+ "ets": 0.6026195050881246,
114
+ "f1": 0.7828433577298933
115
+ },
116
+ "0.500": {
117
+ "threshold": 0.5,
118
+ "hits": 2416,
119
+ "misses": 2200,
120
+ "false_alarms": 1043,
121
+ "correct_negatives": 92645,
122
+ "csi": 0.42693055310125466,
123
+ "pod": 0.5233968804159446,
124
+ "far": 0.30153223474992774,
125
+ "bias_score": 0.7493500866551126,
126
+ "hss": 0.5815567970880625,
127
+ "ets": 0.4099965341539078,
128
+ "f1": 0.5983900928792569
129
+ }
130
+ },
131
+ "fss": {
132
+ "0.100/w5": 0.8650857307735962,
133
+ "0.100/w15": 0.8942029916245129,
134
+ "0.300/w5": 0.917750068696638,
135
+ "0.300/w15": 0.9604584356241297,
136
+ "0.500/w5": 0.7832568884442832,
137
+ "0.500/w15": 0.8284828639349342
138
+ }
139
+ },
140
+ "fine_tuned": {
141
+ "continuous": {
142
+ "mse": 0.00788073893636465,
143
+ "mae": 0.06935159862041473,
144
+ "rmse": 0.08877352610077315,
145
+ "bias": 0.04346604645252228
146
+ },
147
+ "categorical": {
148
+ "0.100": {
149
+ "threshold": 0.1,
150
+ "hits": 22170,
151
+ "misses": 1748,
152
+ "false_alarms": 10756,
153
+ "correct_negatives": 63630,
154
+ "csi": 0.6393839764665167,
155
+ "pod": 0.9269169663015302,
156
+ "far": 0.32667193099678066,
157
+ "bias_score": 1.376620118739025,
158
+ "hss": 0.6936929393420658,
159
+ "ets": 0.5310335986339082,
160
+ "f1": 0.7800295545704032
161
+ },
162
+ "0.300": {
163
+ "threshold": 0.3,
164
+ "hits": 9662,
165
+ "misses": 2103,
166
+ "false_alarms": 2658,
167
+ "correct_negatives": 83881,
168
+ "csi": 0.6699022394786106,
169
+ "pod": 0.8212494687632809,
170
+ "far": 0.21574675324675324,
171
+ "bias_score": 1.0471738206544836,
172
+ "hss": 0.774745476171518,
173
+ "ets": 0.6323139079305055,
174
+ "f1": 0.8023250986090928
175
+ },
176
+ "0.500": {
177
+ "threshold": 0.5,
178
+ "hits": 3316,
179
+ "misses": 1300,
180
+ "false_alarms": 1168,
181
+ "correct_negatives": 92520,
182
+ "csi": 0.5733056708160442,
183
+ "pod": 0.7183708838821491,
184
+ "far": 0.2604817127564674,
185
+ "bias_score": 0.9714038128249567,
186
+ "hss": 0.7156320075122369,
187
+ "ets": 0.5571861115334165,
188
+ "f1": 0.7287912087912088
189
+ }
190
+ },
191
+ "fss": {
192
+ "0.100/w5": 0.894221578387859,
193
+ "0.100/w15": 0.9220996486261381,
194
+ "0.300/w5": 0.9374744122653408,
195
+ "0.300/w15": 0.9727353417913653,
196
+ "0.500/w5": 0.918602789224389,
197
+ "0.500/w15": 0.9648734820178924
198
+ }
199
+ }
200
+ }
201
+ }
model_config.json CHANGED
@@ -13,7 +13,8 @@
13
  "max_mm_per_hour": 50.0,
14
  "description": "Linear placeholder scale for MVP demos; calibrate with real data before use."
15
  },
16
- "weights": "rainmap-nowcasting-demo.safetensors",
17
- "created_at": "2026-05-06T14:03:12.088504+00:00",
18
- "warning": "Demo model only. Not for operational weather forecasting."
 
19
  }
 
13
  "max_mm_per_hour": 50.0,
14
  "description": "Linear placeholder scale for MVP demos; calibrate with real data before use."
15
  },
16
+ "weights": "rainmap-nowcasting-sevir-finetuned.safetensors",
17
+ "dataset_name": "SEVIR VIL mini local fine-tune",
18
+ "created_at": "2026-05-12T06:54:47.260938+00:00",
19
+ "warning": "Small SEVIR VIL subset fine-tuned benchmark model. Not for operational weather forecasting."
20
  }
rainmap-nowcasting-sevir-finetuned.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:be3498e0dfc6eb6d3aa580449c0012a7784d556d5d61faa838e7a85fadc1bd69
3
+ size 492304
training_metrics.json CHANGED
@@ -1,35 +1,63 @@
1
  {
2
  "config": {
3
- "train_dir": "data\\demo\\train",
4
- "val_dir": "data\\demo\\val",
5
- "output_dir": "runs\\demo",
6
  "input_frames": 6,
7
  "target_frames": 6,
8
  "image_size": [
9
  64,
10
  64
11
  ],
12
- "batch_size": 4,
13
- "epochs": 1,
14
- "learning_rate": 0.001,
15
  "base_channels": 8,
16
  "num_workers": 0,
17
  "seed": 42,
18
  "device": "auto",
19
  "amp": true,
20
- "checkpoint_name": "rainmap-nowcasting-demo.safetensors"
 
 
 
21
  },
22
  "device": "cpu",
23
- "train_samples": 84,
24
- "val_samples": 28,
25
  "history": [
26
  {
27
  "epoch": 1,
28
- "train_mse": 0.09050992024796349,
29
- "val_mse": 0.08037208499653,
30
- "val_mae": 0.2364002104316439
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
  ],
33
- "best_val_mse": 0.08037208499653,
34
- "warning": "Synthetic demo data only."
 
35
  }
 
1
  {
2
  "config": {
3
+ "train_dir": "data\\sevir_mini\\local\\train",
4
+ "val_dir": "data\\sevir_mini\\local\\val",
5
+ "output_dir": "runs\\sevir-finetuned",
6
  "input_frames": 6,
7
  "target_frames": 6,
8
  "image_size": [
9
  64,
10
  64
11
  ],
12
+ "batch_size": 8,
13
+ "epochs": 5,
14
+ "learning_rate": 0.0001,
15
  "base_channels": 8,
16
  "num_workers": 0,
17
  "seed": 42,
18
  "device": "auto",
19
  "amp": true,
20
+ "checkpoint_name": "rainmap-nowcasting-sevir-finetuned.safetensors",
21
+ "resume_from": "runs\\sevir-base\\rainmap-nowcasting-sevir-base.safetensors",
22
+ "dataset_name": "SEVIR VIL mini local fine-tune",
23
+ "model_warning": "Small SEVIR VIL subset fine-tuned benchmark model. Not for operational weather forecasting."
24
  },
25
  "device": "cpu",
26
+ "train_samples": 152,
27
+ "val_samples": 152,
28
  "history": [
29
  {
30
  "epoch": 1,
31
+ "train_mse": 0.009678943915978858,
32
+ "val_mse": 0.008939616921308794,
33
+ "val_mae": 0.07144552077117719
34
+ },
35
+ {
36
+ "epoch": 2,
37
+ "train_mse": 0.008931465912610292,
38
+ "val_mse": 0.008647265770521603,
39
+ "val_mae": 0.06976475743086714
40
+ },
41
+ {
42
+ "epoch": 3,
43
+ "train_mse": 0.008475367739600571,
44
+ "val_mse": 0.008904078950811373,
45
+ "val_mae": 0.07051817798300793
46
+ },
47
+ {
48
+ "epoch": 4,
49
+ "train_mse": 0.008088804560860521,
50
+ "val_mse": 0.00873093365838653,
51
+ "val_mae": 0.06940647508752973
52
+ },
53
+ {
54
+ "epoch": 5,
55
+ "train_mse": 0.007787488449953105,
56
+ "val_mse": 0.008748720694137247,
57
+ "val_mae": 0.0691864206210563
58
  }
59
  ],
60
+ "best_val_mse": 0.008647265770521603,
61
+ "warning": "Small SEVIR VIL subset fine-tuned benchmark model. Not for operational weather forecasting.",
62
+ "resume_from": "runs\\sevir-base\\rainmap-nowcasting-sevir-base.safetensors"
63
  }