3D 机器学习课程文档
这是什么?
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
这是什么?
高斯泼溅是一种可微分光栅化技术。
可微分光栅化
简单来说
- “可微分”可以被认为是“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 上更新