用户指南

第 4 章 — 辅助窗口

除主窗口 (3D 视口加检查器) 外,RadianceKit 还管理七个其他窗口, 全部通过 Help 菜单打开。从上到下:User Guide (⌘?)、Keyboard Shortcuts (⌘/)、Open Training Logs… (不打开应用窗口,而是 Finder; 因此此处不再赘述)、Manage Storage…、Pareto Dashboard… (⇧⌘D)、 Holdout Analysis… (⇧⌘H)、BayesOpt Console… (⇧⌘B)。其中三个 —— Dashboard、Holdout、BayesOpt —— 是独立的分析工具。它们各有 自己的 View Model 栈,在磁盘上读写 JSON 文件,并且每个都有一个 CLI 参数,可在应用启动时让该窗口立即指向特定文件 (–dashboard-dir–holdout-file–bayesopt-autorun)。

四个简单窗口 (User Guide、Keyboard Shortcuts、Manage Storage, 以及子菜单项 Open Training Logs / Open Exports Folder) 每个控件 得到一个简短条目。三个分析窗口记录得更详细 —— 每个都有一个 引言,解释您在窗口中看到什么、何时应打开它,以及如何解读所示 图像。

本章末尾有一个指向主窗口检查器的交叉引用部分:训练运行时您 能从实时 Loss 图和 Gaussian Count 显示中合理读到什么。

User Guide (W1–W4)

User Guide 窗口,左侧侧栏,右侧渲染的 Markdown 内容
User Guide 窗口,左侧侧栏,右侧渲染的 Markdown 内容

这是什么: 一个内置帮助窗口,渲染应用附带的 guide_<语言>.md。语言从设置 (General → Language) 派生, 或当选择"System"时从 macOS 语言偏好派生。布局经典:左侧 含所有标题的侧栏,右侧正文。

当您需要对某一点的快速提醒时 —— 即作为 关键词替代。详细参考是本手册;内置帮助窗口更像是命令行上的 –help。每个应用版本随之更新,但内容上保持较表层。

W1NavigationSplitView (侧栏 + 详情)

位置

Help → User Guide (⌘?)。

技术细节

两列布局,带窄侧栏 (至少 180 pt 宽) 用于内容树,以及带可滚动详情区的实际 Markdown 内容区。窗口最小尺寸 700 × 500 pt。首次打开时,窗口从应用 bundle 加载相应的 guide_<lang>.md (回退 guide_en.md), 将其解析为 Block 记录 (标题 H1–H4、段落、列表、表格、分隔线), 并单独提取标题结构用于侧栏。内联格式 (粗体、斜体、Code Span) 通过内置 Markdown 引擎渲染。语言从应用设置读取,中文 (zh-Hans) 和巴西葡萄牙语 (pt-BR) 作为特殊情况以完整 locale 标签保留, 因为这些变体与 zh 或 pt 不同。

W2List (标题侧栏)

位置

User Guide 窗口的左栏。

技术细节

当前 Markdown 文档中所有 H2 和 H3 标题的列表。H2 条目无缩进,中等字重显示;H3 条目 带 16 pt 左缩进和减弱前景样式。H4 及更深的级别被忽略, 否则深度会让侧栏失去概览。锚 ID 从标题文本通过 slug 化生成 (小写 + 空格转破折号 + 过滤为字母/数字/破折号 —— 与 GitHub 用于 Markdown 锚的算法相同,因此外部文档 URL 可能落在相同 的锚上)。列表使用原生 macOS 样式。

W3Button (标题 → 锚跳转)

位置

每个侧栏行一个按钮。

技术细节

每个侧栏条目是一个按钮, 设置当前锚,但外观上像列表条目。一个观察者变量随后触发到 相应锚的滚动跳转,带 0.3 秒的柔和动画。跳转后锚值被重置, 以便下次单击相同锚时再次触发 (否则观察者不会重新触发, 因为值未改变)。

W4ScrollView (详情内容)

位置

右栏。

技术细节

可滚动、垂直堆叠的内容 区域,带 Lazy Rendering,因为较长的 Guide 容易超过 200 个 Markdown Block —— 非 lazy 变体会同时实例化所有。每个 block 获得自己的 ID,要么是标题锚 (对可跳转的 H1–H3),要么是 索引占位符。最大宽度 720 pt,Padding 32 水平 / 24 垂直, 使长行保持良好可读布局。表格按单元格用水平堆栈和分隔线渲染; 内联代码通过内置 Markdown 引擎。真正的代码块当前作为段落 处理 —— 帮助窗口的已知限制。

Keyboard Shortcuts (W5–W6)

Keyboard Shortcuts 窗口 — 五组 Navigation/Views/Capture/Editor/Training,左侧热键列,右侧描述
Keyboard Shortcuts 窗口 — 五组 Navigation/Views/Capture/Editor/Training,左侧热键列,右侧描述

五个部分的静态参考列表。 Navigation: Mouse Drag (Orbit/Fly)、Shift+Drag/Right-Drag (Pan)、Scroll (Zoom)、WASD (Fly-Through 移动)、Q/E (Up/Down)、 F (Toggle Orbit/Fly)、双击 (Re-center)、Cmd+Scroll (FoV 调整)。 Views: R (重置相机)、T (自动旋转)、P (相机回放)、B (背景循环)、0–9 (跳到训练相机 1=10%/5=50%/0=最后)、左/右 箭头 (上一个/下一个相机)。Capture: S (截图到桌面)、 V (Turntable 视频)、C (复制相机信息)。Editor: Tab (编辑模式)、Click/Drag (Paint-Select)、Option+Click (取消选择)、 X / Delete (删除选择)、Cmd-Z (撤销上次删除)、[ / ] (画笔 更小/更大)、Esc (取消选择)。Training: Start、 Pause/Resume、Cancel、Continue +5K/+10K/+20K 通过 M9–M14 的菜单快捷键。

