1.论文内容
论文标题:《Octree-GS: Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians》
1.1针对的问题
在处理大型复杂场景时,由于视锥内过多的高斯基元,初始的3DGS会遇到渲染瓶颈。这一限制在缩小视图时尤为明显,可能导致不同细节场景的渲染速度不一致。
1.2实验数据集
(1)场景范围:
从复杂的室内场景、多尺度场景到大型城市场景;
(2)评价指标:
PSNR、SSIM、LPIPS+在每视图渲染过程中使用的活跃3D高斯/神经高斯的平均数量,作为渲染效率的公平指标。
1.3Octree-GS应对方案
(1)采用LOD结构的3D高斯技术,支持场景表示的细节分解;
(2)动态选择来自多分辨率锚点集中的适当级别,确保在自适应LOD调整的同时保持一致的渲染性能和高保真渲染结果。
Tips:LOD(Level of Detail)细节层次模型是一种用于描述三维模型细节的方法。LOD的最低层次包含最基本的模型信息,只包含少量的顶点和面片,通常用于在远处和低分辨率情况下呈现;最高层次则包含模型的全部细节和精度,包括每个顶点的具体位置和法线方向等信息。
1.4目前针对视图自适应的高斯溅射变体
(1)Scaffold-GS
Scaffold-GS强调的是空间结构和视角的自适应调整,其核心在于通过锚点(anchor points)结构化地组织 3D 高斯,以应对视角自适应渲染的需求。传统的 3D-GS 方法会产生大量冗余的高斯,导致渲染效率低下,尤其在大范围视角变化或无纹理区域表现不佳。Scaffold-GS 通过锚点分布高斯,并根据视点方向和距离动态预测它们的属性,显著减少冗余的高斯数量,优化场景覆盖率。它还引入了锚点的增长和修剪策略,在不牺牲渲染速度的前提下,提高了不同细节层次的表现能力。
(2)Mip-Splatting
Mip-Splatting 则关注于跨尺度的平滑渲染和抗锯齿效果,其专注于通过引入 3D 和 2D Mip 滤波器来解决高斯散射中的抗锯齿问题。传统的 3D-GS 在多分辨率下容易出现锯齿和别名效应,Mip-Splatting 结合了体积和图像空间的平滑滤波技术,实现了跨尺度的无锯齿渲染。
虽然ScaffoldGS和Mip-Splatting展示了增强的渲染,但它们仍然缺乏自适应高斯函数管理。两者在有效处理缩放轨迹和过度纹理的场景方面存在挑战。
(3)Octree-GS
本文的Octree-GS方法利用一种新的空间结构在场景中锚定3D高斯,同时继承了Scaffold-GS的灵活性和鲁棒性。场景由分层锚组织以符合LOD要求,在训练期间促进对复杂或大规模场景的有效适应。使用的LOD由观测视角和场景细节的丰富度决定,为了提高对LOD设计的适应性,进一步采用了渐进式的训练策略。
1.5Octree-GS方法
Octree-GS方法采用八叉树结构从三维高斯图像中学习神经场景,并将其分层组织成多个层次。基于观看距离和场景丰富度从八叉树中自适应查询LOD水平,显著减少任何视图的最终渲染中的高斯基元数,实现一致的渲染效率。
(1)LOD结构的3D高斯函数
- 用LOD初始化锚定高斯函数
- 级别选择:级别边界不透明度融合
(2)自适应的锚点高斯控制
- 锚点增长
- 锚点修剪
(3)渐进式训练
1.6结果分析
(1)整体结果
Octree-GS方法确保了精细的尺度细节,并减少了高斯数的数量。
(2)效率分析
Octree-GS方法在近距离捕捉细粒度细节方面表现出色,同时在更大范围内保持一致的渲染速度。值得注意的是,由于我们创新的LOD结构设计,我们的渲染速度在大规模场景和极端视图序列中比最先进的方法快10倍。
(3)多分辨率结果
将观测距离乘以相应的缩放因子来处理这个多分辨率数据集。Octree GS自适应地处理改变的足迹大小,并有效地解决3D-GS和Scaffold GS固有的混叠问题。
1.7结论
(1)Octree-GS采用新颖的八叉树结构分层组织锚点高斯函数,通过解决多尺度训练图像中的LOD冲突和减少纹理丰富或缩小视图中的冗余高斯,从而克服了混叠和渲染效率低下的问题,解决了以前的限制。
(2)Octree-GS显著增强了细节捕获,同时保持实时渲染性能,而不增加3D高斯的数量。
局限性:(1)八叉树构造和渐进式训练,仍然需要超参数调优,平衡每个LOD级别中的锚点和调整迭代训练激活也很重要;(2)Octree-GS模型仍然面临对初始稀疏点云的依赖和缺乏几何支持等挑战。
2.代码结构分析
项目地址:https://github.com/city-super/Octree-GS
(1)代码结构:
- arguments:项目运行时所需的参数文件
- assets:项目运行时所需的静态资源文件
- utils:包含项目中使用的各种实用工具和辅助函数
- data:数据集
- gaussian_renderer:高斯渲染器的相关代码
- lpipsPtTorch:用于计算图像质量指标的代码——>感知相似度指标
- scene:包含场景数据和相关配置文件
- SIBR_viewers:包含用于查看和可视化结果的工具
- submodules:包含项目的子模块
- convert.py:用于数据转换的脚本
- metrics.py:用于计算评估指标的脚本
- render.py:用于渲染场景的脚本
- single_train.sh:用于单个场景训练的脚本
- train.py:训练模型的主脚本
- train.sh:批量训练场景的脚本
Octree-GS 项目使用教程-CSDN博客https://blog.csdn.net/gitblog_00563/article/details/142838812
3.实验复现
1.下载源码
git clone https://github.com/city-super/Octree-GS --recursive D:\3D_Gaussian_variants\Octree-GS\Code
2.在指定路径下创建虚拟环境OctreeGS
conda create --prefix D:\Python\CondaEnvs\OctreeGS
3.使用Git bash运行bash文件
首先需要conda init进行激活,然后重启Git bash实现虚拟环境的激活。
4.运行train.py文件,通过设置参数运行文件(以迭代训练30000次为例)
python train.py --eval -s data/mipnerf360/flowers -r -1 --gpu -1 --fork 2 --ratio 1 --iterations 30000 -m outputs/mipnerf360/flowers/baseline --appearance_dim 0 --visible_threshold -1 --base_layer 10 --dist2level round --update_ratio 0.2 --progressive --init_level -1 --dist_ratio 0.999 --levels -1 --extra_ratio 0.25 --extra_up 0.01
5.训练中遇到的问题及解决
(1)在安装diff-gaussian-rasterization和simple-knn时出现问题:分别运行到两者文件夹,然后运行语句“pip install .”实现正确的安装;
(2)训练时出现“AttributeError:module 'numpy' has no attribute 'int'”:是scene文件夹中gaussian_model.py文件的问题,将其中的np.int改为int即可。
6.训练和渲染完成
Ps:以上是个人学习过程的记录,如果有什么问题,还请评论指出。