前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >三维场景重建3D高斯点渲染复现

三维场景重建3D高斯点渲染复现

作者头像
Srlua
发布2024-12-28 10:38:13
发布2024-12-28 10:38:13
22200
代码可运行
举报
文章被收录于专栏:CSDN社区搬运CSDN社区搬运
运行总次数:0
代码可运行

三维场景重建概述

MVSNet

多视图立体视觉网络(MVSNet, Multi-View Stereo Network)是计算机视觉领域中用于从多视角图像中重建3D几何结构的一种深度学习方法。MVSNet通过利用卷积神经网络(CNNs)对输入的多张图像进行特征提取,然后基于这些特征来计算不同视角之间的匹配代价,并构建代价体积(cost volume)。接下来,通过3D卷积操作对这个代价体积进行处理,以预测每个像素的深度值,最终生成稠密的深度图和点云数据。

MVSNet的优势在于它能够自动地从大量未标注的多视角图像中学习到有效的特征表示,从而简化了传统MVS算法中复杂的参数调整过程。此外,由于其基于深度学习的设计,MVSNet还具有较好的泛化能力,可以适应不同类型的场景和摄像机配置。

Nerf

NeRF (Neural Radiance Fields) 是一种革命性的3D场景表示方法,它使用全连接神经网络来隐式地建模场景的辐射场(radiance field),即给定任意位置和观察方向时的颜色和密度。通过在训练过程中优化网络参数,NeRF可以从一组稀疏的2D图像中重建出高质量的3D场景,并支持自由视角的渲染。

NeRF的主要特点是它能够捕捉到非常精细的细节和复杂光照条件下的效果,这得益于其对场景内部结构的连续、分层表示。然而,这种高精度是以较高的计算成本为代价的,因为每次渲染新视角都需要重新评估整个神经网络。此外,NeRF模型通常需要大量的训练时间和存储空间。

3D gaussian-splatting

3D Gaussian-splatting是一种新兴的3D场景表示技术,它将场景中的每个点视为一个带有方向性的高斯分布。这种方法不仅记录了点的位置信息,还包含了颜色、法线方向以及不确定性等属性。相比传统的点云或网格模型,Gaussian-splatting能够在较低的内存占用下提供更加细腻和平滑的表面细节,特别适合于表现具有复杂几何结构和纹理变化的场景。

3D Gaussian-splatting结合了点云的灵活性和体素表示的紧凑性,同时提供了类似于NeRF的高质量渲染结果。更重要的是,它的渲染速度远快于NeRF,且更容易实现动态更新和交互,因此在实时应用中展现出巨大的潜力。

效果演示

3D gaussian-splatting原理

3D Gaussian-splatting的核心思想是将3D空间中的每一个点都用一个多维高斯分布来表示,其中每个高斯分布不仅描述了该点的空间位置,还编码了颜色、法线和其他物理属性。具体来说,一个高斯分布由均值向量μ(代表点的位置)和协方差矩阵Σ(定义了分布的形状和方向)组成。对于彩色高斯分布,还会包含一个额外的颜色向量c。

高斯分布的数学基础

高斯分布是概率论中用来描述随机变量概率分布的一种常见函数,其一维形式如下: p(x;μ,σ2)=12πσ2e−(x−μ)22σ2p(x;μ,σ2)=2πσ2​1​e−2σ2(x−μ)2​ 在3D Gaussian-splatting中,我们使用的实际上是多维高斯分布,它可以写成:p(x;μ,Σ)=1(2π)n/2∣Σ∣1/2e−12(x−μ)TΣ−1(x−μ)p(x;μ,Σ)=(2π)n/2∣Σ∣1/21​e−21​(x−μ)TΣ−1(x−μ) 这里,xx是n维空间中的一个点,μμ是均值向量,ΣΣ是协方差矩阵。

渲染过程

当渲染一个场景时,3D Gaussian-splatting通过以下步骤来合成图像:

投影:首先,根据相机的姿态(位置和朝向),将所有高斯分布投影到图像平面上。这一步骤决定了哪些高斯分布会在最终图像中可见。 累积贡献:对于每个像素,累加所有投影到该像素上的高斯分布的贡献。这是通过计算每个高斯分布在该像素处的概率密度值并乘以其颜色来完成的。 融合与后处理:最后,对所有像素的累积贡献进行融合,得到最终的图像。可能还需要执行一些后处理步骤,如抗锯齿、色调映射等,以提高输出质量。

优化与加速

为了使3D Gaussian-splatting能够高效运行,研究者们提出了一系列优化策略,包括但不限于:

层次结构:构建多层次的数据结构,如八叉树或kd-tree,以便快速查找和剔除远离视线的高斯分布。 重要性采样:在渲染过程中,优先考虑那些对最终图像影响较大的高斯分布,减少不必要的计算。 GPU加速:充分利用现代图形处理器的强大计算能力,加速高斯分布的投影、累积等操作。

3D Gaussian-splatting模型部署

安装相关依赖

1.进入附件下面

代码语言:javascript
代码运行次数:0
复制
conda env create --file environment.yml
conda activate gaussian_splatting

2.安装diff-gaussian-rasterization 下载如下两个项目,将第二个项目放在第一个项目的diff-gaussian-rasterization/third_party/glm

代码语言:javascript
代码运行次数:0
复制
https://github.com/graphdeco-inria/diff-gaussian-rasterization
https://github.com/g-truc/glm/tree/5c46b9c07008ae65cb81ab79cd677ecc1934b903

然后安装依赖

代码语言:javascript
代码运行次数:0
复制
pip install .

3.安装simple-knn 下载如下一个项目

代码语言:javascript
代码运行次数:0
复制
https://gitlab.inria.fr/bkerbl/simple-knn

安装相应依赖

代码语言:javascript
代码运行次数:0
复制
pip install .

自定义数据集

照片采集

你可以随意采取自己附近的物品图片,尽量50+张,放入附件./data/input文件夹下

数据转换

代码语言:javascript
代码运行次数:0
复制
python convert.py -s ./data

模型训练

代码语言:javascript
代码运行次数:0
复制
python train.py -s ./data -m ./output/mydata

效果演示

https://playcanvas.com/supersplat/editor/ 将训练完的点云

拖入页面即可

​​

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三维场景重建概述
    • MVSNet
    • Nerf
    • 3D gaussian-splatting
  • 效果演示
  • 3D gaussian-splatting原理
    • 高斯分布的数学基础
    • 渲染过程
    • 优化与加速
  • 3D Gaussian-splatting模型部署
    • 安装相关依赖
  • 自定义数据集
    • 照片采集
    • 数据转换
    • 模型训练
    • 效果演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档