这是什么: 一个所有快捷键的简单静态概览 —— Navigation、Views、Capture、Editor、Training。内容硬编码, 无 Markdown 加载。

当您寻找在视口中做某事的最快方式时。 WASD Fly-Through、R 重置相机、B 循环背景 —— 全都在这里。

W5ScrollView (内容区)

位置

Help → Keyboard Shortcuts (⌘/)。

技术细节

一个内有垂直列表的简单 滚动区。Padding 20 周围,无侧栏导航树 (列表足够短)。内容 分为五个部分 (Navigation、Views、Capture、Editor、Training)。 每组按键一行,两列均为可翻译文本。左列 (按键代码) 固定为 180 pt 宽度,使右侧描述保持垂直对齐。除滚动外无交互 —— 单击行不触发任何操作,快捷键是菜单和视口上的真正键盘修饰。

W6VStack (快捷键部分)

位置

ScrollView 内部。

技术细节

左对齐堆叠的部分, 16 pt 间距。五个部分内分别为标题 + 行序列。标题使用次要 Subheadline 样式 —— 故意不用 Title 格式,因为部分不必可导航。 内容故意扁平 (无 Disclosure、无搜索、无过滤),使组件在每个 macOS 版本上一致工作,并保持文件可读。

Manage Storage (W7–W12)

Manage Storage 窗口 — 标题显示 693 items 16.74 GB total,按日期排序的 PLY 导出文件表格,每行 Format-Pill + 文件名 + 大小 + 日期
Manage Storage 窗口 — 标题显示 693 items · 16.74 GB total,按日期排序的 PLY 导出文件表格,每行 Format-Pill + 文件名 + 大小 + 日期

RadianceKit 管理的 所有文件的表格视图。标题统计 693 个项目,16.74 GB 总大小。 顶部工具栏:"Show in Finder" + "Refresh"。每行:PLY 图标、 文件名 (例如 training_20260527T211321Z.ply)、导出日期、 大小 (从 7 KB 到 218 MB 不等)、放大镜图标 (Reveal) 和回收站 图标 (Move to Trash)。文件按日期排序,最新在上。在此演示 截图中,PLY 导出占主导,因为大量使用了 –benchmark

这是什么: 对 RadianceKit 在 ~/Documents/RadianceKit/ 下存储的一切的磁盘使用概览 —— Logs、Exports、Scenes、Capture Bundles (来自 iOS 伴侣)、Imports (输入图像的暂存副本)。每个 条目一个字节大小和两个按钮:"在 Finder 中显示"和"移到 回收站"。不是自动清理 —— 应用本身什么都不删;您按条目 决定。

磁盘满时。尤其是 Logs 会积累 (每次训练尝试 一个 JSONL,加上 _qualityMetrics.json);Exports 自然也是 (PLY 100% 原始数据,每次导出一个)。崩溃后也有用,如果 Imports 暂存目录中还有输入图像的旧副本 (参见 dev_v549f-needle-reduction.md 中的"Disk-pressure incident")。

W7按钮"Show in Finder"

位置

Storage 浏览器窗口右上角的标题。

技术细节

在 Finder 中打开整个 RadianceKit 目录 (~/Documents/RadianceKit/),使您能直接 看到文件夹结构,并可用 Finder 本身操作。该操作打开一个新 Finder 窗口,不切换到应用沙盒容器 —— ~/Documents/RadianceKit/ 是应用正常可访问的 Documents 域,不是沙盒容器路径。

W8按钮"Refresh"

位置

标题,Finder 按钮旁。

技术细节

触发一个在用户启动的 异步任务上运行的后台扫描,以使大型目录树扫描不阻塞 UI。 实际遍历访问每个已知子文件夹 (Logs、Exports、Scenes、 Captures、Imports),并为每个直接子项生成一个 Storage 条目。 每个条目确定递归大小 —— 优选实际磁盘使用 (包括 APFS 硬链接共享),回退到逻辑文件大小。

W9List (Storage 条目)

位置

标题下方的主内容。

技术细节

每行此布局的列表: 类别特定的 SF Symbol 图标 (Logs 文档、Exports 上传箭头、 Scenes 立方体、Imports 托盘)、名称 + 副标题 (Kind 标签 + 格式化修改日期)、右侧字节计数器 (右对齐,monospaced)、 Reveal 按钮 (放大镜符号)、Trash 按钮 (回收站)。排序:首要 按 Kind (Scenes 首先,然后 Exports、Logs、Captures、Imports、 Other),次要按修改日期降序 (最新在上)。如果扫描仍在运行, 位置改为显示"Scanning…"进度。如果未找到内容,显示带 托盘图标的空状态显示。

W10行按钮"Reveal in Finder"

位置

每行,右侧放大镜符号。

技术细节

打开 Finder 并选中特定 项 (文件或文件夹)。与 W7 不同:W7 打开根目录;W10 精确标记 这一个条目。实际工作流:识别一个大条目,单击放大镜,然后 例如将其复制到外部卷。

W11行按钮"Move to Trash"

位置

每行,放大镜旁的回收站符号。

技术细节

