Hsyshasuzh/longmemory-geo / project /PROJECT_STATE.md
Hsyshasuzh's picture
|
download
raw
101 kB

Project state and Copilot handoff

Updated: 2026-10-30, following research delivery and precision-first validation. This document is a persistent handoff, not a claim that the model build is complete.

2026-11-05 researched roadmap for the 99% objective

  • CURRENT PHASE 0: the SODA-A adapter now maps both airplane and helicopter to canonical aircraft, while retaining their distinct reviewed detector-head classes. Tile selection and class-balanced sampling now derive classes through the same clipping/ignore eligibility path as training, not from whole-source category lists or DOTA coverage metadata. Replacement draws, unique tile/source exposure and actual eligible-class coverage are recorded for each future run. Historical reports and checkpoints remain unchanged and are not comparable to this corrected recipe.

  • VERIFIED: evaluation/runs/2026-11-05-soda-a-supervision-audit.json counts all 25,446 train and 13,740 validation tiles using the shared geometry path, without reading official test annotations or images. It finds 12,927/8,822 unique eligible source aircraft annotations (now including 620/264 source helicopters), 8,211/3,723 large vehicles, 22,261/21,658 vessels, 16,488/7,700 tanks and 198,602/141,265 vehicles in train/validation. These are supervision counts, not independent performance evidence.

  • VERIFIED: SODA-A inventory, training, frontier scoring and error rendering now request only their required train/validation annotation splits. The new audit records official_test_annotations_read: false and official_test_images_read: false. tests/model/test_soda_a_adapter.py and the broader 41-test detection/evaluation suite passed in the isolated runtime after the correction.

  • VERIFIED: retained SODA-A development records were re-scored under three ignore policies in evaluation/runs/2026-11-05-soda-a-ignore-policy-sensitivity.json. Precision is 50.58% for historical any-intersection suppression, 49.22% for the current 50%-prediction-area rule, and 43.73% for 100%-area suppression; recall remains 90.70%. These are sensitivity diagnostics, not a choice of release policy or new model result.

  • VERIFIED: the DOTA train-only review miner now uses confidence-ordered, one-to-one matching and retains duplicate predictions as explicitly typed review candidates. It now includes aircraft. Two focused matching tests pass; the old review queue is preserved and must not be compared as if regenerated.

  • VERIFIED: regenerated the corrected train-only queue at evaluation/runs/2026-11-05-dota-train-review-queue-v2.json and rendered six-class sheets in evaluation/runs/2026-11-05-dota-train-review-sheets-v2/. Before selection it counted 10,258 matched targets, 1,486 ignored-region predictions, 576 unmatched predictions and one duplicate. The pending queue contains 20 vehicle, 20 large_vehicle, 20 vessel, 12 storage_tank, five aircraft and seven bridge records. All remain training-ineligible pending source-label review; no labels or weights changed.

  • VERIFIED: downloaded/verified the DOTA-v1.0 validation archive (published SHA-256 f7ab…a83) and matching local v1.5 annotations, then extracted only the 24 existing DOTA development scenes to datasets/external/dota-fullscene-dev/. No historical test scene was extracted. evaluation/score_dota_full_scenes.py now evaluates complete scenes through native 1024 tiles, 25% overlap and oriented fusion, deduplicating original source annotations. The retained small SODA-A candidate scores low-threshold full-scene P/R 0.3130/0.9605 (1,485 TP, 3,259 FP, 61 FN; 1,546 targets) on these repeatedly used development scenes. Bridge recall is 0.3810 and precision 0.0142. This is diagnostic, not independent evidence or a promotion. Two tiles hit the 300 raw-detection cap, so output capacity is now a measured hypothesis.

  • VERIFIED: same-development full-scene 99%-precision frontier is saved in evaluation/runs/2026-11-05-dota-fullscene-small-baseline/frontier.json: bridge 0.0476, vehicle 0.1934, large_vehicle 0.3169, aircraft 0.9000, vessel 0.7890, storage_tank 0.5096 recall. These are optimistic fitted diagnostics, yet none reaches the objective; threshold calibration cannot solve the current candidate's recall failures.

  • VERIFIED: paired full-scene dense-scene cap test is in evaluation/runs/2026-11-05-dota-fullscene-cap300-paired/ and evaluation/runs/2026-11-05-dota-fullscene-cap1000/. On P0257/P1410, max-det 300→1000 changes TP/FP/FN from 122/774/14 to 123/894/13: recall gains 0.74pp while 120 false positives are added. The detector cap is real but does not explain the primary bridge/precision failures; retain 300 as the reference until a class-aware proposal/fusion change has evidence.

  • VERIFIED/REVIEW PENDING: native 1024-pixel full-scene bridge crops are in evaluation/runs/2026-11-05-dota-fullscene-bridge-review/. Visual inspection of representative development crops shows high-confidence bridge proposals on highway/interchange and linear road geometry, plus shifted/oversized boxes around narrow rail/road spans that fail IoU 0.5. This is a model-error hypothesis only; all 33 crops remain source-label-review pending and training-ineligible.

  • VERIFIED: created ROADMAP_99_PERCENT.md and collected primary references in docs/reviews/2026-11-05-99-roadmap-sources.md. The user wants broad coverage of any satellite imagery with correctly labeled objects; a universal 99% guarantee remains unsupported. The six-class detector and segmentation ontology do not cover every possible object category.

  • VERIFIED: a read-only collection run wrote evaluation/runs/2026-11-05-99-roadmap-evidence.json, with 21 artifact hashes, four experiment summaries, actual rehearsal counts, validation membership hashes, a source category registry and illustrative sample-size calculations. It opened one SODA-A training annotation; no test imagery was read.

  • VERIFIED: actual rehearsal count in the rehearsal900 run is 812. All four recent SODA-A runs completed one epoch and share validation IDs. The sampler uses DOTA annotation coverage and SODA-A source-image categories instead of eligible tile positives. Earlier conclusions rejecting class balance or more data generally are therefore too strong; the observed checkpoints remain unpromoted, but those strategies have not been properly tested to convergence.

  • HISTORICAL: the prior SODA-A adapter ignored helicopter. This was repaired above; any old five-class report remains historical and cannot be relabeled as six-class aircraft evidence. The 60 recorded validation tiles have at most 67 mapped eligible targets; an output cap of 300 is not an established cause of their failures. Dense-scene output capacity still needs auditing.

  • PLAN: the researched roadmap starts with pipeline correctness, then grouped training/selection/calibration/final scenes and reviewed labels, matched baselines, converged controlled experiments, full-scene inference, and joint qualification of all profiles. Its statistical gate and expanded compute are proposals, not completed work or achieved performance.

  • NEXT: perform Phase 0 in ROADMAP_99_PERCENT.md. Preserve historical artifacts and protected splits. Planning added no model training, weights, imagery downloads, registrations, paid services, or profile mutations.

2026-11-05 SODA-A validation frontier continuation

  • VERIFIED: added evaluation/score_soda_a_frontier.py to score only the validation tile IDs recorded by a SODA-A training run and to fit a clearly labeled same-validation precision frontier. The official SODA-A test split is never materialized by this evaluator.
  • VERIFIED: evaluated training/runs/2026-11-04-soda-a-small-baseline/best.pt on its 60 recorded validation tiles with native 1024 CUDA/T4 inference. Corrected report: evaluation/runs/2026-11-05-soda-a-small-baseline-val-v2.json; raw records are in the matching *-records-v2.json file. Metrics reproduce the trainer: AP50 0.7344298656, mAP50-95 0.3869758267, precision 0.4921524664, recall 0.9070247934.
  • VERIFIED: same-validation empirical 99%-precision recall is vehicle 0.2733, large_vehicle 0.1944, aircraft 0.7010, vessel has no feasible threshold, and storage_tank 0.6433. SODA-A has no bridge targets. This is not independent evidence and no checkpoint was promoted.
  • VERIFIED: one initial evaluator output was invalid because it included unsupported bridge-head predictions; it is superseded by the v2 report and must not be used. The corrected evaluator filters to SODA-A's exact mapped classes. The SODA-A adapter test passed and the evaluator compiles.
  • VERIFIED: generated evaluation/runs/2026-11-05-soda-a-error-summary.json from the retained SODA-A validation and DOTA selection records. SODA-A tile-level counts are vehicle 133 false positives/23 misses, large_vehicle 77/5, aircraft 96/4, vessel 58/1, and storage_tank 89/12. DOTA selection counts include bridge 87/3 and storage_tank 124/4. These are development matching counts and do not establish qualitative annotation errors.
  • VERIFIED: class-balanced sampling under training/runs/2026-11-05-soda-a-class-balanced/ was rejected: mAP50-95 0.37258 vs uniform-450 0.38698, with lower same-validation frontier recall for every SODA-A class. DOTA rehearsal-900 was rejected at 0.35433 mAP50-95; SODA-A-1200 was rejected at 0.37447, with vehicle frontier recall only 0.0581 despite storage-tank recall 0.6959. No candidate was promoted.
  • INFERRED: under the fixed short-run budget, class balance, additional DOTA rehearsal, and a larger SODA-A pool do not resolve the detector errors.
  • VERIFIED: localized representative high-confidence false positives and missed targets by class/source in evaluation/runs/2026-11-05-detection-error-locations.json. This is based only on retained SODA-A validation and DOTA selection records; no labels or protected test data were changed.
  • VERIFIED: visual review is recorded in docs/reviews/2026-11-05-soda-a-error-review.md. It identifies vehicle/vessel, bridge/linear-infrastructure, and tank/industrial-structure confusion hypotheses; none is a verified label defect.
  • VERIFIED: a train-only DOTA review queue was mined from 812 training tiles at confidence >= 0.5: 20 vehicle, 20 large_vehicle, 20 vessel, 12 storage_tank, and 7 bridge candidates. It is saved at evaluation/runs/2026-11-05-dota-train-hard-negative-review-queue.json and is explicitly ineligible for training until source-label review.
  • NEXT: render/review the train-only queue against source annotations, approve only unambiguous negatives, and then design one hard-negative/confusion experiment. Keep the uniform 600 SODA-A / 450 DOTA baseline, architecture, LR, validation IDs, and 900-second budget; keep SODA-A official test and FAIR1M audit groups untouched.

