Octree-GS:基于LOD结构的3D高斯实时渲染项目

[TPAMI 2025] Octree-GS: Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians

分支1Tags0
文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
1 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前

Octree-GS:基于LOD结构3D高斯的一致性实时渲染研究

项目页面 | 论文 | Windows查看器 | Linux查看器

任克瑞*江礼涵*卢涛余沐林徐林宁倪章凯戴博 ✉️

新闻

[2025.05.08] 🎈我们的论文已被TPAMI 2025接收!!!

[2024.09.25] 🎈我们提出了Octree-AnyGS,这是一个基于锚点的通用框架,支持显式高斯(2D-GS、3D-GS)和神经高斯(Scaffold-GS)。此外,Octree-GS已适配上述高斯基元,能够为大规模场景提供细节层次(LOD)表示。该框架有望应用于其他基于高斯的方法,相关的SIBR可视化结果即将发布。(https://github.com/city-super/Octree-AnyGS)

[2024.05.30] 👀我们在Octree-GS的查看器中更新了新模式(深度法向量高斯分布LOD偏差)。

[2024.05.30] 🎈我们发布了Mip-NeRF 360、Tanks&Temples、Deep Blending和MatrixCity数据集的检查点。

[2024.04.08] 🎈我们更新了三个数据集上的最新定量结果。

[2024.04.01] 🎈👀 Octree-GS的查看器现已可用。

[2024.04.01] 我们发布了代码。

概述

受细节层次(LOD)技术的启发,我们提出了\modelname,其特点是采用LOD结构的3D高斯方法,支持场景表示的细节层次分解,并对最终渲染结果产生贡献。我们的模型从多分辨率锚点集中动态选择合适的层次,通过自适应LOD调整确保一致的渲染性能,同时保持高保真的渲染结果。

安装

我们已在配置为 Ubuntu 18.04、cuda 11.6 和 gcc 9.4.0 的服务器上完成测试。其他类似配置也应能正常运行,但我们尚未逐一验证。

  1. 克隆此仓库:
git clone https://github.com/city-super/Octree-GS --recursive
cd Octree-GS
  1. 安装依赖项
SET DISTUTILS_USE_SDK=1 # Windows only
conda env create --file environment.yml
conda activate octree_gs

数据

首先,通过以下方式在项目路径内创建一个data/文件夹

mkdir data

数据结构将按如下方式组织:

data/
├── dataset_name
│   ├── scene1/
│   │   ├── images
│   │   │   ├── IMG_0.jpg
│   │   │   ├── IMG_1.jpg
│   │   │   ├── ...
│   │   ├── sparse/
│   │       └──0/
│   ├── scene2/
│   │   ├── images
│   │   │   ├── IMG_0.jpg
│   │   │   ├── IMG_1.jpg
│   │   │   ├── ...
│   │   ├── sparse/
│   │       └──0/
...

公开数据

自定义数据

对于自定义数据,需使用 Colmap 处理图像序列,以获取 SfM 点和相机姿态。然后将结果放置到 data/ 文件夹中。

训练

多场景训练

为实现多场景并行训练,我们提供了批量训练脚本:

  • MipNeRF360:train_mipnerf360.sh
  • Tanks&Temples:train_tandt.sh
  • Deep Blending:train_db.sh
  • BungeeNeRF:train_bungeenerf.sh
  • MatrixCity:train_matrix_city.sh

运行方式如下

bash train_xxx.sh

注意事项 1:确保您有足够的 GPU 卡和内存来同时运行这些场景。

注意事项 2:每个进程会占用大量 CPU 核心,这可能会减慢训练过程。在 train.py 中相应地设置 torch.set_num_threads(32) 以缓解此问题。

单场景训练

要训练单个场景,请相应修改 single_train.sh 中的路径和配置,然后运行该脚本:

bash single_train.sh
  • scene:场景名称,格式为 dataset_name/scene_name/scene_name/
  • exp_name:用户定义的实验名称;
  • gpu:指定运行代码的 GPU 编号。'-1' 表示使用最空闲的 GPU。
  • ratio:初始化时 SfM 点云的采样间隔
  • appearance_dim:外观嵌入的维度
  • fork:LOD 级别之间的细分比例
  • base_layer:八叉树的最粗层级,对应 LOD 0,'<0' 表示基于场景的设置
  • visible_threshold:低训练频率锚点的阈值比例
  • dist2level:估计 LOD 级别时浮点数映射为整数的方式
  • update_ratio:锚点生长的阈值比例
  • progressive:是否使用渐进式学习
  • levels:LOD 级别的数量,'<0' 表示基于场景的设置
  • init_level:渐进式学习的初始级别
  • extra_ratio:LOD 偏差的阈值比例
  • extra_up:每次 LOD 偏差的增量

对于这些公开数据集,'voxel_size' 和 'fork' 的配置可参考上述批量训练脚本。

此脚本会自动将日志(包含运行时代码)存储到 outputs/dataset_name/scene_name/exp_name/cur_time

评估

我们已将渲染和指标计算过程集成到训练代码中。因此,训练完成后,渲染结果fps质量指标 将自动打印。渲染结果会保存在日志目录中。请注意,fps 是通过以下方式粗略估计的

torch.cuda.synchronize();t_start=time.time()
rendering...
torch.cuda.synchronize();t_end=time.time()

这可能与原始的 3D-GS 略有不同,但并不影响分析。

同时,我们保留了手动渲染功能,其用法与 3D-GS 中的对应功能相似,可通过以下方式运行

python render.py -m <path to trained model> # Generate renderings
python metrics.py -m <path to trained model> # Compute error metrics on renderings

结果

Mip-NeRF 360 数据集

场景 峰值信噪比(PSNR) 结构相似性指数(SSIM) 学习感知图像块相似度(LPIPS) 三维高斯数量(GS(k)) 内存占用(Mem(MB))
bicycle 25.14 0.753 0.238 701 252.07
garden 27.69 0.86 0.119 1344 272.67
stump 26.61 0.763 0.265 467 145.50
room 32.53 0.937 0.171 377 118.00
counter 30.30 0.926 0.166 457 106.98
kitchen 31.76 0.933 0.115 793 105.16
bonsai 33.41 0.953 0.169 474 97.16
flowers 21.47 0.598 0.342 726 238.57
treehill 23.19 0.645 0.347 545 211.90
平均值 28.01 0.819 0.215 654 172.00
论文结果 27.73 0.815 0.217 686 489.59
+0.28 +0.004 -0.002 -4.66% -64.87%

Tanks and Temples 数据集

场景 峰值信噪比(PSNR) 结构相似性指数(SSIM) 学习感知图像块相似度(LPIPS) 三维高斯数量(GS(k)) 内存占用(Mem(MB))
truck 26.17 0.892 0.127 401 84.42
train 23.04 0.837 0.184 446 84.45
平均值 24.61 0.865 0.156 424 84.44
论文结果 24.52 0.866 0.153 481 410.48
+0.09 -0.001 +0.003 -11.85% -79.43%

Deep Blending 数据集

场景 峰值信噪比(PSNR) 结构相似性指数(SSIM) 学习感知图像块相似度(LPIPS) 三维高斯数量(GS(k)) 内存占用(Mem(MB))
drjohnson 29.89 0.911 0.234 132 132.43
playroom 31.08 0.914 0.246 93 53.94
平均值 30.49 0.913 0.240 113 93.19
论文结果 30.41 0.913 0.238 144 254.87
+0.08 - +0.002 -21.52% -63.44%

MatrixCity 数据集

场景 峰值信噪比(PSNR) 结构相似性指数(SSIM) 学习感知图像块相似度(LPIPS) 三维高斯数量(GS(k)) 内存占用(Mem(GB))
Block_All 26.99 0.833 0.257 453 2.36
论文结果 26.41 0.814 0.282 665 3.70
+0.59 +0.019 -0.025 -31.87% -36.21%

查看器

Octree-GS 的 查看器 现已开放。 请遵循以下格式

<location>
|---point_cloud
|   |---point_cloud.ply
|   |---color_mlp.pt
|   |---cov_mlp.pt
|   |---opacity_mlp.pt
|   (|---embedding_appearance.pt)
|---cameras.json
|---cfg_args

<location>
|---point_cloud
|   |---iteration_{ITERATIONS}
|   |   |---point_cloud.ply
|   |   |---color_mlp.pt
|   |   |---cov_mlp.pt
|   |   |---opacity_mlp.pt
|   |   (|---embedding_appearance.pt)
|---cameras.json
|---cfg_args

联系方式

  • 任克睿:renkerui@pjlab.org.cn
  • 蒋理涵:mr.lhjiang@gmail.com

引用

如果您觉得我们的工作对您有所帮助,欢迎引用:

@article{ren2024octree,
  title={Octree-gs: Towards consistent real-time rendering with lod-structured 3d gaussians},
  author={Ren, Kerui and Jiang, Lihan and Lu, Tao and Yu, Mulin and Xu, Linning and Ni, Zhangkai and Dai, Bo},
  journal={arXiv preprint arXiv:2403.17898},
  year={2024}
}

许可协议

请遵循 3D-GS 的许可协议。

致谢

感谢 3D-GSScaffold-GS 的所有作者呈现了如此出色的工作。同时,感谢 Ubuntu-Viewer 的作者对 Linux 系统的适配。

项目介绍

八叉树-GS:迈向具有细节层次结构的三维高斯分布的一致实时渲染【此简介由AI生成】

定制我的领域