用户指南

第 2 章 — 检查器 (Expert View)

空的 Expert Mode — 左侧 Project Navigator (Images 0、Cameras、Log)、中间空视口、右侧检查器含 Presets/Training Configuration/Enhancements/Training Metrics 各部分
空的 Expert Mode — 左侧 Project Navigator (Images 0、Cameras、Log)、 中间空视口、右侧检查器含 Presets/Training Configuration/Enhancements/Training Metrics 各部分

导入前的空检查器: 左侧栏显示 Images 计数 0,并提示 "Drop images here / or tap + to import"。右侧检查器完全可用, 但预设仅为信息显示 (无活动训练)。默认预设"Preview" (5K iters) 处于选中状态。Camera Alignment 为 Apple Photogrammetry、 Densification 为 Classic、SSIM Weight 0.20、Render Scale 50 %。 Training Metrics ("Start training to see live metrics") 和 Loss History ("Loss curve will appear during training") 显示 空状态。

加载 60 张花束图像后的检查器 — 图像侧栏显示前几个文件名 frame_0001.jpg 等,标题栏显示 60 images ready
加载 60 张花束图像后的检查器 — 图像侧栏显示前几个文件名 frame_0001.jpg 等,标题栏显示"60 images ready"

导入后的检查器: 标题状态为"60 images ready"。 图像侧栏列出全部 60 个导入的帧 (frame_0001.jpgframe_0945.jpg,作为 960 张花束数据集每第 16 帧的子集, 用于快速迭代)。自动渲染比例逻辑检查图像分辨率 (1536×2048 = 3.1 MP) 并相应调整 Render Scale。左下角的 绿色 Play 按钮现已激活,可用活动预设启动训练。

训练中的检查器 — 实时视口显示花束重建,底部指标栏 (Loss / LR / Gaussian-Count / Iterations),如参数被修改,Preset 卡片 Preview 会带 Modified 徽章
训练中的检查器 — 实时视口显示花束重建,底部指标栏 (Loss / LR / Gaussian-Count / Iterations),如参数被修改, Preset 卡片"Preview"会带"Modified"徽章

训练过程中的检查器: 标题栏显示全局进度 "RadianceKit — Training NN %"。视口实时渲染进行中的 Gaussian 重建 (每 50 次迭代更新一次 —— Live Preview 间隔 可在 Settings → General → Training → Live Preview 中设置)。 视口下方的指标栏:当前 Loss、Learning Rate、Gaussian Count 和 Iterations 计数 (例如 Preview 预设的 1,600/5,000)。一旦 任何参数偏离内置默认值,检查器中的预设卡片"Preview"会 带上"Modified"徽章。侧栏"Log"收集 SfM 和训练阶段事件。

训练完成后的检查器 — 视口显示已完成的花束重建 (5K 迭代后 2,991 Gaussians,用时 13s),标题栏 Training Complete — 2,991 Gaussians
训练完成后的检查器 — 视口显示已完成的花束重建 (5K 迭代后 2,991 Gaussians,用时 13s),标题栏"Training Complete — 2,991 Gaussians"

训练后的检查器: 标题栏显示最终 Gaussian 数 (此处 2 991 —— 非常紧凑,因为这个浅色背景上的合成 Blender 花束 场景几何简单)。视口显示完成的点云 —— 轨道拖动导航激活 (围绕场景中心旋转)。Training Metrics 部分现已填充最终值, Loss History 图表显示整个 5 000 次迭代的走势。底部的导出 部分现已激活 (所有格式按钮启用)。

检查器是 Expert Mode (⌘2) 中的右侧栏。它将所有训练相关的 参数集中在五个可折叠部分:Presets、训练配置、Enhancements、 指标和损失图。每个部分可通过单击标题折叠,顺序可通过拖放 重新排列 (InspectorView.swift:81-97)。默认情况下,所有 部分均可见,应用状态在重启间保存折叠和排序偏好。

检查器中的一系列控件以几乎相同的形式出现在设置中 (第 3 章) —— 通常是 SfM 后端、Sky Masking 和类似默认值。这种分离是 有意的:设置提供新建项目的应用全局模板,检查器为当前打开 的项目覆盖这些值。一旦您熟悉了一侧的操作逻辑,就可以盲操 另一侧。

Expert Mode 中的左栏 —— Project Navigator —— 不属于检查器, 但是它的直接邻居。在那里可以通过单击选择导入的图像、用空格 键以 Quick Look 查看,并通过减号按钮或删除键删除 (用 Cmd-Z 撤销)。检查器跟随当前侧栏的选择,显示与之相关的详细信息, 但五个主要部分始终可见。

Presets 部分 (I1–I11)

