HANDOFF_AUDIT:BUDGETED-MEASUREMENT-PLANNING 的交接审计(2026-10-06)
新研究线问的是:RGB 与相机免费,深度测量有预算,应该在哪些帧上请求深度。本审计记录它可以依赖的仓库状态、可复用组件、帧角色与数据污染情况。审计只读,没有运行任何实验。
1. 仓库当前状态
- 位置: hit 上的
~/zonghan_o_mirror/measurement-scene-state。 - 提交:
- HEAD 为
249becbbe7d72be2a40d5e3c2b3f84ec01d8d7d2(main,等于 GitHub main,即 PR #3 合并之后)。 - 工作区有 132 项未提交的改动:10-01 之后的全部工作(V17–V33、Core B V3–V11、V24–V30、DepthSplat 探针归档、STATUS 与 EXPERIMENTS 的更新)。这些改动从未推送。
- HEAD 为
- 新分支: 本地分支
research/measurement-planning,基于 249becb,带着上述未提交改动,没有推送。 - 起点快照:
outputs/EXP-MEASUREMENT-PLANNING-ORACLE-V1/audit/start_state/,内含git_head.txt、git_status.txt、git_diff.patch(797 行)、git_branch_before.txt、captured_at.txt。 - 版本控制范围:
outputs/整体在.gitignore中,是本地实验记录;docs/、scripts/、src/、tests/受版本控制。 - 权威记录:
STATUS.md与EXPERIMENTS.md,最新条目在前;- 阶段总结
docs/research_summary_20261003.md; - 10-06 的项目总结报告(Claude Doc,见 STATUS 的 10-06 条目)。
2. 可复用的组件(逐字复用,不重写)
| 组件 | 位置 | 行为 |
|---|---|---|
| 读帧与访问记录 | src/mcss/mechanism_pilot/direct_capacity_contracts.py:_Media.read(ids, depth_allowed, purpose) |
RGB 读成 float32 后除以 255;内参与 c2w 为 float32;深度 np.load 后转 float32,无效值置 0;每次读取都把 scene、frame、purpose、channels 写入访问记录。ContextOnlyLoader 只允许读上下文角色,查询深度另走封存评价路径。 |
| 世界点 | scripts/run_rgbd_geometric_baselines.py:context_points |
所有有效深度样本的世界点,float64。 |
| 重投影 | 同上:reproject |
1 像素 z-buffer,每个像素取最小的光线距离;返回 (depth, hit)。 |
| 查询相机 | 同上:query_camera |
由清单的内参与 c2w 构造,float32。 |
| 调和补洞 | scripts/run_rgbd_inpaint_baselines.py:harmonic_fill、ray_cosine |
命中像素保留;空洞在逆平面深度上解 4 邻域 Laplace 方程;完全没有命中时用 TRAIN 常数 2.3736 m。 |
| NEAR 掩码 | 同上:near_mask |
到最近命中像素的欧氏距离不超过 8 像素。 |
| 多帧版本 | V24 scripts/analyze_rgbd_stream_baselines_v24.py |
REPROJ7_HARMONIC 把上下文与 4 个流帧拼成一个 RGBDContext,再调用同样的函数。 |
| 统计模板 | mcss.mechanism_pilot.direct_capacity_statistics.describe / paired;geometry_carrier_statistics._evidence / surface_status;聚合见 scripts/evaluate_rgbd_completion_eval_v3.py 的 scene_values |
场景 bootstrap,10,000 次,种子 20260928;V2 gate 要求均值大于 0、95% 区间下界大于 0、至少 75% 的场景不变差、留一场景增益全为正、正贡献最大的单个场景占比不超过 0.5。场景值的算法:角色内先对查询取平均,再在角色之间平均。 |
| 已封存的基线 | ~/cv_work/depthsplat/probe_eval34(EVAL-V3∪V4,83 个场景)、~/cv_work/depthsplat/probe_dev(DEV) |
都含 REPROJ_HARMONIC、NEAR 掩码与 G1 的预测;EVAL34 上 G1 1 个 seed,DEV 上 3 个 seed。 |
| 运行器 | ~/cv_tools/cv_host_run.py |
把记录里的 /home/zonghan/ 路径映射到镜像。只用 CPU 的命令要设 CUDA_VISIBLE_DEVICES=""。 |
关键的等价关系: z-buffer 对每个像素取最小值,所以"多帧一起重投影"严格等于"各帧分别重投影后逐像素取最小值"。新实验据此为每个查询、每一帧预先算一次重投影;任意子集的结果是这些图的最小值,再做调和补洞。K=0 时的结果必须与封存的 REPROJ_HARMONIC 逐位相同,这一条作为完整性检查。
3. 帧角色(权威定义)
- 帧数: 每条记录 16 帧。EVAL-FAR 的记录多 2 个远处查询帧,共 18 帧。
- 角色:
context_a、context_b:各 3 帧,共享 anchor 帧 0;primary_query:2 帧,与query相同;- EVAL-FAR 另有
far_query:2 帧,例如 32、49; - TRAIN72 的记录另有
stream(2 帧)与ignored。
- 空闲帧: 不属于任何角色的帧。DEV、EVAL-V3、EVAL-V4、EVAL-V5、TRAIN-EXT、EVAL-FAR、Replica 的每条记录都恰好有 9 个。
- Core B 的流帧: Core B(V4–V11、V24、V25)使用的 4 个流帧,就是 9 个空闲帧中按帧序等距选出的 4 个。例如
[5, 8, 10, 13],见outputs/EXP-3D-RGBD-DYNAMIC-TTT-SOURCE-V8/stream_roles.json。它相当于一种固定的 UNIFORM-4 规则。 - 查询的位置:
- EVAL-V3/V4 的 83 条记录里,69 条的查询是 14、15;
- 有些记录的查询夹在空闲帧中间,例如 ai_001_005 的查询是 12、15,空闲帧里有 13、14。
- 相邻性:
- EVAL-V3/V4 的 83 条记录中,81 条的空闲帧里有一帧与某个查询帧序相差 1;
- EVAL-FAR 的远处查询与所有空闲帧都相差很远;
- Replica 的查询与最近的空闲帧相差一个采样间隔(50 帧)。
4. 评价队列的使用情况
在新方向里,下列队列只能作为开发与机制数据,不能称为独立测试。
| 队列 | 场景数 | 以前的用途 |
|---|---|---|
| TRAIN72 | 72 | 所有 carrier 的训练集 |
| SEG-V1 | 240 段 | V21 训练、DepthSplat 微调 |
| TRAIN-EXT | 55 | V14、V18、V20 的扩充训练;Core B V6、V9,V27,GPU 试点的评价 |
| DEV | 8 | 每一轮的开发与检查点选择 |
| EVAL-V3、EVAL-V4 | 57、26 | V11 以后几乎每一轮的主评价;DepthSplat 探针 |
| EVAL-FAR | 79 | V13、V22、V25 等 |
| FRESH-V1、FRESH-V2 | 5、17 | 资格检验,已用尽(FRESH-V2 用过 3 次) |
| EVAL-V5 | 23 | Core B V7、V27 |
| Replica | 8 | Replica 迁移、V28 |
5. 受保护的保留集
- 清单中的
protected_scene_ids共 58 个场景(官方 test 划分)。它们与以上所有队列都不重叠,_scene_guard禁止读取。 - 新方向不打开它:
FINAL_HOLDOUT_TOUCHED=false。
6. 对新任务的含义
- episode: 一个场景加一个上下文角色(A 或 B)。
- 初始上下文: 该角色的 3 个 RGB-D 帧。
- 候选池: 该记录的 9 个空闲帧。它们不与查询帧、也不与两个角色的上下文帧重叠,两个角色共用同一个池。
- 查询:
primary_query的 2 帧。EVAL-FAR 另有远处查询,可作为"远离所有候选帧"的次要查询集。 - 信息:
- 候选帧的 RGB 与相机可见;
- 候选帧的深度只在请求之后读取,读取用途分开记录:可部署策略为
CANDIDATE_DEPTH_REQUESTED,oracle 为ORACLE_TEACHER_ONLY; - 查询帧的 RGB、深度与相机都不给可部署策略。
- 主要风险:
- 几乎每个 episode 都有一个与查询相邻的候选帧,"测最后几帧"这类按时间新近选帧的规则可能就接近 oracle;
- 预注册时需要用帧序距离池与远处查询,把相邻帧效应与真正的规划余量分开。
- 不需要训练: 后端用无模型几何,不涉及 carrier;G1 只作次要分析,使用已封存的预测。