Buckets:
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
airplaneandhelicopterto 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.jsoncounts 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: falseandofficial_test_images_read: false.tests/model/test_soda_a_adapter.pyand 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.jsonand rendered six-class sheets inevaluation/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 todatasets/external/dota-fullscene-dev/. No historical test scene was extracted.evaluation/score_dota_full_scenes.pynow 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/R0.3130/0.9605(1,485 TP, 3,259 FP, 61 FN; 1,546 targets) on these repeatedly used development scenes. Bridge recall is0.3810and precision0.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: bridge0.0476, vehicle0.1934, large_vehicle0.3169, aircraft0.9000, vessel0.7890, storage_tank0.5096recall. 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/andevaluation/runs/2026-11-05-dota-fullscene-cap1000/. On P0257/P1410, max-det 300→1000 changes TP/FP/FN from122/774/14to123/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.mdand collected primary references indocs/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.pyto 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.pton 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.jsonfile. Metrics reproduce the trainer: AP500.7344298656, mAP50-950.3869758267, precision0.4921524664, recall0.9070247934. - VERIFIED: same-validation empirical 99%-precision recall is vehicle
0.2733, large_vehicle0.1944, aircraft0.7010, vessel has no feasible threshold, and storage_tank0.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.jsonfrom 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-950.37258vs uniform-4500.38698, with lower same-validation frontier recall for every SODA-A class. DOTA rehearsal-900 was rejected at0.35433mAP50-95; SODA-A-1200 was rejected at0.37447, with vehicle frontier recall only0.0581despite storage-tank recall0.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 atevaluation/runs/2026-11-05-dota-train-hard-negative-review-queue.jsonand 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.jsonrecords 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.pypreviously stored fully visible object OBBs in tile coordinates althoughconvert_detection_sampleexpects 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_classsuppresses 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-venvhas 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 atevaluation/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.jsonandevaluation/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.jsonpreserves 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/andevaluation/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.jsonandevaluation/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 intraining/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.jsonandevaluation/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.jsonandevaluation/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.pyprepared 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.jsonpermits 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 attraining/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.jsonandevaluation/runs/2026-11-03-bridge-expanded-epoch3-dota-scene.json. - The existing reviewed
yolo26s-obb.ptbaseline 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 is38dbd72ef6804f9bbbea7ad20f486e6ca6e093c8cd9bc857207a846565bd6e0b. 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 undertraining/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.jsonandevaluation/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.jsonandevaluation/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/gpuvenv2uses 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
cpuor explicitcuda[:index]; trainers honorLONGMEMORY_GEO_RUNTIME_CONFIG, move batches/predictors to the configured device, and rebuild device-bound losses after model transfer. GPU config istraining/configs/runtime-gpu.json. Defaulttraining/configs/runtime.jsonremains 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. Evidencetraining/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 MD5fc722ffcfc4579fcb7acc111cb79b08d, 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; checkpointtraining/runs/2026-10-31-dior-voc/best.ptis 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 intraining/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 undermodel/; default unchanged.model/PRECISION-RESULTS.jsondiffers from historical default-policy testmodel/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/andevaluation/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-256cbd4ea5b73c33ce354a5cb3438abe6f09e9ea5183cc52297ecef4286f7a09c36(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/; scriptdocs/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_overridesare 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 inmodel/model.json; inference is self-contained underinference/. 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; copymodel/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-256c794687c847fa80da4b5badc9fccedaa50edeab59bdbe2787c1f32589e7d628dinmodel/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/andinference/; 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.pycompared 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 undertraining/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.jsonwithin300s: 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.jsonand 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.lockinto 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) anddocs/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/projecton 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..gitstill 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 itsbin/pythonfor this session;pip checkand 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.jsonand 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:
- Use public pretrained architectures, not a newly designed or randomly trained network.
- Inspect dataset coverage, provenance, host limits, and actual labels before selecting a model.
- Keep a small, deterministic recognition evaluation fixed throughout development: approximately 30-100 images/tiles, realized here as 52 validation tiles.
- Measure pretrained recognition before meaningful fine-tuning.
- Visually inspect comparable predictions, not only aggregate metrics.
- Use separate detector and semantic segmenter unless evidence supports a better combined solution.
- Preserve partial-label, auxiliary-class, ignored-region, padding, and mask semantics.
- Prove a short learning run and a small train-only overfit diagnostic before longer training.
- Save/select best checkpoints with validation evidence, inspect class regressions and small-object recognition, and calibrate confidence from validation only.
- Handle large images using overlapping native-resolution tiles and geometry-aware duplicate fusion.
- Compare PyTorch and ONNX on identical images and retain exports only after measured parity.
- Report measured class-level quality, failures, sizes, latency, memory, and license/generalization limits.
- 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-cranemust 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_polygonis in original source-image coordinates. clipped_polygonandbboxare 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_annotationswithcategory_id: nullandoriginal_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. Explicitlicense_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 withallow_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.jsonrecords a real initial failed attempt: UltralyticsSemanticMask.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_rowsis 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_ADAPTEDbefore 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
- Read this document, approved design/plan, latest report, and ledger. Check Git HEAD; do not reimplement completed tasks based on stale chat memory.
- Review Task 3 using its brief, report and exact commit-range diff. No Task 3 review is currently running.
- Specifically resolve 640/512 baseline inputs versus native-1024 approved approach and fair future comparisons; do not silently ratify a lower-resolution shortcut.
- Check actual report timing, hard timeout, public aliases, source-name normalization, semantic wrappers, coordinate conversion, AP-versus-operating pools, and sparse threshold handling.
- 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.
- Check optimized
selection_thresholdsagainst the shared calibrator rather than assuming equivalence solely from the report. - Inspect enough previews to satisfy the visual gate; only two were reported inspected by the implementer.
- 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.
- 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.mddocs/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.mddocs/ai-context.md,docs/ai-rules.md,docs/decisions.mddatasets/README.md,datasets/ontology.json, corpus readiness/hash documentsevaluation/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.