Presets 部分是应用已测试配置的最快方式。内置预设 (Classic、 MCMC、Scene-Class) 提供来自 560+ 已记录实验的可复现起点; 自定义预设可保存、导出、导入和共享。列表按类别 (Classic、 MCMC、SceneClass、Custom) 分组,可同时展开多个类别。通过 右键菜单 (在某行上点击鼠标右键) 可以访问导出、复制以及 —— 对自定义预设 —— 删除。

I1Save…-按钮

位置

检查器 → Presets 部分 → Save…-按钮 (底部操作栏)。

技术细节

打开一个带文本框和 Save/Cancel 按钮的弹出层。当前的 TrainingConfig 状态以新自定义预设的形式 持久化 (JSON 编码,跨应用保存)。Save 操作复制所有 81 个训练 参数加当前的 Densification 策略。无论从哪个内置预设派生, 该预设都自动进入 Custom 类别。空名称和纯空白输入会被丢弃。 已存在的名称不会被拒绝 —— 每个预设拥有独立的内部 ID,重复 名称在技术上允许,但实际上令人混淆。

I2Preset Name 文本框

位置

Save 弹出层 → 文本框"Preset Name"。

技术细节

带圆角边框的简单宽文本框。 在单击 Save 按钮时,该值用作 Preset 名称。UI 中无长度限制, 但保存的名称必须可 JSON 编码且能在 UI 列表中显示 —— Emoji 和变音字符可工作。打开弹出层时,内容自动重置为空字符串。 在 Trim 后字段为空时,Save 按钮保持禁用。无自动建议,也不 预填当前活动预设的名称。

I3Cancel 按钮 (Save 对话框)

位置

Save 弹出层 → Cancel 按钮 (左侧)。

技术细节

关闭弹出层而不保存。丢弃文本框 内容 —— 下次打开时通过 Save… 按钮逻辑 (I1) 再次重置为空。 标准按钮样式,无确认对话框,无热键。当前 TrainingConfig 保持不变,因为根本没有执行 Save 路径。

I4Save 按钮 (Save 对话框)

位置

Save 弹出层 → Save 按钮 (右侧,突出样式)。

技术细节

触发实际的持久化。再次验证 非空名称 (防御性检查),然后将当前 TrainingConfig 作为 JSON 写入应用存储。随后关闭弹出层。蓝色突出显示,字段为空时 灰显。如果保存失败 (例如应用存储已满 —— 非常不可能), 当前没有可见的错误对话框;那个预设在下次应用启动时只是 不出现。

I5Export…-按钮

位置

检查器 → Presets 部分 → 操作栏 → Export…-按钮。

技术细节

将当前选中的预设导出为 .radiancepreset 文件 (内部 JSON)。无选中预设时禁用。 单击时,应用打开一个带默认文件名 (预设名 + .radiancepreset 扩展名) 的保存对话框。保存的格式包含 完整的 TrainingConfig 加元数据 (名称、类别、ID、Built-in 标志)。在 Finder 中双击会打开应用 —— 但 不会 自动导入;用户必须使用 Import 按钮 (I6)。

I6Import…-按钮

位置

检查器 → Presets 部分 → 操作栏 → Import…-按钮。

技术细节

打开一个仅允许 .radiancepreset 文件的文件对话框 (多选禁用)。选择后加载 JSON 文件、验证 并插入 Custom 类别 —— 使用新的内部 ID 以避免与内置冲突。 导入自动将类别设置为 Custom,即使导出的预设最初是内置。 损坏或与较旧 schema 版本不兼容的文件被静默拒绝,无错误 对话框 (但控制台日志提供说明)。

I7Preset 行 (单击激活)

位置

检查器 → Presets 部分 → 各类别中的每个预设行。

技术细节

单击预设行会用预设中的值替换 TrainingConfig 的所有字段,记住活动预设的 ID,并重置 Modified 状态。行前的活动对勾仅在预设被选中且未修改时 出现。一旦 TrainingConfig 中的值被更改 (其他检查器部分 中的滑块、Stepper、开关),名称后会出现一个橙色的 "Modified"徽章。内置预设无法被覆盖 —— 修改时必须通过 Save 按钮 (I1) 创建自己的副本。

I8上下文菜单"Export…"

位置

右键单击任意预设行 → 第一项 "Export…"。

技术细节

与 I5 (Export… 按钮) 完全相同 的功能,但更便捷地可达 —— 无需先选中预设。直接导出在 行上点击的预设。对所有预设类别一致 (内置或 Custom), 无限制。导出包含 Built-in 标志和原始类别,但 Re-Import 时,如 I6 所述,类别被映射到 Custom。