触发确认对话框 (W12)。 仅在确认后,标准 macOS 操作"移到回收站"运行 (即可逆, 非直接删除)。Trash 成功后,条目从列表中移除,总字节计数 更新。出错时显示模态错误对话框。

W12ConfirmationDialog (删除确认)

位置

由 W11 触发,呈现为 macOS 表单。

技术细节

标准确认对话框,带动态 标题"Delete <name>?"和一行消息,明确指出条目落入回收站 并可从那里恢复 (直到回收站被清空)。两个按钮:"Move to Trash"作为破坏性操作 (红色显示),以及自动 Esc 绑定的 "Cancel"。该对话框在某种意义上是非模态的,仅阻塞此窗口, 不阻塞整个应用 —— 这是 macOS 对可逆删除的标准。

Pareto Dashboard (W13–W22)

Pareto Dashboard — 报告导入前的空状态
Pareto Dashboard — 报告导入前的空状态

空状态 (首次打开后) —— 带"Open Reports Folder…"行动召唤 的空状态。一旦加载了训练报告,数据点出现,见下张截图。

Pareto Dashboard 加载 129 个基准报告 — Gaussians 对 PSNR 带 Pareto Front、Scene/Strategy/Mip 过滤器
Pareto Dashboard 加载 129 个基准报告 — Gaussians 对 PSNR 带 Pareto Front、Scene/Strategy/Mip 过滤器

标题工具栏显示"129 reports of 129" (选定文件夹中所有报告成功解析 —— 21 个额外文件因较旧 格式无法解析,见右侧提示列表)。坐标轴:X 轴选择器为 Gaussians,Y 轴选择器为 PSNR (dB)。散点图:绿色点 = Classic 策略,蓝色点 = MCMC。虚线 Pareto Front 沿最佳达到 的 PSNR 值延伸,从约 500K Gaussians 起在 PSNR≈30 dB 形成 平台。右侧过滤芯片:7 个场景 (bicycle、bonsai、family、 flowers、kitchen、stump、truck),2 种策略 (classic、mcmc), 3 个 Mip Splatting 选项 (All、On、Off)。当前所有过滤器 都打开,因此点的密集集群。

这是什么: 一个多运行比较工具。您过去训练了多个 场景或同一场景使用不同预设 —— 每次训练运行 (如果您带了 –benchmark 或通过 Benchmark 功能调用) 都产生一个 JSON 报告文件,其中包含最终 PSNR、SSIM、LPIPS、Gaussian Count 和挂钟时间等。该 Dashboard 一次读取这样一个整个文件夹, 并将它们作为 2D 散点图绘制,坐标轴可选。此外,Pareto Front (非支配点的集合) 以虚线绘制。

在您创建了至少三或四个训练报告之后。 点更少时,前沿线无意义。典型用例:您试图重建一个户外场景, 依次跑了 P3 Balanced (Classic)、P4 Quality (Classic)、P7 MCMC Quality 和 P9 Outdoor (tuned) —— 现在您要知道哪种配置在 每秒训练时间内提供最佳 PSNR,或哪个需要最少 Gaussians 达到 给定 PSNR。

两个轴都可自由选择 (X 轴:、、psnrssimlpips 等;Y 轴同样)。ParetoFront2D.indices 中的 Pareto Front 逻辑知道每个指标是"越小越好" (例如 LPIPS、 Loss、Time) 还是"越大越好" (PSNR、SSIM) —— 因此线视轴 选择从左下到右上或从左上到右下,始终沿最佳达到的组合。 一个点是 Pareto 最优的,当且仅当 没有 其他点在 两个维度都至少同样好 (即没有其他支配它)。Pareto 最优点 位于线上,其他点在右/上 (视轴方向)。线上的点是"最佳预设" 的真正候选;远离线的点是浪费的训练时间。

您可以将选择限制到特定场景 (例如当您 只想比较户外运行时)、特定策略 (Classic 或 MCMC),或 Mip-Splatting 开/关 (在 Q1.5 阶段后相关,其中 Mip 保留为 opt-in 高级标志)。

您有"truck"场景的三个报告在 ~/Documents/RadianceKit/Reports/:Run A (P4 Quality、40K iter、524K Gs、105 s、PSNR 23.4)、Run B (P7 MCMC、200K iter、 150K Gs、693 s、PSNR 24.6)、Run C (P9 Outdoor、100K iter、 1.25M Gs、312 s、PSNR 25.8)。设 X 轴为 trainingTime,Y 轴 为 PSNR。Run B 在右上,Run C 在更右上,Run A 在左下。 Pareto Front 连接 A 和 C —— 都非支配。Run B "丢失" (C 在 Time 和 PSNR 上都更好)。洞察:对"truck",MCMC 默认不 值得;要么快+还行 (A) 要么长+非常好 (C)。将 C 的配置存为 自己的预设 (检查器 → I1 Save Preset)。

下一步行动: 将最佳配置保存为预设。具体:查看 Pareto 点 (Hover 显示 PSNR/SSIM/LPIPS/Gs/Time 工具提示), 决定哪个在 Time vs Quality 折衷上最适合您,打开相应的 报告 (文件名含运行时间戳),将其训练配置在新运行中复制, 或在下次训练会话后通过检查器保存为预设。

W13按钮"Open Reports Folder…"

位置

左上角工具栏。

技术细节

打开一个文件夹选择 对话框,提示"Select a folder containing benchmark .json reports"。确认后,后台任务顺序解析文件夹中所有 .json 文件。错误报告 (损坏的 JSON、错误的 schema) 被收集并在 侧栏底部显示为"N file failed to parse" —— 不崩溃。如果在 第一次加载仍在运行时进行第二次单击,前一个任务被取消, 以使不会有两个结果同时写入状态。

