Dineth Perera commited on
Commit
bac3e47
·
1 Parent(s): 0969bf1

Rank ChangeMamba in LEVIR comparison

Browse files
README.md CHANGED
@@ -179,18 +179,20 @@ Every dataset below is a real YAML file under `configs/datasets/`. The harness e
179
 
180
  ## Results and released checkpoints
181
 
182
- Only completed `metrics_test.json` evaluations are eligible for rankings. Rankings are computed per dataset by test-set F1 (descending), and the canonical `best_model.pth` checkpoint for every ranked model is released. Separately requested checkpoint-only artifacts are listed below without fabricated metrics or a rank.
183
 
184
  All accuracy values are fractions. GPU memory is the PyTorch peak reserved memory for inference, with peak allocated memory used only when reserved memory is absent. FPS is model-only throughput. A dash means the evaluator did not record that metric; values are never estimated.
185
 
186
  The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU remains explicitly unavailable rather than being inferred from BF1. Boundary IoU and boundary F1 are distinct measures.
187
 
 
 
188
  ### Dataset summary
189
 
190
  | Dataset | Tested models | F1 leader | Best test F1 |
191
  | --- | --- | --- | --- |
192
  | DSIFN-CD | 14 | BIT-CD | 0.6732 |
193
- | LEVIR-CD+ (test-as-val protocol) | 13 | CGNet | 0.8138 |
194
  | SYSU-CD | 8 | ChangeMamba | 0.8216 |
195
  | WHU-CD | 8 | ChangeMamba | 0.9521 |
196
 
@@ -213,23 +215,24 @@ The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU re
213
  | 13 | HANet | 0.5347 | 0.5817 | 0.8193 | 0.6109 | 0.4754 | 0.2418 | — | 17.67 | 11.36 | 42.36 | 3.03 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/hanet/dsifn_cd/checkpoints/best_model.pth?download=true) |
214
  | 14 | IFNet | 0.4579 | 0.5102 | 0.7524 | 0.6153 | 0.3647 | 0.1325 | — | 82.26 | 6.08 | 104.88 | 50.71 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/ifnet/dsifn_cd/checkpoints/best_model.pth?download=true) |
215
 
216
- ### LEVIR-CD+ (test-as-val protocol)
217
 
218
  | Rank | Model | F1 | mIoU | Overall accuracy | Recall | Precision | BF1 | BmIoU | GFLOPs | GPU (GB) | FPS | Parameters (M) | Checkpoint |
219
  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
220
- | 1 | CGNet | 0.8138 | 0.8356 | 0.9856 | 0.7746 | 0.8572 | 0.7651 | — | 82.23 | 6.01 | 44.01 | 38.99 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/cgnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
221
- | 2 | Siam-NestedUNet | 0.8046 | 0.8282 | 0.9839 | 0.8129 | 0.7965 | 0.7386 | — | — | 2.67 | 108.71 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/siam_nestedunet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
222
- | 3 | SChanger | 0.8007 | 0.8253 | 0.9836 | 0.8112 | 0.7906 | 0.7364 | — | — | 2.45 | 48.96 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/schanger/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
223
- | 4 | BIT-CD | 0.7996 | 0.8247 | 0.9838 | 0.7946 | 0.8047 | 0.7143 | — | 10.63 | 2.27 | 236.60 | 12.40 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/bit_cd/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
224
- | 5 | HANet | 0.7841 | 0.8131 | 0.9819 | 0.8064 | 0.7630 | 0.7043 | — | — | 5.04 | 84.44 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/hanet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
225
- | 6 | BiFA | 0.7772 | 0.8084 | 0.9818 | 0.7785 | 0.7760 | 0.6581 | — | 53.00 | 15.14 | 30.38 | 9.87 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/bifa/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
226
- | 7 | FC-Siam-conc | 0.7650 | 0.7999 | 0.9809 | 0.7623 | 0.7678 | 0.7175 | — | 5.33 | 1.02 | 308.81 | 1.55 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_conc/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
227
- | 8 | STANet | 0.7544 | 0.7921 | 0.9791 | 0.7865 | 0.7249 | 0.6388 | — | — | 4.45 | 174.00 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/stanet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
228
- | 9 | ChangeFormer | 0.7488 | 0.7887 | 0.9795 | 0.7505 | 0.7472 | 0.6525 | — | 21.18 | 4.03 | 157.64 | 29.75 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/changeformer/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
229
- | 10 | DSAMNet | 0.7444 | 0.7850 | 0.9779 | 0.7897 | 0.7040 | 0.5370 | — | 75.39 | 2.90 | 37.84 | 16.95 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/dsamnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
230
- | 11 | IFNet | 0.7410 | 0.7833 | 0.9786 | 0.7510 | 0.7313 | 0.3489 | — | 82.26 | 6.08 | 105.44 | 50.71 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/ifnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
231
- | 12 | FC-EF | 0.7319 | 0.7766 | 0.9768 | 0.7785 | 0.6905 | 0.6497 | — | 3.58 | 0.74 | 457.44 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_ef/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
232
- | 13 | FC-Siam-diff | 0.7196 | 0.7667 | 0.9725 | 0.8650 | 0.6160 | 0.5447 | — | 4.73 | 1.06 | 262.80 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_diff/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
 
