4D Gaussian Splatting:用于实时的动态场景渲染

Wu G, Yi T, Fang J, et al. 4d gaussian splatting for real-time dynamic scene rendering[J]. arXiv preprint arXiv:2310.08528, 2023.

4D-GS 在 3D-GS 出来半年后问世,在 3D-GS 的基础上引入变形场来建模三维动态场景。变形场在每个时间戳将 Gaussians 变换到一个新位置,来模拟场景内元素的运动和形变。实验表明,4D-GS 能够在高分辨率下实现实时渲染(在 RTX 3090 上以 800×800 的分辨率达到 70 FPS),并保持相当高的视图质量。

在这里插入图片描述

更多参考资料如下:

  • 文章总结:4D Gaussian Splatting for Real-Time Dynamic Scene Rendering;
  • 疑难问答:4D Gaussian Splatting for Real-Time Dynamic Scene Rendering | Hacker News

目录

  • 一. 研究思路
  • 二. 4D Gaussian Splatting
  • 三. Gaussian 变形场
    • 1. 3D Gaussian Neural Voxel Encoding
    • 2. Gaussians Deformation Computation
    • 3. 优化
  • 四. 实验结果
    • 1. 数据集
    • 2. 对比实验
    • 3. 消融实验
  • 五. 总结
  • 六. 复现

一. 研究思路

  • 新视图合成 (Novel View Synthesis, NVS) 在 3D 视觉领域非常常见,快速且高质量地表示和渲染动态场景一直是一项重要且具有挑战性的任务。
  • NeRFs 变体能够渲染动态场景,但是训练和渲染的效率太低;3D-GS 能够达到实时的渲染速度,但仅限于静态场景。
  • 文中提出了一种新方法 —— 4D Gaussian Splatting,在保持训练和渲染效率的同时,能够紧凑地表示三维动态场景,从而实现实时渲染和高质量的渲染效果。

4D-GS 在 3D-GS 的基础上,引入 变形场 (deformation field) 来表示 Gaussians 的运动和形变,包括一个多分辨率特征平面 (multi-resolution HexPlane) 和一个轻量级 MLP。在每个时间戳 (timestamp),变形场会将 Gaussians 转换到一个具有新形状的新位置,该变换相当于 Gaussian 的运动和形变。HexPlane 通过计算体素特征进行编码,来建立相邻 Gaussians 之间的关系,从而提高运动和形变预测的准确性;MLP 对特征进行解码并获得 Gaussians 变换后的新位置。最后将变换后的 Gaussians 按时间戳做 Splatting,就能够得到连续的三维动态场景渲染视频。
在这里插入图片描述

二. 4D Gaussian Splatting

虽然 4D Gaussian 本该在每一个时间戳 t t t 都使用一组 Gaussians,但 4D Gaussian Splatting 只保留一组标准的 3D Gaussians S \mathcal{S} S,然后使用变形场 F \mathcal{F} F 预测每一个时间戳 t t t 时 3D Gaussians 的运动和形变状态:
在这里插入图片描述

因此想要表示动态场景只需要学习 S \mathcal{S} S F \mathcal{F} F 即可,并且有:
S ′ = F ( S , t ) \mathcal{S}' = \mathcal{F}(\mathcal{S}, t) S=F(S,t)

其中 3D Gaussians 的信息 S \mathcal{S} S 包括三维位置 X \mathcal{X} X 和协方差矩阵 Σ \Sigma Σ,协方差矩阵 Σ \Sigma Σ 则是由缩放矩阵 S S S 和旋转矩阵 R R R 构成 1。因此学习 3D Gaussians 的 S \mathcal{S} S 就是学习 X \mathcal{X} X S S S R R R 的过程。

为了在保持高渲染质量和快速渲染速度的前提下捕捉相邻 Gaussians 之间的信息,文中采用了多分辨率神经体素 (multi-resolution neural voxels) 来建立 Gaussians 之间的关系。这种方法仅使用四个相邻点对单位体素网格内的变形场进行编码,从而减少了内存消耗。随后引入了一种紧凑的 MLP,与多分辨率神经体素相结合,有效地融合了变形特征,并确保了渲染过程中快速的前向传播速度。

三. Gaussian 变形场

如前文所述,变形场包括多分辨率神经体素和一个轻量级 MLP g g g。多分辨率神经体素其实就是前文所说的多分辨率特征平面 HexPlane 的一个模块,用来编码每个 Gaussian 在时间戳 t t t 时的体素特征;MLP 用来解码,以获得每个 Gaussian 在时间戳 t t t 时的 S ′ \mathcal{S}' S

1. 3D Gaussian Neural Voxel Encoding

在这里插入图片描述

如图所示,空间相邻的 Gaussians 在运动和形变上具有相似的特征,同一个 Gaussian 在相邻时间也会呈现相似的变化特性。并且相隔较远的 Gaussians 之间也具有一定的关联。因此,文中采用 多分辨率特征平面体素模块 (multi-resolution HexPlane voxel module) 对单元体素中的每个Gaussian 的空间和时间信息进行编码。

