[TPAMI 2025] Octree-GS: Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 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 的服务器上完成测试。其他类似配置也应能正常运行,但我们尚未逐一验证。
- 克隆此仓库:
git clone https://github.com/city-super/Octree-GS --recursive
cd Octree-GS
- 安装依赖项
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/
...
公开数据
- MipNeRF360 场景由论文作者提供,获取地址为 here。
- Tanks&Temples 和 Deep Blending 的 SfM 数据集由 3D-Gaussian-Splatting 托管,获取地址为 here。
- BungeeNeRF 数据集可通过 Google Drive/百度网盘[提取码:4whv] 获取。
- MatrixCity 数据集可从 Hugging Face/Openxlab/百度网盘[提取码:hqnn] 下载。本文中用于训练的点云:pcd
下载并解压这些数据至
data/文件夹。
自定义数据
对于自定义数据,需使用 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-GS 和 Scaffold-GS 的所有作者呈现了如此出色的工作。同时,感谢 Ubuntu-Viewer 的作者对 Linux 系统的适配。