233
 
234
  ### SYSU-CD
235
 
@@ -257,14 +260,6 @@ The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU re
257
  | 7 | FC-Siam-conc | 0.7789 | 0.8062 | 0.9756 | 0.8907 | 0.6920 | 0.4733 | — | 5.33 | 1.03 | 397.86 | 1.55 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_conc/whu_cd/checkpoints/best_model.pth?download=true) |
258
  | 8 | FC-Siam-diff | 0.7135 | 0.7580 | 0.9631 | 0.9540 | 0.5699 | 0.2148 | — | 4.73 | 1.09 | 567.87 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_diff/whu_cd/checkpoints/best_model.pth?download=true) |
259
 
260
- ### Additional checkpoint without completed test metrics
261
-
262
- This trained checkpoint is published on request, but it is not included in the F1 rankings because its `metrics_test.json` evaluation has not completed. The protocol is LEVIR-CD+ validation-as-test, not the test-as-validation benchmark above.
263
-
264
- | Dataset | Model | Evaluation status | Download | Size |
265
- | --- | --- | --- | --- | --- |
266
- | LEVIR-CD+ (val-as-test protocol) | ChangeMamba | Metrics pending | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/changemamba/levir_val_as_test/checkpoints/best_model.pth?download=true) | 619.4 MiB |
267
-
268
  ### Datasets without a released checkpoint
269
 
270
  WildFire-S2, KATE-CD-256, the standard LEVIR-CD+ configuration, and Custom-CD currently have no eligible completed test result. Their validation-only or incomplete checkpoints are intentionally not uploaded.
 
179
 
180
  ## Results and released checkpoints
181
 
182
+ Only completed `metrics_test.json` evaluations are eligible for rankings. Rankings are computed per dataset by test-set F1 (descending), and the canonical `best_model.pth` checkpoint for every ranked model is released.
183
 
184
  All accuracy values are fractions. GPU memory is the PyTorch peak reserved memory for inference, with peak allocated memory used only when reserved memory is absent. FPS is model-only throughput. A dash means the evaluator did not record that metric; values are never estimated.
185
 
186
  The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU remains explicitly unavailable rather than being inferred from BF1. Boundary IoU and boundary F1 are distinct measures.
187
 
188
+ The LEVIR-CD+ comparison combines the project-compatible `levir_cd_test_as_val` and `levir_val_as_test` result records. The ChangeMamba row uses the completed `levir_val_as_test` evaluation over 5,568 samples.
189
+
190
  ### Dataset summary
191
 
192
  | Dataset | Tested models | F1 leader | Best test F1 |
193
  | --- | --- | --- | --- |
194
  | DSIFN-CD | 14 | BIT-CD | 0.6732 |
