# EXP-3D-RGBD-DEPTHSPLAT-JEPA-ARKIT-V1:在真实传感器数据上训练逆向 JEPA **结论:REAL_JEPA_PARTIAL,REAL_DATA_TRAINING_PARTIAL。但修订 1 表明,这个增益几乎全部来自"替换掉一个错误的常数",而不是补全。** - **主检验:** 用 ARKit 真实数据训练的逆向 JEPA(JA)在 FAR 上胜过调和插值,+0.210,90/14/55,PARTIAL;也胜过用 Hypersim 训练的 J,+0.231,104/13/42,PARTIAL。两者都只差"≥ 75% 的场景不变差"这一项。 - **增益从哪来:** - 约 47% 的评估查询与上下文完全没有重叠。这时调和插值整张图都是 Hypersim 的补洞常数 2.37 m,对室内近景严重偏远。 - JA 的 FAR 覆盖率达到 0.65(J 0.36,发布权重 0.10),在这些视角上给出合理的室内深度,于是大幅胜过那个常数。 - **对照校准基线就不成立了(修订 1):** - 只把这个常数换成训练折拟合的 1.05 m,FAR AbsRel 就从 0.793 降到 0.418,比 JA 的 0.583 还好。 - 在校准基线之上加 JA 反而更差:−0.029,57/14/88,HARMFUL。 - 只看与上下文有重叠的查询,JA 与调和插值打平:+0.027,48/0/50,NOT_ESTABLISHED。 - **结论:** 真实数据训练让模型学会了"室内场景大概多深",但没有学会基于上下文的补全。 - **探索性:** 归一化 G1 集成(HGN)在有重叠的查询上有一个小的稳定增益(+0.051,67/0/31),两个来源队列方向一致。 **说明:** - **预注册:** 见 [PROTOCOL.md](PROTOCOL.md),2026-10-08 23:42:00 锁定,sha256 `de61109d…`。 - **修订 1:** 2026-10-09 00:03:50 记录(`audit/amendment_1.json`,PROTOCOL 末尾追加)。 - 记录时本实验尚未读取任何评估真值。 - 它只新增一个用训练折拟合的校准调和基线和对应的对比(X1–X6),不改变 R1、R2、S1–S9。 - **训练数据:** ARKitScenes 训练折中为训练保留的场馆(EXP-3D-RGBD-ARKIT-DATA-V1),TRAIN 182 个扫描,DEV 8 个扫描。 - **评估数据:** ARKIT160 = ARKIT_VAL80 + ARKIT_CONFIRM80,共 160 个扫描、320 个 episode、640 个查询,与训练场馆不相交。159 个场景有 FAR 像素。 - **运行环境:** 训练在 GPU 4 上与另一用户的常驻进程共用,其余在 CPU 上完成。主分析和修订分析都运行两次,结果逐字节相同。 - **统计:** 统计单位是场景,bootstrap 10,000 次,种子 20260928,判定用 V2 gate。 ## 训练 - 三个种子同时训练,每个 4000 步,约 1.44 秒/步,各用时 1.6 小时,峰值显存 6.2 GB。 - 下表为 DEV(ARKit 训练折的 8 个扫描,第 14、15 帧)上的读数,格式为"被覆盖像素 AbsRel / 覆盖率": | 步数 | 0(发布权重) | 500 | 1000 | 2000 | 3000 | 4000 | | --- | --- | --- | --- | --- | --- | --- | | JA1 | 0.329 / 0.23 | 0.345 / 0.47 | 0.367 / 0.49 | 0.402 / 0.46 | 0.441 / 0.50 | 0.442 / 0.48 | | JA2 | 0.329 / 0.23 | 0.332 / 0.49 | 0.464 / 0.60 | 0.409 / 0.47 | 0.418 / 0.51 | 0.436 / 0.51 | | JA3 | 0.329 / 0.23 | 0.329 / 0.45 | 0.482 / 0.59 | 0.438 / 0.49 | 0.452 / 0.50 | 0.450 / 0.49 | 训练让覆盖率翻倍,但被覆盖像素的误差也随之上升。 ## 预注册结果(159 个有 FAR 像素的场景) | 编号 | 对比(> 0 表示右边更好) | 区域 | 均值 | 95% CI | 好/平/差 | 状态 | | --- | --- | --- | ---: | --- | --- | --- | | **R1** | H3 − JA | FAR | +0.2101 | [+0.1334, +0.2962] | 90/14/55 | **PARTIAL** | | **R2** | J − JA | FAR | +0.2307 | [+0.1564, +0.3157] | 104/13/42 | **PARTIAL** | | S1 | ZS3 − JA | FAR | +0.2106 | [+0.1352, +0.2952] | 91/14/54 | PARTIAL | | S2 | H3 − J | FAR | −0.0206 | [−0.0482, +0.0067] | 65/36/58 | NOT_ESTABLISHED | | S3 | H3 − HJA | FAR | +0.1961 | [+0.1465, +0.2516] | 108/14/37 | SUPPORTED | | S4 | HGN − HJAGN | FAR | +0.1219 | [+0.0881, +0.1591] | 103/14/42 | PARTIAL | | S5 | H3 − HJAGN | FAR | +0.1769 | [+0.1407, +0.2168] | 117/13/29 | SUPPORTED | | S6 | H3 − HGN | FAR | +0.0550 | [+0.0377, +0.0739] | 96/37/26 | SUPPORTED | | S7 | H3 − JA | NEAR | −0.0293 | [−0.0661, +0.0125] | 32/0/67 | NOT_ESTABLISHED | | S8 | H3 − HJA | ALL | +0.1895 | [+0.1394, +0.2447] | 111/15/34 | SUPPORTED | | S9 | HJ − HJA | FAR | +0.1825 | [+0.1333, +0.2373] | 109/13/37 | SUPPORTED | - R1、R2 的逐一剔除场景均值都为正,正贡献最大的单个场景占比都 ≤ 0.5。它们只差"≥ 75% 的场景不变差"这一项(分别为 65% 和 74%)。中位数分别为 +0.025 和 +0.082。 **FAR 均值:** | 读出 | FAR AbsRel | FAR 覆盖率 | | --- | ---: | ---: | | H3(调和插值) | 0.793 | — | | ZS3(发布权重,上限 3.0) | 0.794 | 0.10 | | J(Hypersim 训练) | 0.814 | 0.36 | | **JA(ARKit 训练)** | **0.583** | **0.65** | | G1N | 0.747 | — | | HGN | 0.738 | — | | HJA | 0.597 | — | | HJAGN | 0.616 | — | - NEAR 上 JA 略差:0.248,H3 为 0.218。 - 按来源队列,FAR 上 H3 → JA:ARKIT_VAL 从 0.839 降到 0.566,ARKIT_CONFIRM 从 0.747 降到 0.600。 ## 修订 1:调和插值在 ARKit 上为什么偏远,以及校准基线 **原因:** 修订前在训练折的 728 个查询上查明,只读训练数据: - **一半查询完全没有上下文命中。** 367 个(50%)查询中,3 个上下文帧的测得深度重投影后一个像素也落不到查询视角里。 - **这时调和插值整张图都是补洞常数 2.37 m。** 这个常数取自 Hypersim 训练集,对 ARKit 的室内近景偏远。这部分查询的 FAR AbsRel 为 1.05,有命中的查询只有 0.38。 - **有命中的查询上,调和插值反而略偏近**(中位 log(H3 / 真值) = −0.32),但按 AbsRel,不缩放已经最优。 - **评估队列同样如此。** ARKIT_VAL 的 320 个查询中 150 个无命中,ARKIT_CONFIRM 中 151 个;两个队列分别有 30 和 31 个场景的所有查询都无命中。相比之下,Hypersim 的 FRESH78 只有 0.6%(2/312),EVAL34 只有 1.2%(4/332)。 - **所以 ARKit 上的"补全"评估有一半其实是"猜一个完全没见过的视角的深度"**,与 Hypersim 不是同一个任务。之前 README 中"偏远可能来自 2.37 m 常数"的猜测成立。 **校准基线 H3CAL(训练折拟合):** 无命中的查询取常数 1.05 m,有命中的查询保持 H3(k = 1)。训练折上 FAR AbsRel 从 0.742 降到 0.379。 | 编号 | 对比(> 0 表示右边更好) | 区域 | 均值 | 95% CI | 好/平/差 | 状态 | | --- | --- | --- | ---: | --- | --- | --- | | X1 | H3CAL − JA_CAL | FAR | −0.0289 | [−0.0562, −0.0004] | 57/14/88 | HARMFUL | | X2 | H3 − H3CAL | FAR | +0.3749 | [+0.2823, +0.4718] | 72/69/18 | SUPPORTED | | X3 | H3CAL − JA | FAR | −0.1648 | [−0.2339, −0.1005] | 56/0/103 | HARMFUL | | X4 | H3CAL − HGN | FAR | −0.3199 | [−0.4183, −0.2270] | 71/0/88 | HARMFUL | | X5 | H3CAL − JA | JA 覆盖的 FAR 像素(145 场景) | −0.0562 | [−0.0996, −0.0130] | 56/0/89 | HARMFUL(描述性) | | X6 | H3 − JA | 有命中查询的 FAR(98 场景) | +0.0269 | [−0.0116, +0.0716] | 48/0/50 | NOT_ESTABLISHED(描述性) | - **全部 FAR:** H3CAL 为 0.418,JA_CAL 为 0.447。 - **JA 覆盖的像素上:** JA 为 0.450,H3CAL 为 0.394,H3 为 0.718。 - **有命中的查询上:** H3 为 0.423,JA 为 0.396,HGN 为 0.372。 ## 事后拆分(探索性,`exploratory_posthoc/overlap_split.*`) 只读修订 1 的场景表,按来源队列和"查询是否有上下文命中"拆开: | 队列 | 对比 | 区域 | 均值 | 95% CI | 好/平/差 | 状态 | | --- | --- | --- | ---: | --- | --- | --- | | 全部 | H3 − HGN | 有命中查询的 FAR | +0.0509 | [+0.0326, +0.0704] | 67/0/31 | PARTIAL | | ARKIT_VAL | H3 − HGN | 同上 | +0.0406 | [+0.0167, +0.0654] | 34/0/16 | PARTIAL | | ARKIT_CONFIRM | H3 − HGN | 同上 | +0.0617 | [+0.0330, +0.0909] | 33/0/15 | PARTIAL | | ARKIT_VAL | H3 − JA | 同上 | +0.0487 | [−0.0175, +0.1240] | 23/0/27 | NOT_ESTABLISHED | | ARKIT_CONFIRM | H3 − JA | 同上 | +0.0042 | [−0.0359, +0.0424] | 25/0/23 | NOT_ESTABLISHED | | ARKIT_VAL | H3CAL − JA_CAL | FAR | +0.0008 | [−0.0407, +0.0470] | 29/8/43 | NOT_ESTABLISHED | | ARKIT_CONFIRM | H3CAL − JA_CAL | FAR | −0.0589 | [−0.0929, −0.0257] | 28/6/45 | HARMFUL | ## 解读 - **真实数据训练确实改变了模型。** JA 在 FAR 上的覆盖率从 0.10 升到 0.65,在没见过的视角上给出合理的室内深度。这就是 R1 增益的来源。 - **但这不是补全:** - 一个常数(1.05 m)就做得比它好; - 在校准基线之上加 JA 反而有害; - 在有重叠的查询上它与调和插值打平; - 在 NEAR 上它略差。 - 训练中覆盖率上升、被覆盖像素精度下降,也指向同一件事:模型在学"把空白填上一个合理的室内深度"。 - **训练信号本身可能是问题。** 训练目标从 13 个非上下文帧中均匀抽取,而其中 34% 与上下文完全没有重叠,模型被要求去"补"根本补不出来的视角。EXP-3D-RGBD-DEPTHSPLAT-JEPA-ARKIT-OVERLAP-V1 在本结果出来之前就已锁定,它只在有重叠的目标上训练,在有重叠的新查询帧上评估。 - **归一化 G1 集成的结论需要细化。** 它在有重叠的查询上有小而方向一致的增益,两个队列都是如此,所以 CONFIRM 的结论不是常数造成的假象。但一致性为 68%,达不到 V2 的 75%。在无重叠的查询上它与调和插值一样,都退回到错误的常数。 - **对后续 ARKit 实验的含义:** 无重叠查询应单独处理(例如用校准常数,或不作补全评估);补全的评估应限定在有重叠的查询上。 ## 文件 - `PROTOCOL.md`、`preregistration.json`、`frame_role_lock.json`、`evaluation_contract.json`、`manifest_arkit160.json` - `code/`:训练(`train_jepa_arkit.py`,与 V1 的差异只在训练记录来源)、建目录、打分和任务脚本 - `checkpoints/JA1–JA3/`:训练所得权重与训练日志(`SHA256SUMS`) - `raw/eval/ARKIT160/`:arms 封存;`ds/ARKIT160/`:JA1–3、J1–3、ZS3 的 DepthSplat 封存 - `scores/`、`results/`、`audit/` - `amendment_1/`: - 校准:`h3_calibration.py`、`h3_calibration_TRAIN.json`;第一版单系数结果在 `first_run_single_k/` - 修订打分 `amend1_score.py` 及其结果 - `exploratory_posthoc/`:按来源队列与是否有上下文命中拆分(探索性)