三维训练前准备
已完成仓库复用审计、官方校准资源下载、共同 anchor 训练损失、精确相机内参转换、配置/小 cohort 草案和 CUDA 资源检查。TRAINING_READY=false:尚未开始正式训练,未读取真实 query 图像/depth,未下载场景媒体。输出保存在 outputs/EXP-3D-20260927-training-preparation-v1/;旧实验文件未修改。
可以直接复用的内容
| 仓库组件 | 用途与限制 |
|---|---|
src/mcss/dynamic/carrier.py |
当前三维 carrier、真实 fuse/complete 写入矩阵,保持架构不变 |
src/mcss/dynamic/write_rule.py |
现有直接写入规则,无需重写 |
src/mcss/measurements.py |
参数为零的固定 RGB/depth renderer |
src/mcss/data/download.py |
官方 Hypersim ZIP 的 HTTP Range 局部下载;必须提供 scene/camera/frame 白名单;下载器自身不查 split |
configs/hypersim_er_partitions.csv |
现有 train/val/diagnostic/final 分区名单,不能当作物理地点身份证明 |
scripts/compile_dynamic_training_episodes.py |
数据检查、online/query 分离、窗口编译;函数 API 支持小规模 expected_counts,CLI 默认仍为旧 365/46 |
src/mcss/data/pilot_provenance.py |
训练/开发身份、路径、manifest 哈希核验;不读媒体,必须传新 prepared_root |
src/mcss/training/experiment.py |
两阶段优化、日志、断点、RNG/optimizer 恢复;旧 Phase A 使用不同 anchor,不能直接作为新协议启动入口 |
src/mcss/dynamic/checkpoint.py |
严格保存/加载 mcss.dynamic.v1,同时保存 carrier 与 writer slow weights |
src/mcss/mechanism_pilot/ |
已有封存、四动作隔离、scene bootstrap、指标及残差对照接口 |
本轮补齐的工具
calibration.py:从官方逐场景M_cam_from_uv构造相机矩阵,遵守 OpenGL→OpenCV、像素中心与横纵分别缩放。验证了 shifted/skew 情况与官方 ray 公式一致;无效参数直接报错,不回退到 60°。已对官方 482 行参数完成矩阵有效性检查,尚未与真实图像/几何做配准核验。training.py:common_anchor_measurement_loss,两组等量上下文只共享内容完全相同的 anchor,各自独立建立零 fast-offset 状态。两个状态都建完后 query 才进入 renderer。仅允许 train split;split 字符串不是数据来源证明。scripts/prepare_3d_training.py:不读媒体、不启动训练,生成校准检查、cohort 草案、A/B 配置和阻塞项。拒绝覆盖已有报告。scripts/probe_3d_training_resources.py:一次合成前向/反向,验证梯度和显存;不调用 optimizer、不保存 checkpoint,验证参数值未改变。
新校准与 anchor 模块是可复用适配器,尚未接入旧预处理器和训练循环。配置文件可被现有配置解析器读取,但不意味着旧训练入口已经满足新协议。不能直接照旧命令启动正式训练。
已下载的官方材料
来源固定为 apple-aiml-research/ml-hypersim commit 3463c5c4a75f3cbfc65ed31cfd6e87204b3a2254:逐场景相机 CSV(312,522 bytes)、说明、raycasting 示例 notebook、LICENSE。下载 URL、大小及 SHA256 见 metadata/sources.json。只读取 notebook JSON 中的算法说明,没有执行上游 notebook,也没有下载其中示例媒体。
官方说明每个 scene 的内参可能不同,不能假定统一 FOV;depth 是到光心的欧氏距离。官方还提示 preview JPEG 不适合一般下游训练。历史仓库使用 preview JPEG;重新训练前须明确保留该输入以复现,还是使用 HDR RGB 与固定 tone-mapping,不能静默切换。
小 cohort 草案,不是正式 split 锁
按已有 partition、frame_count>=16、不同 asset volume、字典序选出,不用图像或结果:
| 角色 | 候选 scene |
|---|---|
| train | ai_001_001、ai_002_001、ai_003_001 |
| dev | ai_004_003、ai_005_005、ai_006_007 |
不同 volume 只是保守筛选,不证明物理地点独立;physical_scene_id=null,状态明确 UNVERIFIED。每 scene 计划使用前 16 个实际公开有效帧,具体帧号尚未锁定,不能假定就是 0–15。这只是 3+3 工程/开发 pilot,不是统计功效足够的泛化确认,也不是此前未曝光场景的声明。没有选 diagnostic_test 或 final_holdout。
必须避免的旧默认
hypersim.py旧内参用 60° FOV 在目标尺寸重新计算 fx=fy;128×160 非等比例 resize 会带来误差。应接入本轮官方矩阵,确保 RGB/depth 的重采样像素中心一致。- scene scale 缺失时旧函数回退 1.0。新流程必须要求官方 scale,核对
_detail/metadata_scene.csv,缺失即停止。 - 旧转换器用已转换全部 depth 推 bounds。新训练只能用固定 context-local bounds,不得使用 query-derived bounds。
materialize_hypersim_expansion.py默认包含 diagnostic_test、所有帧及 100GiB 保留空间,不能直接调用默认流程。应以锁定 train/dev 白名单使用局部 ZIP 下载,先检查压缩/解压大小。prepare_dynamic_ttt_pilot.py会打开 online 帧 depth/normal,且额外要求 normal。当前训练只需 RGB/camera 和离线 query depth;优先走 training compiler 的 metadata-only API,明确记录何时读取 train depth。
配置与验收顺序
草案:128×160、原 carrier/write 配置、固定 renderer 64 samples(与新机制 pilot 一致,显式区别于历史训练的16);Stage A 1000 步、lr=1e-3,Stage B 600 步、lr=3e-4。它们是待核定工程预算,不是收敛保证。A 配置中 B steps=0,先检查静态资格;B 单独配置,需要显式传 A-final。尚未冻结真实数据上的窗口与采样规则。
正式启动前剩余:
- 核实物理地点映射、scene/camera/具体帧号并冻结清单;只选合法 train/dev。
- 按精确成员清单下载小规模 RGB、相机和 depth,保存来源/hash/体积;不全量下载数据集。
- 将官方校准与严格米制 scale 接入独立预处理路径,核对图像射线/深度坐标,锁定 RGB 来源及重采样。
- 将共同 anchor 损失显式接入训练器配置,测试日志、续训兼容性和状态隔离,避免通过临时 monkeypatch 启用。
- 编译 train/dev online/query 清单;train 标签健康检查有访问日志;dev query 在评价 seal 前不读取。
- 用真实训练输入测完整动态展开显存/耗时,再启动预先冻结的 A 阶段。充分训练 R-Residual 对照后评价静态资格,再决定 B 与后续机制实验。
验证与资源
14 项新增测试通过(共同 anchor 11、校准3)。本轮新模块及复用的编译、provenance、下载组件回归结果见 regression_tests.log;Ruff PASS。没有修改旧实现,未重复无关的全仓库测试。
RTX 5090 上,128×160、两组各3帧、单query、64 samples、chunk=2048 的合成 forward/backward 为 0.462秒;PyTorch peak allocated 257,635,328 bytes ≈246MiB,reserved ≈276MiB。仅测静态单步,未包含真实 I/O、optimizer状态或 Phase B 八步展开,不据此估算总训练时间。optimizer steps=0,未生成伪训练 checkpoint。主盘当时约94GiB可用,内存/显存不是目前唯一门槛。
复现见 commands.sh;完整输出位于独立 outputs 目录。