也通过 CLI:–dashboard-dir /路径/到/reports 在应用启动 时立即加载文件夹。

W14选择器"X-Axis"

位置

图表上方,左侧。

技术细节

带 Dashboard 模块所有 可用指标轴 (PSNR、SSIM、LPIPS、Gaussian Count、训练时间 等) 的菜单选择器。默认是 Gaussian Count。切换时已悬停的 点被重置,因为旧轴坐标系中之前突出显示的位置在轴切换后 无意义。选择器限于内容宽度,以使其不横跨整个宽度。

W15选择器"Y-Axis"

位置

图表上方,X-Axis 旁。

技术细节

与 W14 相同,只是默认 是 PSNR。轴选择独立保存,因此用户也可选择无意义组合 (X=PSNR、Y=PSNR —— 会将所有点投到对角线上)。但此类组合 不被捕获;有意决策,因为"SSIM vs PSNR"比较确实有趣, 用于看指标行为有多一致。

W16开关"Show Pareto Front"

位置

轴选择器旁右侧。

技术细节

标准 macOS 开关。 活动时,Pareto 图表中除点云外还绘制一条带计算出的 2D Pareto Front 的线。样式:虚线 (4-4 模式)、灰色半透明、 线宽 1.5 pt。Pareto 计算在主线程上运行 —— 对典型的报告 数量 (≤ ~50) 无问题快速。开关关闭时,线被省略,只剩 纯点。

W17Chips "Scene" 过滤器

位置

Dashboard 窗口右侧栏。

技术细节

加载报告中出现的每个 场景的过滤芯片。自有 Flow 布局,一旦宽度耗尽自动将芯片 打包到多行。活动芯片获得 Accent 背景,不活动的获得中性 标准 Material 背景。可多选 (Set 语义);如果没有芯片选中, 所有场景都视为"通过" —— 即 Set 逻辑是"空选 = 一切", 不是"空选 = 无"。

W18Chips "Strategy" 过滤器

位置

侧栏中 Scene Filter 下方。

技术细节

与 W17 一样,但用于 训练策略 —— 通常是两个值"classic"和"mcmc",从基准报告 JSON 的 Strategy 字段派生。当您混合了两种策略的报告并只想 看一种时有帮助 (例如"只显示 MCMC 运行,因为我已经排除 Classic")。

W19Chips "Mip-Splatting" 过滤器

位置

侧栏中 Strategy Filter 下方。

技术细节

三值过滤器 (而非 W17/W18 那样的 Set):"All" / "On" / "Off"。背景:Mip-Splatting 在阶段 Q1.5 中被评估为实验性多尺度改进,最终裁定是"全程 无明显胜利;保留为 opt-in 标志"。当您做 Mip 开/关比较时, 通常想能非常清晰地分离。因此专用的三元过滤器,带状态 "全部通过"、"仅 Mip 开"、"仅 Mip 关"。侧栏部分仅在 数据集中至少有一个 Mip 报告 和 一个非 Mip 报告时显示 (否则过滤无意义)。

W20ChipButton (Filter Toggle,all/on/off)

位置

辅助组件,用于 W17/W18/W19。

技术细节

极简的按钮包装。内容: 带 Caption 字号和 Padding 10 水平 / 5 垂直的标签文本。 背景条件化:活动时 → 应用 Accent 颜色带白色文本;否则 中性标准 Material 背景带黑色文本。形状是 Capsule (药丸状)。 Plain Button 样式,使 Capsule Material 不被系统边框覆盖。

W21Chart (Pareto Scatter)

位置

Dashboard 中央区域。

技术细节

带两层的 Swift Charts 图表:1. 每个报告一个点 —— 位置来自选定的 X 和 Y 指标, 颜色按 Strategy,符号按 Mip 状态。Symbol 大小常规 80, 突出 200 (如果 ID 对应当前悬停的报告)。2. 仅当开关打开时 绘制 Pareto Front 线。

Chart Overlay:一个透明矩形注册鼠标移动;每帧确定 Plot Frame 中欧几里得最近的点位置,如果距离低于 24 px 则更新 悬停的报告 (否则重置)。这样您无需单击就获得工具提示 —— 悬停就够。

W22Tooltip (Hover 详情)

位置

图表下方,Hover 时显示。

技术细节

水平栈:场景名 (Headline)、 Strategy 标签 (Caption)、分隔线、然后 PSNR/SSIM/LPIPS/Gs/Time 指标各为一个小垂直组 (标签 + monospaced 值)。如果 Mip 激活, 另外一个 Accent 颜色"Mip"Capsule 标签。背景半透明 Blur, 8 pt 半径圆角矩形。仅在鼠标确实在点上时显示。离开时自动 消失。

Holdout Analysis (W23–W29)

Holdout Analysis — 加载 transforms.json 前的空状态
Holdout Analysis — 加载 transforms.json 前的空状态

带空状态和行动召唤"Open transforms.json…"的空状态。接受 NeRF Studio 和 Instant NGP 格式。

空状态 (首次打开后) —— 一旦加载 transforms.json, 相机标记出现,见下张截图。

Holdout Globe 含 100 个 NeRF-Blender-Mic 相机,5 折每折 20 相机,Angular 策略活动
Holdout Globe 含 100 个 NeRF-Blender-Mic 相机,5 折每折 20 相机,Angular 策略活动