195
+ | LEVIR-CD+ comparison | 14 | ChangeMamba | 0.8753 |
196
  | SYSU-CD | 8 | ChangeMamba | 0.8216 |
197
  | WHU-CD | 8 | ChangeMamba | 0.9521 |
198
 
 
215
  | 13 | HANet | 0.5347 | 0.5817 | 0.8193 | 0.6109 | 0.4754 | 0.2418 | — | 17.67 | 11.36 | 42.36 | 3.03 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/hanet/dsifn_cd/checkpoints/best_model.pth?download=true) |
216
  | 14 | IFNet | 0.4579 | 0.5102 | 0.7524 | 0.6153 | 0.3647 | 0.1325 | — | 82.26 | 6.08 | 104.88 | 50.71 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/ifnet/dsifn_cd/checkpoints/best_model.pth?download=true) |
217
 
218
+ ### LEVIR-CD+ comparison
219
 
220
  | Rank | Model | F1 | mIoU | Overall accuracy | Recall | Precision | BF1 | BmIoU | GFLOPs | GPU (GB) | FPS | Parameters (M) | Checkpoint |
221
  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
222
+ | 1 | ChangeMamba | 0.8753 | 0.8840 | 0.9901 | 0.8572 | 0.8942 | 0.8307 | — | 28.70 | 1.93 | 76.82 | 54.00 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/changemamba/levir_val_as_test/checkpoints/best_model.pth?download=true) |
223
+ | 2 | CGNet | 0.8138 | 0.8356 | 0.9856 | 0.7746 | 0.8572 | 0.7651 | — | 82.23 | 6.01 | 44.01 | 38.99 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/cgnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
224
+ | 3 | Siam-NestedUNet | 0.8046 | 0.8282 | 0.9839 | 0.8129 | 0.7965 | 0.7386 | — | — | 2.67 | 108.71 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/siam_nestedunet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
225
+ | 4 | SChanger | 0.8007 | 0.8253 | 0.9836 | 0.8112 | 0.7906 | 0.7364 | — | — | 2.45 | 48.96 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/schanger/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
226
+ | 5 | BIT-CD | 0.7996 | 0.8247 | 0.9838 | 0.7946 | 0.8047 | 0.7143 | — | 10.63 | 2.27 | 236.60 | 12.40 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/bit_cd/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
227
+ | 6 | HANet | 0.7841 | 0.8131 | 0.9819 | 0.8064 | 0.7630 | 0.7043 | — | — | 5.04 | 84.44 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/hanet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
228
+ | 7 | BiFA | 0.7772 | 0.8084 | 0.9818 | 0.7785 | 0.7760 | 0.6581 | — | 53.00 | 15.14 | 30.38 | 9.87 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/bifa/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
229
+ | 8 | FC-Siam-conc | 0.7650 | 0.7999 | 0.9809 | 0.7623 | 0.7678 | 0.7175 | — | 5.33 | 1.02 | 308.81 | 1.55 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_conc/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
230
+ | 9 | STANet | 0.7544 | 0.7921 | 0.9791 | 0.7865 | 0.7249 | 0.6388 | — | — | 4.45 | 174.00 | — | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/stanet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
231
+ | 10 | ChangeFormer | 0.7488 | 0.7887 | 0.9795 | 0.7505 | 0.7472 | 0.6525 | — | 21.18 | 4.03 | 157.64 | 29.75 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/changeformer/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
232
+ | 11 | DSAMNet | 0.7444 | 0.7850 | 0.9779 | 0.7897 | 0.7040 | 0.5370 | — | 75.39 | 2.90 | 37.84 | 16.95 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/dsamnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
233
+ | 12 | IFNet | 0.7410 | 0.7833 | 0.9786 | 0.7510 | 0.7313 | 0.3489 | — | 82.26 | 6.08 | 105.44 | 50.71 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/ifnet/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
234
+ | 13 | FC-EF | 0.7319 | 0.7766 | 0.9768 | 0.7785 | 0.6905 | 0.6497 | — | 3.58 | 0.74 | 457.44 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_ef/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
235
+ | 14 | FC-Siam-diff | 0.7196 | 0.7667 | 0.9725 | 0.8650 | 0.6160 | 0.5447 | — | 4.73 | 1.06 | 262.80 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_diff/levir_cd_test_as_val/checkpoints/best_model.pth?download=true) |
236
 
