EXP-3D-CAJU3D-JEPAGATE-V1:CAJU-3D 第二步——JEPA 潜空间创新能否挑出更值得排除的测量
结论:STOP_AT_DEV。
- 没有挑法超过 Core B:在 Core B 的 TTT 中,每个片段从深度项剔除 10% 的测量像素。四种挑法都没有超过不剔除(Core B)。
- JEPA 最差:比 Core B 差 0.00027 [−0.00040, −0.00016],24 个场所中 21 个变差,判定 HARMFUL。它也显著差于随机挑(20/0/4)。
- 方案的前提不成立:方案假设"逆向 JEPA 的结构创新能识别出误导 TTT 的测量",这里不成立。
- 即使剔除跨视角最不一致的 10% 测量,也没有改善未来查询;随机剔除则完全无害。也就是说,TTT 在这里不需要防范误导性测量。
- JEPA 创新高的像素同时带有外观变化和一定的深度不一致,而且成片分布;剔除它们只是去掉了有效的几何监督。
设计(PROTOCOL.md,2026-10-14 20:37:12 锁定,sha256 82d86a50…)
- 问题:方案的核心假设是"逆向 JEPA 的结构预测能把视角伪影残差和真实几何误差分开"。如果成立,JEPA 的潜空间创新应该比纯几何的跨视角一致性更会挑"不该拿来更新的测量"。
- 底座:Core B(发布版权重、7 视角 CACHE、原始 TTT 100 步、Core B 读出)。只改一件事:每个片段从 TTT 深度项中剔除 10% 的有效测量像素。
- 四种挑法(剔除比例相同):
- JEPA:修正版逆向 H-JEPA 的留一归一化潜空间创新,即 (z − ẑ)² 的通道平均除以 P;
- DEPTH:跨视角测量深度不一致,是最强的非 JEPA 对照;
- INC:1 − 入射角/深度跳变权重(第一步的定义);
- RANDOM:按片段种子随机挑,作为空对照。
- 修正版 H-JEPA(锁定前训练、冻结):
- 源视角的潜特征用自己的测量深度反投影,变换到目标相机,再 z-buffer 到目标潜网格。这一步替代了代码包里按像素序号混合的做法。
- 预测器输出 ẑ 和 log P,损失是高斯 NLL 加标准差下限,目标编码器是 EMA。
- 训练:ARKit TRAIN 182 个场所,3 万步,batch 8,6 个源视角,lr 1e-3,seed 20261016,在 GPU 4 上用 674 秒。
- 监控集(ARKit DEV 8 个场所)上的最终校准:log 误差与 log P 的相关为 0.78,说明预测方差有意义。
- 排练(锁定前,2 个片段,5 个臂):
- 不剔除任何像素的 NONE 臂与已封存的 Core B 一致:读出相对差异中位数 5.5e-5、均值 3.2e-4,覆盖率相差不到 0.0003。
- 门控臂相对 NONE 的差异均值为 2.6e-3 到 4.5e-3,是 GPU 非确定性的 8–14 倍。
- 每种挑法都恰好剔除 10%。
- GO 规则:只有当 GATE_JEPA 的开发集均值同时低于 CORE_B 和 GATE_DEPTH 时,才做确认。
- 完整性:
- 每个片段审计打开过的文件,只用到达帧;
- 复用的封存逐文件核对哈希;
- 真值只在全部预测封存之后经 TeacherAccess 读取;
- 13 个测试通过。
结果(开发集,24 个场所、48 个片段,Core B 读出;dev_summary.txt)
| 臂 | AbsRel | 对 Core B(正值表示比 Core B 好) | 场所 好/平/坏 | 判定 |
|---|---|---|---|---|
| CORE_B(不剔除) | 0.09902 | — | — | — |
| GATE_RANDOM | 0.09904 | −0.00002 [−0.00007, +0.00003] | 12/0/12 | NOT_ESTABLISHED |
| GATE_DEPTH | 0.09910 | −0.00008 [−0.00023, +0.00007] | 9/0/15 | NOT_ESTABLISHED |
| GATE_INC | 0.09925 | −0.00023 [−0.00051, +0.00000] | 8/0/16 | NOT_ESTABLISHED |
| GATE_JEPA | 0.09929 | −0.00027 [−0.00040, −0.00016] | 3/0/21 | HARMFUL |
| ZS_CACHE(不做 TTT) | 0.10255 | −0.00353 [−0.00641, −0.00133] | 7/0/17 | HARMFUL |
- JEPA 对其它挑法:
- DEPTH 比 JEPA 好 0.00019 [−0.00000, +0.00040],17/0/7。
- RANDOM 比 JEPA 好 0.00025 [+0.00012, +0.00041],20/0/4,判定 SUPPORTED。
- 只看 TTT 读出(F7):排序相同。CORE_B 0.09759 = RANDOM 0.09759 < DEPTH 0.09764 < INC 0.09790 < JEPA 0.09805。
- 查询视角覆盖率:CORE_B 0.7494,RANDOM 0.7483,DEPTH 0.7484,INC 0.7473,JEPA 0.7469。
机制:各挑法剔除的是什么像素(dev_dropped_profile.txt)
只读到达帧,不读真值。剔除集合与正式运行逐个片段完全一致。
| 被剔除像素的特征 | 全部有效像素 | JEPA | DEPTH | INC | RANDOM |
|---|---|---|---|---|---|
| 没有其它视角覆盖的比例 | 0.369 | 0.366 | 0 | 0.404 | 0.370 |
| 入射角余弦 | 0.708 | 0.658 | 0.614 | 0.221 | 0.708 |
| 深度跳变边缘的比例 | 0.016 | 0.043 | 0.058 | 0.164 | 0.016 |
| JEPA log P | −0.89 | −1.07 | −0.80 | −0.45 | −0.89 |
| JEPA log 潜误差 | −1.28 | +0.33 | −0.83 | −0.59 | −1.28 |
| 跨视角深度不一致(有覆盖处) | 0.108 | 0.285 | 0.490 | 0.189 | 0.107 |
| 跨视角光度不一致(有覆盖处) | 0.074 | 0.126 | 0.112 | 0.101 | 0.074 |
| 邻居也被剔除的比例(成片程度) | — | 0.83 | 0.75 | 0.72 | 0.10 |
- JEPA 创新主要由潜误差决定:前 10% 的潜误差约为平均的 5 倍,而 P 反而略低。log ν 与 log 潜误差的相关为 0.53,与 log P 的相关为 −0.12,所以 P 归一化几乎没有起作用。
- JEPA 挑中的不是几何误差:这些像素的深度不一致只有 DEPTH 所挑的一半多(0.28 对 0.49),光度不一致却最高(0.126)。潜空间创新把外观变化和几何不一致混在一起。
- JEPA 的剔除最成片:成片程度 0.83,整块区域失去深度监督,所以查询覆盖率下降最多。
- DEPTH 剔除的确实是深度不一致的测量,但也无益:对未来查询来说,这些测量并不误导 TTT。
解读与注意
- TTT 在这里不需要防范误导性测量:
- 随机剔除 10% 无害,说明 TTT 的监督有冗余。
- 剔除最不一致的 10% 也没有收益,说明没有一类测量在误导 TTT。
- 方案要解决的"残差误判"在 ARKit LiDAR 上不是瓶颈。
- 真值和测量来自同一个传感器(ARKit LiDAR 低分辨率深度):
- 各视角一致的传感器误差,这个评测看不出来。
- 结论只针对随视角变化的误差,而这正是方案针对的对象("视角冲突残差")。
- 对 CAJU-3D 的意义:
- 三个核心机制都已在这个底座上检验过,都没有收益:
- 何时更新:Gate 0,可学的空间很小;
- 引擎改动:第一步;
- 用 JEPA 挑测量:本实验。
- 剩下的卡尔曼软掩码 M_pos 用的是同样的信息(JEPA 的 Δz 和 P、入射角)。按本实验的结果,没有理由期待它有收益。
文件
- 代码:
code/。 - 修正版 H-JEPA:
hjepa.py、train_hjepa.py; - 分数与门控:
gates.py; - GPU 回放:
gate_ttt.py; - 打分与判定:
gate_score.py; - 锁定:
gate_lock.py; - 任务与链:
gate_jobs.sh、gate_chain.sh; - 排练核对:
gate_rehearsal_check.py; - 测试:
test_*.py。 - 描述性分析:
analysis/。gate_summary.py生成全部两两对比,gate_dropped_profile.py生成剔除像素的特征。 - 记录:
preregistration.json、decision.json;audit/:锁定、排练核对、决策哈希、训练代码哈希;model/train_log.json:训练参数和监控曲线。- 模型权重
model/hjepa_final.pth(2.35 MB)由 ARKitScenes 训练,不进 git,其 sha256 记在 preregistration.json。 - 预测:
gate/下的封存预测不进 git。