Spaces:
Sleeping
DDA Change Detection β Progress Report
Period: 21 Jul 2026 β 13 Aug 2026
App: Change Detection Webapp (DDA mode)
Live model (13 Aug 2026): AdaptFormer wed_retrain Β· threshold 0.446 Β· TTA full Β· fusion dl_only Β· CUDA
This report documents data, methods tried, accuracy (previous vs current), per-area / per-class results, live before/after detections, challenges, and current status.
1. Headline accuracy (frozen satellite test)
Same 4 held-out Sentinel-2 pairs every time: delhi_0024, delhi_0001, delhi_0005, delhi_0016.
Metric is pixel F1 for change vs no-change (not DDA class F1).
| Checkpoint | Date | Thr | TTA | F1 | Precision | Recall | IoU | Decision |
|---|---|---|---|---|---|---|---|---|
v3_frozen (previous production) |
28 Jul | 0.20 | off | 58.7% | 60.3% | 61.4% | 41.7% | Rollback baseline |
wed_retrain |
29 Jul | 0.446 | off | 60.5% | 52.6% | 77.3% | 43.7% | Promoted OP |
wed_retrain + TTA full (current live) |
30 Jul | 0.446 | full | 62.6% | 53.3% | 83.1% | 46.0% | Live |
fri3_no_drone |
31 Jul | 0.50 | β | 58.9% | 48.8% | 82.1% | β | Keep wed |
sat_v2_retrain |
1 Aug | 0.50 | β | 57.6% | 49.5% | 79.7% | β | Do not promote |
fri2_retrain (drone in train) |
31 Jul | 0.50 | β | 48.7% | 36.1% | 84.9% | β | Rejected |
| DSIFN proxy (not live) | 30 Jul | β | β | 9.0% | β | β | β | Rejected |
Previous β current (same test set): 58.7% F1 β 60.5% F1 (62.6% with TTA)
Gain: +1.8 pp without TTA, +3.9 pp with TTA full. Recall rose sharply (61% β 83%); precision fell (60% β 53%).
Sources: data/delhi_cd/tuesday_baseline/metrics.json, models/adaptformer_delhi/wed_retrain/metrics.json, data/delhi_cd/thursday_op_sweep/metrics.json, checkpoint summary.json files.
2. Accuracy per frozen-test pair (current model)
AdaptFormer wed_retrain @ 0.446 on the frozen test + 1 val pair (from the DSIFN compare, same weights).
| Pair | Zone / type | F1 | Precision | Recall | Fill (interior) | Hole rate |
|---|---|---|---|---|---|---|
delhi_0024 |
Sentinel-2 Delhi Β· mixed_gsd + vegetation | 54.8% | 40.3% | 85.4% | 81.4% | 15.8% |
delhi_0001 |
Sentinel-2 Delhi Β· mixed_gsd + vegetation | 62.8% | 46.2% | 97.8% | 93.7% | 6.8% |
delhi_0005 |
Sentinel-2 Delhi Β· mixed_gsd + vegetation | 55.3% | 61.8% | 50.1% | 66.5% | 31.5% |
delhi_0016 |
Sentinel-2 Delhi Β· mixed_gsd + vegetation | 69.6% | 56.4% | 91.0% | 84.1% | 15.1% |
delhi_0021 (val, not in headline) |
Sentinel-2 Delhi Β· mixed_gsd + vegetation | 69.4% | 55.2% | 93.7% | 90.1% | 5.0% |
| Mean (5 Delhi pairs) | 62.4% | 83.2% | 14.8% |
Tuesday v3_frozen per-pair F1 (older split, for reference only β pair IDs differ except delhi_0005):delhi_0028 66.5% Β· delhi_0023 59.1% Β· delhi_0005 51.9% Β· delhi_0012 57.2% Β· mean 58.7%.
3. Areas and classes tested
3.1 Pixel-change classes in the labeled eval set
| Class / coverage tag | What it means | How tested | Pixel F1 available? |
|---|---|---|---|
mixed_gsd |
Coarse 10 m Sentinel-2 (2019 vs 2026, season-matched) | Frozen test (4 pairs) + train/val | Yes β this is the 58.7% / 62.6% number |
vegetation |
Phenology / land-cover on same Sentinel-2 tiles | Same pairs (tagged together with mixed_gsd) | Not split out from building; joint pixel F1 only |
building / road |
Individual roofs, roads | DDA GeoTIFF + drone packs | No class-wise F1 on frozen test (10 m S2 cannot resolve buildings) |
| Structural roofs / solar (Grid_54 vs H43X2E1) | Hand GT: new blue/grey roofs, rebuild, solar | Curated mask + run #47 re-apply | GT component recall β 96% after 21 Jul accuracy pass (was ~69%) |
| Hard-negatives | Parking, seasonal veg, shadow FP tiles | 5 mined hn_* tiles in train |
Used for training, not a test score |
DDA report classes (classifier on detected blobs, not GT F1):
| DDA class | Internal engine label | Notes |
|---|---|---|
| New Construction | New Construction/Building | Roofs, solar, structure |
| Demolition | demolition / clearing / debris | Rare on recent drone reports |
| Extension | expansion / renovation | Keyword map; seldom fired |
| Vegetation Change | vegetation / tree / crop | Often over-fires on misaligned drone |
| Other | Unclassified Ground Change, bare soil | Dominant on poorly aligned pairs |
There is no held-out F1 per DDA class. Class columns below are counts from live reports, not accuracy vs labeled class GT.
3.2 Drone / high-res pairs vs hand GT (pixel F1)
Un-orthorectified drone mosaics. NCC 0.07β0.61. Ceiling is low until true orthomosaics exist.
| Pair | GT change % | Pred % (best drone-fix pass) | F1 | NCC |
|---|---|---|---|---|
dda_before1_after |
21.24 | 11.93 | 8.2% | 0.07 |
dda_before3_after3 |
3.32 | 12.29 | 33.3% | 0.61 |
dda_before4_after4 |
19.32 | 48.95 | 30.0% | 0.41 |
dda_before5_after5 |
22.32 | 19.46 | 31.8% | 0.46 |
dda_before6_after6 |
4.71 | 8.24 | 14.5% | 0.51 |
| Mean | 23.6% |
Baseline on the same packs (v3_frozen @ 0.5): mean F1 22.3%.
After wed_retrain + skip-reg auto: 23.6% (+1.3 pp). Success bar was +15 pp or β₯45% β not met.
Aligned v2 drone packs (dda_before5_after5_v2 NCC 0.74, dda_before6_after6_v2 NCC 0.75) were added to train in sat_v2_retrain and did not beat wed_retrain on frozen satellite test (57.6% vs 60.5%).
4. Live DDA reports (before / after / overlay)
Images are the appβs stored working copies (registered/resized grid), not the original GeoTIFF bytes.
4.1 before6 vs after6 β main debug pair (Central Delhi drone)
| Report | Date | Change % | Regions | New Construction | Other | Notes |
|---|---|---|---|---|---|---|
| #61 (reference) | 1 Aug | 11.5% | 31 | 8 | 23 | Stronger recall; sat_v2 / older post-process |
| #71β72 | 5 Aug | 1.13% | 5 | β | β | Shadow strip wiped true dark roofs |
| #73 | 6 Aug | 7.3% | 24 | β | β | Soft strip |
| #74β75 | 6 Aug | 10.2% | 29 | β | β | Recovery flood / edge ribbons |
| #77 | 6 Aug | 9.0% | 24 | β | β | Still blob/edge heavy |
| #78 | 6 Aug | 3.3% | 10 | β | β | Over-suppressed |
| #79 (after OP switch) | 8 Aug | 3.4% | 17 | 1 | 16 | wed_retrain + weak-align skip-recovery β under-detect |
Hand GT for this scene is ~4.7% change. Report 61 over-fired vs GT; report 79 under-fired on construction class (16/17 blobs labeled Other; one New Construction of 0.3 mΒ²).
Report 61 (reference) β before / after / detection overlay
Report 79 (current OP) β before / after / detection overlay
4.2 Other live pairs (latest completed run per title)
| Pair | Run | Change % | Regions | New Construction | Vegetation | Other | Overlay |
|---|---|---|---|---|---|---|---|
| before5 vs after5 | 80 | 7.73% | 13 | 3 | 2 | 8 | overlays/7_79fbb9f50ef845b8ac9fbce8fe770632.png |
| before7 vs after7 | 70 | 6.40% | 6 | 2 | 0 | 4 | overlays/7_6adbd9998af64f24abc6980eddfbc764.png |
| before1 vs after | 68 | 17.53% | 17 | 3 | 1 | 13 | overlays/7_9a026711e2684a4294b1cbd7665dd707.png |
| before3 vs after3 | 66 | 18.64% | 37 | 7 | 0 | 30 | overlays/7_a3f6c74870f544b0b2ec25e1ff9974c7.png |
| before4 vs after4 | 56 | 7.97% | 25 | 6 | 2 | 17 | overlays/7_a7d5ff6c1d3b4efdb3014da94b565326.png |
| Grid_54 vs H43X2E1 | 51 | 3.25% | 60 | 9 | 2 | 49 | overlays/6_7a53ee025d81485b80d0e6b3f0de215c.png |
| TEST-1 vs TEST-2 (8k JPEG) | 81 | 13.13% | 60 | 2 | 51 | 7 | overlays/7_6c78393faec548d9b24afa9b3b24ef13.png |
before5 (run 80) β before / after / overlay
TEST-1 vs TEST-2 (run 81) β before / after / overlay
First attempt (job 72) stuck 2.3 h at 46% on 8192Γ4320 with TTA full. Re-run completed (~3 h) at 13.1% change, mostly Vegetation Change (51/60).
5. Data used
| Source | Role | Notes |
|---|---|---|
| Sentinel-2 L2A (MGRS 43RFM), 2019-06-29 vs 2026-06-17 | Train / val / frozen test | 10 m GSD; vegetation + mixed_gsd; cannot score individual buildings |
| DDA GeoTIFFs (Grid_54, H43X2E1, GRID 54_2025/2026, 0304, etc.) | Live detection + Grid_54 hand GT | Some files corrupt (GRID 54_2025/2026 TIFF directory unreadable) |
| Drone before/after TIFFs (before1βbefore7) | Live QA + attempted train | Un-orthorectified; NCC often 0.07β0.61 |
| Aligned v2 drone packs (before5/6 v2) | Train experiment (sat_v2) |
NCC ~0.74β0.75; did not lift frozen F1 |
Hard-neg tiles hn_delhi_* |
Train | Parking / seasonal veg / shadow FPs |
| Frozen test pin | data/delhi_cd/frozen_test_ids.json |
Prevents split reshuffle from faking regressions |
6. Process and approaches tried
- AdaptFormer Delhi fine-tune (v3_frozen) β thr 0.2,
dl_only. Held-out F1 58.7%. Production rollback. - Hard-neg fine-tune (
v3_hardneg) β val F1 0.675 but test 54.8β56.3%. Not promoted (FP tiles still 100% FP in analysis). - Post-process accuracy pass (21 Jul) β protect roofs in transient/shadow strip; chromatic + dark-roof recovery; mild DL hysteresis. Grid_54 GT recall 0.69 β 0.96; change% 1.21 β 4.23.
- Wednesday retrain (
wed_retrain) β CE + pos_weight, drop empty GT, keep hard-negs, oversample change Γ4. Test F1 60.5%. Hit the >60% target. - Operating-point sweep β F_Ξ² thr 0.354 dropped F1. TTA full kept: 62.6%. Multiscale dropped.
- DSIFN backbone spike β Delhi F1 9% vs AdaptFormer 62%. Decision: keep AdaptFormer. BIT-CD ensemble coded but weights missing.
- Drone-in-train (
fri2) β frozen F1 48.7% (precision collapse). Drone packs excluded from training thereafter. - No-drone ablation (
fri3) β F1 58.9% < wed. Promote wed. - Aligned v2 drone train (
sat_v2) β F1 57.6%. Do not promote. Briefly used live @ thr 0.5; caused poor UI quality. - Live OP restore (8 Aug) β switch
.envtowed_retrain@ 0.446; NCC-gate GeoTIFF registration; skip roof recovery on weak-align pairs; unify ECC gate at 0.55. - Polygon overlays β clip fill to change mask; tighter contour extraction (earlier in the branch).
7. Challenges
| Issue | Impact | Status |
|---|---|---|
| Un-orthorectified drone (local parallax) | Pixel GT F1 stuck ~24%; NCC 0.07β0.61 | Blocker without new orthomosaics |
| Training on those drone packs | Frozen satellite F1 60.5% β 48.7% | Fixed: exclude from train |
| 10 m Sentinel-2 test set | Headline F1 does not measure building/road skill | Still the only frozen apples-to-apples number |
| Weak-align post-process tug-of-war | before6 reports swung 1% β 11.5% | Soft-strip + skip recovery; over-suppressed (#79 = 3.4%) |
| Shadow strip vs dark new roofs | True construction deleted | Soft path when registration_ok=False |
| 8kΓ4k TTA-full inference | Job 72 hung 2.3 h at 46% | Cancelled; job 73 finished in ~3 h |
| Corrupt GRID 54_2025/2026 TIFFs | Library skip | Unrelated to model |
| No per-class GT F1 | Cannot quote βbuilding accuracy = X%β | Only blob counts + pixel change F1 |
| BIT-CD / extra NN | Ensemble off; DSIFN rejected | Stay on AdaptFormer |
8. Achievements
- Held-out satellite F1 58.7% β 60.5% (62.6% TTA) on a frozen 4-pair test.
- Hit the Wednesday target test F1 > 60%.
- Proved drone-in-train hurts clean satellite F1; froze test IDs so later labels cannot fake a drop.
- Rejected a weaker backbone (DSIFN) with measured Delhi F1 9% vs 62%.
- Grid_54 structural GT recall ~96% after recovery/strip fixes (offline re-apply).
- Live stack documented: AdaptFormer neural net already in production (
AI-Based Deep Learning). - DDA product path: jobs, reports, polygon overlays, ROI β training-pack export.
9. Current status (13 Aug 2026)
| Item | Value |
|---|---|
| Live weights | models/adaptformer_delhi/wed_retrain |
| Calibrated threshold | 0.446 |
| Fusion / TTA | dl_only / full |
| Headline accuracy | 62.6% F1 (TTA) / 60.5% F1 (no TTA) vs previous 58.7% |
| Best drone-pack F1 | ~24% mean (alignment-limited) |
| Latest before6 report | #79 Β· 3.4% Β· 17 regions (worse visually than #61 11.5%) |
| Latest large JPEG | TEST-1/2 13.1%, 60 regions, 51 vegetation |
| Open gap | Weak-align recall vs FP; need orthomosaics or a pair-specific recall path |
| Not recommended | New backbone, drone-in-train, sat_v2 @ 0.5 |
Recommended next work: restore selective dark-roof recovery on weak pairs (or a slightly lower thr for low-NCC GeoTIFFs) so before6 construction returns without re-flooding; keep wed_retrain as the satellite OP; treat drone F1 as a geometry problem, not a model-swap problem.