237
  ### SYSU-CD
238
 
 
260
  | 7 | FC-Siam-conc | 0.7789 | 0.8062 | 0.9756 | 0.8907 | 0.6920 | 0.4733 | — | 5.33 | 1.03 | 397.86 | 1.55 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_conc/whu_cd/checkpoints/best_model.pth?download=true) |
261
  | 8 | FC-Siam-diff | 0.7135 | 0.7580 | 0.9631 | 0.9540 | 0.5699 | 0.2148 | — | 4.73 | 1.09 | 567.87 | 1.35 | [Download](https://huggingface.co/dineth18/CD-Models/resolve/main/results/fc_siam_diff/whu_cd/checkpoints/best_model.pth?download=true) |
262
 
 
 
 
 
 
 
 
 
263
  ### Datasets without a released checkpoint
264
 
265
  WildFire-S2, KATE-CD-256, the standard LEVIR-CD+ configuration, and Custom-CD currently have no eligible completed test result. Their validation-only or incomplete checkpoints are intentionally not uploaded.
results/changemamba/levir_val_as_test/metrics_test.json ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "adapter": {
3
+ "checkpoint_format": "ChangeMamba training checkpoint with model key, state_dict key, or raw state dict",
4
+ "final_output_for_metrics": "raw two-channel logits",
5
+ "input_format": "two tensors (A, B), each [B, 3, H, W]",
6
+ "model_class_path": "model_repos/ChangeMamba/changedetection/models/ChangeMambaBCD.py:ChangeMambaBCD",
7
+ "notes": "ChangeMambaBCD with VMamba backbone; upstream training checkpoint stores weights under the model key.",
8
+ "output_format": "two-channel logits [B, 2, H, W]"
9
+ },
10
+ "bf1": 0.8306516149038876,
11
+ "boundary_precision": 0.8341108230812149,
12
+ "boundary_recall": 0.8272209900665211,
13
+ "boundary_tolerance": 2,
14
+ "checkpoint": "/new-home/buddhiw/CD-Models/results/changemamba/levir_val_as_test/checkpoints/LEVIR/MambaBCD_Small_1783799387.0019937/best_model.pth",
15
+ "dataset": "levir_val_as_test",
16
+ "f1": 0.875312539142707,
17
+ "f1_0": 0.9948183398928466,
18
+ "flops": 28704817152.0,
19
+ "flops_g": 28.704817152,
20
+ "flops_input_shape": [
21
+ [
22
+ 1,
23
+ 3,
24
+ 256,
25
+ 256
26
+ ],
27
+ [
28
+ 1,
29
+ 3,
30
+ 256,
31
+ 256
32
+ ]
33
+ ],
34
+ "flops_library": "thop",
35
+ "fn": 2123436.0,
36
+ "fp": 1507299.0,
37
+ "fps": 76.81665317190178,
38
+ "fps_end_to_end": 6.080985465348349,
39
+ "fps_model_only": 76.81665317190178,
40
+ "gpu_index": 0,
41
+ "gpu_mem_allocated_peak_gb": 1.4883003234863281,
42
+ "gpu_mem_reserved_peak_gb": 1.93359375,
43
+ "gpu_mem_used_max_gb": 2.63427734375,
44
+ "gpu_mem_used_mean_gb": 2.6313484073693827,
45
+ "gpu_name": "NVIDIA GeForce RTX 3090 Ti",
46
+ "gpu_profiling_error": null,
47
+ "gpu_util_max": 54.0,
48
+ "gpu_util_mean": 7.914405010438413,
49
+ "gpu_util_min": 0.0,
50
+ "iou": 0.7782718119422073,
51
+ "iou_0": 0.9896901120691365,
52
+ "kappa": 0.8701331917825822,
53
+ "miou": 0.8839809620056719,
54
+ "model": "changemamba",
55
+ "num_timed_images": 5552,
56
+ "oa": 0.9900501760943182,
57
+ "params": 53999618.0,
58
+ "params_m": 53.999618,
59
+ "precision": 0.894234094844145,
60
+ "prediction_dir": "/new-home/buddhiw/CD-Models/results/changemamba/levir_val_as_test/predictions/test",
61
+ "profiling_errors": [],
62
+ "recall": 0.8571751425197601,
63
+ "split": "test",
64
+ "status": "complete",
65
+ "test_num_samples": 5568,
66
+ "threshold": 0.5,
67
+ "timestamp": "2026-07-23T06:31:43.486999+00:00",
68
+ "timing_device": "cuda:0",
69
+ "tn": 348529737.0,
70
+ "tp": 12743976.0,
71
+ "trainable_params": 53999618.0,
72
+ "trainable_params_m": 53.999618,
73
+ "visual_dir": "/new-home/buddhiw/CD-Models/results/changemamba/levir_val_as_test/visuals/selected_20",
74
+ "visual_sample_manifest": "/new-home/buddhiw/CD-Models/results/qualitative_samples/levir_val_as_test/sample_manifest.json",
75
+ "warmup_batches": 2
76
+ }
tools/generate_hf_model_card.py CHANGED
@@ -14,11 +14,14 @@ REPO_ID = "dineth18/CD-Models"
14
 
