六张图能否约束同一个三维表示,使它在另外三个视角也接近目标?E06 只恢复固定场景的一个光强;这次同时调整八个高斯的世界中心、颜色和不透明度。每次渲染都从同一组世界参数重新投影,不能为每张图单独拟合二维椭圆。

实验采用 24×24 RGB 合成图、固定协方差和两组随机初始化。它复现三维高斯表示、投影、合成与多视图优化的受限子集,保留训练成本和全部持出结果。

数据与未知量怎样分开

每个高斯含三维中心 μ、线性 RGB 颜色 c 和不透明度 o,共 7 个待优化数,八个合计 56 个。世界协方差统一固定为 diag(0.045,0.025,0.035),单位是世界长度的平方;颜色没有视线方向依赖。这里没有神经网络权重,连续场由显式高斯参数表达。

生成器中的八个真实高斯只用于产生目标。训练器接收六幅 RGB、相机及公共约束,不接收真实中心和颜色。初始化种子固定为 701、702,中心各分量均匀取自 [−0.6,0.6],颜色来自 [0.2,0.8],不透明度为 0.5。更新后中心限制到 [−0.85,0.85],颜色和不透明度限制到 [0.02,0.98]。

相机绕原点布置,水平半径 3、高度 0.55,均朝向原点。训练方位角为 0、60、120、180、240、300 度;提前固定的持出角为 30、150、270 度,对应视图 6、7、8。持出图不参与梯度、停止条件或超参数选择,两组结果都保留。

数据由仓库自有生成器产生,许可文件允许使用、修改与分发。生成和拟合使用同一个渲染器,因此这是自洽合成问题;它不能独立证明真实照片重建能力,也不能代替成像公式的单独检查。

三维协方差如何成为屏幕椭圆

沿用右手坐标,相机朝 −Z,图像纵坐标向下。世界中心变到相机空间 p=R_c μ+t,记 p=(x,y,z),正深度 d=−z。焦距 f=24 像素,主点为 (12,12):

π(p)=[12+fx/d12−fy/d],J=∂π∂p=[f/d0fx/d20−f/d−fy/d2].\pi(p)=\begin{bmatrix}12+fx/d\\12-fy/d\end{bmatrix},\qquad J=\frac{\partial\pi}{\partial p} =\begin{bmatrix}f/d&0&fx/d^2\\0&-f/d&-fy/d^2\end{bmatrix}.

第三列的符号来自 d=−z。对中心附近的小位移 δp,投影变化约为 Jδp;线性变换后的协方差因此是:

S=JRcΣRcTJT+0.25I.S=JR_c\Sigma R_c^TJ^T+0.25I.

最后一项是固定的像素重建方差,单位为像素平方。Σ 正定,附加项也使屏幕矩阵便于稳定求逆。这个椭圆来自中心处的局部线性化,透视映射后的完整三维高斯并不严格仍为二维高斯。高斯离相机过近或覆盖范围过大时,近似误差会变得重要。

检查器将中心放在原点、相机放在 (0,0,3):屏幕中心必须为 (12,12),两个轴方差应分别为 64×0.045+0.25 和 64×0.025+0.25。另用相机空间有限差分检查 J 的深度列,避免生成器与拟合器共享错误却互相匹配。

颜色为什么必须按深度合成

在像素中心 q=(u+0.5,v+0.5),令 δ=q−π(p),高斯的覆盖权重为:

αi(q)=oiexp⁡(−12δTSi−1δ),C(q)=∑iTiαici+Tendb,Ti=∏j<i(1−αj).\alpha_i(q)=o_i\exp\left(-\tfrac12\delta^TS_i^{-1}\delta\right),\qquad C(q)=\sum_i T_i\alpha_i c_i+T_{\rm end}b,\quad T_i=\prod_{j<i}(1-\alpha_j).

这里没有概率密度归一化系数,峰值由 o 决定;背景 b 的三个通道都是 0.025。高斯按中心深度从近到远稳定排序,前面已经覆盖的部分通过 T 衰减后面的贡献。两个重叠高斯交换顺序,颜色通常改变,即便最终剩余透射率相同。

每次模型更新和每次中心差分都重新计算投影中心、J、S 与深度顺序。只移动二维中心却沿用旧协方差,求得的梯度就不再对应上述前向函数。

同一初始化的视图 0 中,故意翻转投影纵轴得到 MSE 0.00451897,故意反转深度顺序得到 0.0000229697;比较对象都是正确实现的输出。这两个负对照说明错误可被检测,数值大小不能解释为对应错误在任意场景中的影响上界。

六十次更新怎样计算

训练损失 E 是六幅图所有像素、三个线性通道的均方误差,不带 1/2。对第 k 个参数使用中心差分:

gk=E(θ+hek)−E(θ−hek)2h,h=10−4.g_k=\frac{E(\theta+h e_k)-E(\theta-h e_k)}{2h},\qquad h=10^{-4}.

一次梯度需要 112 次完整损失计算。每轮先试步长 2,将候选参数截入公共范围,只依据训练损失接受不增的候选;否则步长减半,最多尝试十次。全部失败则保持当前模型,仍消耗一轮预算。两次实际运行的 60 轮都接受步长 2,没有使用回退。

