代码审计:Core B 实际优化什么(CAJU-V1 第一阶段)
审计时间:2026-10-14。地点:hit,~/zonghan_o_mirror/measurement-scene-state,main 4f0c0f6,工作区干净。审计时没有发现其他 agent 的 CAJU 分支、目录或进程。下文中,V1 指 outputs/EXP-3D-RGBD-DEPTHSPLAT-JEPA-TTT-V1/code/,V3 指 outputs/EXP-3D-RGBD-FULL-SYSTEM-ARKIT-V3/code/。
1. 执行路径
- GPU 部分:Core B 最近一次正式执行(V3,ARKIT_SYSTEM3)的 GPU 部分是
V3/sys3_jobs.sh第 17–21 行。它调用 V1 锁定的ds_eval.py(sha25636b05c497cae…,与 ABLATION-V1 的副本相同),参数为--model ZS --scale-max 0.1 --arms CACHE TTT --ttt-mult 1 --ttt-steps 100,分 4 个分片。 - 读出:在
V3/sys3_score.py第 74–97 行。
2. 模型和权重
- 权重:发布版 DepthSplat,
depthsplat-gs-base-re10kdl3dv-448x768-randview2-6-f8ddd845.pth(ds_predict.py第 35–38 行)。 - 配置:hydra 覆盖项为
+experiment=dl3dv,num_scales=2,upsample_factor=4,lowest_feature_resolution=8,monodepth_vit_type=vitb,gaussian_scale_max=0.1(ds_predict.py第 39–50 行)。 - 单目 ViT:用本地 DINOv2 代码构建,权重全部来自 DepthSplat 检查点,不下载 ImageNet 权重(第 56–66 行)。
- 测量深度注入:
inject_measured_depth(第 167–190 行)把测量的平面深度(由射线距离换算)在有效处替换为 DepthSplat 的最终上下文深度。这个深度用来放置高斯;匹配概率和特征仍是 DepthSplat 自己的。INJECTED["align"]=False,不做尺度对齐。
3. 高斯场景状态
- 构造:
ds_eval.encode(第 68–75 行)把到达帧输入编码器,得到Gaussians(means, covariances, harmonics, opacities),形状为 [1, N, ·]。CACHE 用 7 个视角(3 个上下文 + 4 个流帧),在 256×320 输入下每个视角每个像素一个高斯。 - 重置:每个片段都重新编码,不保留跨片段状态。唯一的全局量
INJECTED会在每次编码时重新赋值。
4. TTT(ds_eval.ttt,第 85–144 行)
- 优化的张量:只有高斯状态的增量。
d_means:位置;d_logs:每个高斯在协方差特征基内的逐轴对数尺度,特征向量(即旋转)固定;d_logit:不透明度 logit;d_dc:SH DC;d_rest:高阶 SH。- 编码器和解码器的参数不在优化器里。
- 优化器:Adam,eps 1e-15,每次调用新建,所以不同片段之间、同一片段的不同动作之间都没有状态共享。学习率是 m × 3DGS 默认值,m = 1:
| 参数 | 学习率 |
|---|---|
| means | 1.6e-4 × 7 帧测量平面深度的中位数 |
| log-scales | 5e-3 |
| opacity logits | 2.5e-2 |
| SH DC | 2.5e-3 |
| 高阶 SH | 1.25e-4 |
- 损失:train_jepa.grounded_loss(train_jepa.py 第 71–75 行)= 7 个到达帧有效测量像素上原始渲染深度(零背景上的 Σ α·T·z)的相对 L1,加 0.5 × RGB L1。 |
|
| - 步数与失败处理:100 步。损失非有限时,增量清零(回到 CACHE),并记录失败。 | |
- 随机性:TTT 不使用随机数。torch.manual_seed(20261008),TF32 关闭。光栅化反向传播用原子加法,在 GPU 上可能不完全确定。项目以前的记录是"CPU 逐位确定,GPU 不确定",本实验在试点中实测运行间的差异。 |
5. R7、F7 与 Core B
- R7(REPROJ7_HARMONIC):在
V1/geometry_seal.py第 34–57 行。7 帧测量深度用冻结函数处理:measurement_planning.geometry的frame_points,1 像素 z-bufferreproject,取union(逐像素最小),再做冻结的调和填充harmonic。ARKit 队列的填充常数是 2.3736329 m(来自臂评测封存)。NEAR7 是距离命中像素 8 像素以内的区域。 - F7 与 CORE_B:在
V3/sys3_score.py第 85–97 行。 - ray = depth_z / max(α, 1e-12) / cos;
- F7 = α ≥ 0.5 处取 ray,否则取 R7;
- CORE_B = sqrt(max(R7, 1e-6) × max(F7, 1e-6))。
- opacity 阈值:0.5,在所有 Core B 实验中固定。
6. 成本日志
ds_eval.py 只记录每个分片的总秒数和最大显存,没有逐片段、逐步的成本。本实验的回放用 CUDA 同步,对每个片段分段计时:编码、各动作读出、第 1–10 步、第 11–100 步。
7. 不是 Core B 执行路径的接口
- 旧快权重接口:
fuse_down/complete_down只出现在旧的 carrier 模块里,包括src/mcss/dynamic/carrier.py、src/mcss/mechanism_pilot/*carrier*.py和rgbd_stream_write*.py。这是早期项目对网络做快权重写入的接口,Core B 的 TTT 不经过它们。本实验也不使用它们。 src/mcss里的 "ema":engine.py中的_ScalarTracker(ema_decay)是对损失做平滑的统计量,不是 EMA target encoder。
8. 逆向 JEPA
见 jepa_feature_contract.md。结论:没有真正的 JEPA 潜空间预测器,JEPA_FEATURE_STATUS=NOT_IMPLEMENTED。
9. 数据审计
| 队列 | 规模 | 历史使用 | 本实验用途 |
|---|---|---|---|
| Hypersim FRESH78 / EVAL34 | 78 / 34 场景 | V1、ABLATION、ENSEMBLE、TTT-ENSEMBLE 等多次评测;EVAL34 反复使用 | 不使用 |
| ARKIT_VAL | 80 个场所 | ENSEMBLES、JEPA-ARKIT、JBT、OVERLAP、JC、OBJECTIVE、AT、CA、CW、NS、OS 都用过 | 不使用 |
| ARKIT_SYSTEM / SYSTEM2 | 各 80 个场所 | FULL-SYSTEM V1/V2 的评测,AT / CA / CW 的开发集;后来并入 NS / OS 的 502 扫描训练集 | 不使用 |
| ARKIT_SYSTEM3 | 160 个场所 | V3、NF、NS、AT、CA、CW 的确认集 | 只有 CAJU_COMPAT 的 2 个扫描用于引擎对照,不读真值 |
| CONFIRM / SELECT | 各 80 个场所 | 评测后并入 502 扫描训练集 | 不使用 |
| ARKit TRAIN | 182 个场所 | 逆向 JEPA 变体和 GA carrier 的训练数据;从未用 Core B 评测 | CAJU_SEL 16 + CAJU_EVAL 34;其余 132 个不动 |
| ARKit DEV | 8 个场所 | JEPA 训练的开发监控(CTX 臂);从未用 Core B 评测 | CAJU_PILOT |
- 独立性:所有 ARKit 队列都在场所级别互不重叠,各数据脚本中有断言。
- ds_eval 跑过的队列:从各实验的任务脚本统计,只有 ARKIT160、ARKIT160_OVERLAP、ARKIT_SELECT、ARKIT_SYSTEM、ARKIT_SYSTEM2、ARKIT_SYSTEM3、ARKIT_VAL、EVAL34、FRESH78、REPLICA,没有 TRAIN 或 DEV。
- 可信的独立确认资源:Training 折中按种子顺序排在 1360–1477 位的约 118 个场所,从未下载。下载属于"下载大型新数据",需要用户授权。所以本轮没有独立确认集。