I9上下文菜单"Duplicate"

位置

右键单击任意预设行 → 第二项 "Duplicate"。

技术细节

将预设克隆到 Custom 类别。 生成一个新的内部 ID,在名称后追加"Copy",并保存副本。 对内置预设也有效 —— 副本可编辑。原始预设保持不变。 TrainingConfig 逐值复制 (JSON Roundtrip),因此原始和副本 之间没有引用绑定。

I10上下文菜单"Delete"

位置

右键单击自定义预设行 → 最后一项 "Delete" (红色,破坏性)。

技术细节

仅对自定义预设可见。内置无法 删除。该条目标记为破坏性,在上下文菜单中显示为红色, 位于分隔符之后,以防误点。没有 确认对话框 —— 单击立即删除预设。已删除的预设无法恢复 (Cmd-Z 在 此处不工作 —— 当前版本仅对图像列表支持 Undo,不对预设 操作支持)。如果删除的预设当前是活动的,TrainingConfig 保持不变,仅活动预设选择被清空。

I11类别标题 (展开/折叠)

位置

检查器 → Presets 部分 → 每个类别 标题 (Classic、MCMC、SceneClass、Custom)。

技术细节

每个类别的折叠状态默认不同: Classic 初始 展开,MCMC、SceneClass 和 Custom 初始 折叠。状态不持久化 —— 应用重启时所有类别 都回到默认状态。Chevron 箭头带动画旋转。标题右侧的数字 显示该类别中的预设数量。单击命中区域涵盖整个标题区域。

训练配置部分 (I12–I22)

仅训练配置部分的截图 — Camera Alignment (Apple Photogrammetry 活动,Native (Beta) 不活动)、Densification (Classic 活动)、Max Iterations 5,000 / Densify Until 3,500 带 Link 图标、SSIM Weight 滑块 0.20、Render Scale 滑块 100 % (1,536×2,048 = 3.1 MP)
仅训练配置部分的截图 — Camera Alignment (Apple Photogrammetry 活动,Native (Beta) 不活动)、Densification (Classic 活动)、Max Iterations 5,000 / Densify Until 3,500 带 Link 图标、SSIM Weight 滑块 0.20、Render Scale 滑块 100 % (1,536×2,048 = 3.1 MP)

这里集中了核心调节项:哪个 SfM 后端应该计算、Densification 如何工作、多少次迭代、SSIM 权重多大。在 MCMC 策略下会 出现两个额外的开关 ("MCMC Quality"和"Auto-scale by scene"), 在 Classic 模式中被隐藏。在 Native SfM 后端下会出现 FOV 覆盖字段,仅在没有 EXIF 焦距的视频帧中使用。

I12Camera Alignment 选择器

位置

检查器 → 训练配置 → Camera Alignment (上方的分段选择器)。

技术细节

带两个选项的分段选择器: Apple Photogrammetry 和 Native (Beta)。选择决定下次相机 重建使用的 SfM 后端。同时影响其他检查器元素的可见性: Native 额外显示 FOV 覆盖 (I13),仅在没有 EXIF 的视频帧 中使用。提示:对于非常大型户外拍摄,您可以通过 Workspace 导入加载外部工具 (Metashape 或 COLMAP) 的结果 —— 见第 1 章 (M5) 和第 9 章 (Q3、Q6)。

I13FOV Override 字段 (Native SfM)

位置

检查器 → 训练配置 → FOV Override (仅在 Camera Alignment = Native 时可见)。

技术细节

数值文本框 (范围 0-170°),默认 0 = 从 EXIF 或启发式自动确定。手动输入在输入图像从视频中 提取而无焦距元数据时必要。典型值:iPhone Wide ≈ 73°、 DJI Mavic Wide-Crop ≈ 70°、全画幅传感器无人机 ≈ 84°。 值被截断到 [0, 170] —— 范围外的值直接被推回。仅影响 原生 SfM 流水线 (Q4/Q5);Apple Photogrammetry 完全忽略 该值。

I15Densification 选择器

位置

检查器 → 训练配置 → Densification (分段选择器,始终可见)。

技术细节

在两种 Densification 策略 之间切换:Classic (原始 3DGS 方法,含 Clone/Split/Prune 和梯度阈值) 和 MCMC (随机梯度朗之万动力学加 Relocation, NeurIPS 2024)。从 Classic 切换到 MCMC 时,应用自动将 MCMC 特有字段设为已验证的默认值 (Reg-Weights = 0、 MCMC-Cap-Multiplier 3.0、Sample-/Noise-Schedule)。没有 此自动初始化,使用旧预设的会话会遭遇 1.4.4-MCMC-Collapse bug (460K→5 Gaussians,Watchdog 杀死)。选择器还决定哪些 检查器元素可见 —— 在 MCMC 下出现 I16/I17。详细字段作用 见第 6 章,T11–T16 (Classic) 和 T61–T73 (MCMC)。

