基于三维高斯溅射的快速辐射场渲染

我要开发同款
匿名用户2024年07月31日
52阅读
所属分类aipytorch、Gaussian、NeRF、3D、XR、Alibaba
开源地址https://modelscope.cn/models/Damo_XR_Lab/cv_gaussian-splatting-recon_damo

作品详情

该模型当前使用的是默认介绍模版,处于“预发布”阶段,页面仅限所有者可见。
请根据模型贡献文档说明,及时完善模型卡片内容。ModelScope平台将在模型卡片完善后展示。谢谢您的理解。

Clone with HTTP

 git clone https://www.modelscope.cn/sundaymm/Gaussian-Splatting.git

-->

Clone with HTTP

 git clone https://www.modelscope.cn/Damo_XR_Lab/cv_gaussian-splatting-recon_damo.git

基于三维高斯溅射的快速辐射场渲染

任务

Gaussian-Splatting通过对空间显式建模为3D Guassian Splats,根据多视角图像进行辐射场重建和实时推理。在多个开源数据集上,本算法可以获得SOTA的渲染效果以及效率。

模型描述

针对NeRF训练时间长以及推理速度慢的问题,本算法提出一种快速可微3D Gaussian Splatting光栅化技术,极大加速了训练时间,并且结合多阶球谐函数和3D Gaussian的各向异性表达能力,获得最优的渲染质量,另外在推理阶段可实现1080P的高质量实时渲染(FPS>30)。

效果展示

以下是在Mip-Nerf360数据上的本方法和其他方法的渲染效果对比

performance

期望模型使用方式以及适用范围

本方法可以从SFM生成的稀疏点云和随机生成的点云进行初始化,目前兼容2种数据组织格式:

  • 实拍真实场景,例如Mip-NeRF360,包含colmap SFM计算结果
  • synthetic bounded场景,例如NeRF-synthetic

目标场景

  • 需要对单一静态物体或静态场景进行三维重建的场景
  • 对实时新视角合成有需求的场景

运行环境

  • 模型只支持GPU上运行,GPU显存要求大于等于24G,图像分辨率越大,显存要求越高
  • 已在RTX4090及以上显卡上测试通过,具体效率与GPU性能相关,可能存在一些差异

模型局限性以及可能的偏差

  • 暂不支持unbounded scene的训练,可参照Mip-NeRF360的数据处理方式
  • 在城市规模场景数据上渲染质量有损失,需要针对性进行算法优化
  • 在用户自定义数据集的训练依赖colmap的相机视角估计,可能影响重建渲染结果

如何使用

数据采集及预处理

若使用自摄数据,不限拍摄设备,采集过程需要对重建物体或场景进行多视角的拍摄,尽量覆盖多样视角,并保证提取的图像帧>=100。并需要先利用colmap或类似工具对相机进行内外参求解以及稀疏点云恢复。详细数据处理请参考Data Processing

新视角渲染

在ModelScope框架上,训练好一个Gaussian-Splatting模型后即可以通过简单的Pipeline调用来使用。(仅支持GPU运行)

推理代码范例

已有一个预训练的模型,按照下列代码可以进行推理

import os
from modelscope.msdatasets import MsDataset
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.utils.test_utils import test_level


model_id = 'Damo_XR_Lab/cv_gaussian-splatting-recon_damo'

## adjust data_dir and ckpt_path to your custom path
data_dir = '/nfs/mipnerf360/bicycle'
ckpt_path = '/nfs/pretrained_models/bicycle'
data_type = 'colmap'
pretrained_scene = 'bicycle'
render_dir = os.path.join('./exp', pretrained_scene)

gaussian_splatting_recon = pipeline(Tasks.gaussian_splatting_recon,
                                    model=model_id,
                                    data_type=data_type,
                                    data_dir=data_dir,
                                    ckpt_path=ckpt_path
                                    )


gaussian_splatting_recon(dict(test_mode='evaluation', render_dir=render_dir))

也可以通过下列参数代码运行样例模型(nerf_synthetic/chair)

data_dir = ''
ckpt_path = ''
data_type = 'blender'
pretrained_scene = 'chair'

训练代码范例

请参考训练过程

相关论文以及引用信息

@Article{kerbl3Dgaussians,
      author       = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George},
      title        = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
      journal      = {ACM Transactions on Graphics},
      number       = {4},
      volume       = {42},
      month        = {July},
      year         = {2023},
      url          = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}
}
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论