每个体素模块定义为 R ( i , j ) , i , j ∈ { ( x , y ) , ( x , z ) , ( y , z ) , ( x , t ) , ( y , t ) , ( z , t ) } . R(i, j), {i, j} ∈ \{(x, y),(x, z),(y, z),(x, t),(y, t),(z, t)\}. R(i,j),i,j{(x,y),(x,z),(y,z),(x,t),(y,t),(z,t)}. 这样的编码方式将 4D 信息编码进 6 个二维体素平面。计算每个体素特征的公式如下:
f voxel  = ⋃ l ∏ P ( i , j ) , where  P ( i , j ) = interp ⁡ ( R ( i , j ) ) f_{\text {voxel }}=\bigcup_l \prod P(i, j), \text { where } P(i, j)=\operatorname{interp}(R(i, j)) fvoxel =lP(i,j), where P(i,j)=interp(R(i,j))

f voxel  f_{\text {voxel }} fvoxel  是神经体素的隐特征,利用双线性插值 (bilinear interpolation) 对附近的四个查询体素特征进行插值。

2. Gaussians Deformation Computation

MLP 用来解码和整合有用的特征信息,然后计算 X \mathcal{X} X S S S R R R 的变化量:
Δ X , Δ r , Δ s = g ( f voxel ) \Delta \mathcal{X}, \Delta r, \Delta s=g\left(f_{\text {voxel}}\right) ΔX,Δr,Δs=g(fvoxel)

于是可以计算 X ′ \mathcal{X}' X S ′ S' S R ′ R' R
( X ′ , r ′ , s ′ ) = ( X + Δ X , r + Δ r , s + Δ s ) \left(\mathcal{X}^{\prime}, r^{\prime}, s^{\prime}\right)=(\mathcal{X}+\Delta \mathcal{X}, r+\Delta r, s+\Delta s) (X,r,s)=(X+ΔX,r+Δr,s+Δs)

3. 优化

文中采取了两阶段训练策略:静态场景初始化和变形场微调;

  • 初始化阶段:主要优化静态场景的表示,即只优化 3D Gaussians 的参数;
  • 微调阶段:主要学习变形场的表示,即优化多分辨率神经体素和 MLP;
    在这里插入图片描述

使用重建损失来监督训练过程,并添加基于网格的 TV 损失 L t v \mathcal{L}_{tv} Ltv 到损失函数中:
L = ( C ^ − C ) 2 + L t v \mathcal{L}=(\hat{C}-C)^2+\mathcal{L}_{t v} L=(C^C)2+Ltv

四. 实验结果

4D-GS 在合成数据集和真实数据集上都进行测试,并根据图像的分辨率和场景的复杂性评估了渲染速度。对于合成数据集,4D-GS 在 RTX 3090 GPU 上以 800×800 的分辨率实现了 70 FPS 的渲染速度;对于真实数据集,4D-GS 在 RTX 3090 GPU 上以 1352×1014 的分辨率实现了 36 FPS 的渲染速度。通过实验表明,4D-GS 在实现实时渲染的同时保持了高质量的渲染效果。

1. 数据集

  • 合成数据集:使用 D-NeRF 中的 8 个合成场景,包括 Hell Warrior、Mutant、Hook、Bouncing Balls、Lego、T-Rex、Stand Up、Jumping Jacks。
  • 真实数据集:使用 Nerfies 和 DyNeRF 的真实场景数据集。

2. 对比实验

文中使用 PSNR、L-PIPS、SSIM 作为模型的评价指标,将 4D Gaussian Splatting 和 TiNeuVox-B、KPlanes、HexPlane-Slim、3D Gaussian Splatting 做了对比。定量结果见下表:
在这里插入图片描述

定性结果如图:
在这里插入图片描述

在这里插入图片描述

3. 消融实验

在这里插入图片描述

在这里插入图片描述

五. 总结

4D-GS 参考 D-NeRF(或 Nerfies)中的 deformation,在 3D-GS 的基础上引入变形场来建模三维动态场景。变形场在每个时间戳将 Gaussians 变换到一个新位置,来模拟场景内元素的运动和形变。

六. 复现

4D Gaussian Splatting 使用 Pytorch 框架:

  • 平台:AutoDL
  • 显卡:RTX 3090 24G
  • 镜像:PyTorch 1.11.0、Python 3.8(ubuntu20.04)、Cuda 11.3
  • 源码:https://github.com/hustvl/4DGaussians

(README 中要求 pytorch=1.13.1+cu116,AutoDL 上高于 pytorch 1.10 的版本只有 2.0,对应 CUDA11.8,但超过了 3090 显卡最高支持 CUDA11.5 版本。因此复现时使用 pytorch=1.11.0+cu113,可以成功跑完。也可以在 Colab 里运行 demo)