I16MCMC Quality 开关

位置

检查器 → 训练配置 → MCMC Quality (仅在 Densification = MCMC 时)。

技术细节

将 Gradient-Accumulation 切换 为 2 步 (活动) 或 1 步 (不活动)。在执行 Optimizer 步骤前, 累积来自两个连续相机视角的梯度。经验上 (Session 33、 V544a),将最终 L1 误差降低约 6 % (Quality 时 0.0246, 不启用时 0.0261,基于 Horse-Full-MCMC 上 3 次试验平均)。 代价:训练时间翻倍。对非常长的训练 (200K 迭代),增加 10+ 分钟等待 —— 因此只在最后几个百分点的质量真正必要时 才值得。仅影响训练,不影响导出格式或视口显示。

I17Auto-scale by scene 开关

位置

检查器 → 训练配置 → Auto-scale by scene (仅在 MCMC 下)。

技术细节

活动时,有效的 Max-Gaussians 上限按 SfM 初始点数 × MCMC-Cap-Multiplier (默认 3.0) 缩放。示例:SfM 提供 250K 初始点,基础 Cap = 150K, Multiplier 3.0 → 有效上限 = max(150K, 750K) = 750K。 未激活时仅严格使用基础。在 v1.4.5 中引入,因为带超过 1000 帧的大型户外拍摄,以及相应高的 SfM 点密度,在 150K Cap 默认下 Densification 被饿死 —— 多余的点保留,新点 不能产生。在 Custom 预设中默认关闭,在 MCMC 内置中默认 开启。仅在训练时生效,不影响导出。

I18Max Iterations Stepper

位置

检查器 → 训练配置 → GroupBox → Max Iterations。

技术细节

范围 1 000–100 000 的 Stepper, 步进 1 000。决定 Optimizer 迭代的总数。与训练时间线性 相关 (减半 = 约 50 % 时间)。经验上的甜点:20K (Classic Balanced,L1≈0.028)、40K (Classic Quality,L1≈0.023)、 200K (MCMC Full,L1≈0.0246)。在 Classic 中,40K 以上 平均带来的改进很小 —— 收益递减。修改时,如果 Link 函数 (I19) 处于活动,Densify Until 按比例随动 (默认比例 0.5, 即 Densify-Until = Max/2)。

I19Link/Unlink 按钮 (Densify ↔ Iterations)

位置

检查器 → 训练配置 → GroupBox → Max Iterations 与 Densify Until 之间的小 Link 按钮。

技术细节

切换按钮,固定 Densify Until 与 Max Iterations 的比例。活动时 (Link 图标突出),每次 更改 Max Iterations 时,Densify Until 按比例随动。Unlink 时 (Link-Plus 图标),两值保持独立。默认 linked,因为这 反映了典型相关性 —— 您把训练拉到双倍迭代时,通常也希望 Densification 按比例延长。比例在设置 Link 按钮时从当前值 计算;典型比例为 0.5 (Densify-Until = 迭代数的一半)。

I20Densify Until Stepper

位置

检查器 → 训练配置 → GroupBox → Densify Until。

技术细节

范围 500–50 000 的 Stepper, 步进 500。决定从哪个迭代索引起,不再通过 Clone/Split (Classic) 或 Relocation (MCMC) 添加新 Gaussians。达到后, 仅细化位置和颜色。更高值 = 更多 Gaussians = 更大文件, 更长的每次迭代时间 (+30-60% GPU 时间/步)。典型值:15K (对 30K Max-Iter)、20K (对 40K)、100K (对 200K MCMC)。 Link (I19) 活动时自动缩放。在 Classic 与 MCMC 中作用 不同:Classic 完全停止增长,MCMC 停止 Relocation 逻辑, 但 Sample-/Noise-Adaption 继续。

I21SSIM Weight 滑块

位置

检查器 → 训练配置 → GroupBox → SSIM Weight。

技术细节

范围 0.0–1.0 步进 0.05 的滑块, 显示为"0.20"。混合 L1-Loss (0.0) 与 SSIM-Loss (1.0)。 L1 收紧每像素亮度,SSIM 收紧结构相似性 (边缘、局部统计)。 默认 0.2 来自原始 3DGS 论文 (Kerbl 2023),在大量会话中 反向工程出作为稳健折中。更高值 (0.5+) 偏向细节保留, 但可能忽略局部亮度错误。更低值 (< 0.1) 在锐边处导致 细节丢失。SSIM 在着色器中使用 11×11 高斯窗口计算。 性能:在 0.0 (仅 L1) 下训练快约 8-12 %,因为着色器中 跳过 SSIM 计算。