标题显示加载的文件 (transforms_train.json) 和相机数 ("100 cameras")。左侧 栏:策略选择器,两个选项 —— Angular (longitudinal) 活动 (按球面上的经度/纬度扇区对折,使每个测试折几何上密集) 与 Linear (round-robin) (基于顺序,每第 k 帧作为测试集)。 k-Folds 滑块在 5,Test-Fold 选择器在 Fold 1。Export 按钮 生成用于 Nerfstudio/Instant-NGP 的 fold-assignment.json。 中间面板:所有 100 个相机的 3D 球面投影 —— 绿色点 = Train, 红色点 = 当前 Test Fold (Fold 1 含 20 相机)。右侧栏 (Angular Correlation):每折 20 个相机 + 平均最近角 (Fold 1: 7.9°、Fold 2:7.8°、Fold 3:7.7°、Fold 4:7.0°、Fold 5: 6.3°) —— 值越小意味着此折内的相机紧密相邻,即 Holdout 分割空间连贯。

这是什么: 您相机布置的 3D 可视化器,带交叉验证 逻辑。您加载一个 transforms.json (Nerfstudio / Instant-NGP 对相机位姿的标准格式),应用读取所有相机,将它们的视线 方向投影到单位球面上,并在虚拟球体上显示为小球面标记。 然后将相机分成 k 折 (按所选策略:angular 或 linear), 标记绿色为训练部分,红色为测试部分 (Holdout),并为每折 计算一个 Angular Correlation 分数,告诉您测试折在视角空间 中距训练折多远。

当您要做 Holdout 评估时 —— 即:您的 模型对未见视角的泛化有多好?训练中的标准是"每第 8 个视图 作为 Holdout" (Mip-NeRF360 约定),但这是非常线性的拆分。 如果您的图像例如按时间聚类 (先物体一侧,然后另一侧), 则"每第 8"不具代表性 —— 随机序列位置落入测试集,但其 所有邻居在训练集,这太容易。使用"angular"则在视角空间 上分层:每折包含轨道所有区域的相机,使测试真正测试泛化 空隙。

Angular vs Linear:- Angular (标准): 按经度角 (绕 Y 轴的 φ 坐标) 将相机分成 k 个相等扇区。 Fold 0 是 φ ∈ [0°, 360/k°) 的相机,Fold 1 是接下来, 依此类推。优点:每折覆盖轨道的部分扇区;测试折空间紧凑 但在世界数据集上广泛分布。适合经典轨道拍摄。- Linear (Round-Robin):Fold-Index = (image_index modulo k)。这 是简单的"每第 k 个"拆分。在图像顺序没有空间偏差时 (例如随机排序的无人机拍摄) 工作。在图像按时间聚类时 工作不佳。

在 3D 球面中您立即看到:绿色点 (训练) 和红色点 (测试)。 如果红色点都聚集在一角,Holdout 不好 (不是好的泛化测试)。 如果它们均匀分布在绿色之间,则好。每折的 Angular Correlation 分数 (右侧栏,以度) 另外告诉:更小值 = 测试 靠近训练 (每个测试相机有一个近邻训练相机,容易测试); 更大值 = 测试远离训练 (更难泛化)。

您用 251 张图像拍摄了 Truck 场景, 通过菜单项 M33 (Export SfM transforms.json) 导出一个 nerfstudio 文件。打开 Holdout 窗口 (⇧⌘H),通过"Open transforms.json…"加载 JSON,查看球面。k=5 (默认) 给您 5 折。单击"Fold 3" —— 看红色标记是否相对均匀。如果是: "Export fold-assignment.json",将导出的文件放在 Reports 文件夹中,下次带 –benchmark 的训练运行 (或相应的检查器 设置) 将使用这个折划分作为 Test-Holdout —— 替代默认 的"每第 8"。

W23按钮"Open transforms.json…"

位置

左上角工具栏。

技术细节

打开一个限于 JSON 文件的文件选择对话框。确认后,Holdout 模块加载文件。 加载器解析 nerfstudio 格式 (相机内参加上带图像路径和 Transform 矩阵的帧列表) 和 instant-ngp 格式 (相同结构)。 每帧从 Transform 矩阵提取视线方向 (相机本地基的 z 轴) 并保存。如果解析失败,在状态区显示错误消息。

也通过 CLI:–holdout-file /路径/到/transforms.json 直接启动窗口并加载文件。

W24选择器"Strategy" (angular/linear)

位置

左侧栏,上方。

技术细节

带两个选项的 Radio 选择器:Angular 和 Linear。策略切换自动触发折的重新计算。 视线方向是球面上 3D 单位向量的列表;Angular 策略投影到 经度角 φ 并排序,Linear 策略简单按帧索引做模运算划分。

W25滑块"k Folds"

位置

左侧栏,中部。

技术细节

从 3 到 10 的滑块, 步进 1。更改时折计算自动重新触发,使折列表、训练/测试 索引和每折分数立即重新计算。所选值显示为标签右侧的 monospaced 数字文本。

经验法则:k=5 是标准 (给您每折 20% 测试,这是交叉验证 的常用值)。k=10 当您有非常多数据且需要更多折以获得 统计意义时。k=3 当您数据少时。

W26选择器"Test Fold"

位置

左侧栏,k 滑块下方。

技术细节

菜单选择器。选项动态 为 0..<k,标签"Fold 1"到"Fold N" (即 UI 中 1 索引, 内部 0 索引)。如果之前所选索引 ≥ k (例如因为您将 k 从 10 减到 5),它自动重置为 0。所选 Test Fold 在球面中显示 为红色,所有其他显示为绿色。