2026-11-02 FAIR1M continuation audit

  • VERIFIED: the later training/runs/2026-11-01-fair1m/fit.json records a 1,200-second run, 800 FAIR1M training tiles, 200 DOTA rehearsal tiles, 100 selection tiles and an unused 164-source-image audit split. Initial selection mAP50-95 was 0.2801, best epoch 3 was 0.3024; bridge and vessel AP fell. The promotion gate failed. This is not an independent test.
  • VERIFIED: the current mirror has 1,732 image and 1,732 XML stems, all paired; this supersedes the earlier 1,728-image inventory below. Content integrity, exact/near duplicates and cross-source overlap have not been audited here.
  • VERIFIED: training/train_fair1m.py previously stored fully visible object OBBs in tile coordinates although convert_detection_sample expects source coordinates and subtracts the tile origin. For offset tiles this shifted the training targets twice. The adapter now retains source coordinates; clipped polygons remain tile-local. Historical run metrics/checkpoint predate this correction and must not be treated as a validated training comparison.
  • VERIFIED on 2026-11-02: the focused offset-coordinate and clipped-target regression tests passed in a new temporary local Python 3.13 runtime. Seven existing detection-data tests and the ignored-anchor loss test also passed. The FAIR1M evaluator now ignores severely clipped public targets that the training adapter ignores; earlier evaluation results use the old policy.
  • VERIFIED evaluation limitation: evaluation.metrics._match_class suppresses an unmatched prediction if it has any positive-area intersection with an ignored region. A 100x100 false prediction overlapping a 2x2 ignore region by one square pixel produced zero false positives in a synthetic check. This can inflate reported precision in the presence of ignore regions; choose and test a justified ignore-overlap policy for future comparisons while retaining the historical metric and reports unchanged.
  • VERIFIED: temporary runtime /tmp/longmemory-audit-venv has PyTorch 2.7.1+cu126, torchvision 0.22.1+cu126 and Ultralytics 8.4.185; pip check, T4 detection and a synthetic 256x256 adapted-detector GPU forward pass passed. This is a new experimental runtime, not the earlier Python 3.10 environment, and no training or end-to-end dataset batch has been verified.
  • VERIFIED: FAIR1M splits hash individual image IDs, not geographic groups; overlap within FAIR1M or with DOTA is unresolved. The mirror states its license is unknown. No audit-set inference, training, or model promotion was performed in this continuation. The shipped checkpoint hashes are unchanged.
  • A proposed independent evaluation protocol is in docs/reviews/2026-11-02-detection-evaluation-design.md. Some FAIR1M TIFFs have georeferencing, but cross-dataset overlap and imagery terms remain unverified. A footprint audit tool was added at evaluation/audit_fair1m_geography.py; it does not establish near-duplicate or cross-source independence. Its synthetic overlap/missing-CRS test passed.
  • VERIFIED: a first-100-image footprint audit found 20 positive-area bounding rectangle intersections crossing train/validation/audit splits. In examples 2/audit vs 4/train and 10/train vs 12/validation, north-up same-CRS rasters overlap approximately 78.5% and 48.5% of each footprint respectively. Their georeferencing has not been independently validated; bounding rectangles can overestimate overlap. Evidence: evaluation/runs/2026-11-02-fair1m-geography-first100.json. The old FAIR1M split is unsuitable as independent evaluation; the prior run's score is potentially contaminated. Full-dataset, near-duplicate and DOTA overlap audits remain pending.
  • A tested grouping utility, evaluation/group_fair1m_footprints.py, can form connected overlap groups from a complete, error-free footprint audit without assigning new splits. It does not identify nearby non-overlapping scenes, cross-source duplicates or mis-georeferenced imagery.
  • VERIFIED: all 1,732 FAIR1M TIFFs yielded geographic bounds without read errors. Bounding rectangles produced 11,060 intersecting image pairs, including 1,761 train/validation, 1,584 train/audit and 186 validation/audit pairs; 635 train, 99 validation and 76 audit images occur in cross-split pairs. Overlap-only transitive grouping yields 857 groups (818 singletons); these results are not proof of correctly georeferenced footprints or full spatial independence. Evidence: evaluation/runs/2026-11-02-fair1m-geography.json and evaluation/runs/2026-11-02-fair1m-footprint-groups.json. No split changed.
  • VERIFIED: all 1,732 cached Hugging Face image metadata files contain distinct recorded 64-character digests; no duplicate recorded digest was found. evaluation/runs/2026-11-02-fair1m-metadata-digests.json preserves the result. Local bytes were not independently hashed and overlap/near duplicates are not ruled out; the footprint intersections above remain material.
  • VERIFIED against the preserved FAIR1M best checkpoint: its 800 train tiles came from 628 image IDs and its 100 validation tiles from 80 image IDs. Of the 164 historical audit IDs, 75 lie in footprint-connected groups touched by those recorded train/validation IDs; 89 do not. Those 89 are only a candidate pool, not a certified independent set: proximity, other runs, DOTA/pretraining overlap, labels, source terms and geography remain unchecked.
  • NEXT: complete duplicate/nearby and cross-source audits, obtain source terms and define geographically independent splits before a controlled FAIR1M comparison. Do not overwrite the old split or its reports.
  • Continuation: FAIR1M trainer now requires the footprint group registry; whole groups touching the historical audit split are quarantined, and other groups touching validation are assigned to development validation. This makes a diagnostic train/validation comparison less contaminated by within-mirror overlap, but does not certify independence from DOTA, nearby scenes or prior model exposure. The old audit groups are not an independent test. FAIR1M evaluation explicitly uses an experimental 50% prediction-area ignore-overlap rule; the shared evaluator's historical default is unchanged. Three focused adapter/split/metric tests passed. Grouped smoke v2 completed ten epochs in 134.61 seconds, using 12 FAIR1M + 8 DOTA training tiles and eight validation tiles. Selection mAP50-95 was 0.18146 initially and 0.20805 at best epoch 5; this small slice has only four bridge targets and no aircraft targets and is not quality evidence. The earlier empty smoke output was an interrupted inventory. Evidence: training/runs/2026-11-02-fair1m-grouped-smoke-v2/. A larger 600 FAIR1M + 150 DOTA / 60 validation tile development comparison completed six epochs and timed out at 1,200 seconds. Initial grouped mAP50-95 was 0.2296; best epoch 3 was 0.25065, with later epochs lower. At confidence .001, precision/recall were 0.3918/0.6828 initially and 0.320/0.766 at epoch 3; these are uncalibrated development metrics, not a 99% result. This validation has seven bridge targets and no aircraft; its entire 119-image validation pool has no aircraft. Data/source/geography limitations and historical split usage preclude an independent-quality claim. Evidence: training/runs/2026-11-02-fair1m-grouped-comparison/. No model promoted. A paired DOTA selection comparison using the 50% ignore policy found mAP50-95 0.52691→0.54476 and recall at confidence .001 0.90390→0.95345. But fitting 99%-precision thresholds on those same selection tiles gave vehicle recall 0.412→0.176 and large-vehicle recall 0.851→0.579. These threshold frontiers are optimistic in-sample diagnostics, not independent test results. This checkpoint fails the precision-first goal and is not promoted. Evidence: evaluation/runs/2026-11-02-fair1m-grouped-dota-comparison.json. A one-variable learning-rate retry (3e-6 instead of 1e-5, identical grouped training/rehearsal/validation IDs, initial metrics and 700-second budget) reached best grouped mAP 0.24262 at epoch 2. DOTA selection mAP rose 0.52691→0.54179, but its same-selection 99%-precision vehicle recall fell 0.412→0.304 and large-vehicle recall 0.851→0.396. It also fails the precision-first goal and is not promoted. Evidence: training/runs/2026-11-02-fair1m-grouped-lr3e-6/ and evaluation/runs/2026-11-02-fair1m-lr3e-6-dota-comparison.json.
  • VERIFIED exploratory source-scene aggregation of the lower-rate comparison merges cross-tile predictions using class-specific oriented NMS and deduplicates source annotation IDs. On 21 partially covered selection scenes, the same-selection 99%-precision vehicle recall was 0.333→0.307, but large-vehicle recall was 0.858→0.878, contrary to the tile-counted regression above. Vessel recall was 0.886→0.893; bridge had no feasible threshold. Thresholds are fit and scored on these same scenes; labels are incomplete, scene coverage is partial, and the set is neither independent nor sufficient for 99% claims. Evidence evaluation/runs/2026-11-02-lr3e-6-scene-frontier.json.
  • The same exploratory source-scene procedure for the 1e-5 candidate gave 99%-precision vehicle recall 0.333→0.182 and large-vehicle recall 0.858→0.833; it remains unpromoted. Evidence evaluation/runs/2026-11-02-lr1e-5-scene-frontier.json.
  • A controlled rehearsal retry finished at training/runs/2026-11-02-fair1m-grouped-rehearsal450/: 600 FAIR1M tiles, 450 rather than 150 DOTA train rehearsal tiles, unchanged 60 grouped validation tiles, LR3e-6 and a 900-second training budget. Epoch 2 best grouped mAP was 0.24118. Epoch 1 preserved vehicle recall on the DOTA selection-derived 99%-precision frontier while improving some other classes, but frozen-threshold quick validation precision/recall were 0.98364/0.72337 versus initialization 0.99057/0.72165; tank P/R regressed 0.909/0.667 to 0.727/0.533 (15 targets). Both abstained on bridge. Scores are exploratory, scene-merged, selection-calibrated, not independent and not 99% evidence. No promotion or test use. Evidence: evaluation/runs/2026-11-02-rehearsal450-epoch1-fixed-quick.json and evaluation/runs/2026-11-02-rehearsal450-epoch1-scene.json.
  • A single-variable rehearsal-composition experiment completed under training/runs/2026-11-02-fair1m-grouped-rare-rehearsal/: same 600 FAIR1M, 450 DOTA tile budget, LR3e-6 and grouped validation, but the DOTA rehearsal selection prioritizes all 95 train tiles containing bridge or tank positives. Best grouped mAP was 0.24735 at epoch 2. Epoch 1 fixed-threshold quick precision/recall were 0.98832/0.72680 vs initialization 0.99057/0.72165; aircraft recall fell 0.938→0.906 and bridge was abstained. The candidate is not promoted. No validation or test tile was included in training. Evidence: evaluation/runs/2026-11-02-rare-epoch1-fixed-quick.json.
  • A no-training native-plus-512-crop inference experiment on the original pretrained detector was rejected on 68 DOTA selection tiles. On the exploratory scene-merged, same-selection 99%-precision frontier, small vehicle recall was 0.333→0.318 and large vehicle 0.858→0.038. No quick/test evaluation, deployment change, or model promotion was performed. Evidence: evaluation/runs/2026-11-02-pretrained-multiscale-selection-scene.json.
  • VERIFIED: all 21 DOTA detection selection source scenes also occur among the 24 quick-evaluation source scenes; disjoint tile IDs did not ensure scene independence. Four quick tiles from only three scenes are outside selection scenes. On those sparse scenes (76 targets, vehicle and large-vehicle only), the rare-rehearsal epoch-1 fixed thresholds produced 52 TP/1 FP vs initial 54 TP/1 FP. This diagnostic is too small for a generalization or 99% claim. Evidence: evaluation/runs/2026-11-02-rare-new-scenes-fixed.json.
  • VERIFIED: with DOTA-derived fixed thresholds, DIOR-R selection precision and recall were 0.9923/0.6684 for initialization and 0.9854/0.6995 for the rare rehearsal candidate; both abstained on all 29 bridge targets, and the candidate had one extra FP. Fitting thresholds on DIOR-R selection itself gave only 3/29 bridge recall for initialization and 2/29 for the candidate at empirical 99% precision; this in-sample result is not independent or statistically adequate for a 99% claim. DIOR-R selection was used in earlier work, and its reserved held-out audit remains untouched. Evidence: evaluation/runs/2026-11-03-rare-dior-frontier.json.
  • A mixed-source bridge diagnostic completed in training/runs/2026-11-03-dior-bridge-smoke/, using four approved DIOR-R bridge training images in addition to the existing small FAIR1M/DOTA smoke subset. Ten epochs completed with finite loss decreasing 3.907→2.564. This validates the data path, not recognition quality. A 900-second larger run was completed in training/runs/2026-11-03-dior-bridge-mixed/, adding all 40 approved DIOR-R bridge train images to the prior 600 FAIR1M + 450 DOTA rare rehearsal setting. No audit or validation image is used for training.
  • The mixed bridge run finished with grouped validation best mAP 0.24447 at epoch 1. On DIOR-R selection it obtained fixed-threshold P/R 0.9927/0.7047, but bridge was abstained; the same-selection 99%-precision bridge frontier remained 3/29, unchanged from initialization. On DOTA quick, fixed-threshold P/R was 0.99052/0.71821 vs initialization 0.99057/0.72165. Not promoted. Evidence: evaluation/runs/2026-11-03-dior-bridge-dior.json and evaluation/runs/2026-11-03-dior-bridge-fixed-quick.json.
  • A controlled bridge sampling retry completed in training/runs/2026-11-03-dior-bridge-repeat4/, repeating the same 40 DIOR-R train images four times dynamically with augmentations per epoch; the other data, LR and 900-second budget match the mixed run. The trainer now preserves every epoch checkpoint for precision-focused comparisons. Three epochs completed; best grouped mAP 0.22936 was below initial 0.22957. DIOR-R selection bridge AP50 improved 0.210→0.339 and its same-selection 99%-precision frontier improved 3/29→4/29 at epoch 3. DOTA scene-selection vehicle recall at 99% fell 0.333→0.250, and large vehicle 0.858→0.854; epoch 1 and 2 also regressed on both vehicle categories. Tiny selection samples, fitted thresholds and incomplete labels limit interpretation. No checkpoint promoted. Evidence: evaluation/runs/2026-11-03-bridge-repeat4-epoch3-dior.json and evaluation/runs/2026-11-03-bridge-repeat4-epoch3-dota-scene.json.
  • The local DIOR VOC image archive and true oriented annotations contain 378 bridge-positive official-train images; 338 were outside the original pilot. training/dior_bridge_expansion.py prepared 200 additional train images without copying image files, verified local source CRCs and converted labels, and screened perceptual hashes against the original corpus and DIOR pilot. All 200 passed adapter conversion. Sixteen representative images were inspected, with small/ambiguous crossings noted; review is not exhaustive. datasets/extensions/dior-r-bridge-v2/REVIEW.json permits experimental training only, bound to the prepared manifest and preview hashes. FAIR1M and geographic overlap are not fully screened. A GPU forward/backward on one reviewed sample had finite loss. A 900s experiment adding those 200 images to the 40-image mixed baseline completed at training/runs/2026-11-03-dior-bridge-expanded/; no audit/test training use. Grouped FAIR1M validation mAP peaked at 0.25154. On DIOR-R selection, bridge AP50 was 0.210→0.355 and the in-sample 99%-precision frontier was 3/29→5/29 at epoch 3. On the DOTA source-scene selection, epoch 3 vehicle recall at fitted 99% precision fell 0.333→0.266 and large-vehicle recall 0.858→0.837; epochs 1 and 2 also regressed for both. The small samples, reused selection data, partial scenes, and unverified FAIR1M overlap do not establish generalization or 99% performance. No checkpoint promoted. Evidence: evaluation/runs/2026-11-03-bridge-expanded-epoch3-dior.json and evaluation/runs/2026-11-03-bridge-expanded-epoch3-dota-scene.json.
  • The existing reviewed yolo26s-obb.pt baseline has DIOR-R selection bridge AP50 0.267 vs nano 0.210 under the experimental ignore rule, but both reach only 3/29 bridge recall on the same-selection 99%-precision frontier. Its hash is 38dbd72ef6804f9bbbea7ad20f486e6ca6e093c8cd9bc857207a846565bd6e0b. A 1024-pixel expanded-bridge forward/backward test passed on T4 with peak allocated memory about 1,429 MiB. A one-variable architecture comparison using the same mixed data and LR completed three epochs under training/runs/2026-11-03-dior-bridge-small/; grouped FAIR validation mAP rose 0.253→0.350. On DIOR-R selection, epochs 1/2 reached 9/29 bridge recall on the in-sample 99%-precision frontier, vs nano initialization 3/29. Epoch 2 frozen DOTA-selection thresholds scored quick P/R 0.99231/0.66495 vs nano initialization 0.99057/0.72165; its DOTA-derived bridge threshold found 0/29 DIOR-R bridges. No model promoted. Evidence: evaluation/runs/2026-11-03-small-epoch2-fixed-quick.json and evaluation/runs/2026-11-03-small-epoch2-dior-dota-threshold.json.
  • The expanded candidate's bridge threshold fitted on DIOR-R selection yielded 2 TP / 2 FP / 7 targets on DOTA selection; the threshold fitted on DOTA yielded 1 TP / 0 FP / 29 targets on DIOR-R selection. These are sparse, previously used development splits, not independent reliability estimates. Evidence: evaluation/runs/2026-11-03-bridge-dior-to-dota.json and evaluation/runs/2026-11-03-bridge-expanded-epoch3-dior-dota-threshold.json.
  • Inspected eight targeted high-confidence error crops: repeated overlap-tile detections, suspected unlabelled vehicles, and small/large vehicle annotation disagreement affect precision. These are hypotheses pending independent label review; no corpus labels changed. See docs/reviews/2026-11-02-precision-error-review.md.
  • A provisional class-supported development grouping was proposed in evaluation/runs/2026-11-02-fair1m-development-proposal.json: 674 train, 126 validation, 932 quarantined source images; validation has two aircraft and ten bridge-positive source images. The proposal preserves every footprint group and keeps historical audit IDs quarantined. It has not been used in a run and is neither an independent benchmark nor sufficient 99% evidence.