实验记录

  1. 创建完 Gaussians4D 虚拟环境后,使用 conda activate 指令无法激活环境,改为 source activate 即可;

  2. 下载可用的数据集,并将其上传至正确的位置 4DGaussians/data/dnerf/bouncingballs 以供调用。复现时使用的是 D-NeRF 的合成场景 Bouncing Balls;

  3. 随后开始训练:
    在这里插入图片描述
    在这里插入图片描述

  4. 训练完成后,场景的点云表示被存入 4DGaussians/output/dnerf/bouncingballs/point_cloud 中。由于此前环境安装中没有安装 imageio,因此需要 conda install imageio 安装环境以进行渲染。然后再执行 render.py 后就可以渲染动态场景并合成 mp4 2
    在这里插入图片描述

实验结果

实验证明,4D Gaussian Splatting 的训练和渲染确实又快又准。仅仅经过 10 分钟 2w 轮迭代,就可以完成高质量的三维动态重建。Bouncing Balls 的动态渲染视图如下:


  1. 3D Gaussian Splatting:用于实时的辐射场渲染 ↩︎

  2. https://colab.research.google.com/github/hustvl/4DGaussians/blob/master/4DGaussians.ipynb#scrollTo=RTBK98DNl7_W ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网协议:以太网(Ethernet)详解

文章目录 Ethernet的组成以太网和 Wi-Fi以太网应用场景以太网的发展历程以太网数据链路层CSMA/CD (载波侦听多路访问/冲突检测)推荐阅读 以太网(Ethernet)是一种局域网(LAN)技术,用于在局域网范围内传输数据。它是最常…

业余爱好-社会工程管理记账报税

税务问题笔记 印花税税费申报及缴纳财务和行为税合并纳税申报增值税及附加税费申报企业所得税季度A类申报残疾人就业保障金申报财务报表个税申报 印花税 印花税是对在经济活动和经济交往中书立、领受具有法律效力的凭证的行为征收的一种税。 税费申报及缴纳 财务和行为税合并…

0X04

看到一道有趣的misc题 misc签到题 打开后啥都没有,全选后发现每一行有空格,数了一行发现空格数量转ascil码后是f,猜测都如此, 后面就可以交个脚本了,统计之后转换成ascii from Crypto.Util.number import long_to_b…

每天五分钟计算机视觉:经典的卷积神经网络之VGG-16模型

VGG-16 Vgg16是牛津大学VGG组提出来的,相比于AlexNet来说,AlexNet的一个改进是采用连续的几个4*3的卷积核来代替AlexNet中的较大的卷积核(11*11,5*5)。前面我们也说过了使用小卷积核是优于大的卷积核的,因为多层非线性层可以增加网络深度来保证学习到更加复杂的模式,而且代…

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…

Java 定时任务

Java 定时任务 为什么需要定时任务? 我们来看一下几个非常常见的业务场景: 某系统凌晨 1 点要进行数据备份。某电商平台,用户下单半个小时未支付的情况下需要自动取消订单。某媒体聚合平台,每 10 分钟动态抓取某某网站的数据为…

以AI驱动的Java单元测试解决方案提高开发人员的生产力

2023年11月8日,自动化软件测试解决方案的全球领导者 Parasoft 宣布与 OpenAI 和 Azure OpenAI 供应商进行新的集成,为 Java 开发人员生产力解决方案 Parasoft Jtest 引入GenAI功能。这一增强功能使开发人员和开发经理能够加速并增强他们的 Java 代码测试…

mysql 查询提取json 并去除双引号

1.建表语句 CREATE TABLE uset_test_demo (id bigint(20) NOT NULL AUTO_INCREMENT,context text,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8;2.源数据 {"title": "Harry Potter","author": "J.K. Rowling&qu…

Python中进行特征重要性分析的8个常用方法

更多资料获取 📚 个人网站:ipengtao.com 在机器学习和数据科学领域,理解特征在模型中的重要性对于构建准确且可靠的预测模型至关重要。Python提供了多种强大的工具和技术,能够探索特征重要性的各个方面。 本文将详细介绍8种常用…

JDK10新特性

目录 传送门一、局部变量类型推断1、概念1.1、简单局部变量推断1.2、自定义对象的推断 2、可以使用的场景3、不能使用的场景4、注意事项 二、垃圾回收器的优化1、前置知识1.1、10种垃圾回收器1.2、分代与分区1.3、10种垃圾回收器小总结 2、优化点 三、新增API1、集合新方法copy…

VBA技术资料MF90:在PowerPoint中完成多重查找替换

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

openbabel 安装 生成指纹方法

今日踩坑小结: openbabel 安装: 可以装,但是得在 Linux 环境下,win 环境装会报错(安装不会报错,但是生成指纹的时候会) 指纹: 在下面这个链接里,官方给出了命令行调用 o…