15
  DATASET_LABELS = {
16
  "dsifn_cd": "DSIFN-CD",
17
- "levir_cd_test_as_val": "LEVIR-CD+ (test-as-val protocol)",
18
  "sysu_cd": "SYSU-CD",
19
  "whu_cd": "WHU-CD",
20
  }
21
  DATASET_ORDER = tuple(DATASET_LABELS)
 
 
 
22
  MODEL_LABELS = {
23
  "bifa": "BiFA",
24
  "bit_cd": "BIT-CD",
@@ -42,7 +45,8 @@ def load_rows() -> dict[str, list[dict[str, Any]]]:
42
  for path in sorted(RESULTS.glob("*/*/metrics_test.json")):
43
  with path.open(encoding="utf-8") as handle:
44
  row = json.load(handle)
45
- dataset = str(row.get("dataset") or path.parent.name)
 
46
  if dataset not in DATASET_LABELS:
47
  continue
48
  if row.get("split") != "test" or row.get("status") != "complete":
@@ -51,6 +55,7 @@ def load_rows() -> dict[str, list[dict[str, Any]]]:
51
  continue
52
  row["_path"] = path
53
  row["_model"] = str(row.get("model") or path.parents[1].name)
 
54
  grouped[dataset].append(row)
55
  for rows in grouped.values():
56
  rows.sort(key=lambda row: (-float(row["f1"]), row["_model"]))
@@ -113,12 +118,14 @@ def build_results() -> tuple[str, list[Path]]:
113
  lines = [
114
  "## Results and released checkpoints",
115
  "",
116
- "Only completed `metrics_test.json` evaluations are eligible for rankings. Rankings are computed per dataset by test-set F1 (descending), and the canonical `best_model.pth` checkpoint for every ranked model is released. Separately requested checkpoint-only artifacts are listed below without fabricated metrics or a rank.",
117
  "",
118
  "All accuracy values are fractions. GPU memory is the PyTorch peak reserved memory for inference, with peak allocated memory used only when reserved memory is absent. FPS is model-only throughput. A dash means the evaluator did not record that metric; values are never estimated.",
119
  "",
120
  "The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU remains explicitly unavailable rather than being inferred from BF1. Boundary IoU and boundary F1 are distinct measures.",
121
  "",
 
 
122
  "### Dataset summary",
123
  "",
124
  ]
@@ -189,29 +196,6 @@ def build_results() -> tuple[str, list[Path]]:
189
  else:
190
  lines.append("No completed test-set result is available, so no checkpoint is published.")
191
 
192
- pending_checkpoint = RESULTS / "changemamba" / "levir_val_as_test" / "checkpoints" / "best_model.pth"
193
- if pending_checkpoint.is_file():
194
- checkpoints.append(pending_checkpoint)
195
- lines.extend(
196
- [
197
- "",
198
- "### Additional checkpoint without completed test metrics",
199
- "",
200
- "This trained checkpoint is published on request, but it is not included in the F1 rankings because its `metrics_test.json` evaluation has not completed. The protocol is LEVIR-CD+ validation-as-test, not the test-as-validation benchmark above.",
201
- "",
202
- *markdown_table(
203
- ["Dataset", "Model", "Evaluation status", "Download", "Size"],
204
- [[
205
- "LEVIR-CD+ (val-as-test protocol)",
206
- "ChangeMamba",
207
- "Metrics pending",
208
- f"[Download]({download_url(pending_checkpoint)})",
209
- f"{pending_checkpoint.stat().st_size / (1024 ** 2):.1f} MiB",
210
- ]],
211
- ),
212
- ]
213
- )
214
-
215
  lines.extend(
216
  [
217
  "",
 
14
 
15
  DATASET_LABELS = {
16
  "dsifn_cd": "DSIFN-CD",
17
+ "levir_cd_test_as_val": "LEVIR-CD+ comparison",
18
  "sysu_cd": "SYSU-CD",
19
  "whu_cd": "WHU-CD",
20
  }
21
  DATASET_ORDER = tuple(DATASET_LABELS)
22
+ DATASET_ALIASES = {
23
+ "levir_val_as_test": "levir_cd_test_as_val",
24
+ }
25
  MODEL_LABELS = {
26
  "bifa": "BiFA",
27
  "bit_cd": "BIT-CD",
 
45
  for path in sorted(RESULTS.glob("*/*/metrics_test.json")):
46
  with path.open(encoding="utf-8") as handle:
47
  row = json.load(handle)
48
+ source_dataset = str(row.get("dataset") or path.parent.name)
49
+ dataset = DATASET_ALIASES.get(source_dataset, source_dataset)
50
  if dataset not in DATASET_LABELS:
51
  continue
52
  if row.get("split") != "test" or row.get("status") != "complete":
 
55
  continue
56
  row["_path"] = path
57
  row["_model"] = str(row.get("model") or path.parents[1].name)
58
+ row["_source_dataset"] = source_dataset
59
  grouped[dataset].append(row)
60
  for rows in grouped.values():
61
  rows.sort(key=lambda row: (-float(row["f1"]), row["_model"]))
 
118
  lines = [
119
  "## Results and released checkpoints",
120
  "",
121
+ "Only completed `metrics_test.json` evaluations are eligible for rankings. Rankings are computed per dataset by test-set F1 (descending), and the canonical `best_model.pth` checkpoint for every ranked model is released.",
122
  "",
123
  "All accuracy values are fractions. GPU memory is the PyTorch peak reserved memory for inference, with peak allocated memory used only when reserved memory is absent. FPS is model-only throughput. A dash means the evaluator did not record that metric; values are never estimated.",
124
  "",
125
  "The current evaluator records BF1 but not boundary mean IoU (BmIoU), so BmIoU remains explicitly unavailable rather than being inferred from BF1. Boundary IoU and boundary F1 are distinct measures.",
126
  "",
127
+ "The LEVIR-CD+ comparison combines the project-compatible `levir_cd_test_as_val` and `levir_val_as_test` result records. The ChangeMamba row uses the completed `levir_val_as_test` evaluation over 5,568 samples.",
128
+ "",
129
  "### Dataset summary",
130
  "",
131
  ]
 
196
  else:
197
  lines.append("No completed test-set result is available, so no checkpoint is published.")
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  lines.extend(
200
  [
201
  "",