2026-10-31 GPU runtime and full-corpus detector continuation

  • VERIFIED: isolated local experiment runtime /tmp/gpuvenv2 uses Python3.10.12, PyTorch2.5.1+cu121, torchvision0.20.1+cu121 and Ultralytics8.4.185; CUDA sees Tesla T4. Both shipped checkpoints load and one-batch detector/semantic forward-loss-backward smoke tests pass. Focused runtime/model-factory tests: 18 passed.
  • VERIFIED: GPU support added with CPU-preserving defaults. Runtime accepts cpu or explicit cuda[:index]; trainers honor LONGMEMORY_GEO_RUNTIME_CONFIG, move batches/predictors to the configured device, and rebuild device-bound losses after model transfer. GPU config is training/configs/runtime-gpu.json. Default training/configs/runtime.json remains CPU-only.
  • VERIFIED: 24-tile detector overfit diagnostic passed on GPU with decreasing loss; evidence training/runs/2026-10-31-gpu-overfit/fit/.
  • VERIFIED: full existing-corpus detector run used all812 training tiles and 68 reserved selection tiles for seven completed epochs under a1200-second budget. Best epoch5 selection mAP50-95 .5107788774, below unchanged adapted baseline .5423672855; candidate rejected and not packaged or evaluated on the held-out test. Evidence training/runs/2026-10-31-gpu-full-detector-local/fit/.
  • INFERRED: the current full-corpus policy/learning rate does not yet improve the detector despite the runtime being functional. Per-class selection evidence shows vehicle/bridge/tank tradeoffs; further training should wait for new data or a separately justified one-variable experiment.
  • VERIFIED: DIOR archive acquisition completed under datasets/external/dior/. Source MD5 fc722ffcfc4579fcb7acc111cb79b08d, ZIP CRC passed, 23,454 images, 23,455 XML annotations and 192,472 objects across 20 classes. Useful overlap includes bridge3,965, vehicle40,304, ship62,156, storagetank26,262 and airplane10,104. Raw DIOR is axis-aligned VOC, so no DIOR training has started; a source-aware adapter and split registry are still required.
  • VERIFIED: A conservative DIOR-VOC adapter was added at training/train_dior_voc.py; unsupported DIOR classes are explicit ignore regions and missing image/annotation pairs are excluded. The bounded local experiment used 899 train and 100 validation images and stopped at the 1,200-second limit. Best fixed-validation result was precision 0.1454, recall 0.4696, mAP50-95 0.1542; checkpoint training/runs/2026-10-31-dior-voc/best.pt is not promoted. The 0.99/0.99 gate is not met. The raw archive remains unchanged.
  • VERIFIED: datasets/external/isaid/ is currently empty. Official iSAID distribution is academic-only and its imagery overlaps DOTA; no iSAID training or independent-test claim is permitted until annotations are acquired, verified, adapted, and split without leakage.
  • VERIFIED: DIOR-VOC rerun training/runs/2026-10-31-dior-voc-v2/ fixed a stale Ultralytics predictor-cache bug in the evaluator. The earlier flat epoch metrics were invalid because they repeatedly scored the initial model. With live weights, the best fixed-slice mAP50-95 was 0.1847 (epoch 7), but precision/recall remained 0.0664/0.4932; candidate rejected. The existing shipped detector remains the production model. Root causes are small, non-class-balanced pilot coverage, DIOR axis-aligned-vs-OBB domain mismatch, and severe false-positive calibration drift—not a reason to claim 99%/99%.
  • DECISION: DIOR-VOC is quarantined from the detector training path unless a dedicated axis-aligned detector head is introduced. It is not evidence that the shipped model was damaged: the shipped detector hash is unchanged.
  • VERIFIED: Compatible DOTA-only control training/runs/2026-10-31-dota-frozen-low-lr/fit/ early-stopped. Its adapted starting point was mAP50-95 0.5424 / recall 0.9041; the best trained epoch was mAP50-95 0.5359 / precision 0.4832 / recall 0.9054, so it was rejected and not packaged. The pretrained shipped detector remains the best candidate.
  • VERIFIED: UCAS-AOD was acquired and CRC-validated at datasets/external/ucas-aod/UCAS_AOD.zip; its oriented-box pilot ran in training/runs/2026-10-31-ucas-aod/. Best validation mAP50-95 was 0.4611; calibrated validation best F1 was 0.8627 at P 0.8944/R 0.8331. At P>=0.99, recall was 0.0477. It is not promoted.
  • VERIFIED: FAIR1M released mirror content is present under datasets/external/fair1m/raw/ with 1,732 labels and 1,728 images; four incomplete pairs are excluded. FAIR1M OBB tiling/duplicate audit/training is pending. iSAID remains intentionally absent.

2026-10-30 precision-first continuation — goal not yet achieved

  • User prioritizes99% detection precision; improve existing data before expanding training corpus. VERIFIED threshold replay/calibration uses selection68 and diagnostic quick32 only; no test read/retuning. Precision-first quick P/R .9821029/.7542955 versus default .9610656/.8058419. Strict zero-calibration-FP policy quick .9873418/.4020619. Neither reaches99%; no per-class reliability guarantee.
  • Both profiles explicitly abstain on bridge, with7 calibration targets insufficient for minimum30 nonignored predictions. Missed/abstained targets remain in recall. Per-class evidence and support counts preserved in evaluation/runs/2026-10-30-precision99-margin/POLICY.json; opt-in JSON profiles under model/; default unchanged. model/PRECISION-RESULTS.json differs from historical default-policy test model/RESULTS.json.
  • VERIFIED head-only bounded retry FAILED: same24 balanced IDs/frozenBN/LR1e-5, changed only backbone trainability. Initial mAP .5423672855→best .5420360174;4epochs/155.924s. Precision-specific diagnostic also regressed marginally. No weight promotion or sustained training. Evidence training/runs/2026-10-30-head-only/ and evaluation/runs/2026-10-30-head-only-precision/.
  • Four precision tests/two freezing tests/five inference tests pass; no full suite. Opt-in profiles hash-bind to detector, declare abstentions and reject confidence overrides. Runtime remains CPU/four threads. Independent pre-experiment and final profile/runtime audits found no blocking issues. Real-model nodata/profile-loading and one real validation-tile threshold/abstention smoke passed. No99% claim.
  • VERIFIED precision-profile bundle: model/longmemory-geo-precision-first.zip, 17,242,804 bytes, SHA-256 cbd4ea5b73c33ce354a5cb3438abe6f09e9ea5183cc52297ecef4286f7a09c36 (model/PRECISION-DELIVERY.sha256). ZIP CRC, embedded checkpoint hashes, profile/source-report binding and class coverage passed. Previous research archive remains byte-identical.
  • More independent labeled evaluation imagery is required to substantiate99% across classes; training-data expansion is plausible, not yet proven necessary. Prioritize diverse bridges, small vehicles/tanks and hard negatives at deployment sensor/GSD. Preserve original now-used test as historical evidence; no new datasets/downloads or split/ontology changes. Detailed report: docs/reviews/2026-10-30-precision-first-result.md.

