ardan-S commited on
Commit
d0dff1a
·
verified ·
1 Parent(s): 3fff14e

Release full-data HiPredict model (2026-05-17)

Browse files
Files changed (6) hide show
  1. README.md +31 -0
  2. config.yaml +75 -0
  3. global_stats.json +212 -0
  4. meta_scalar.joblib +3 -0
  5. model.pt +3 -0
  6. provenance.json +13 -0
README.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ tags:
3
+ - hirise
4
+ - mars
5
+ - image-reconstruction
6
+ ---
7
+ # HiPredict
8
+
9
+ HiPredict reconstructs the HiRISE RED4 channel using IR10, BG12, neighbouring
10
+ RED3/RED5 context, and observation metadata. This release contains the full-data
11
+ model from `archive_2026-05-17`.
12
+
13
+ Code and installation: https://github.com/ardan-S/HiPredict
14
+
15
+ Research dataset: https://huggingface.co/datasets/ardan-S/HiPredict
16
+
17
+ ```bash
18
+ export HIPREDICT_HF_REPO="ardan-S/HiPredict"
19
+ ```
20
+
21
+ ```python
22
+ from hipredict import get_model, HiPredict
23
+
24
+ model, config = get_model("hipredict", device="cpu")
25
+ predictor = HiPredict(model, config, device="cpu")
26
+ ```
27
+
28
+ For reproducibility, pass a release commit or tag as `revision=` to `get_model`.
29
+ Keep `model.pt`, `meta_scalar.joblib`, `config.yaml`, and `global_stats.json`
30
+ together. The fixed global statistics supply the default normalization.
31
+ `provenance.json` records the source checkpoint and SHA-256 hashes.
config.yaml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------
2
+ # U-Net CNN - conv update but distinguishing betweed drs
3
+ # --------------------------------------
4
+
5
+ seed: 42
6
+
7
+ wandb:
8
+ project: hirise-prediction
9
+ mode: disabled # online | offline | disabled
10
+ group: null
11
+
12
+ data:
13
+ root: null # repository root; override for external data
14
+ patch_root: null # relative manifest paths default to the CSV parent
15
+ data_record: "files/data_record_alls.csv"
16
+ normalisation_mode: global_robust
17
+ global_stats: "files/global_stats.json"
18
+ num_sets: 200000
19
+ train_size: 0.7
20
+ val_size: 0.1
21
+ test_size: 0.2
22
+ meta_cols: ['TDI', 'IEA_PWS_temp', 'Incidence_angle', 'Orbit_number', 'Local_time', 'Phase_angle', 'Solar_longitude', 'Solar_distance', 'FPA_negY_temp']
23
+ # meta_cols: ['TDI']
24
+
25
+ architecture:
26
+ name: unet_conv_b22
27
+ version: 1.1
28
+ args:
29
+ base_ch: 16
30
+ depth: 4
31
+ kernel_size: 3
32
+ p_drop: 0.0
33
+ n_convs: 2
34
+ n_res_blocks: 2
35
+ align_corners: True
36
+
37
+ optim:
38
+ epochs: 20
39
+ batch_size: 64
40
+ lr: 1.5e-3
41
+ weight_decay: 5.0e-5
42
+ early_stopping:
43
+ enabled: True
44
+ patience: 10
45
+ min_delta: 0.001
46
+ min_epochs: 12
47
+ restore_best: True
48
+
49
+ loss:
50
+ name: HiRISELoss # HiRISELoss | MSELoss | L1Loss
51
+ config: # Only required for HiRISELoss
52
+ mae: 0.35 # L1
53
+ gdl: 0.15
54
+ local_mae: 0.10
55
+ mean_mae: 0.30
56
+ lf_l1: 0.10
57
+
58
+ evals:
59
+ eval_dr: "files/data_record_evals.csv"
60
+ eval_cfg: "hipredict/configs/evals.yaml"
61
+ edr_csv: files/metadata/EDR_df.csv
62
+
63
+ save:
64
+ imgs: False
65
+ imgs_indiv: False
66
+ model: True
67
+ loss_map: False
68
+ model_dir: null # defaults from hipredict.paths
69
+ img_dir: null # defaults from hipredict.paths
70
+ evals_dir: null # defaults from hipredict.paths
71
+ maps_dir: null # defaults from hipredict.paths
72
+ flags:
73
+ evaluate: False # requires a separate evaluation manifest
74
+ test: False
75
+ notrain: False
global_stats.json ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "absolute_deviation_from_center": {
3
+ "absdev_p001": 5.5193528422884854e-05,
4
+ "absdev_p01": 0.0005898901929252464,
5
+ "absdev_p05": 0.0028923002391595563,
6
+ "absdev_p10": 0.0057132379261403505,
7
+ "absdev_p25": 0.013524341747066588,
8
+ "absdev_p50": 0.025842596403423894,
9
+ "absdev_p75": 0.04736784000034908,
10
+ "absdev_p90": 0.09247539727338969,
11
+ "absdev_p95": 0.11680325224482077,
12
+ "absdev_p99": 0.15340227655659433,
13
+ "absdev_p999": 0.18479107401532693,
14
+ "max": 0.7921935946857287
15
+ },
16
+ "failures": {
17
+ "deviation_pass": [],
18
+ "truncated_to": 20,
19
+ "value_pass": [
20
+ {
21
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020583_1420 BG12, found 0.')",
22
+ "obs": "ESP_020583_1420",
23
+ "ok": false
24
+ },
25
+ {
26
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020795_1635 BG12, found 0.')",
27
+ "obs": "ESP_020795_1635",
28
+ "ok": false
29
+ },
30
+ {
31
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020784_1810 BG12, found 0.')",
32
+ "obs": "ESP_020784_1810",
33
+ "ok": false
34
+ },
35
+ {
36
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020803_1355 BG12, found 0.')",
37
+ "obs": "ESP_020803_1355",
38
+ "ok": false
39
+ },
40
+ {
41
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020827_1595 BG12, found 0.')",
42
+ "obs": "ESP_020827_1595",
43
+ "ok": false
44
+ },
45
+ {
46
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020857_1440 BG12, found 0.')",
47
+ "obs": "ESP_020857_1440",
48
+ "ok": false
49
+ },
50
+ {
51
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020858_1425 BG12, found 0.')",
52
+ "obs": "ESP_020858_1425",
53
+ "ok": false
54
+ },
55
+ {
56
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020911_1850 BG12, found 0.')",
57
+ "obs": "ESP_020911_1850",
58
+ "ok": false
59
+ },
60
+ {
61
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_020926_1470 BG12, found 0.')",
62
+ "obs": "ESP_020926_1470",
63
+ "ok": false
64
+ },
65
+ {
66
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_021670_1540 BG12, found 0.')",
67
+ "obs": "ESP_021670_1540",
68
+ "ok": false
69
+ },
70
+ {
71
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_021712_1400 BG12, found 0.')",
72
+ "obs": "ESP_021712_1400",
73
+ "ok": false
74
+ },
75
+ {
76
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022655_2040 BG12, found 0.')",
77
+ "obs": "ESP_022655_2040",
78
+ "ok": false
79
+ },
80
+ {
81
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022654_1475 BG12, found 0.')",
82
+ "obs": "ESP_022654_1475",
83
+ "ok": false
84
+ },
85
+ {
86
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022658_0945 BG12, found 0.')",
87
+ "obs": "ESP_022658_0945",
88
+ "ok": false
89
+ },
90
+ {
91
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022679_0980 BG12, found 0.')",
92
+ "obs": "ESP_022679_0980",
93
+ "ok": false
94
+ },
95
+ {
96
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022659_1505 BG12, found 0.')",
97
+ "obs": "ESP_022659_1505",
98
+ "ok": false
99
+ },
100
+ {
101
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022675_1345 BG12, found 0.')",
102
+ "obs": "ESP_022675_1345",
103
+ "ok": false
104
+ },
105
+ {
106
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022842_0950 BG12, found 0.')",
107
+ "obs": "ESP_022842_0950",
108
+ "ok": false
109
+ },
110
+ {
111
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022856_0930 BG12, found 0.')",
112
+ "obs": "ESP_022856_0930",
113
+ "ok": false
114
+ },
115
+ {
116
+ "error": "FileNotFoundError('Expected exactly one processed cube for ESP_022902_1150 BG12, found 0.')",
117
+ "obs": "ESP_022902_1150",
118
+ "ok": false
119
+ }
120
+ ]
121
+ },
122
+ "histogram": {
123
+ "bins": 131072,
124
+ "deviation_max": 0.7921935946857287,
125
+ "deviation_method": "derived_from_value_histogram_bin_centers",
126
+ "deviation_min": 0.0,
127
+ "value_max": 1.0,
128
+ "value_min": -1.0
129
+ },
130
+ "masked_predictor_values": {
131
+ "count": 1977534690044,
132
+ "max": 0.8600634932518005,
133
+ "mean": 0.085464824844424,
134
+ "min": -0.0003434419631958008,
135
+ "std": 0.048467949526196395,
136
+ "value_p001": 0.013846640691511638,
137
+ "value_p01": 0.024083678436135264,
138
+ "value_p05": 0.03239613464916761,
139
+ "value_p10": 0.03775538329422109,
140
+ "value_p25": 0.04880939249505861,
141
+ "value_p50": 0.06786989856607184,
142
+ "value_p75": 0.11422493502933787,
143
+ "value_p90": 0.160346545238939,
144
+ "value_p95": 0.18467139311621353,
145
+ "value_p99": 0.22126919423075966,
146
+ "value_p999": 0.252662901247848
147
+ },
148
+ "normalization": {
149
+ "center": 0.06786989856607184,
150
+ "mad": 0.025842596403423894,
151
+ "method": "histogram_approximation_over_cropped_valid_BG12_IR10_pixels",
152
+ "mode": "global_robust",
153
+ "scale": 0.03831423342771626,
154
+ "scale_formula": "max(1.4826 * MAD, 1e-3)"
155
+ },
156
+ "observation_level_distribution": {
157
+ "obs_center_max": 0.23624444007873535,
158
+ "obs_center_min": 0.011698901653289795,
159
+ "obs_center_p25": 0.051883772015571594,
160
+ "obs_center_p50": 0.06849920749664307,
161
+ "obs_center_p75": 0.08676868677139282,
162
+ "obs_mad_max": 0.07490959763526917,
163
+ "obs_mad_min": 0.0013965368270874023,
164
+ "obs_mad_p25": 0.014079928398132324,
165
+ "obs_mad_p50": 0.021909713745117188,
166
+ "obs_mad_p75": 0.03176559507846832,
167
+ "obs_scale_max": 0.11106096945405006,
168
+ "obs_scale_min": 0.0020705054998397827,
169
+ "obs_scale_p25": 0.020874901843070982,
170
+ "obs_scale_p50": 0.03248334159851074,
171
+ "obs_scale_p75": 0.047095671263337135
172
+ },
173
+ "unmasked_finite_values": {
174
+ "BG12": {
175
+ "finite_count": 993630596003,
176
+ "finite_max": 0.5236114263534546,
177
+ "finite_min": -0.0003663301467895508,
178
+ "finite_sum": 55319734060.14028,
179
+ "finite_sumsq": 3711316171.137466,
180
+ "mean": 0.055674346465045106,
181
+ "missing_count": 470243397,
182
+ "near_zero_count": 470243429,
183
+ "nonfinite_count": 0,
184
+ "std": 0.025208604078141007
185
+ },
186
+ "IR10": {
187
+ "finite_count": 993630596003,
188
+ "finite_max": 0.8600634932518005,
189
+ "finite_min": -0.0003663301467895508,
190
+ "finite_sum": 113986496763.59375,
191
+ "finite_sumsq": 15402340695.42692,
192
+ "mean": 0.11471717680807969,
193
+ "missing_count": 4490070137,
194
+ "near_zero_count": 4490076666,
195
+ "nonfinite_count": 0,
196
+ "std": 0.0483843222418676
197
+ }
198
+ },
199
+ "validity": {
200
+ "above_hist_range": 0,
201
+ "below_hist_range": 0,
202
+ "cropped_pixels_per_predictor": 993630596003,
203
+ "observations_failed_deviation_pass": 0,
204
+ "observations_failed_value_pass": 2342,
205
+ "observations_requested": 19465,
206
+ "observations_succeeded": 17123,
207
+ "valid_bg_pixels": 993160352606,
208
+ "valid_ir_pixels": 989140525866,
209
+ "valid_pair_fraction": 0.9951055744453089,
210
+ "valid_pair_pixels": 988767345022
211
+ }
212
+ }
meta_scalar.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d7bb61c409f8ba5991539929970d8562b2815929ef0e9466482e026f47e54861
3
+ size 1199
model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:61405e61be0b8328a5ee797bfb3b6e820e19029aebfafe440ba176f008367ad3
3
+ size 11504459
provenance.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "HiPredict",
3
+ "architecture": "unet_conv_b22",
4
+ "source_archive": "archive_2026-05-17",
5
+ "original_checkpoint": "unet_conv_b22_v1_1_unet_conv_b221501-1705.pt",
6
+ "normalization": "global_robust",
7
+ "sha256": {
8
+ "model.pt": "61405e61be0b8328a5ee797bfb3b6e820e19029aebfafe440ba176f008367ad3",
9
+ "meta_scalar.joblib": "d7bb61c409f8ba5991539929970d8562b2815929ef0e9466482e026f47e54861",
10
+ "config.yaml": "ce824beeb6068f44f82d6ba9f414529deff4a3a44e1f7c015fdec444d9216db7",
11
+ "global_stats.json": "ee2c5bf5fe2b56176a081f694c0a1bdb25650ff9e5eee87b535af78c4748eb4b"
12
+ }
13
+ }