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 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 =l⋃∏P(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. 消融实验
五. 总结
六. 复现
3D Gaussian Splatting:用于实时的辐射场渲染 ↩︎