排序交换处可能不光滑。独立方向检查只扰动颜色和不透明度,保持中心与顺序不变:梯度点积为 −0.00411691465948,沿整条方向直接差分为 −0.00411691466161。它核对了该平滑方向,不能据此宣称跨排序边界的中心导数也处处可靠。

固定预算结束后,种子 701 的训练 MSE 从 0.00904647 降到 0.00349552,702 从 0.00937555 降到 0.00417604。训练下降只是拟合证据;新的相机仍需单独评价,也没有任何断言要求持出结果必须改善。

持出图还剩多少误差

下表均为初始值→最终值。PSNR=−10log₁₀(MSE),峰值固定为线性 RGB 的 1,没有逐图归一化。前景仅选目标图中最大通道大于 0.075 的像素,前后使用同一掩码,避免背景占比掩盖物体误差。

种子/视图 全图 MSE PSNR(dB) 前景 MSE
701/6 0.008873→0.003246 20.52→24.89 0.030453→0.011303
701/7 0.007175→0.003455 21.44→24.62 0.023712→0.012070
701/8 0.008792→0.002874 20.56→25.42 0.032013→0.010849
702/6 0.010490→0.004540 19.79→23.43 0.036254→0.015858
702/7 0.008914→0.004243 20.50→23.72 0.030648→0.014818
702/8 0.008429→0.004180 20.74→23.79 0.031715→0.015851

显示图由实际 PPM 转成 PNG,显示阶段使用 sRGB 编码,表格仍比较浮点线性值。两个初始化都改善了三个持出视角,最终误差却不同,前景也远未完全吻合。高斯可交换编号,颜色与覆盖还可能互相补偿;图像改善不能推出真实三维中心已唯一恢复。

训练成本与画一帧的成本

每组有 1+60×(112+1)=6781 次训练目标求值,即 40686 次视图渲染。记录环境为 macOS 27.0.1 arm64、Apple clang 21.0.0、C++17、O2。701、702 的训练墙钟分别为 0.611676、0.604630 秒,包含差分、候选检查及内存中的轨迹格式化,排除生成数据、落盘、持出评估和单独校验。

训练完成后,每组另测 30 次单视图渲染,三个持出相机各十次。均值分别为 14.3958、14.4474 微秒,包括投影、排序与像素循环,排除写文件和误差计算。这是八个高斯、576 个像素的 CPU 测量,不能作为官方 CUDA、大场景或 GPU 性能结论。

按双精度数的逻辑存储计算,56 个优化参数加八份三维固定协方差对角线,共 640 字节;这不含相机、图像和运行时容器,也不是 CSV 大小或进程内存。当前协方差相同,另设计去重编码可进一步减小,不能混用两种存储口径。

原论文还训练协方差,使用方向相关球谐颜色,并结合 SfM 初始化、增密、拆分、裁剪及高效分块光栅化。这里均未实现,也未运行官方代码。只据当前小实验比较误差与成本,无法复现论文的质量或速度结论。

练习与自检

练习一。中心在相机光轴上,深度由 3 变为 6,屏幕协方差会缩到四分之一吗?

答案:几何投影项缩到四分之一;固定的 0.25I 不变,所以完整 S 不按同一比例缩小。

练习二。两个高斯的 α 都为 0.5,前红后蓝,背景为黑;交换后得到什么?

答案:原颜色为 (0.5,0,0.25),交换后为 (0.25,0,0.5)。两次剩余透射率都是 0.25,说明只检查透射率无法验证颜色排序。

练习三。若每轮第一次候选失败、第二次才接受,60 轮需要多少损失求值?可以据持出最优轮提前停止吗?

答案:1+60×(112+2)=6841 次,对应 41046 次训练视图渲染。用持出选择停止轮会把它变成验证集;若要报告独立测试误差,需另保留未参与选择的数据。本实验始终固定六十轮。

复跑与资料

在仓库根目录执行,输出仍保存在仓库内:

1
2
clang++ -std=c++17 -O2 -Wall -Wextra -Wpedantic -Werror examples/computer-graphics/gaussianE07_check.cpp -o examples/computer-graphics/build/gaussianE07_check
examples/computer-graphics/build/gaussianE07_check examples/computer-graphics/build/gaussianE07

相机与划分、线性观测、全部持出指标、训练成本、逐次渲染计时保留原始记录。701 损失轨迹和702 损失轨迹均含初态及六十次更新;对应模型见701 初态、701 终态、702 初态、702 终态。源码位于 examples/computer-graphics/gaussianE07.hpp 与检查器,命令和哈希见 writing-plans/computer-graphics/evidence/E07-cpu.txt。

Kerbl 等的 3D Gaussian Splatting,§2.3给出排序后的 alpha 合成,§4解释三维表示与投影协方差,§5及附录 B讨论优化与密度控制。官方软件许可应与论文和自生成数据许可分别阅读;本文没有复制其 CUDA 实现。

系列入口 · 上一篇:反推光源强度 · 下一篇:资源流送。