2026-10-30 continuation — balanced detector retry failed; semantic diagnostic underway

  • User approved continuation with fewer tests and concise communication. Restored unchanged model lock into /tmp/longmemory-geo-model-env; pip check and nine focused training-gate tests pass. An initial test invocation overlapped installation and failed missing imports; post-install invocation passed. No runtime policy or dataset changes.
  • VERIFIED: original 24-tile detector subset had only two bridges on one tile. Reviewed controlled retry changed only train IDs, retaining frozen BN/LR1e-5/native1024/seed42, 68 selection rows and 600s supervision. New subset: 24 source groups; public tiled instances bridge15, vehicle142, large_vehicle83, aircraft82, vessel385, tank139.
  • VERIFIED: balanced retry FAILED after four epochs, supervised196.924s. Initial selection mAP50-95 .5423672855; best trained .5416049381. No accepted detector gain; preserved baseline remains preferred. Evidence: training/runs/2026-10-30-balanced/learning-detection/; script docs/reviews/2026-10-30-balanced-learning.py. Fixed quick/test were not used to select this retry. Independent script review found no blocking issues.
  • VERIFIED: semantic default-policy learning PASSED, selection mIoU .0429777594→.2061759656 in229.204s. Fixed20 quick mIoU .1036228797→.2565150457, but water IoU .537924→.055203 severely regressed. Not accepted for delivery.
  • VERIFIED: one-variable semantic frozen-BN retry on exact same IDs/LR PASSED in214.039s, selection mIoU .4421913428, no per-class regressions. Fixed20 quick mIoU .4840795224; building/road/water/vegetation/agriculture/developed IoU .610/.309/.847/.735/.619/.268; bare ground0. This is validation evidence, not held-out test or geographic certification. evaluation/runs/2026-10-30-semantic-frozen-bn/QUICK.json; paired initial check reproduces original adapted mIoU exactly with validity masks. Two default-run qualitative sheets and all four frozen-run sheets inspected. Frozen run improves building/road delineation and agricultural coverage; roof speckling, road overprediction and the missed bare-ground excavation remain.
  • Semantic BN freezing is opt-in/defaultFalse, retains affine gradients, asserts buffers unchanged each epoch and records policy. Gate worker now supports semantic boolean override. Overfit admission defaults to rejection of experimental policies; explicitly matching approved_overrides are validated and forwarded. Independent code reviews found no blockers; six focused semantic tests, one BN test, ten gate tests pass. Three inference boundary/invalid-pixel tests pass; no full suite rerun.
  • VERIFIED: matched frozenBN train-only overfit gate PASSED in196.013s, mIoU .0629883264→.4687744889; decreasing loss and buffer assertions pass. training/runs/2026-10-30-semantic-frozen-bn/overfit-segmentation/GATE.json.
  • VERIFIED: all317-train semantic fine-tuning PASSED after7 epochs/early stopping in1488.633s, best epoch4 selection mIoU .5608274631. FrozenBN/default LR/native1024/selection21; independently reviewed script and external3600s cap. training/runs/2026-10-30-semantic-full/GATE.json. Final fixed20 quick mIoU .5118181306; initial .1036228797; building/road/water/vegetation/agriculture/bare-ground/developed IoU .625/.390/.855/.744/.656/0/.313. All four final quick sheets inspected: clearer building/road/agricultural structure, remaining overprediction and missed bare-ground excavation. Selection validation lacks bare-ground positives; do not imply seven supported validation classes.
  • VERIFIED: PyTorch package assembled in model/, unchanged pretrained detector2,652,984 parameters/5,907,357 bytes and fine-tuned segmenter1,631,342 parameters/6,732,683 bytes (optimizer stripped). Frozen checkpoint hashes/source provenance in model/model.json; inference is self-contained under inference/. Isolated Python portability smoke on one train tile passed with no training/evaluation imports; black nodata returns255/empty objects. evaluation/runs/2026-10-30-package-smoke.json.
  • VERIFIED: semantic FP32 ONNX passed fixed20 CPU-only parity, pixel agreement .9999998569; model/segmenter.onnx, model/EXPORT.json. Detector failed strict class/count/polygon/confidence parity on32 quick tiles; failed graph removed, original PyTorch retained. Cause not diagnosed; no unsupported detector-export claim. Full prepared-tile held-out evaluation is now running, no retuning allowed.
  • Planned delivery retains unchanged pretrained detector because fine-tuned candidates regress; disclose provenance and no detector gain. Native tiled inference implemented in inference/; four focused tests pass. Independent review of inference, packaging and final evaluation found no blocking issues. Same-tile end-to-end detector predictions remain unchanged; only cross-tile duplicates are suppressed. Scripts: training/package_model.py, evaluation/export_model.py, evaluation/full_eval.py. Export outcomes are above. VERIFIED final held-out evaluation completed once in87.392s:103 detection/42 semantic tiles, detection AP50 .6692781784/mAP50-95 .4007558054, calibrated P/R/F1 .893548/.422256/.573499; semantic mIoU .4748614543, bare-ground IoU0. Full per-class and object-size reports: evaluation/runs/2026-10-30-final-test/RESULTS.json; copy model/RESULTS.json. No test retuning. All six held-out sheets inspected; missed vehicles, partial agricultural coverage and water/vegetation confusion remain. CPU mean prediction .1114s detector/.0920s semantic; peakRSS594.707MiB. These are prepared-tile component metrics, not a whole-image benchmark.
  • VERIFIED final independent audit found no blocking defects: checkpoint/source/report hashes, all145 prediction hashes, thresholds and split counts match; no test fitting/selection; standalone inference has no training/evaluation imports; semantic ONNX passes and failed detector graph is absent. No additional test runs. Latest focused logs (10 gate +6 semantic +1 BN +4 inference=21 tests) under docs/reviews/2026-10-30-tests-*.log.
  • VERIFIED distributable: model/longmemory-geo.zip, 17,236,186 bytes; ZIP CRC and embedded checkpoint/ONNX identities passed. SHA-256 c794687c847fa80da4b5badc9fccedaa50edeab59bdbe2787c1f32589e7d628d in model/DELIVERY.sha256. Contains standalone inference code, weights, verified semantic ONNX, pinned dependencies, metrics, ontology/source metadata and notices; no dataset imagery.
  • Research delivery is implemented and verified in model/ and inference/; this is not certification of production recognition quality. Remaining limitations: bare-ground recognition failed, detector vehicle/bridge recall is low, detector ONNX parity unresolved, alternative fusion/multiscale benchmarking and independent licensed external imagery not verified. No dataset, ontology ID, split, baseline or compute-policy changes; no Git repair, commit, push or uploads. Further quality improvement requires a new evaluation design that preserves the now-used held-out test as final evidence.

Latest verified outcome — low-LR selection pass failed fixed quick quality; STOP

  • VERIFIED: selected frozenBN/LR1e-5 checkpoint was recalibrated on exact68 reserved selection-validation rows, then evaluated on disjoint unchanged32 detector quick tiles. CPU/four threads/seed42/native1024/conf.001/max_det300;32.083s, no training/test use. Bridge reference calibrator matched optimized threshold/F1; sparse evidence disclosed (7 instances/5 tiles/4 scenes).
  • VERIFIED fixed quick regression vs untouched adapted initialization: AP50 .7396136052→.7093581583; mAP50-95 .5150082555→.4998601581; operating F1 .8766355140→.8751156337. Bridge AP50/mAP .252475/.100990→0/0; operating bridge remains0. Vehicle improves, but aggregate and tank regress.
  • CONCLUSION: the mechanically passed selection gate (.542367→.549394) does not establish transferable progress. Recalibration cannot repair bridge proposal/ranking failures. STOP before overfit, semantic learning, sustained training or test evaluation. Preserve checkpoint/evidence; no automatic compute/budget escalation. Report: docs/reviews/2026-10-29-task-6-low-lr-recalibrated-result.md; independent outcome audit pending.

Historical continuation — low-LR detector learning gate passed with concerns

  • VERIFIED: user approved one controlled retry retaining frozen BN and changing only AdamW LR1e-4→1e-5. Full76 model tests passed in40.801s; independent pre-experiment review accepted the fixed run. Same adapted initialization, exact24/68 IDs, seed/augmentation/batch/native1024, optimizer family and600s cap.
  • VERIFIED: short detector learning gate PASSED. Matched initial selection mAP50-95 .542367285502; best epoch4 .549394010811. Early stopped after epoch7 in289.4523s; frozen BN buffers remained unchanged. Evidence/checkpoint under training/runs/2026-10-29-task6-frozen-bn-low-lr/learning-detection/.
  • CONCERN: gain is .0070267 absolute (~1.30% relative). Bridge, large_vehicle, vessel and storage_tank AP50 regress; bridge .430693→.319307 is substantial. No zero collapse, so implemented gate pass is mechanically correct. This is selection evidence, not test/generalization or final quality.
  • No semantic learning, overfit, full training, test evaluation, GPU/data/split/baseline changes. Proposed next action (NOT RUN): implement/review matched-policy overfit admission that inherits frozenBN+LR1e-5 from this pass, then run existing train-only24-tile/900s diagnostic unchanged. See docs/reviews/2026-10-29-task-6-frozen-bn-low-lr-result.md; independent outcome audit pending.
  • VERIFIED qualitative follow-up: all5 bridge-positive selection tiles plus5 deterministic other-class representatives compared epoch0/selected epoch4 at common baseline thresholds; all10 sheets inspected. Epoch4 loses one of two bridges on one tile and the sole detection on another; two tiles remain missed by both, one remains detected. Other representatives broadly stable; vessel example missed by both. Report: docs/reviews/2026-10-29-task-6-low-lr-qualitative-result.md. This reinforces the bridge concern and is post-selection diagnosis, not independent quality evidence.
  • VERIFIED retained-target audit: two lost bridge boxes and one lost tank remain accurately localized but fall below old epoch0 operating thresholds due confidence drops; other bridge cases include degraded/missing proposals. This motivates trained-checkpoint threshold calibration on selection before judging operating behavior. No independent quality claim.

