# JEPA 特征契约(CAJU-V1) ## 结论 `JEPA_FEATURE_STATUS=NOT_IMPLEMENTED` 项目里没有满足任务书定义的 JEPA 预测表征。所谓"逆向 JEPA",其实是用目标视角在像素空间的渲染损失,去微调 DepthSplat 编码器。 ## 审计依据 我检查了全部 7 个训练脚本: - `train_jepa.py`(V1 和 ABLATION) - `train_jepa_arkit.py`(JA) - `train_jepa_arkit_overlap.py`(JO、JC) - `train_jepa_arkit_norm.py`(JN) - `train_jepa_arkit_cache.py`(JK) - `train_jepa_arkit_scale.py`(JL) - `train_jepa_arkit_overlap_scale.py`(JOL) 以及它们的 `derive_*.py` 派生脚本。 | 任务书要求 | 现状 | |---|---| | context predictive encoder | 有一个编码器(DepthSplat),但它输出的是高斯状态,不是潜空间预测 | | target encoder | 没有(找不到 target_encoder、EMA、momentum 或 stop-gradient 目标) | | latent prediction | 没有:预测的是目标视角渲染出的深度和 RGB | | predicted latent / target latent | 没有 | | 可提取的 predictive innovation | 没有潜空间创新;唯一的"创新"是像素空间的渲染残差,与 Core B 的测量残差同类 | 各版本的损失: - **V1 / JA / JO / JC / JL / JOL**:目标视角原始渲染深度的相对 L1 加 0.5 × RGB L1(`grounded_loss`)。 - **JN / JK**:同样的量,只在 α ≥ 0.5 的有效像素上计算,深度先除以 α。 更新的是整个 DepthSplat 编码器,单目 ViT 用十分之一学习率。它们训练出来的是另一组 DepthSplat 权重,不是独立的预测器。所以: - 不能把 JN 等模型的 DepthSplat 特征称为 JEPA 特征; - 它们最多是"另一组 backbone 特征",只能作为 non-JEPA 对照(类似任务书中 B4 的一种变体)。 ## 可以合法提取的 non-JEPA 特征(本实验 Gate 0 已记录) 只用 7 个到达帧和 CACHE 状态,见 `caju_replay.py` 的 `pre_update_features`: - **残差**: - 原始深度残差(第 0 步的 TTT 深度项)的均值和 p50 / p90 / p99; - α ≥ 0.5 覆盖像素上归一化深度残差的均值和分位数; - RGB L1; - 残差最大的 10% 像素占残差总量的比例(空间集中度); - 逐视角残差的最大、最小、标准差,以及上下文视角与流视角的残差。 - **测量与覆盖**:覆盖率(有效像素中 α ≥ 0.5 的比例)、有效测量比例、测量深度的 p10 / p50 / p90 和展布。 - **几何**:相机最大基线、最大视角差、高斯数量、尺度(深度中位数)。 - **DepthSplat 单目深度与测量的差异**:中位比值和 AbsRel。这是 backbone 层面的信号,属于 non-JEPA。 - **TTT 历史**:本轮是单次决策,只有逐步损失曲线可作为事后描述,不作为决策输入。 可以进一步提取、但本轮没有提取的:DepthSplat 多视角 Transformer 特征和匹配置信度(B4 的 backbone 特征)。 ## 最小 JEPA 特征提取器设计(供用户决定,本轮不执行) - **目标表征 z_t**:冻结的 DINOv2-B 或 DepthSplat 的单目 ViT,作用在新到达帧 o_t(RGB;也可以加深度通道)上,得到 patch token,256×320 下约 16×20×768。冻结目标编码器可以避免表征坍缩,不需要 EMA。 - **上下文 h_{