I22Render Scale 滑块

位置

检查器 → 训练配置 → GroupBox → Render Scale。

技术细节

范围 0.25–1.0 步进 0.25 的滑块, 显示为"100%"。相对于源图像大小缩放训练渲染分辨率。 对性能影响最大:50% 减少 GPU 时间约 75% (因为像素少 4 倍), 25% 约 94%。梯度阈值自动随之缩放。滑块下方出现实时 分辨率显示,单位 MP (例如"2304×1296 (3.0 MP)")。如果 当前值偏离建议值,以橙色字体显示"— recommended: 50%"。 建议针对约 3 MP 的有效分辨率 —— Apple Silicon GPU 最 高效处理的区间。例如 4K 源图像自动建议 25%,FullHD 图像 100%。更改还会触发缓冲区重新分配。

Enhancements 部分 (I26–I29)

仅 Enhancements 部分的截图 — 四行:Post-Training Compactification (开关开)、MetalFX Spatial Upscaling (开关关)、MPS Lanczos Scaling (开关关)、Perceptual Loss (滑块在 Off)。每行带副标题说明功能
仅 Enhancements 部分的截图 — 四行:Post-Training Compactification (开关开)、MetalFX Spatial Upscaling (开关关)、 MPS Lanczos Scaling (开关关)、Perceptual Loss (滑块在"Off")。 每行带副标题说明功能

Enhancements 部分将四个能在不更改核心训练循环的情况下 改善图像质量的特性分组。前三个 (I26-I28) 是 训练 后视口 阶段:Compactification 在训练结束后 清理,MetalFX 和 MPS Lanczos 是纯视口渲染器,不影响正在 进行的训练。Perceptual Loss (I29) 尽管位于本部分,却是 训练组件 —— 它在训练期间作为额外 Loss 项激活,因此通过 分隔符与视口开关分开。

I26Post-Training Compactification 开关

位置

检查器 → Enhancements → Post-Training Compactification。

技术细节

激活 V443 后处理:训练迭代 结束后,删除 Opacity 低于 0.01 (1% 可见性) 的 Gaussians。 经验上这将文件大小减少约 55-58%,无可见质量损失 —— 因为这些 Gaussians 在视觉上反正不贡献。Compactification 作为 GPU Compact Pass 运行,根据 Gaussian 计数耗时几分之 一秒到几秒。不影响训练性能。如果此开关关闭,不可见 Gaussians 也被导出 —— 仅在您想将该格式用于另一个训练 阶段 (Continue Training) 时相关,否则浪费存储。

I27MetalFX Spatial Upscaling 开关

位置

检查器 → Enhancements → MetalFX Spatial Upscaling。

技术细节

在视口渲染器中激活 Apple MetalFX Spatial Upscaler。如果训练分辨率 (通过 I22 Render Scale) 低于视口大小,MetalFX 基于 ML 将渲染帧放大到显示 大小。所有缩放选项中最锐利的结果,因为 ML 放大模型针对 锐边优化。切换时渲染器流水线实时重新配置 —— 立即可见, 无需重启。优先级高于 MPS Lanczos (I28):两者都活动时, MetalFX 胜出。在 M3 GPU 上视口性能开销约 1-2ms 每帧。 影响实时视口,不影响渲染的导出 (Orbit Video、截图) —— 那些以完整源分辨率渲染。

I28MPS Lanczos Scaling 开关

位置

检查器 → Enhancements → MPS Lanczos Scaling。

技术细节

在视口中激活 Apple Metal Performance Shaders 加 Lanczos 重采样作为放大器。Lanczos 是带 8-Tap Sinc 滤波器的经典重采样 —— 比 Bilinear 锐利, 无 ML 的经典算法。切换时渲染器流水线实时重新配置。若 MetalFX (I27) 也活动则被忽略。最小开销 (<0.5ms 每帧), 但质量低于 MetalFX。应用场景:在 MetalFX 产生伪影的场景 中作为回退 (例如强烈线条结构,ML 放大器偶尔"抹平")。 和 I27 一样仅影响实时视口,不影响导出。

I29Perceptual Loss 滑块

位置

检查器 → Enhancements → Perceptual Loss。

技术细节