Historical continuation — frozen-BN learning failed; STOP

  • VERIFIED: user approved the single frozen-BN detector experiment. Opt-in detector policy freezes running statistics after model.train(), retains affine gradients, asserts exact unchanged buffers each epoch, and records effective policy in checkpoints/gate reports. Default behavior remains unchanged. Experimental gates cannot automatically authorize default-policy overfit.
  • VERIFIED: full75 model tests passed in40.390s; focused8 gate tests passed after metadata/admission corrections. Independent pre-experiment review accepted the single600s run. Reports/scripts/logs: docs/reviews/2026-10-29-task-6-frozen-bn*.
  • VERIFIED: gate FAILED after10 completed epochs in383.1333s. Initial matched selection mAP50-95 .542367285502; best trained .528017231396. Four public AP50 classes regressed. Frozen statistics alone did not establish a learning gain. Evidence/checkpoint/STOP retained under training/runs/2026-10-29-task6-frozen-bn/learning-detection/.
  • No semantic learning, overfit, full training, test evaluation, GPU use, dataset/split changes or baseline replacement. Next proposed single experiment (NOT RUN): retain frozen BN and lower only LR1e-4→1e-5 on identical IDs/settings within600s, fresh outputs and review required. Independent outcome audit requested. See docs/reviews/2026-10-29-task-6-frozen-bn-result.md.

Historical continuation — BatchNorm diagnostic completed; learning STOP remains

  • VERIFIED: user approved proposed no-optimizer diagnostic. Independently reviewed script docs/reviews/2026-10-29-task-6-bn-diagnostic.py compared saved epoch1 against identical learned parameters with only initial BN running buffers restored. Same68 selection-validation IDs, CPU/four threads/native1024/conf.001/max_det300, external300s hard limit. Completed42.045s, no optimizer steps or checkpoint writes.
  • VERIFIED: saved learned-BN mAP50-95 .498240272549 reproduced exactly; initial-BN variant .537494695861 vs pre-learning .542367285502. Initial buffers recover88.96% of aggregate regression; still below baseline. All trainable parameters identical;378 changed state entries exclusively BN buffers. Source/checkpoint identities verified.
  • INFERRED: BN running-stat drift is a major contributor for this checkpoint on these records, not proof that frozen-BN training will improve validation. Residual regression and mixed per-class mAP remain. This post-hoc diagnosis does not pass a gate. Full report docs/reviews/2026-10-29-task-6-bn-diagnostic.md; raw variants/DIAGNOSTIC.json under training/runs/2026-10-29-task6-bn-diagnostic/.
  • Proposed next single experiment (NOT RUN): same bounded learning gate with only BN running statistics frozen, retaining affine gradients, LR/sampling/seed/data/evaluation and budgets; fresh outputs and independent review required. Original failed gate and no semantic/overfit/full-training stop remain. No GPU use, budget extension, corpus changes, or baseline replacement.

Latest verified outcome — Task 6 detector learning failed; STOP

  • Restored unchanged pinned CPU environment in ephemeral /tmp/longmemory-geo-model-env; pip check/core imports pass. Full model regression74 passed in69.494s. Independent Task6 pre-experiment review accepted bounded experiments with documented concerns;8 focused tests passed. Reports/logs: docs/reviews/2026-10-29-task-6-*.
  • Completed evaluation/runs/2026-10-29-adapted1024/BASELINE_ADAPTED.json within300s: evaluator39.2695s, detector mAP50-95 .5150082555, seven-class semantic mIoU .1036228797. Untrained initial checkpoints and state hashes retained; original baselines preserved.
  • Detector learning FAILED: training/runs/2026-10-29-task6/learning-detection/GATE.json and STOP.json. Matched selection-validation initial mAP50-95 .5423672855; best trained .4982402725; later epochs .4390457164/.4176578943/.4126521166. Loss decreased, all six public AP50 scores regressed at best trained epoch. EARLY_STOPPED after4 epochs, supervised169.7198s, worker peakRSS1406.48MiB. Diagnostic best.pt retained; not an accepted quality gain.
  • Sequence stopped at first failure. No semantic learning, overfit diagnostic, Task7 sustained training, GPU use or extended budgets. Corpus/ontology/splits and historical baselines unchanged. Independent outcome audit confirmed baseline/config/checkpoint identities, exact68 selection IDs, matched initial state, correct failed verdict and safe stop. Proposed single diagnostic (not run): no-optimizer comparison of epoch1 weights with learned versus initial BatchNorm running statistics to isolate possible batch1 running-stat drift. Agree a bounded diagnostic before further experiments; do not automatically resume training or increase compute.

2026-10-29 approved continuation — Task 6 verification underway

  • VERIFIED: user approved continuation and an independent review subagent. Restored unchanged training/requirements-model.lock into ephemeral /tmp/longmemory-geo-model-env; pip check passes, Torch2.13.0+cpu / torchvision0.28.0+cpu import, CUDA unavailable to this CPU build. No compute policy change.
  • VERIFIED: independent focused Task6 gate tests8 passed in5.447s; full model regression is running. No corpus experiment has started in this continuation yet. Final results will supersede this in-progress note.

Task 6 continuation — implementation verified in progress, experiments pending

Task6 adapted baseline support, matched initial selection metrics, hard-supervised learning/overfit orchestration and train-only diagnostic APIs now exist. See docs/reviews/2026-10-29-task-6-implementation.md. Focused18 trainer and8 gate tests passed; full regression and independent pre-experiment review are pending. No corpus training or adapted baseline execution has occurred yet. Commands in the report require fresh outputs; budgets and CPU policy remain unchanged.

Latest continuation — Tasks 4 and 5 independently accepted

  • VERIFIED: Task 4 source-aware OBB adaptation and Task 5 seven-class semantic adaptation are independently ACCEPTED WITH DOCUMENTED CONCERNS. Reports: docs/reviews/2026-10-29-task-4-independent-review.md (including correction addendum) and docs/reviews/2026-10-29-task-5-independent-review.md.
  • VERIFIED: semantic adapter maps canonical IDs [1,2,12,13,14,15,16] to contiguous head IDs0–6, preserves255 and validity, uses categorical mask transforms, adapts actual main/auxiliary heads and wraps stock CE/Dice with ignore semantics. Only exact building/road/water rows transfer; four broad land-cover rows remain fresh seeded parameters.
  • VERIFIED: both bounded trainer interfaces now exist with split/membership checks, fresh output ownership, complete validation before best-checkpoint selection, per-class metrics and failure/timeout evidence. Semantic metrics aggregate global pixel counts. Configs use native1024, CPU, batch1, seed42 and initial AdamW LR.0001; these optimizer choices are not empirically validated.
  • VERIFIED: synthetic native1024 fits on generated pixels/annotations exercise optimizer, validation, best checkpoint saving and YOLO reload. They exposed a task-identity bug: default detect metadata could select the wrong postprocessor. Both model.task and args.task are now pinned (obb/semantic), with tests requiring correctly typed reloaded outputs. Explicit custom augmentation metadata distinguishes actual flips/quarter turns from inactive framework defaults.
  • VERIFIED: full model suite66 passed in38.165s; independent combined focused18 passed in8.137s. Logs under docs/reviews/. Prior24 dataset tests remain historical; dataset scripts did not change. Three real train semantic tiles passed approved-hash loading and mapping. Both pretrained checkpoint hashes, fixed manifest and runtime remain matched.
  • No corpus fine-tuning, adapted baseline, learning/overfit gate, full training or Task6 implementation has run. Synthetic updates are test-only; no learned-quality/generalization claim is made. Corpus images/labels, IDs, splits, ontology and preserved baselines were not edited.
  • Next action: Task6 adapted baselines plus hard-supervised learning and train-only overfit gates. Trainer deadlines remain cooperative and are insufficient by themselves. Preserve300s quick-eval,600s/component learning,900s overfit bounds; do not launch sustained training without passed gates and independent review.
  • Current environment remains ephemeral /tmp/longmemory-geo-model-env, pinned Torch2.13.0+cpu and CPU/four-thread policy. pip check passes. No GPU use, dependency changes, uploads, Git metadata repair, commits or pushes occurred in this continuation. Existing detection validity-metric, geographic, sparse-class and license limitations remain in force.

Historical continuation — Task 4 review and start of Task 5

  • VERIFIED: restored the unchanged model lock into ephemeral /tmp/longmemory-geo-model-env; pip check and core imports pass, Torch 2.13.0+cpu, CUDA unavailable. Runtime policy remains CPU/four threads; no GPU use.
  • VERIFIED: Task 4 source-aware adapter, 16-class head transfer, both-branch validity-aware OBB loss, detector config and bounded trainer interface now exist. Implementation evidence and limitations: docs/reviews/2026-10-29-task-4-implementation.md.
  • VERIFIED: 58 model tests passed; latest focused 10 detection tests passed, including synthetic backward/inference and loss invariance. Dataset tests: 24 passed in byte-identical temporary copies. Logs are beside the report.
  • VERIFIED: all 16 source categories occur in training annotations; three real tiles passed hash-checked adapter loading. Both pretrained checkpoint hashes, fixed manifest and runtime hash remain matched. Corpus labels, IDs, splits and baseline outputs were not edited.
  • No corpus optimizer steps, fine-tuning, learning/overfit gates or Task 5 work have run. The AdamW/LR defaults are initial unmeasured settings, not validated training choices. Fit deadlines are cooperative; Task 6 still needs hard supervision and adapted-baseline prerequisites.
  • VERIFIED: Task 4 independently ACCEPTED WITH DOCUMENTED CONCERNS; see docs/reviews/2026-10-29-task-4-independent-review.md. Independent focused12 tests passed. Synthetic generated-data native1024 fit/reload proved checkpoint plumbing; no corpus training. Effective train_args now recorded. Actual custom augmentation metadata must be explicit before learning. Task 5 implementation is in progress; learning gates remain unstarted.
  • Git metadata remains the stale Windows worktree pointer. No commits/pushes or Git metadata changes.

