什么是它?
高斯散射是一种 **可微分光栅化技术**。
可微分光栅化
简单来说
- 可微分可以看作是“AI 兼容”的一种花哨的说法
- 光栅化是指获取数据并在屏幕上绘制它
光栅化已经非常普遍。它通常采用 **三角形光栅化** 的形式,其中 3D 数据转换为 2D 像素数据并在屏幕上绘制。这就是通常渲染网格的方式。
然而,三角形光栅化并不太适合 AI。这是因为它包括诸如以下的离散决策:
- 该像素是否在三角形内?
神经网络不喜欢离散决策。它们希望一切都是模糊且连续的 - 或者换句话说,是 *可微分的*。
高斯散射
高斯散射是一种可微分光栅化技术。但它究竟是如何工作的呢?
散射由数百万个点组成,每个点由四个参数组成
- **位置**:它位于何处(XYZ)
- **协方差**:它如何拉伸(3x3 矩阵)
- **颜色**:它的颜色是什么(RGB)
- **alpha**:它有多透明(α)
然后,要光栅化散射,这些点会被投影到 2D 空间中。然后,对于每个像素,都会计算每个点的贡献。或者,用伪代码表示:
splat2d = splat.project_and_sort()
for point in splat2d:
for pixel in image:
pixel += compute_contribution(point, pixel)
点的贡献随着它离像素越远而减小。还需要对点进行排序,因为它们是从后向前混合的。
理论上,每个点都会对每个像素做出贡献,这效率非常低。但是,这没关系,因为它 *是可微分的*。
实际上,这是通过基于平铺的光栅化方法进行优化的,如 原始论文 中所述。
推断
如果你没有训练模型,那么它是否可微分并不重要。你可以像 gsplat.js 这样的开源网络查看器那样,将每个点视为一个实例化四边形。
你可以在 此处 查看实际效果。
训练
原始论文 使用 运动恢复结构(一种传统的 3D 重建算法)初始化点。
然后使用基于平铺的方法对这些点进行光栅化,并将损失通过将光栅化图像与真实图像进行比较来计算。应用梯度下降来调整点参数(位置、协方差、颜色、alpha)。
原始论文还使用自动密集化和修剪,根据需要自动添加和删除点。更多详情请见 此处。
生成式 3D
原始方法适用于从照片学习单个场景。但是,可微分光栅化的概念可以推广到更复杂的模型,例如神经网络。
这就是生成式 3D 模型(如 LGM)的情况,我们将在下一节中使用它来构建我们自己的生成式 3D 演示。
< > 更新 在 GitHub 上