Gaussian 光度模型与可微拟合
前面各章已经从实际 PNG 得到一般相机和未知珠子三维中心,本章加入真实可学习参数。每个珠子有三个位置、三个颜色强度和一个半径,共七个;十二珠合计八十四个全部参与训练。相机由独立标靶估计后固定,不作为可学习参数。没有预训练模型、外部权重或只训练最终输出的捷径;损失从实际训练图像像素经渲染核反传到每组参数。
位置以米直接参数化,半径用实数 rho 取指数,确保任何有限 rho 对应正值;三个颜色强度用实数向量 a 经 sigmoid,限制在零和一之间。这里颜色不是归一化描述子,后者只用于匹配,不能直接当发光幅值真值。初始化把描述子乘固定零点五五转为初始颜色,再取 logit。半径初始零点零七五米,三维中心在三角化结果上加种子十七的高斯扰动,标准差零点零三五米,作为公开的优化控制。
Gaussian 核对中心与宽度的梯度可以直接求出。先对指数内部求导,再乘核本身:对横中心的导数是核乘像素横差除宽度平方,纵向同理;对宽度的导数是核乘距离平方除宽度立方。离中心很远时核接近零,位置梯度也可能很弱,这解释了差初始化为何可能难收敛。当前位置离观测太远时不应期待“可微”自动等于“容易训练”。
三维位置的影响有两条路径:它改变投影中心,也改变深度从而改变屏幕半径。第二章的投影雅可比给第一条;半径对深度的导数为负焦距乘世界半径除深度平方,给第二条。忽略后者仍可能让中心位置朝某方向更新,却不再是所声明渲染公式的完整梯度。项目用张量运算保留两条路径,并用 float64 中心差分检查位置导数,而非只断言框架“自动算所以正确”。
算例一:宽度梯度与尺度方向
一个珠子离某像素横向两像素、纵向零,屏幕宽度也是两像素,则核值为 exp 负二分之一,约零点六零六五。对横中心的导数为核乘二除四,约零点三零三三;对屏幕宽度导数为核乘四除八,也约零点三零三三。中心朝该像素移动或稍增宽度都会增加此像素强度,但在其他像素处作用不同。单个像素无法可靠区分两种变化,整个光斑及多视角才提供更多约束。
如果三维协方差是 Sigma,局部投影可由雅可比 J 给二维协方差近似 J Sigma J 转置。这是随机小扰动的线性传播:将三维偏移先乘 J,外积取期望就得到该式。各向同性三维 Sigma 为半径平方乘单位阵,仍可能因离轴投影出现二维各向异性。当前项目为可解释性采用简化标量屏幕宽度,它不是这个完整协方差投影的实现,更不是原始3DGS全部参数机制。
训练使用前三张场景图,逐视角每坐标 RGB 平方误差平均,再对视角平均。每次更新处理同一组完整小图,不随机抽像素,因此批次轨迹由固定配置完全确定。Adam 学习率零点零零六,共一百八十次更新,CPU 一个线程。每步先清梯度、渲染训练视角、形成损失、反传、更新,评价图像不进入损失图。保存优化器是记录状态,但本项目没有提供精确断点恢复 CLI。
算例二:背景稀释与真实训练记录
若八十乘九十六图像中只有三百六十个前景像素,前景大约占百分之四点七。假设前景每坐标 MSE 为零点零一,背景完全正确,则全图 MSE 约零点零零零四七,看起来很小却不代表亮斑已对齐。本次实测第一个训练视角初始全图 MSE 为零点零零零五八六三五,前景为零点零一零三五五;最终分别约一点七一九四乘十的负五次方与零点零零零三二九九三,两个口径都保存。
两张留出视角的最终全图 MSE 分别约一点七二九二与一点六七九九乘十的负五次方,对应 PSNR 四十七点六二和四十七点七五分贝。它们没有进入任何更新,但使用独立标靶提供的相机参数。该指标来自模型内生成的小幅、稀疏、透明发光场景;不能和现实照片3DGS论文的 PSNR 直接比较。图像结构、动态范围、背景比例与评价条件都不同。
几何评价也有独立意义。只比较初始被扰动位置到拟合位置的变化不能说明更接近真值;评价文件在训练结束后给出真实中心。三角化原始 RMS 约二点九零八毫米,拟合后约一点五五四毫米。这里同时保留未扰动三角化基线,避免把故意扰动的坏初值当唯一对照。拟合在本次种子改善几何与像素,但不把这个有限结果宣布为所有初始化与场景的定理。
颜色与宽度存在补偿关系。二维 Gaussian 总能量与颜色乘宽度平方成正比,较窄但更亮的核可能在低分辨率下接近较宽但较暗的核。多视角不同深度会改变屏幕大小,能够增加辨识信息,但量化、重叠与缺失仍会产生歧义。对参数施加物理范围或增加高分辨率观测是新的假设与数据,不能在验收失败后悄悄加入再沿用旧实验报告。
有限差分检验选择 float64、小而非零的参数扰动,目标用非对称像素权重避免整体积分对平移不敏感。比较加扰动和减扰动的目标差除二倍步长,与反传位置梯度核对。还分别检查颜色与半径梯度有限且非零。有限差分不应靠过小步长让舍入误差支配,也不应靠过大步长跨越强非线性;测试固定明确步长,并用相对误差而不是只看方向相同。
留出泄漏测试更直接:复制输入目录,把两张保留场景图像全部改成黑色,使用完全相同的相机、初值和训练步数,要求三个拟合参数张量逐位相同。它验证这些像素不参与更新,强于“代码注释说没有用”。本项目短测试真实执行了这项反证,也测试删除未知场景真值仍能重建。它们只保护对应信息边界,不证明相机标定无误或图像模型对真实世界充分。
失败处理是训练器的一部分。若深度变为非正,渲染器拒绝;若初始核远离观测、核过窄或颜色 sigmoid 饱和,梯度可能不足,需要报告不收敛而不是删除该次结果。当前演示选择几何初始化加小扰动,不是随机从空白世界发现所有物体。无密度控制和新珠子生成,缺失珠子无法自动补出;若想扩展为完整训练器,必须设计出生、分裂、剪枝及遮挡机制并重新测试。
训练误差含量化与标定偏差,最终非零损失并不自动表示优化器错误。生成器精确相机先渲染并量化,拟合使用像素检测后估出的相机,所以二者并非完全相同的连续函数实例。若要测纯优化能力,可增加精确相机的正向控制,但必须与主实验分开命名。主报告保留估计相机链,使观察到的残差如实包含从文件到观测再到几何的实际影响。
import math
g=math.exp(-.5)
d_center=g*2/4
d_width=g*4/8
assert abs(d_center-d_width)<1e-15
print(g,d_center,d_width)TRY IT YOURSELF
练习一:参数账本
每珠三维中心、RGB强度和一个半径,十二珠多少训练参数?若加入每珠一个独立opacity而其他不变,会增加多少,为什么还需新可见性公式?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习二:半径链式导数
已知半径r=exp(rho)、屏幕半径s=fr/Z。求s对rho及Z的导数,在焦距一百、r零点零六、深度四时求数值。
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三:评价泄漏
若把留出两图改成黑色后,使用相同种子训练仍得不同参数,应先审查哪些数据流?测试通过又不能推出什么?