File size: 3,701 Bytes
d70361b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Large GeoTIFF Detection β€” Verification Findings

Verifies the RCA (Root Cause Analysis) claims against the actual codebase and a
real large GeoTIFF, since production input = large single-GeoTIFF uploads (not
the 300x300px Delhi tiles used in the Day 1-7 calibration work).

## Test setup

- Real Sentinel-2 imagery, 8192x8192px pair (2019-06-29 vs 2026-06-17, Delhi
  MGRS tile 43RFM), pulled via windowed COG read into
  `data/large_geotiff_test/` (~180 MB each, gitignored).
- Run through the actual `run_detection()` pipeline, AI-Based Deep Learning
  method, sensitivity 0.5.

## RCA issue verification (code + empirical)

| # | RCA Issue | Verified status |
|---|---|---|
| 1 | Default mode `downscaled` destroys detail | **CONFIRMED.** Default is `downscaled`, `DETECTION_MAX_SIDE=4096`. A 50x30px building on a 50,000px-wide GeoTIFF -> 4x2px after downscale. `fullres_tiled` mode exists but is off by default. |
| 2 | AdaptFormer/LEVIR-CD domain mismatch | **CONFIRMED** (Day 3, `model_changed_pxβ‰ˆ0`). Fix = fine-tuning (Uday's track). |
| 3 | Vegetation suppression kills real change | **NOT AN ISSUE.** `git blame` shows the correct asymmetric suppress/boost logic was already merged 2026-04-11. RCA describes an older code snapshot. |
| 4 | Registration 0.45x penalty on SSIM/edge | **Code real, impact negligible.** A/B tested on 4 real pairs: <0.001% difference in final score (downstream normalization cancels the uniform scaling). |
| 5-7 | Windowed threshold / tile seams / min_region_area scaling | Downstream of Issue 1; require the fullres path to be exercised. Partially addressed by the timing finding below. |

## Empirical performance finding (the key production blocker)

CPU-only inference at production scale is **impractically slow**:

| Mode | Resolution | change% | Regions | Completed on CPU? |
|---|---|---|---|---|
| `downscaled` (default) | 4096px | 0.614% | 11 | Yes β€” ~61 min |
| `fullres_tiled` (capped) | 5120px | 0.464% | **18** | Yes β€” but needed overnight (machine idled/throttled; ~46 min active CPU observed early, then stalled) |
| `fullres_tiled` (true native) | 8192px | β€” | β€” | **No** β€” >5h across two attempts, never completed |

**Two findings:**

1. **The fix works.** `fullres_tiled` produces more granular detections (18
   regions vs 11) β€” higher resolution breaks up what downscaling merges into
   fewer coarse blobs, so smaller/finer changes are caught. Issue 1's fix path
   is functional end-to-end, not just theoretical. (Lower total change% with
   *more* regions = finer, more localized detections rather than a few
   over-merged coarse ones.)

2. **But it's impractical on CPU.** Even the *current default* `downscaled`
   mode takes ~1 hour per pair on an 8192px input; true native `fullres_tiled`
   never completed in >5h. This is the same root constraint crashing Uday's
   fine-tuning (CPU can't handle larger datasets) β€” **GPU is required for both
   the detection and training tracks at production scale, not optional.**

## Recommendation

1. **Issue 1 fix** (highest leverage): auto-detect `fullres_tiled` for GeoTIFF
   inputs, OR change the default β€” BUT this is only usable with GPU inference,
   given the timing above.
2. **GPU provisioning** is the gating dependency for the whole large-GeoTIFF
   goal β€” surfaced independently by both the detection timing and the training
   crashes.
3. The Day 1-7 Delhi calibration (`cl_q=0.90`, +53% F1 on small tiles) remains
   valid for small/pre-tiled inputs but is **unverified at production GeoTIFF
   scale** β€” do not present it as production-proven without that caveat.

_Generated during Day 7+ large-GeoTIFF verification. Raw run logs under `runs/`._