Current remote continuation — supersedes historical host and pending-review statements below

  • VERIFIED: Task 3 is now independently accepted with documented concerns. Review/correction evidence is in docs/reviews/2026-10-29-task-3-review.md. Tasks 1/2 historical approvals stand. No fine-tuning has started. Task 4 is next.
  • Current workspace is /data/project on a Hugging Face FUSE mount. Linux Python 3.13.18, Xeon Platinum 8259CL, approximately 31 GiB RAM and a 15 GiB Tesla T4 are visible. Bucket identity/quota are UNKNOWN. .git still references the unavailable Windows worktree; Git status/history/commit-range checks cannot run. No Git metadata was rewritten, commit made, push or merge performed.
  • The unchanged model lock installed successfully into ephemeral isolated /tmp/longmemory-geo-model-env. Use its bin/python for this session; pip check and core imports passed. It is CPU Torch 2.13.0+cpu, not a GPU environment; CUDA/AMP remain disabled by the existing runtime. No lockfile or compute policy was changed. Restore this environment from the existing lock if it disappears; do not assume it persists across restarts.
  • Takeover verified all 2,830 approved corpus asset hashes, sample manifest, both checkpoint hashes, and all 136 historical prediction hashes. The fixed manifest/runtime hashes match the handoff. Corpus readiness remains true; labels, ontology IDs, data and splits were not rewritten. None of the 300 recorded source groups crosses train/val/test; full geographic independence remains unproven.
  • Historical detector640/semantic512 baseline at evaluation/results/BASELINE_PRETRAINED.json and its artifacts are preserved. Full retained-output replay reproduced its detection metrics, calibration and semantic counts exactly. Actual bridge reference-calibrator comparison and 20 edge cases passed. All 16 historical comparison sheets were reviewed.
  • Corrected evaluator defaults to 1024 for both components, validates and records explicit comparison sizes, refuses existing run evidence before model loading/inference, isolates new-run predictions, and publishes reports only after completion. Failed new runs retain incomplete/STOP evidence. Never rerun into an existing output directory: use a fresh repo-contained --output-dir. Baseline confidence selection/metric semantics are unchanged. New reports disclose positive instance/tile/scene counts and limited-support warnings.
  • VERIFIED native baseline: evaluation/runs/2026-10-29-native1024/BASELINE_PRETRAINED.json. Both inputs 1024, CPU/four threads/seed42, untouched pretrained heads; confidence floor0.001/max_det300; 68 calibration detector +32 quick detector +20 quick semantic tiles; 16 previews/120 raw outputs. All 136 new and 136 old artifact hashes passed after completion. Supervised CLI completed within the unchanged 300-second cap: evaluator61.494991s, loading1.858090s, inference40.149785s. Old host timings are not a controlled speed comparison.
  • Native detection AP50 0.739613605, mAP50-95 0.515008256; calibrated P/R/F1 0.961065574/0.805841924/0.876635514 (469TP/19FP/582 targets). Bridge recall remains zero. Vehicle operating recall regressed 0.413534→0.353383; tank precision0.909091→0.666667 at separately calibrated thresholds. This is a resolution baseline, not a learning gain. Bridge has only seven selection positives/five tiles/four scenes and two quick positives.
  • Native semantic available-alias mIoU 0.379447818, building/road/water IoU 0.183041735/0.089515591/0.865786127. Four land-cover aliases remain unavailable; this is not seven-class trained mIoU. Native qualitative spot-checks show missed small objects, missed bridge, road overprediction/building confusion, and improved-looking water island boundaries.
  • Validation: 48 model tests passed in31.847s in the project; 24 dataset tests passed in1.065s in byte-identical temporary source/test copies. Initial in-workspace dataset tests were stopped after six passes because fixture writers repeatedly scan the entire HF-mounted workspace. No production storage guard was bypassed or changed. Logs are under docs/reviews/.
  • Remaining evaluation limitation: detector metrics ignore annotation polygons but do not carry full image validity masks. Zero canonical prediction centers fell in padding in both retained runs; this is not proof about polygon overlap or black pixels. Define/test invalid-region handling before relying on future affected predictions; preserve geometry and do not silently change metrics.
  • Next action: Task 4 source-aware OBB data/loss/head adaptation, with independent review before Task 5. Preserve all16 source categories and ignored-region semantics. No learning/overfit/full training gates have run. Existing training budgets and acceptance constraints below remain in force.

The sections below preserve the 2026-10-24 handoff as historical context. Their Windows host commands, pending Task3 review and 640/512-only state are superseded by this verified continuation, not instructions to repeat completed work.

1. Read this first

  • The corpus is prepared and ready. No fine-tuning has started.
  • Tasks 1 (runtime) and 2 (evaluation/metrics) are implemented and independently reviewed.
  • Task 3 (pretrained baselines) is implemented and committed, with measured results, but has not yet had its task-level independent review.
  • The next implementation action is to review Task 3, not to repeat its implementation or start training.
  • At this handoff there are no active PowerShell sessions or background agents. Previous workers have finished; none is currently training, downloading, or evaluating.
  • The user's current request is documentation only. Only this handoff file is being created; do not resume implementation merely to finish the handoff.
  • Some plan documents and the progress ledger are ignored by Git. This root document deliberately preserves the essential information without depending solely on those files.
  • A completed baseline is not a trained delivery. No adapted heads, trained checkpoints, ONNX parity evidence, final test evaluation, or packaged inference API exist yet.

Important discrepancy requiring the next review

The approved approach calls for native 1024-pixel training inputs and 1024-pixel large-image tiles. The actual Task 3 baseline ran the detector at 640 and semantic model at 512 on the existing 1024-pixel corpus images. This is recorded in the result and worker report, not silently corrected here. The controller has not yet reviewed or approved this resolution difference. Before claiming comparable gains, resolve it against the approved design and establish matching baseline/trained inference settings. The five-minute timing result is not evidence that native-1024 evaluation meets that budget.

2. Workspace and repository

The user explicitly approved the isolated worktree and switching only this chat to it. Do not switch workspace again without an explicit request. The original checkout remains separate; its untracked datasets\corpus.zip was deliberately left untouched. Do not clean, reset, or overwrite other checkouts.

Before this document was created, git status --short --branch showed a clean feature branch. This document is a new uncommitted deliverable; creating it does not imply a new commit, push, merge, or PR.

3. User intent and training approach from the second prompt

The original request was supplied as pasted attachments. The complete verbatim attachment is not embedded here; the approved design/plan and this operational summary preserve the decisions available in this conversation. Do not claim to reproduce missing original prose exactly.

The requested outcome is a useful, lightweight RGB overhead-imagery perception package trained from the existing prepared corpus, prioritizing recognition quality over model size or latency:

  1. Use public pretrained architectures, not a newly designed or randomly trained network.
  2. Inspect dataset coverage, provenance, host limits, and actual labels before selecting a model.
  3. Keep a small, deterministic recognition evaluation fixed throughout development: approximately 30-100 images/tiles, realized here as 52 validation tiles.
  4. Measure pretrained recognition before meaningful fine-tuning.
  5. Visually inspect comparable predictions, not only aggregate metrics.
  6. Use separate detector and semantic segmenter unless evidence supports a better combined solution.
  7. Preserve partial-label, auxiliary-class, ignored-region, padding, and mask semantics.
  8. Prove a short learning run and a small train-only overfit diagnostic before longer training.
  9. Save/select best checkpoints with validation evidence, inspect class regressions and small-object recognition, and calibrate confidence from validation only.
  10. Handle large images using overlapping native-resolution tiles and geometry-aware duplicate fusion.
  11. Compare PyTorch and ONNX on identical images and retain exports only after measured parity.
  12. Report measured class-level quality, failures, sizes, latency, memory, and license/generalization limits.
  13. Deliver checkpoints, inference code, configs, thresholds, manifest, prediction comparisons, and reproducible evaluation results.

Explicit exclusions: do not rebuild the dataset without an established defect; do not fabricate unsupported labels; do not add unrelated servers/UI/database infrastructure; do not add military-specific identification, operational-role inference, tracking, or weapons recognition.

Approved execution and acceptance

  • The user approved the design and qualitative acceptance bar, then approved the implementation plan and chose subagent-driven execution.
  • Use a fresh bounded implementer per substantive task and independent spec/quality review before the next task. A final whole-branch review follows the completed plan.
  • Existing independent task approvals must not be discarded or rerun wholesale after a session change.
  • Success is qualitative: improve on the relevant pretrained baseline on validation, inspect predictions, avoid severe class collapse, and produce credible held-out final results. No universal numeric mAP/mIoU floor was requested.
  • CPU-only local work is the default. Do not upload corpus/artifacts or launch cloud jobs. Ask before changing compute or extending approved time budgets.
  • Failed learning/overfit or impractical compute means stop at diagnosis, not launch an unbounded run.

4. Architecture: intended versus implemented

Selected model families

Detector: Ultralytics yolo26n-obb.pt, DOTA-pretrained oriented bounding boxes.

  • Official reference model size: approximately 2.4M fused parameters.
  • Official published DOTA metrics/latency are research context, not this corpus's measurements.
  • Original checkpoint has 15 source classes. Prepared DOTA v1.5 annotations retain 16, including container-crane.
  • Intended adapted detector has a private 16-source-category head, but public inference exposes only six canonical classes.
  • Transfer pretrained classifier rows by normalized source-class name, never assumed index.
  • Missing container-crane must retain explicit fresh initialization and be reported.

Segmenter: Ultralytics yolo26n-sem-ade20k.pt, semantic segmentation, not instance -seg.

  • Official reference model size: approximately 1.6M fused parameters.
  • Original checkpoint has 150 ADE20K classes.
  • Intended adapted head has seven supported land-cover classes.
  • ADE benchmark values are not scores on this corpus.

Ultralytics community software is AGPL-3.0 unless separately licensed. Combined with academic-only DOTA inputs, the package must not be presented as commercially cleared. RF-DETR-N was considered but its larger published size (~30.5M parameters), no OBB, and different benchmarks made it a weaker fit for this host. SegFormer/MobileNet alternatives were considered; revisit only if measured compatibility/quality/compute evidence warrants it.

Implemented modules

File Responsibility
acquire.py Bounded source acquisition, metadata, archive-member checks
prepare.py Existing corpus conversion, geometry, tiling, provenance
validate.py Existing audits, readiness/review finalization; can mutate readiness
load_dataset.py Framework-neutral approved sample loading, hashes, validity/ignore masks
training/runtime.py Frozen RuntimeConfig and strict CPU config parsing
training/configs/runtime.json CPU, four threads, seed 42, CUDA/AMP disabled
training/requirements-model.in Separate model dependency input manifest
training/requirements-model.lock Fully pinned Windows/Python 3.13 environment
evaluation/manifest.py Deterministic fixed quick subset and reserved selection rows
evaluation/metrics.py Oriented IoU/AP, confidence operating metrics, segmentation IoU
evaluation/calibrate_thresholds.py Validation-provenance/member-checked threshold selection
training/model_factory.py Hash-pinned untouched checkpoints, local settings, mappings, row-transfer helper
evaluation/quick_eval.py Actual baseline inference/calibration/report/previews and bounded CLI
tests/model/test_runtime.py Six runtime tests
tests/model/test_evaluation.py 24 evaluation/loader/manifest tests
tests/model/test_model_factory.py 11 factory/baseline contract tests

Not implemented yet

Source-aware OBB adapter/loss/trainer, seven-class segmentation adapter/loss/trainer, gate orchestration, capped fine-tuning, best-checkpoint selection, unified/tiled inference API, fusion comparisons, export/full-test evaluation, and final model package.

No detector/segmenter training config, learning rate, optimizer schedule, completed epoch count, or fine-tuning curve exists. Do not invent these settings. The only current runtime config is the CPU config above.

5. Dataset, labels, and integrity

datasets\corpus\stats.json currently reports training_ready: true, with documented source-aware and geographic limitations. The data must remain read-only during model work.

Split/task Tiles
Detection train 812
Detection validation 100
Detection test 103
Segmentation train 317
Segmentation validation 41
Segmentation test 42
Total 1,415
  • 640 original images: 240 selected DOTA scenes and 400 OpenEarthMap images.
  • 1,015 detection tiles and 400 segmentation tiles.
  • Derived imagery/masks: 2,081,733,611 bytes per stats.
  • Earlier audit measured approximately 7.05 GB raw plus derived data before model dependencies. The previously approved 20 GB workspace budget includes original downloads, outputs, and tooling; current total usage has not been remeasured in this handoff.
  • DOTA uses selected v1.0 imagery with v1.5 annotations. Internal splits come from its source validation release; they are not official DOTA benchmark splits.
  • OpenEarthMap source terms vary; 279 segmentation samples were commercially compatible and 121 academic-only.
  • Absolute DOTA geolocation is unavailable. Scene grouping is not a certification of full cross-source geographic independence.

Structure