范围 0.0–0.2 步进 0.01 的滑块, 0.0 显示为"Off",否则为"0.05"等。激活一个额外的 Loss 项,比较渲染的多尺度高斯模糊与 Ground-Truth 图像 (3 个 模糊尺度)。捕获 L1+SSIM 单独无法识别的结构差异。V460 实现。经验上 0.05-0.1 的值让会话 L1 提升几个百分点, 但花费 ~5% 训练时间 (通过模糊核的额外前向传递)。超过 0.15 时训练变得不稳定,L1 再次恶化 (Loss 项主导优化)。 作用 期间 训练,不在后处理 —— 尽管位于 "Enhancements"部分,因此并非纯粹的事后增强。

Metrics 部分 (I30–I38)

仅花束完成训练 (5K 迭代,最终 2 991 Gaussians) 后 Training Metrics 部分的截图 — 训练指标表格 (Iteration、Loss、SSIM Loss、Combined Loss、Gaussian Count、Learning Rate、Elapsed、ETA)
仅花束完成训练 (5K 迭代,最终 2 991 Gaussians) 后 Training Metrics 部分的截图 — 训练指标表格 (Iteration、Loss、SSIM Loss、 Combined Loss、Gaussian Count、Learning Rate、Elapsed、ETA)

训练运行时,Metrics 部分显示来自训练循环的九个实时值。 训练启动前该部分为空 ("Start training to see live metrics")。 所有值每 ~30 次迭代更新一次 ( 流的更新频率)。该部分是只读的 —— 没有任何元素可单击或 更改。如需深入分析,请参考 ~/Documents/RadianceKit/Logs/ 下的 JSONL 训练日志 (脚本 python3 scripts/analyze_logs.py best 5)。

I30Iteration

位置

检查器 → Metrics → Iteration。只读。

技术细节

格式"4523 / 40000"显示 —— 当前迭代/总计划迭代。与训练循环同步,后者每 ~30 次 迭代推送值。第二个数字对应启动时的 Max-Iterations 值; 即使用户之后调整 Stepper 也不再变化 —— 当前运行使用自己 的快照副本。如果应用通过 Training 菜单追加迭代 (Continue Training +5K/+10K/+20K),分母增加。

I31Loss

位置

检查器 → Metrics → Loss。只读。

技术细节

六位小数浮点值 (例如 "0.024385")。衡量组合的 L1+SSIM-Loss (混合由 I21 SSIM Weight 控制) 加可选 Perceptual Loss (I29) 和其他正则化项。 尺度不是绝对的,而是场景相关 —— 多数比较需要相同数据集。 良好配置的典型最终值:- Classic Quality 40K iters: 0.022–0.025 (Horse、Truck、Garden) - MCMC Full 200K iters: 0.024–0.028 - 户外无人机 30K:0.030–0.060 (几何原因更差) - 室内公寓:0.018–0.025

5K 迭代后超过 0.10 的值表明 SfM 问题 (相机位姿不佳) —— 中止并重新计算 SfM。

I32Learning Rate

位置

检查器 → Metrics → Learning Rate。只读。

技术细节

科学记数法显示 (例如 "1.60e-04")。位置参数的当前学习率 (3DGS 有六个独立 LR: 位置、SH-DC、SH-Rest、Opacity、Scale、Rotation —— 这里 显示位置 LR 作为代表)。默认初始 1.6e-4,通过指数衰减 降至训练末的 ~1.6e-6。衰减可通过训练配置中的 LR-Schedule 字段调整 (第 6 章中的 T 字段)。如果 LR 异常保持高 (例如 10K 迭代后仍为 1e-3 或更高),可能表明配置加载错误。

I33SH Degree

位置

检查器 → Metrics → SH Degree。只读。

技术细节

整数 0-3。颜色表示的球谐 阶数。从 0 (仅 DC 分量,即每个 Gaussian 方向无关的颜色, 也就是仅 RGB 常量) 开始,在训练过程中逐步升至 3。标准 计划在迭代 1000/2000/3000 时各提升 1。SH-3 对应每个 Gaussian 48 个颜色系数 (3 RGB 通道 × 16 SH 基函数)。 更高 SH 阶 = 更多方向相关反射 (光滑表面在不同视角下正确 不同),但也更多内存和较慢训练。

I34Gaussians

位置

检查器 → Metrics → Gaussians。只读。

技术细节

模型中 Gaussians 的当前 数量,以语言环境分隔符格式化 (例如"524.318")。增长: - Classic:从 SfM 初始点 (典型 50K-300K) 开始,通过 Clone/Split 增长直到 Densify Until 之前不久,然后静态直到 训练结束 (减去 Pruning) - MCMC:Sample 点添加到 MCMC Cap,然后仅 Relocation

健康的最终值:- Classic Quality:400K-700K (Horse 524K、 Garden 800K) - MCMC Full:精确在 Cap 上 (默认 150K, Auto-Scale Multiplier × SfM-Count 视场景 500K-1.5M)

