Camera–LiDAR: training-only initialization development¶
Status on 2026-10-27: fourteen-input same-input comparison complete; no overall improvement demonstrated, historical numerical drift unresolved. This is a research step toward the camera–LiDAR claim, not a new SOTA result or an evaluation pre-registration.
Starting evidence¶
The archived-audit replay and input inventory
was generated from committed source 192858e4. Its accompanying
schema validates
the report. All twelve archived verdicts and requirement statuses reproduce:
four supported audits across three pairs, eight refuted audits. These are
recomputations from archived scores, not calibration reruns or comparisons
against newly published methods. Existing claim scope and caveats remain binding.
Camera–LiDAR v2 remains refuted, 8/9 gates. Its known failure is a confidently judged axis with 1.503 deg reference disagreement against the frozen 1.5 deg gate. Neither that gate nor the historical verdict changes. Subsequent development showed that raising the adoption threshold, spatial weighting and a scan-direction orientation proxy could lose useful detections. They are not promoted.
The prior nuisance-profiled controls also reused an initialization fitted on all frames. Reoptimizing a fold on training frames alone does not remove that initialization's dependence on held-out frames. This step removes that dependence before further confidence-rule experiments.
Implemented comparison¶
tools/kitti_camera_lidar_profile_probe.py --training-only-start initializes each
axis/fold independently:
- Hold nuisance coordinates at zero relative to the supplied candidate.
- Evaluate the existing fixed axis-profile grid on that fold's training frames. Include the zero candidate first, retaining it on an exact tie.
- Refine the selected axis using the existing search levels, on training frames.
- Fit the baseline pose and both signed nuisance-refitted controls using only training frames. Score the five fixed poses on the held-out block afterward.
The command cannot also accept --conditional-report. Per-fold initial coordinates
are recorded in training_start_theta; source and input hashes, unchanged options,
initialization policy and failures remain in the report. Archived/default fold
serialization stays compatible with frozen schemas. Native estimator defaults
and all previous artifacts remain unchanged.
Tests cover a separated two-basin objective, independently initialized folds, invariance of starts and fitted poses to held-out-objective changes, retention of failed reports, and legacy evidence schemas. These are implementation tests, not real-world accuracy evidence. Training-only initialization does not remove temporal dependence, candidate/preprocessing assumptions, or development-data exposure.
Fixed next development comparison¶
Use all fourteen already captured inputs: baseline and +1/+3 deg about each
rotation axis on spent KITTI raw 2011_09_26_0005 and 2011_09_28_0002.
Do not select a subset based on new outcomes. Compare the pooled-start and
training-only-start arms with the same --multi-start nuisance search, unchanged
snapshot settings, scalar objective, preprocessing and held-out blocks. Leave
spatial balancing and the orientation proxy off. The only ablation is initialization.
For each input, retain completion/failure, every fold start/pose, signed control drops, t statistics, detection flags, nuisance-bound hits and elapsed time. Report all 42 axis controls, per drive and injected axis/amount, including failures. Paired differences are development diagnostics; 42 correlated controls are not 42 independent recordings. Do not infer accuracy, native judged-axis coverage, or SOTA support from control counts. Require unchanged old-arm numerical evidence before interpreting a difference; any mismatch is an investigation outcome.
Example commands after input verification:
OPENBLAS_NUM_THREADS=1 python -m tools.kitti_camera_lidar_profile_probe SNAPSHOT_DIR \
--conditional-report CONDITIONAL_REPORT.json --multi-start --output NEW_POOLED_DIR
OPENBLAS_NUM_THREADS=1 python -m tools.kitti_camera_lidar_profile_probe SNAPSHOT_DIR \
--training-only-start --multi-start --output NEW_TRAINING_DIR
Run from the committed source in an isolated worktree and record its identity. Never edit imported code during a batch. Keep failed attempts and make outputs separate from inputs. This is development on spent recordings, not a fresh audit.
Data availability and decision boundary¶
Same-input code control and completed development comparison¶
The historical 1e-9 parity failure remains an investigation result. Before
running further comparisons, the follow-up protocol separates two questions:
historical cross-capture parity, which may remain unresolved, and whether adding
the training-only option changed the pooled algorithm on identical input bytes.
This is a post hoc development protocol extension, not a relaxation of the old
parity check or an evaluation pre-registration.
tools/kitti_camera_lidar_initialization_compare.py first runs the archived
multiple-start profile source and the current pooled implementation on each of
the fourteen reacquired snapshots, using the same newly computed conditional
receipt. The archived conditional and estimator sources match the current files
after newline normalization. Their dependencies and runtime are shared: this is
a code control, not recreation of the historical Windows environment.
All fourteen code controls must pass the unchanged absolute 1e-9 comparison
of preparation settings, folds, poses, drops and control statistics before any
training-only arm runs. Missing/duplicated inputs or failed arms block it.
Historical profile parity is recorded independently and never replaced.
If that gate passes, run all fourteen training-only arms with multiple-start nuisance search, scalar objective and unchanged settings. Retain every failure, report and runtime. Any paired findings concern these reacquired inputs only; they cannot be presented as exact replay of the original cache. No claim of accuracy, native coverage, or SOTA support follows from their control counts.
The completed comparison
uses frozen source 78eeeae6 in an isolated worktree. The
summary lists every
axis control, t statistic and active-axis reference disagreement of each saved
training-fold pose. All reports, schemas, source capsules, timings and input
hashes are bound by the publication manifest. The run completed all 14 conditional
probes and all 42 profile executions (three arms per input), with no missing or
failed inputs. The archived/current pooled arms match on all 14 identical inputs
under the unchanged 1e-9 comparison. Historical cross-capture profile parity
still fails on all 14; this is not exact restoration of the old cache.
| Arm | 0005 detected controls | 0002 detected controls | Total | Profile runtime |
|---|---|---|---|---|
| Archived pooled code, reacquired inputs | 20/21 | 0/21 | 20/42 | 140.6 s |
| Current pooled code, same inputs | 20/21 | 0/21 | 20/42 | 138.9 s |
| Training-only starts, same inputs | 19/21 | 0/21 | 19/42 | 151.3 s |
These runtimes are one sequential execution per input on this environment; they exclude conditional-probe time and are not a controlled speed benchmark. All 42 correlated controls remain in each denominator.
The only detection change is 0005 roll +3, yaw-axis control: t falls from 3.61925 to 2.22060, below the unchanged 2.5 threshold. With training-only starts, two saved training-fold poses have yaw reference disagreements of approximately -3.140 and +4.000 deg, versus a maximum absolute 0.153 deg across the pooled-start folds. The rejected control exposes fold/basin instability; it is not a new successful calibration or a demonstrated useful-detection improvement.
On 0002, roll +3's roll control stays rejected (t 1.73237 to -0.61761), and pitch +3's pitch control stays missed (t 0.77397 in both arms). The latter's saved active-axis fold reference disagreement is at most 0.150 deg, showing again that a small conditional reference disagreement does not establish a detectable, jointly observable calibration. Among detected controls, maximum absolute active-axis fold reference disagreement is about 0.350 deg in either arm; these training-fold diagnostics are not native per-axis accuracy verdicts.
Decision: retain training-only initialization as a research mode, with no default, gate or SOTA claim change. It removes the pooled-initializer dependency but does not restore useful controls on 0002. The next development question is why independently fitted folds select distant basins, and whether nuisance-axis ambiguity can be characterized without losing useful detection. Preserve all fourteen inputs and the all-55-drive denominator; do not tune the 2.5 threshold to this result. Historical drift remains unresolved because the original arrays and runtime were not recovered. Source inspection found the archived estimator, conditional probe and converter identical after newline normalization, but that does not prove equivalence of all numerical dependencies or sensor-array values.
Validation: 36 focused tests passed, 58 experiment reports passed their JSON
schemas, and all published files have digest bindings. A test exposed that
Python's source loader wrote a bytecode cache into the archived evidence folder;
1b239d0d changes future loading to avoid that side effect. The running experiment
remained on 78eeeae6; no imported numerical source was edited during the batch.
Reacquisition, 2026-10-27¶
The reacquisition verification
and its schema
record a completed recovery attempt from isolated source 5245d51c. The source
capsules, acquisition receipts, snapshot metadata and native evidence are retained
in that directory, with a file digest manifest. Both spent recordings were fetched
from their original size/ETag-pinned archives. Selected member inventories match
the original receipts and every selected member passed CRC verification. Both
calibration archives match their archived SHA-256 pins. Acquisition transferred
432,575,704 and 995,875,492 bytes respectively. The first attempt's 512 MiB cap
rejected 0002 before sensor payload acquisition; that failure is retained. A
separate retry used a 1 GiB cap without changing selected members or archive pins.
All fourteen native checks completed. Each 0005 input contains 48 frames; each
0002 input contains 38 frames, matching its original metadata. Options and frame
metadata match all archived snapshots. The new NPZ hashes differ on all fourteen
inputs, so these are separately identified captures, not restored original NPZs.
The verified local inputs are at
/workspace/work/camera-lidar-recovery-20261027/capture/<drive>/<run>/;
raw data, calibration and converted bags remain beside the capture directory.
Large sensor arrays are not committed.
Native numerical evidence fails the existing absolute 1e-9 parity check on
all fourteen inputs. Differences are confined to objective values and known-bad
control statistics: maximum absolute objective difference 1.381e-8, control
mean-drop difference 1.225e-8, and t-statistic difference 3.383e-6 (rounded
up for display). Other evidence fields, including estimated transforms and
discrete decisions, match within the existing comparison rule. Every difference
is listed in the verification receipt. Small differences do not establish their
cause; platform arithmetic, compression and preprocessing equivalence have not
been isolated. The original arrays are unavailable for elementwise comparison.
This is a recovery and reproducibility result, not improved calibration evidence. At this recovery stage, old-arm profile parity was unresolved and no paired result existed. The later same-input code control above is a separately scoped development comparison; it retains the historical failure and tolerance. Native capture progress remains 2/55; no new recording or evaluation was read.
Original-cache inventory¶
All fourteen committed snapshot metadata files exist; zero corresponding
arrays.npz files are present beside them in this workspace. A broader workspace
search also did not find those arrays. The inventory lists each expected hash.
First restore those exact files from the original development cache and let
load_snapshot verify hashes and shapes. Do not substitute the bundled two-frame
example or call it the 48-frame experiment. If originals cannot be recovered,
reacquire only these spent recordings and create a separately identified capture;
it cannot be claimed byte-identical to the previous experiment.
The real-input training-only result above does not demonstrate an overall improvement. Rejecting a known false control while losing all useful detections is not success. A promising result must be checked through native per-axis verdicts, with reference disagreement, 1/3 deg detection, judged-axis coverage, failures and runtime reported together. The all-55 spent-drive denominator remains binding: 2/55 captured, 53 pending. Set no new accuracy gate or adoption default from the two-drive pilot.
Only after development is complete should a new frozen claim, scorer, exposure audit and independent evaluation be registered under the SOTA handoff. Candidate KITTI-360 recordings remain unread by this work; their exposure audit is incomplete. KITTI-360 alone does not satisfy the broader research requirement for multiple dataset families and independent rigs. Dataset calibration remains a reference, not ground truth. A broad SOTA claim also requires a current, reproducible baseline/literature comparison.
The inventory can be regenerated into a new output directory:
python -m tools.sota_development_baseline --output NEW_BASELINE_DIRECTORY
The follow-up baseline search ablation completed the same fourteen-input comparison. Its additional detections include large reference disagreements, and the targeted pitch miss remains. The option is not promoted.