W27按钮"Export fold-assignment.json"

位置

左侧栏,下方。

技术细节

打开默认文件名为 fold-assignment.json 的保存对话框。确认后,Holdout 模块 将当前划分编码为 JSON schema (按帧的折分配加 Strategy 元块)。该文件随后可在下次带 –benchmark 的训练中带上, 使相同的 Holdout 用于最终指标评估。写错误显示为错误文本; 成功显示为绿色文本"Saved to (filename)"。

W28SCNView (3D 相机球面)

位置

Holdout 窗口中央面板。

技术细节

SceneKit 球面视图。 场景包括:线框球 (半径 1.0、36 段、深灰色)、三个彩色 轴端柱 (红/绿/蓝代表 X/Y/Z,长 1.2)、每个相机一个小标记 球 (半径 0.03) 位于单位球面上相应视线方向位置 (略在外面, 以使其不消失在线框球内)。标记在每次折更改时 重新构建 —— 仅在帧列表更改时 (即加载了新 JSON) 需要重建。 相反,每次更新运行就地更新材质颜色:Test 索引红色, Training 绿色,既不也不浅灰色。这样即使在 N > 1000 相机时滑块刻度也保持高性能。

相机控制激活 —— 您可用鼠标旋转、缩放、平移球面。光照 确保标记不显平。背景深灰。

W29FoldCard (单击选择折)

位置

右侧栏,"Angular Correlation"部分。

技术细节

每折一个卡片视图 —— 6 pt 半径圆角矩形,Padding 10,垂直布局两行 (上"Fold N" + 相机数,下"Mean nearest angle:" + 度数值)。背景颜色 条件化:活动折 = Accent 颜色半透明,不活动 = 中性标准 Material。点击选择折,球面实时重新着色。

"Mean nearest angle"分数是每个 Test 相机到最近 Training 相机的平均最小角 (内部以弧度计算,UI 中以度显示)。

BayesOpt Console (W30–W39)

BayesOpt 控制台 — Trial 启动前的空状态
BayesOpt 控制台 — Trial 启动前的空状态

带 Search Space 选择器 (RadianceKit defaults (6-dim))、 Trial Budget 滑块 (默认 40)、Random Seed (42) 和 Convergence 图、Trial Log 与 Search Space 参数列表三个空面板的空状态。

空状态 (首次打开后) —— 一旦启动运行,Convergence 图和 Trial 表填满,见下张截图。

BayesOpt 控制台经过 40 次试验 — Convergence 图陡升到 Trial 15,Best Value 0.9943,Trial Log 含 init/bo/restart 标签
BayesOpt 控制台经过 40 次试验 — Convergence 图陡升到 Trial 15,Best Value 0.9943,Trial Log 含 init/bo/restart 标签