在 MCMC 中,数字落到 < 60% Cap 是异常 (Collapse 指示器, 表明正则化过于激进)。

I35GPU Memory

位置

检查器 → Metrics → GPU Memory。只读。

技术细节

将 Gaussian 缓冲区内存 消耗估算为 Gaussian-Count × 616 字节 (以内存样式格式化)。 616 字节是充分装备的 Gaussian (位置、缩放、旋转、Opacity、 SH 系数 Grad 3、梯度累加器) 的经验大小。该显示 包含渲染器开销 (Tile 缓冲、Sort 缓冲、Backward 缓冲) —— 实际 GPU 内存需求通常是该值的 2-3×。500K Gaussians 时: 显示约 290 MB,实际约 700 MB。1.5M Gaussians 时:显示 约 880 MB,实际约 2.5 GB。在 64+ GB Unified Memory 的 M3 Max 上不关键,在 18 GB 的 M3 Pro 上已是极限。

I36Speed

位置

检查器 → Metrics → Speed。只读。

技术细节

每秒迭代数,带一位小数 ("24.3 it/s")。由训练器作为最近 ~100 次迭代的滑动平均 计算。典型值:- Quick 预设 (1K iters):80-120 it/s (短,无 steady-state) - Classic 20K @ 1.0 Render Scale (Truck 场景,M3 Max):25-35 it/s - Classic 20K @ 0.5 Render Scale:80-120 it/s - MCMC 200K @ 0.5 Render Scale: 25-50 it/s (因 Relocation 较慢) - 1M+ Gaussians 完整 分辨率下:< 10 it/s

训练过程中速度下降是正常的 —— 更多 Gaussians = 每次 迭代更多计算。突然下降 (例如从 30 → 5 it/s) 表明 GPU 热节流或竞争性应用。

I37Elapsed

位置

检查器 → Metrics → Elapsed。只读。

技术细节

已经过的时间,作为"4:23" (m:ss) 或"1:23:45" (h:mm:ss)。1 小时起切换格式。仅测量 纯训练时间,不包括前置阶段 (SfM 计算、图像导入)。 Pause/Resume 时时钟继续走 —— 因此是 wall-clock, 不是 CPU 时间。

I38ETA

位置

检查器 → Metrics → ETA。只读。

技术细节

预计剩余时间,作为"17:42" 或"1:12:35"。计算:(Max Iterations − 当前迭代) / 每秒 迭代。当 Speed 当前为零时显示"–" (开始或暂停时)。 估计 适配训练末典型的减速 —— 特别是 MCMC 和 Classic 在大 Densify-Until 值时,训练倾向于变慢, 因为越来越多的 Gaussians 进入图像。实际上通常保持比 起始 ETA 高 10-20%。

损失图部分 (I39–I41)

训练完成后仅 Loss History 部分的截图 — Current 0.0064、Min 0.0035 (绿色)、蓝色走势从 0.027 (迭代 1) 到 0.0035 (迭代 5K),在迭代约 200 处有特征拐点,下方是橙色 Gaussian Count 图
训练完成后仅 Loss History 部分的截图 — Current 0.0064、 Min 0.0035 (绿色)、蓝色走势从 0.027 (迭代 1) 到 0.0035 (迭代 5K), 在迭代约 200 处有特征拐点,下方是橙色 Gaussian Count 图

损失图部分可视化训练随时间的过程。它由两个图表组成: Loss Curve 图 (大,上,蓝色) 和 Gaussian Count 图 (较小, 下,橙色)。两者在训练期间实时构建,持续到下一次训练启动。 首次训练前该区域为空 ("Loss curve will appear during training")。图表是纯 SwiftUI Path 绘制 (不使用 Swift Charts 框架),以便在 100K+ 点时仍流畅渲染。

I39Current Loss (显示)

位置

检查器 → 损失图 → 左标签区 "Current: 0.0287"。只读。

技术细节

上次 Loss 采样点的浮点 值,格式化为四位小数。与 I31 (Metrics 部分中的 Loss) 相同,只是这里更紧凑格式化。来源是 Loss History —— 每 ~30 次迭代获得一个条目的列表。仅有限值被纳入列表 —— NaN/Infinity (非常罕见,梯度爆炸 bug 情况) 被过滤。

I40Min Loss (显示)

位置

检查器 → 损失图 → 右标签区 "Min: 0.0245" (绿色)。只读。

技术细节

