三维场景重建与3D高斯点渲染技术探讨
🏡作者主页:点击!
🤖编程探索专栏:点击!
⏰️创作时间:2024年12月25日10点11分
神秘男子影,
秘而不宣藏。
泣意深不见,
男子自持重,
子夜独自沉。
文章源地址(有视频):链接https://www.aspiringcode.com/content?id=17329323593007&uid=2e72486d067241b1b4896f33c8978478
三维场景重建概述
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。
高斯分布的数学基础
渲染过程
当渲染一个场景时,3D Gaussian-splatting通过以下步骤来合成图像:
投影:首先,根据相机的姿态(位置和朝向),将所有高斯分布投影到图像平面上。这一步骤决定了哪些高斯分布会在最终图像中可见。
累积贡献:对于每个像素,累加所有投影到该像素上的高斯分布的贡献。这是通过计算每个高斯分布在该像素处的概率密度值并乘以其颜色来完成的。
融合与后处理:最后,对所有像素的累积贡献进行融合,得到最终的图像。可能还需要执行一些后处理步骤,如抗锯齿、色调映射等,以提高输出质量。
优化与加速
为了使3D Gaussian-splatting能够高效运行,研究者们提出了一系列优化策略,包括但不限于:
层次结构:构建多层次的数据结构,如八叉树或kd-tree,以便快速查找和剔除远离视线的高斯分布。
重要性采样:在渲染过程中,优先考虑那些对最终图像影响较大的高斯分布,减少不必要的计算。
GPU加速:充分利用现代图形处理器的强大计算能力,加速高斯分布的投影、累积等操作。
3D Gaussian-splatting模型部署
安装相关依赖
1.进入附件下面
conda env create --file environment.yml
conda activate gaussian_splatting
2.安装diff-gaussian-rasterization
下载如下两个项目,将第二个项目放在第一个项目的diff-gaussian-rasterization/third_party/glm
https://github.com/graphdeco-inria/diff-gaussian-rasterization
https://github.com/g-truc/glm/tree/5c46b9c07008ae65cb81ab79cd677ecc1934b903
然后安装依赖
pip install .
3.安装simple-knn
下载如下一个项目
https://gitlab.inria.fr/bkerbl/simple-knn
安装相应依赖
pip install .
自定义数据集
照片采集
你可以随意采取自己附近的物品图片,尽量50+张,放入附件./data/input文件夹下
数据转换
python convert.py -s ./data
模型训练
python train.py -s ./data -m ./output/mydata
效果演示
https://playcanvas.com/supersplat/editor/
将训练完的点云