右上方状态"Finished — best 0.9943 after 40 trials"。左侧栏:Search Space 选择器为 RadianceKit defaults (6-dim)、Trial Budget 40、Random Seed 42。Parameter 列表显示要调优的六个超参数及其值范围: mipSmoothing3DScale [0.05, 0.5]mipFilter2DVariance [0.1, 0.6]densifyGradThreshold [5e-07, 5e-06]ssimWeight [0.05, 0.5]mcmcNoiseScale [1e-05, 0.0001]mcmcRelocationInterval [50, 200]。 中间:Convergence 图 (X = Trial Index 1–40,Y = Objective Value 0–1) —— 灰色点 = 初始样本 (LHS),蓝色点 = BayesOpt Acquisition,橙色点 = Restart Trials (#22 和 #31)。 Best-Value 线陡升到 Trial ~7,然后到 Trial 15 仅边际改进, 从此处起在 0.99+ 平台。右侧栏:Trial Log #1–#34 含 Score + 标签 (init/bo/restart)。右上方的 Save Best Config 按钮写入 bayesopt-best.json

这是什么: 一个用于超参数搜索的贝叶斯优化控制台。 贝叶斯优化是一种自动方法,尝试用尽可能少的实验找到一个 未知函数的最优点 —— 通常是:"哪个 mcmcMaxGaussians、 capMultiplier、ssimWeight 和 gradThreshold 组合为我的场景 类提供最佳 PSNR?"BayesOpt 不是 6^4 = 1296 次试验的网格, 而是尝试约 40–100 次信息化试验,从而接近最优。

重要: 应用当前交付的版本不针对真实训练运行执行 优化 (那会耗费数天),而是针对一个合成的演示目标 —— 带 Hill-Climbing 特性的多模态地形加轻微噪声。这是有意的: 该窗口应向您展示优化器的行为 (收敛走势、采样点、 Best-So-Far),并让您理解 Search Space 定义。对于真实 的训练驱动 BayesOpt 运行 (如阶段 Q7 中为 Scene-Class 预设进行的),使用独立的离线 CLI 工作流;该窗口是实时 UI 变体。

三种用例:1. 您要理解 BayesOpt 如何 工作 —— 启动演示运行并观察 Convergence 图。2. 您计划 新的场景类 (例如"水族馆"或"古董家具"),内置的 10 个 预设不完美匹配。在心中定义搜索空间,在此处用"Bowl demo" 或"Densify"预设检查,然后将 Best Config 导出为 JSON 并用作真实训练运行的起点。3. 您要检查 RKBayesOpt 包中 定义的默认 Search Space (Mip Subset、RadianceKit Defaults) —— 它们在左侧栏的 Parameter 面板中列出。

- Convergence 图 (中间列): Y = 迄今最佳达到的目标函数值。X = Trial Index。开始陡升 (BayesOpt 随机尝试初始样本,其中一些幸运),然后越来越 平,因为近最优区域已用尽。如果线持续 20+ 次试验平稳, 您可停止运行 —— 进一步试验不再带来收益。图中的单个点 是单独的 Trial 值 (不是"迄今最佳"),按阶段着色:灰色

初始样本,蓝色 = bayesopt acquisition,橙色 = restart。

- Trial 表 (右栏):#1、#2、#3 等,每个带值 和阶段标签。迄今最佳 Trial 标记为黄色星星。从表中您可 识别 Best Trial 并在导出时查看其参数值。- Search Space 检查器 (左侧栏):对所选预设显示所有参数名及其 搜索范围 [lo, hi]。当您在预设"RadianceKit defaults (6-dim)"上时,您看到例如"densifyGradThreshold [5e-7, 5e-6]" —— 即在这两个值之间 log-uniform。

选择预设"RadianceKit defaults (6-dim)"、 Trial Budget 40、Seed 42。单击"Start"。观察:前 8 次 试验为灰色 (初始样本、LHS 拉丁超立方),后续为蓝色 (BayesOpt 获取)。Convergence 图陡升到 Trial ~15,然后 平缓。在 Trial ~30–40 时最佳值稳定。单击"Save Best Config" —— 一个 bayesopt-best.json 保存,含预设名、 Trial Index、值和解码的参数值。然后您可将该 JSON 手动 采纳到您的预设定义中。

W30按钮"Start"

位置

左工具栏,在 Idle/Finished 状态。

技术细节

重置 Trial 列表, 切换到 Running 状态,生成新的 Run ID (用于多次 Start 单击的 Stale 检测) 并创建一个新的 Pause Gate。然后启动 一个后台任务,作为异步流执行优化器。初始样本大小由 min(8, budget / 4 + 1) 得出 —— 即在 Budget ≥ 28 时 典型为 8 个拉丁超立方样本,在小预算下更少。Trial 更新 增量接收并附加到列表。Stale Run 保护:如果期间第二次 Start 单击重设 Run ID,旧 Run 的更新被丢弃。

Primary Action 样式用于突出的按钮外观。

W31按钮"Pause"

位置

左工具栏,在 Running 状态。

技术细节

激活 Pause Gate 并 切换到 Paused 状态。实际效果:Runner 在 50 ms 轮询循环 中等待,然后才评估下一个 Objective 函数。这意味着正在 运行的 Trial 完成 (它是合成的且仅耗时微秒),但不会启动 下一个 Trial。一旦 Resume 运行,它从中断处继续。

W32按钮"Stop"

位置

左工具栏,在 Running 和 Paused 状态。

技术细节

取消 Runner 任务, 清空引用,解除 Pause Gate (如果仍 paused),并切换到 Finished 状态 (如果存在 Trial) 或 Idle 状态 (如果没有)。 已计算的 Trial 在列表中保留可见 —— Stop 不删除它们。 破坏性按钮角色让按钮显示为红色,因为它中断运行。

W33按钮"Resume"

位置

左工具栏,在 Paused 状态。

技术细节

解除 Pause Gate 并 切换回 Running 状态。Runner 任务已经在运行 (它在轮询 循环中等待);一旦循环注意到 Pause 被解除,它继续并 启动下一个 Trial。

W34按钮"Save Best Config"

位置

右工具栏,始终可见 (但无 bestTrial 时禁用)。

技术细节

打开默认文件名为 bayesopt-best.json 的保存对话框,限于 JSON。确认后 构建 Payload 字典:预设名、Trial Index、值 (Objective Score)、Parameters (解码的参数名 → 值的字典)。解码将 归一化的搜索空间坐标 [0,1]^d 投影回原始值范围 (按 log-uniform/linear/integer 比例)。JSON 输出 pretty-printed 且键排序。写错误 (在当前演示版本中) 静默忽略 —— 无 错误 UI,因为这是演示路径。

按钮在没有 Trial 运行过时保持灰显。

W35选择器"Search Space"预设

位置

左侧栏,上方。

技术细节

带四个预设选项的菜单 选择器:- "RadianceKit defaults (6-dim)" —— 含所有 Q7 超参数的完整标准搜索空间。- "Mip subset (2-dim)" —— 仅 mipSmoothing3DScale [0.05, 0.5] log-uniform 和 mipFilter2DVariance [0.1, 0.6] linear。当您要为场景类 调优 Mip-Splatting 时有用。- "densify-until + ssim-weight + grad-thresh" —— 三个 Densify 相关参数 (densifyGradThreshold log-uniform、ssimWeight linear、densifyUntilIter integer)。 - "Bowl demo (1-dim)" —— "BayesOpt 这样工作"演示的教学 性单参数搜索空间。

运行活动时不能切换搜索空间 (会混乱优化器)。

W36滑块"Trial Budget"

位置

左侧栏,Search Space 选择器下方。

技术细节

从 10 到 200 的滑块, 步进 5。默认 40。意味着:BayesOpt 最多可做 N 次试验。 其中前若干次是初始样本 (拉丁超立方),其余是真正的 BayesOpt 试验。实用经验法则:具有 d 维度的搜索空间需要 约 10d 到 20d 次试验以获得好的最优。在 6 维默认 中即 60–120,在 2 维 Mip 子集中 20–40,在 1 维 Bowl 演示中 10–20。

运行期间滑块禁用。

W37滑块"Random Seed"

位置

左侧栏,Budget 滑块下方。

技术细节

从 1 到 100 的滑块, 步进 1。默认 42。种子被传递给初始拉丁超立方样本以及 演示 Objective 的噪声组件。可重复性:相同种子 + 相同 搜索空间 + 相同预算产生完全相同的试验序列。对"如果 同事们重建演示,他们能否获得相同运行?"有用。运行期间 禁用。

W38Chart (Convergence)

位置

窗口中间列。

技术细节

带两层的 Swift Charts 图表:1. 每次试验"迄今最佳值"的线 —— Accent 颜色的 单调递增或保持线。2. 每次试验一个点,带单独 Objective 值,按阶段着色。Symbol 大小 40。三个阶段标签:"init" (灰色)、"bo" (蓝色)、"restart" (橙色)。

一个小图例在左上方显示阶段颜色。如果 Trial 列表为空 (首次启动前),改为显示带 Chart 图标和提示"Press Start to begin a BayesOpt run." 的空状态显示。

W39Table (Trial Log)

位置

窗口右列。

技术细节

含 lazy 堆叠 Trial 行的滚动区。每行一个水平栈:Trial 编号 (3 位 monospaced, 左)、值 (monospaced、右对齐、70 pt 宽)、阶段标签 (Capsule, 25% Opacity 阶段颜色填充),可选黄色星星 (如果该试验 为当前最佳)。自动滚动机制在新 Trial 到达时自动跳到末尾 —— 使您能在屏幕底部跟读实时走势,而无需自己滚动。

主窗口:Loss 走势和 Gaussian Count (I39–I41,交叉引用)

主窗口检查器中的三个显示值得单独解释,因为它们在训练运行 时持续可见,并且关于走势何时看起来健康有重要经验法则。 显示在检查器中的"Loss Chart"部分 (见第 2 章 —— 检查器), 并补充上面辅助窗口中的 Holdout 分析。

何时 Loss 曲线健康? 健康的 Loss 曲线显示三个阶段: (1) Warmup —— 前 200–500 次迭代 Loss 从高 (L1+SSIM 组合视场景典型 0.15–0.25) 陡降到约一半。如果 该阶段中 Loss 不下降,通常输入错误 (图像损坏、SfM 位姿 差、初始 Gaussian 数太少)。(2) Densification —— 在 ~500 与 densifyUntilIteration (Classic 15K,MCMC 到 20K 或 25K) 之间,Loss 继续下降,当 Densify 操作插入新 Gaussians 且 Optimizer 利用它们时常带小跳跃。Gaussian Count 在该阶段增长。(3) Refinement —— 之后 Loss 进入 逐渐平缓的尾。典型最终值:Tanks-&-Temples Truck 用 P4 Quality 落在 L1 ≈ 0.023,Horse 用 Full Classic V546 在 L1 ≈ 0.0230,户外 Mip-NeRF360 场景往往更差 (0.04–0.07)。

平台意味着什么? 平台 (Loss 曲线在数千次迭代中 水平延伸) 有两种解读:(a) 模型已收敛,继续训练不带来 什么 —— 这是好情况。(b) 模型卡住 (局部最小、糟糕的梯度 信息、缓冲区限制的 Cap) —— 坏情况。两者在图中看起来相同。 区分:查看 Gaussian Count。如果它也平稳 并且 接近 MCMC Cap (例如 .fullMCMC 上 150K 中 150K),您已达到极限 —— 要么提高 Cap,要么接受平台。如果 Gaussian Count 仍 增长但 Loss 不下降,则卡住了。

何时中止 vs 继续训练? 经验法则:10K 迭代无 Min-Loss 改进 → 中止,进一步迭代浪费。在此之前:您可通过 Cmd+T (Training 菜单 → Continue Training → +5K iterations) 再附加一个延长,如果您看到边际改进。注意:在 MCMC 中 平台往往是真的 —— Cap 是自然边界。

Gaussian Count 平台 是"完成"信号。 它 仅意味着 MCMC 达到了 Cap 或 Classic Densification 已用尽。 真正的"完成"问题仅由 Holdout 分析回答 —— 在独立测试集 上的 PSNR/SSIM/LPIPS,通过 Holdout 窗口 (W23–W29) 或 –benchmark 标志评估。

PSNR/Holdout 是真理,Loss 仅代理。 Loss 是相对 指标:它在您的模型适应训练视图时下降。但低 Loss 并不 自动表示好模型 —— 如果模型记住了训练图像 (过拟合), Loss 会小,但在未见视图 (Holdout) 上的 PSNR 会差。因此: 对最终质量评估始终看 Holdout 指标,而不是仅看最终 Loss。

经验法则盒

- User Guide 和 Keyboard Shortcuts 是静态帮助 —— 对关键词 问题快速,深入则使用此手册。 - 当磁盘剩余空间低于 10% 时打开 Manage Storage。Logs 和 Imports 暂存通常是罪魁。 - Pareto Dashboard 在至少三或四个训练报告之后才有意义。 X 轴 = 成本 (Time / Gs),Y 轴 = 质量 (PSNR / SSIM)。 Pareto Front 显示高效组合。 - 在向其他人发布 PSNR 基准之前使用 Holdout Analysis —— 确保您的测试集真正具有代表性。 - BayesOpt 控制台主要是搜索空间定义的学习和检查工具。 对真实训练驱动的超参数调优使用离线 CLI 工作流。 - Loss 平台和 Gaussian Count 平台需分别解读。Cap 限制 不是"完成"信号。真正质量仅由 Holdout PSNR 测量。 - 10K 迭代无 Min-Loss 改进 → 停止训练。