datasets\
  ontology.json
  SOURCES.json
  build_config.json
  README.md
  raw\
    dotav1.0_images_val.tar.gz
    dotav1.5_annotations_val.tar.gz
    openearthmap\
  metadata\                    acquisition, source/license records
  corpus\
    detection\{train,val,test}\images\*.png
    detection\{train,val,test}\labels\*.json
    detection\{train,val,test}\... COCO-like indexes
    segmentation\{train,val,test}\images\*.png
    segmentation\{train,val,test}\masks\*.png
    metadata\samples.jsonl
    metadata\...                scenes, sampling, selection metadata
    previews\
    rejected.jsonl
    stats.json
    validation.json
    visual_review.json

Sample metadata includes ID, source dataset/image/group, split/original split, license/group, source hashes, original/tile dimensions and coordinates, relative asset paths, annotated/unknown classes, counts, and source attribution.

Public canonical IDs and supported supervision

Task IDs and names
Detection 3 bridge; 4 vehicle; 5 large_vehicle; 6 aircraft; 7 vessel; 8 storage_tank
Segmentation 1 building; 2 road; 12 water; 13 vegetation; 14 agricultural_area; 15 bare_ground; 16 developed_area
Unsupported 9 railway; 10 parking_area; 11 construction; other task/class combinations without real labels

Dataset-wide positive detection instances: bridge 139, vehicle 6,971, large_vehicle 4,419, aircraft 792, vessel 3,221, storage_tank 817. Counts are tiled instances, not necessarily unique source objects.

Private DOTA class order currently defined by training/model_factory.py:

plane, baseball-diamond, bridge, ground-track-field, small-vehicle,
large-vehicle, ship, tennis-court, basketball-court, storage-tank,
soccer-ball-field, roundabout, harbor, swimming-pool, helicopter,
container-crane

Official checkpoint uses some space-separated names; normalize spaces to hyphens for exact-name matching. Map plane/helicopter -> aircraft, ship -> vessel, small-vehicle -> vehicle, large-vehicle -> large_vehicle, bridge/storage-tank -> matching canonical IDs.

Critical geometry and ignore rules

  • Loaded image arrays: HWC uint8 RGB. Framework inference currently converts RGB to expected BGR explicitly.
  • Canonical IDs are stable 1-based ontology IDs, not contiguous training-head indices.
  • Segmentation mask ignore is 255, excluded from loss and metrics; transforms use nearest-neighbor.
  • Padding, nodata, and fully black RGB pixels are excluded by validity masks. Do not turn them into background labels.
  • Positive obb_polygon is in original source-image coordinates.
  • clipped_polygon and bbox are tile-local. To compare tile predictions, subtract tile origin from positive source OBBs; leave tile-local ignored polygons unchanged.
  • Some clipped polygons have more than four vertices; do not assume each is a rectangle.
  • Objects under 70% visible polygon area or with a derived side below two pixels are ignored.
  • Unsupported source classes are retained in ignored_annotations with category_id: null and original_class.
  • Training must recover valid auxiliary source targets where appropriate, while difficult/severely clipped objects remain loss-ignore regions. Never discard ignored objects into classification background.
  • Overlap can duplicate source objects across tiles; preserve source annotation IDs.
  • Existing corpus tiling uses 1024 pixels, 819-pixel stride, edge-aligned last windows, padding rather than upscaling small images.
  • Loader defaults to commercial_compatible. Explicit license_scope="all" is necessary for this academic detector work.

Windows newline issue already fixed

Git checkout produced CRLF JSON/JSONL while approved hashes used LF. load_dataset.py now accepts raw or LF-canonical hashes only for JSON/JSONL. Missing approved hashes fail closed; image/mask binaries remain strictly byte-checked. Do not rewrite the corpus or broadly weaken checksum verification.

Task 2 recovery verified all 2,850 corpus files unchanged during recovery, checked all 2,830 approved asset hashes, and reconstructed the approved aggregate content hash. Historical behavior before the interrupted worker cannot be proved retroactively.

6. Fixed evaluation and calibration policy

File: evaluation/quick_eval_manifest.json, seed 20261024.

  • Quick evaluation: exactly 32 detection and 20 segmentation validation tiles.
  • Reserved selection_validation: 68 detection and 21 segmentation tiles.
  • IDs are unique/disjoint; union covers all 141 validation tiles.
  • Selection is based on actual positive labels/pixels, not merely annotated_classes.
  • Quick detection has 3 scoped-empty and 28 hard-negative tiles; these categories may overlap. Hard-negative here means retained ignored objects are present, not necessarily no positive objects.
  • Quick segmentation includes the sole validation bare-ground tile, oem_kagera_37_0_0; no selection-validation tile has positive class-15 pixels.
  • Source scenes can overlap between quick and selection subsets: 21 shared DOTA scene groups and all six segmentation region groups. Do not describe this as scene-independent calibration.
  • Never tune on train/test or use quick-eval IDs for checkpoint/threshold selection.
  • The fixed subset must not be casually regenerated or edited. Baseline evaluator pins its path and byte hash.
  • Quick-eval report/previews must finish within 300 seconds. CLI provides enforced subprocess timeout; in-process calls only cooperatively check between operations.

Metrics and APIs

select_quick_eval(root, *, seed=20261024, detection_count=32, segmentation_count=20)
evaluate_detection(predictions, targets, *, iou_threshold=0.5, confidence_thresholds=None)
evaluate_segmentation(prediction, target, *, ignore_id=255)
calibrate_thresholds(validation_predictions, validation_targets)

Detection inputs are one row per sample, including empty rows:

{"sample_id": "tile", "annotations": [
    {"category_id": 4, "confidence": 0.8, "obb_polygon": [0, 0, 10, 0, 10, 10, 0, 10]}
]}

Target rows have positive annotations and ignored_annotations, all in the same coordinate frame. Matching is confidence-ordered, class-specific, one-to-one. Positive matches take precedence; unmatched predictions with positive-area intersection with an ignored polygon are excluded from false positives class-agnostically.

AP uses 101-point precision interpolation, AP50 and mean over IoU 0.50:0.05:0.95. The low-score AP pool must remain separate from calibrated operating precision/recall/F1. Base metric confidence filtering affects its input pool, so callers must evaluate both pools explicitly.

Segmentation metrics use same-shape HxW integer canonical arrays; global pixel intersections/unions, not an average of per-image mIoUs. Invalid shapes/floating labels fail. Unmapped ADE predictions use internal sentinel 0 as errors on labeled pixels, never a fabricated public class.

Calibration requires actual fixed-manifest detection selection IDs plus validation/provenance markers; self-declared markers alone are insufficient. Empty predictions still need rows. Sparse evidence needs shared fallback/uncertainty disclosure rather than invented class-specific certainty.

7. Verified pretrained experiment (Task 3, awaiting review)

Artifact: evaluation/results/BASELINE_PRETRAINED.json. Status: DONE_WITH_CONCERNS; training_performed: false; original heads untouched.

Actual run configuration

Setting Value
Device / threads / seed CPU / 4 / 42
Detector input size 640 (review discrepancy with native-1024 approach)
Semantic input size 512 (same discrepancy)
Detector AP confidence floor 0.001
Maximum detections per tile 300
Predictions 100 detection (68 calibration +32 quick), 20 quick semantic
Loading 12.241984 seconds
Actual inference 129.088378 seconds
Evaluator including calibration/previews/report preparation 178.909105 seconds
Loading + evaluator, excluding process startup 191.151089 seconds
Enforced CLI timeout 300 seconds

First-call warmup is included. This is not an ONNX benchmark, native-1024 benchmark, or full test-set result.

Detection quick subset

  • AP50: 0.701607716
  • mAP50-95: 0.471560686
  • Calibrated precision: 0.953346856
  • Calibrated recall: 0.807560137
  • Calibrated F1: 0.874418605
  • Operating TP / FP / positive targets: 470 / 23 / 582
Class Validation threshold Precision Recall F1 AP50 mAP50-95
bridge 0.067447618 0 0 0 0 0
vehicle 0.184266984 0.820896 0.413534 0.550000 0.455179 0.256776
large_vehicle 0.371200740 0.979079 0.917647 0.947368 0.952608 0.599675
aircraft 0.266022891 1.000000 0.906250 0.950820 0.989291 0.710268
vessel 0.093193196 0.972603 0.979310 0.975945 0.988406 0.744343
storage_tank 0.342880458 0.909091 0.666667 0.769231 0.824161 0.518301

Bridge quick subset contains only two positive instances; zero recognition is an important limitation, not a successful per-class result. Vehicle recall is also a weakness. Thresholds above are baseline thresholds, not final trained-model thresholds.

Semantic quick subset

Class Exact pretrained alias availability IoU
building ADE building 0.174195672
road ADE road 0.079541970
water ADE water 0.828724943
vegetation unavailable null
agricultural_area unavailable null
bare_ground unavailable null
developed_area unavailable null

Available-alias mIoU: 0.360820862 over three classes only, not seven-class land-cover mIoU. Do not map tree/grass/plant to all vegetation, field to agricultural area, or earth/land/sand to bare ground without an approved semantic basis. These missing aliases do not remove the seven-class fine-tuning goal. Hard class maps do not justify semantic confidence thresholds.

Artifacts and investigations

  • 16 JPG comparisons under evaluation/predictions/baseline/: input / truth / pretrained, eight per task.
  • 120 raw files under evaluation/predictions/baseline/raw/: 100 JSON detector outputs and 20 NPZ ADE maps (semantic_class_ids, load with allow_pickle=False).
  • Previews/raw outputs have 136 hashes; two checkpoint hashes were verified.
  • Worker visually inspected airport detection and sparse bare-ground semantic examples. This is not exhaustive review of all 16 previews.
  • BASELINE_PRETRAINED_ATTEMPT1_STOP.json records a real initial failed attempt: Ultralytics SemanticMask.cpu().numpy() remained a wrapper. Fixed by unwrapping .semantic_mask.data.cpu().numpy() with a regression test.
  • An intermediate 259.793-second run omitted vehicle/storage-tank mappings due to space/hyphen names. It was invalidated and replaced by the corrected final baseline above.
  • Evaluation-local geometry caches reduced repeated AP-threshold polygon work without changing metric semantics.
  • No timeout was extended. No fine-tuning happened in any attempt.

8. Environment and reproducibility

Host evidence: Python 3.13.3, Intel i5-13420H (8 cores / 12 threads), approximately 15.7 GiB RAM, Intel UHD integrated graphics; no visible NVIDIA GPU/CUDA. GPU/VRAM measurements must be marked unavailable, not zero-cost or omitted.

Use .venv-model\Scripts\python.exe. The dataset acquisition environment/lock remains separate and unchanged.

Model package Installed/pinned
torch 2.13.0+cpu
torchvision 0.28.0+cpu
ultralytics 8.4.185
onnx 1.23.2
onnxruntime 1.31.0

Model input manifest also includes NumPy, Pillow, Shapely, Rasterio, BeautifulSoup4, remotezip. The model lock pins 54 packages. pip check previously passed. Plain system Python was missing corpus dependencies; that initial red baseline was environmental, not evidence of broken dataset code.

Factories enforce exact framework version and CPU; official checkpoints reside under ignored training/cache/checkpoints. Their file sizes are 5,907,357 and 3,497,863 bytes respectively, not trained parameter counts.