当前训练运行中曾见的所有 Loss 值的最小值。从 Loss History 实时重计算 —— 无单独 持久化。以绿色字体显示,因为"Min"="迄今最佳"。图表 下边缘的绿色虚线在视觉上标记此 Y 位置。在 Continue Training 会话中,最小值跟踪重新开始 —— UI 中旧 History 被新 History 替换 (不附加)。如果当前训练比前次差,Min 显示可能大于前次最终结果。

I41Gaussian Count 图

位置

检查器 → 损失图 → 下方的 第二个图 (橙色)。只读。

技术细节

Gaussian 数量随训练迭代 的折线图。来源:Gaussian-Count History ((Iter, Count) 对的列表,由训练器每 ~30 次迭代填充)。Y 轴在 History 的最小值和最大值之间动态。Classic 策略中曲线通常这样: 持续上升直到 Densify Until,然后平稳 (带小 Pruning 波动)。MCMC:陡升至 Cap,然后水平线 (Relocation 保持 数字恒定)。如果在活动训练下曲线 下降, Densification 过度激进 Pruning —— 错误默认值或已知的 MCMC Collapse bug (v1.4.4 热修主题) 的迹象。

如何读取 Loss 曲线?

Loss 图表是检查器中最重要的诊断工具 —— 没有其他指标 能如此直接显示训练是否有用进展或卡住。典型健康形状是 前 1000-3000 次迭代中的快速下降 (从 ~0.15 到 ~0.05), 然后到训练结束的缓慢均匀下降 (到 0.020-0.030)。曲线 对数化呈现为光滑对角线。

Loss 平台意味着什么? 如果曲线在数千次迭代中 保持平稳,有两种可能解读:(a) 训练"收敛" —— Loss 无法 再显著下降,因为模型已经在给定数据和设置下能达到的水平。 这是期望的;这是"完成"。(b) 训练"卡住" —— Loss 实际 仍可下降,但优化停滞 (局部最小值、学习率太小、 Densification 关闭)。区分:如果 Loss 值在典型良好范围 (室内/物体 0.020-0.030,户外 0.040-0.060) 且曲线自 5K 迭代起平稳,则已收敛。如果值明显高于类似场景 (例如 0.08),则卡住了。

注意 Gaussian 平台 ≠ Loss 平台。 Gaussian 数量 的平台 意味着"训练完成"。它仅意味着 Densification 已停止添加新点 —— 要么因为达到了 (Classic), 要么因为 MCMC Cap 已满。训练之后继续运行,仅细化现有点。 真正的"完成"信号您从 Loss 曲线和 Iteration 显示 (I30) 读取,而不是这里。

中止的经验法则: 如果 Loss 曲线在 5000+ 迭代后 仍在 0.08 以上且几乎不再下降,SfM 重建很可能出错。 中止训练,在第 9 章查看所选 SfM 后端是否适合场景, 必要时切换到 COLMAP/Native,然后重新启动。宁可花 10 分钟 做更好的 SfM,也不要用差的相机对齐进行 2 小时训练。

何时使用检查器?

快速参考:哪个部分 + 哪个控件用于什么典型用例?

常见任务部分控件 ID
加载预设PresetsI7 (单击行)
保存自己的设置PresetsI1 → I2 → I4
与同事共享设置PresetsI5 (导出) 或 I6 (导入)
切换 SfM 后端 (例如因 Apple-PG 不 稳定)训练配置I12 (见第 9 章)
处理无 EXIF 焦距的视频 帧训练配置I13 (FOV Override)
COLMAP 性能:GLOMAP 而非 经典训练配置I14
从 Classic 切换到 MCMC训练配置I15
让训练运行更长训练配置I18 (Max Iter) + I20 (Densify Until) — 通过 I19 耦合
GPU 时间减半训练配置I22 (Render Scale 设为 50%)
训练质量 +6% (MCMC)训练配置I16 (MCMC Quality)
带许多 SfM 点的户外 场景训练配置I17 (Auto-scale by scene)
设置 / 切换 COLMAP 路径训练配置I23 / I24 / I25
让导出文件更小EnhancementsI26 (始终 保持开)
视口锐化无需额外训练时间EnhancementsI27 (MetalFX)
MetalFX 过度平滑 → 替代方案EnhancementsI28 (MPS Lanczos)
精细结构的最后一点细节EnhancementsI29 (Perceptual Loss 0.05-0.1)
监控训练MetricsI30 (进度)、I36 (速度)、 I38 (剩余时间)
早期评估质量MetricsI31 (5K 后 Loss < 0.05 = 好)
疑似 SfM 问题Metrics + Loss 图I31 + I39 (5K 后 Loss > 0.08 → 重做 SfM)
区分收敛与卡住损失图I39 + I40 (读取 Loss 平台)
识别 Densification 问题损失图I41 (Gaussian 曲线下降 → bug)