configure_local_settings() sets YOLO_CONFIG_DIR, disables automatic package installation, cloud synchronization and integrations, and uses worktree-local settings/runs/cache before Ultralytics import. Public checkpoint downloads are explicit and allowed; no imagery upload is allowed.

Task 1's initial import created %APPDATA%\Ultralytics\settings.json; later factory imports use local settings. Do not modify/delete the user's profile file. Standard CPU ONNX Runtime advertises AzureExecutionProvider alongside CPU; this alone is not remote execution, but future ONNX sessions must explicitly use CPUExecutionProvider.

Pinned identities

Item SHA-256
Approved corpus aggregate 74e55742bcf4c7d8ce3a8bfcc063c845baae60f30df7c16668737f25a4f1ad70
Fixed manifest bytes 0a0934ddd79a7536a5bbca3df85e77cb9110ac5d69afb7f524bb276861e4b9de
Runtime config 0bcef80401c20ccdd4f654ec26acbea20ef4fa6a298c3a4e94adff845702e932
yolo26n-obb.pt 6f51c78197aacda4a33be77294065a9001675fb893f56227a179731b53dbd2b0
yolo26n-sem-ade20k.pt 68ac71bef2868c987fff7cd7c49cb656922f6d8447ad21af3893305577435000

Official asset base: https://github.com/ultralytics/assets/releases/download/v8.4.0/. Mismatched cached weights fail explicitly; they must not be silently replaced.

9. Remaining training plan and safety gates

These are planned, not implemented or executed:

Task 4: source-aware OBB training

Create training/detection_data.py, training/detection_loss.py, training/configs/detector.json, and geometry/loss tests.

  • Load all 16 source categories by original_class; keep only six canonical public outputs.
  • Construct a fresh 16-class head and transfer source-name-matched classifier rows. Existing transfer_head_rows is only a tensor helper; it does not construct/adapt an arbitrary YOLO model.
  • Prove original/tile coordinate conversion, clipped nonquadrilaterals, valid-mask propagation, and anchor-level ignored classification weights.
  • Fit minimum-area rotated rectangles only where necessary, not as a substitute for source geometry.
  • Difficult/severely clipped/padded regions must not train as negative/background.

Task 5: seven-class semantic training

Create segmentation data/loss/config modules and tests. Remap canonical IDs [1,2,12,13,14,15,16] to contiguous head indices, preserve 255, initialize from ADE20K features, and adapt the actual semantic head. Prove ignored-pixel changes cannot alter loss/IoU and mask transforms remain categorical.

Task 6: adapted baseline, learning and overfit

  • Implement train entry points and gate orchestration.
  • Record BASELINE_ADAPTED before meaningful training; never overwrite the untouched pretrained baseline.
  • Training at 1024, CPU, initial batch size 1, deterministic seed; gradient accumulation only if measured memory permits.
  • Conservative dynamic flips, right-angle rotations, modest photometric/scale variation; no permanent augmented dataset copies or bilinear mask interpolation.
  • Use source-aware/class-aware sampling or bounded weights, not repeated dataset files.
  • Learning gate cap: 600 seconds per component.
  • Separate 24-tile train-only overfit diagnostic cap: 900 seconds.
  • Reject validation/test examples as training input. Stop at failed geometry/learning/overfit/memory/time gates and ask before changing compute/budget.

Both trainer interfaces are planned as:

Trainer.fit(train_ids: list[str], validation_ids: list[str], *, max_seconds: int) -> dict

Result keys: status, best_checkpoint, history, best_metrics, elapsed_seconds.

Task 7: bounded fine-tuning/selection

  • Only after gates pass: 10 epochs maximum, patience 3 non-improving validation checks, 3,600 seconds maximum per component, whichever comes first.
  • These are planner-set safety limits, not user-specified quality targets.
  • Save best checkpoints before proceeding to more epochs.
  • Select/calibrate only on reserved selection-validation rows; report sparse class counts/shared fallback thresholds.
  • Run fixed quick evaluation at milestones, inspect predictions and per-class/small-object regressions.

Tasks 8-9: inference/export/final delivery

  • Unified Model(model_dir).predict(...), objects with class/confidence/OBB/axis-aligned box, regions with canonical masks.
  • Native 1024 tiles, 20-25% overlap; return original-image coordinates; seam tests and segmentation stitching.
  • Compare oriented NMS, Soft-NMS, weighted fusion on the same fixed images; select by recognition including small-object recall. Multiscale default only if measured gains justify latency.
  • PyTorch versus ONNX CPU parity on identical inputs before claiming export support; FP16/INT8 deferred on this host.
  • Full held-out test evaluation once after checkpoint/threshold selection. No test-based retuning.
  • Report mAP50/mAP50-95, P/R/F1, per-class AP/recall, object-size strata where supported, confusion/failures, per-class IoU/mIoU, counts/sizes/latency/host memory, GPU unavailable.
  • Test licensed non-overlapping external overhead imagery if verifiable; otherwise explicitly report that criterion blocked.
  • Deliver model/model.json, license notices, ontology copy, README, selected checkpoints, validated exports, thresholds, scripts/configs/manifests and visual evidence.

10. Commands

Run from the active worktree root in PowerShell. Do not run acquisition/preparation/finalization just to continue modeling: those commands can create outputs or revoke/rewrite readiness.

Inspect state first

git status --short --branch
git --no-pager log -5 --oneline
Get-Content PROJECT_STATE.md
Get-Content .superpowers\sdd\2026-10-24-lightweight-overhead-model\progress.md

Restore model environment only if missing/needed

py -3.13 -m venv .venv-model
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
.\.venv-model\Scripts\python.exe -m pip install -r training\requirements-model.lock
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
.\.venv-model\Scripts\python.exe -m pip check

Do not reinstall packages speculatively when the environment works; do not edit the dataset lockfiles.

Tests (two discovery roots are intentional)

$env:YOLO_CONFIG_DIR = Join-Path $PWD 'training\cache\ultralytics'
.\.venv-model\Scripts\python.exe -m unittest discover -s tests\model -p 'test_*.py' -v
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
.\.venv-model\Scripts\python.exe -m unittest discover -s tests -p 'test_*.py' -v
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
git --no-pager diff --check

Existing fixture-producing tests previously used dedicated worktree-local TEMP/TMP scratch. If repeating, create a named local scratch directory and set both variables in the same PowerShell process; clean up only that directory afterward. Model tests are not automatically included by dataset-root unittest discovery.

Latest actual evidence: 41 model tests (6 runtime +24 evaluation +11 factory) passed in 80.842s; 24 dataset tests passed in 161.472s. Total 65 passed. No tests were rerun for this documentation-only handoff.

Reproduce current baseline only when deliberately needed

This reruns actual inference and writes phase result/previews; preserve existing evidence if required:

.\.venv-model\Scripts\python.exe -m evaluation.quick_eval --phase BASELINE_PRETRAINED --manifest evaluation\quick_eval_manifest.json --timeout-seconds 300

Only BASELINE_PRETRAINED is currently supported by this evaluator. Planned BASELINE_ADAPTED/BEST_PYTORCH phases and training commands are not operational yet.

Prepare pending Task 3 review package

Git for Windows Bash is available at C:\Program Files\Git\bin\bash.exe; plain bash previously resolved to disabled WSL. Use the explicit executable, not WSL.

& 'C:\Program Files\Git\bin\bash.exe' -lc 'bash /c/Users/bhave/AppData/Roaming/Code/agentPlugins/file-c-3A-Users-bhave-copilot-installed-plugins-superpowers-marketplace-superpowers/1a1294602dd/skills/subagent-driven-development/scripts/review-package docs/superpowers/plans/2026-10-24-lightweight-overhead-model.md 99b4617fa052d5a8ae98c1ef3e8a5ec75a0a1e2c b3791ee50f8d6fcf7aeb2d199ffe074a05ef1f30'

The review tool arguments intentionally use Git Bash path syntax inside Bash; all native filesystem/tool paths should use Windows syntax.

11. Resume checklist and unresolved review questions

  1. Read this document, approved design/plan, latest report, and ledger. Check Git HEAD; do not reimplement completed tasks based on stale chat memory.
  2. Review Task 3 using its brief, report and exact commit-range diff. No Task 3 review is currently running.
  3. Specifically resolve 640/512 baseline inputs versus native-1024 approved approach and fair future comparisons; do not silently ratify a lower-resolution shortcut.
  4. Check actual report timing, hard timeout, public aliases, source-name normalization, semantic wrappers, coordinate conversion, AP-versus-operating pools, and sparse threshold handling.
  5. Review whether sparse bridge threshold evidence is disclosed sufficiently: quick bridge AP/recall are zero despite a nonzero calibration F1; result currently reports no sparse detection class IDs.
  6. Check optimized selection_thresholds against the shared calibrator rather than assuming equivalence solely from the report.
  7. Inspect enough previews to satisfy the visual gate; only two were reported inspected by the implementer.
  8. If Task 3 review passes, record completion in the ledger before dispatching Task 4. If review finds defects, resume/fix/review that task, not train around defects.
  9. Continue Tasks 4-9 sequentially with tests/reviews, respecting real compute gates and explicit stop/approval conditions.

Operational lessons and previous interruptions

  • An earlier Task 2 background worker disappeared without a report/commit. Recovery preserved its files and fixed regression-proven issues, rather than pretending original TDD evidence existed.
  • Original Task 2 historical RED sequence remains unavailable; recovery RED/GREEN tests and corpus integrity evidence are documented.
  • Worker IDs are ephemeral; local reports, commits, and the ledger are the persistent record.
  • A finished worker notification is not a completed reviewed task. Read the report, review the commit, and update progress before advancing.
  • Cached hashes, previews, and immutable baselines are evidence; do not rewrite them to hide failed attempts.

12. Handoff sources and persistence warnings

Read these relative paths when present:

  • docs/superpowers/specs/2026-10-24-lightweight-overhead-model-design.md
  • docs/superpowers/plans/2026-10-24-lightweight-overhead-model.md
  • .superpowers/sdd/2026-10-24-lightweight-overhead-model/progress.md
  • .superpowers/sdd/2026-10-24-lightweight-overhead-model/task-1-report.md
  • .superpowers/sdd/2026-10-24-lightweight-overhead-model/task-2-report.md
  • .superpowers/sdd/2026-10-24-lightweight-overhead-model/task-3-report.md
  • .superpowers/sdd/2026-10-24-lightweight-overhead-model/task-3-brief.md
  • docs/ai-context.md, docs/ai-rules.md, docs/decisions.md
  • datasets/README.md, datasets/ontology.json, corpus readiness/hash documents
  • evaluation/results/BASELINE_PRETRAINED.json

The repository broadly ignores docs/; selected memory/report files have nevertheless been committed. The design/plan, docs/ai-rules.md, progress ledger and most task briefs remain local ignored files. .venv-model and training/cache are also ignored. A new VS Code session in this same worktree can read them; a fresh clone may not contain them, model weights, or installed packages. Preserve/copy the relevant local files deliberately when migrating, and use this root handoff as the standalone essential summary. Do not assume a commit contains every supporting document.

This handoff was requested specifically to avoid losing the project state across sessions. It does not authorize code changes, a new experiment, a model success claim, or remote compute.

Xet Storage Details

Size:
101 kB
·
Xet hash:
a8af9c4559e9787e7073efea4bf3bb1214367c786f7e18323c23a0c1f43bcc44

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.