【论文笔记】G3R: Gradient Guided Generalizable Reconstruction

原文链接:https://arxiv.org/abs/2409.19405

摘要:大尺度3D场景重建对虚拟现实和仿真等应用来说有重要意义。现有的神经渲染方法(NeRF、3DGS)实现了对大场景的真实重建,但其逐场景优化的成本高、速度慢,且过拟合会带来大视角变换下的伪影。可泛化方法或大型重建模型速度很快,但主要对小场景或物体重建,且渲染质量较低。本文引入可泛化重建方法G3R,可对大场景预测高质量3D场景表达。本文提出学习重建网络,使用可微渲染的梯度反馈信号来迭代更新3D场景表达,将逐场景优化的真实性和数据驱动先验的前馈预测快速性结合起来。在城市驾驶和无人机数据集上的实验表明,G3R可跨场景泛化,并能以10x的速度实现相当于或超越3DGS的性能,且对大视角变化的鲁棒性更高。

0. 梯度指导的可推广重建(G3R)概述

任务:给定大型动态场景中传感器移动平台捕捉的源图像集合 I s r c = { I i } 1 ≤ i ≤ N I^{src}=\{I_i\}_{1\leq i\leq N} Isrc={Ii}1iN和近似的几何脚手架 M \mathcal M M(如激光雷达点或多视图立体中的点),目标是有效重建真实的、可编辑的3D表达 S \mathcal S S,以进行实时摄像头仿真。

梯度指导的可推广重建(G3R):G3R是第一个可在2分钟内建立大型真实场景的可修改数字克隆的方法,且可以>90FPS的速度生成真实度高的新视图。方法如图所示。G3R使用单一神经网络,迭代地更新由脚手架 M \mathcal M M初始化的3D神经高斯表达。
在这里插入图片描述

1. G3R的场景表达

本文对3DGS进行了两种增强:首先为高斯表达增加一个隐式特征向量(称为3D神经高斯),从而为泛化重建和学习优化提供额外能力。其次,将场景分解为近处静态场景、动态参与者和远处区域,以建模无界动态场景。

3D神经高斯:本文的场景表达 S \mathcal S S为3D神经高斯的集合,即 S = { h i } 1 ≤ i ≤ M \mathcal S=\{h_i\}_{1\leq i\leq M} S={hi}1iM,其中每个点由特征向量 h i ∈ R C h_i\in\mathbb R^C hiRC表达。为了渲染,本文使用MLP将3D神经高斯转换为显式的3D高斯 G = { g i } 1 ≤ i ≤ M \mathcal G=\{g_i\}_{1\leq i\leq M} G={gi}1iM g i = f m l p ( h i ) g_i=f_{mlp}(h_i) gi=fmlp(hi)。前14个通道被指定为3D高斯属性(位置、尺度、朝向、颜色和不透明度),并在 f m l p f_{mlp} fmlp中添加跳跃连接。

刚性动态物体和无界场景的表达:3D神经高斯被分解为静态背景 S B \mathcal S^B SB,动态参与者 S A \mathcal S^A SA和远处区域 S Y \mathcal S^Y SY。假设动态参与者进行刚体运动 T ( S A , ξ A ) \mathcal T(\mathcal S^A,\xi^A) T(SA,ξA),其中 T \mathcal T T为刚体变换, ξ A \xi^A ξA为参与者外参。动态点 S A \mathcal S^A SA在不同帧间移动,使用3D边界框指示位置和大小。使用脚手架 M \mathcal M M初始化静态背景和动态参与者的3D神经高斯,并固定一定数量的远处点以建模远处区域。

渲染:给定 S \mathcal S S和相机姿态 Π = { K i , ξ i } \Pi=\{K_i,\xi_i\} Π={Ki,ξi}(其中 K i K_i Ki ξ i \xi_i ξi为相机 i i i的内外参),将 S \mathcal S S转化为3D高斯 G \mathcal G G后,使用可微tile栅格化器渲染图像 I ^ \hat I I^
f r e n d e r ( S ; Π ) : = f r a s t ( G ; Π ) = f r a s t ( f m l p ( S ) ; Π ) : = f r a s t ( f m l p ( S B , S Y , T ( S A , ξ A ) ) ; Π ) \begin{aligned}f_{render}(\mathcal S;\Pi)&:=f_{rast}(\mathcal G;\Pi)=f_{rast}(f_{mlp}(\mathcal S);\Pi)\\ &:=f_{rast}(f_{mlp}(\mathcal S^B,\mathcal S^Y,\mathcal T(\mathcal S^A,\xi^A));\Pi)\end{aligned} frender(S;Π):=frast(G;Π)=frast(fmlp(S);Π):=frast(fmlp(SB,SY,T(SA,ξA));Π)

2. 将2D图像提升为3D作为梯度

过去的泛化方法从源视图提取图像特征,并使用相机和几何先验(如对极几何或多视图立体)聚合之,从而将2D图像提升到3D。但每个图像分别由一个神经网络处理,受到存储限制,不能使用大量的输入图像来重建大型场景。

本文使用“渲染和反向传播”的方法将2D图像提升到3D,以获取3D表达的梯度。

优点:3D梯度作为统一表达,可有效聚合尽可能多的图像;3D梯度将渲染纳入考量,可自然处理遮挡;允许调整3D表达;3D梯度可通过现代可微栅格化引擎快速计算。

给定3D表达 S \mathcal S S,首先渲染源视图图像 I ^ s r c = f r e n d e r ( S ; Π s r c ) \hat I_{src}=f_{render}(\mathcal S;\Pi^{src}) I^src=frender(S;Πsrc),并与输入比较,计算重建损失 L L L,并反向传播到3D表达 S \mathcal S S以获得累积梯度 ∇ S : = ∇ S L ( S , I s r c ; Π s r c ) \nabla_{\mathcal S}:=\nabla_{\mathcal S}L(\mathcal S,I^{src};\Pi^{src}) S:=SL(S,Isrc;Πsrc)
L ( S , I s r c ; Π s r c ) = ∑ i ∥ I i s r c − I ^ i s r c ∥ 2 = ∑ i ∥ I i s r c − f r e n d e r ( S ; Π i s r c ) ∥ 2 ∇ S L ( S , I s r c ; Π s r c ) = ∂ L ( S , I s r c ; Π s r c ) ∂ S = ∑ i ∂ ∥ I i s r c − f r e n d e r ( S ; Π i s r c ) ∥ 2 ∂ S L(\mathcal S,I^{src};\Pi^{src})=\sum_i\|I_i^{src}-\hat I_i^{src}\|_2=\sum_i\|I_i^{src}-f_{render}(\mathcal S;\Pi_i^{src})\|_2\\ \nabla_{\mathcal S}L(\mathcal S,I^{src};\Pi^{src})=\frac{\partial L(\mathcal S,I^{src};\Pi^{src})}{\partial\mathcal S}=\sum_i\frac{\partial \|I_i^{src}-f_{render}(\mathcal S;\Pi_i^{src})\|_2}{\partial\mathcal S} L(S,Isrc;Πsrc)=iIisrcI^isrc2=iIisrcfrender(S;Πisrc)2SL(S,Isrc;Πsrc)=SL(S,Isrc;Πsrc)=iSIisrcfrender(S;Πisrc)2

其中可微函数 f r e n d e r f_{render} frender建立了2D到3D的联系;梯度 ∇ S \nabla_{\mathcal S} S S \mathcal S S为代理,在3D中编码了2D图像。

3. 使用神经网络迭代重建

本节介绍如何给定源图像 I s r c I^{src} Isrc,迭代更新场景表达 S \mathcal S S。在每一步 t t t,根据当前的3D表达 S ( t ) \mathcal S^{(t)} S(t),通过可微渲染计算梯度 ∇ S ( t ) \nabla_{\mathcal S^{(t)}} S(t),从而将2D源图像反投影到3D。随后,将 ∇ S ( t ) \nabla_{\mathcal S^{(t)}} S(t)送入网络 G θ G_\theta Gθ,预测更新的3D表达 S ( t + 1 ) \mathcal S^{(t+1)} S(t+1)
S ( t + 1 ) = S ( t ) + γ ( t ) ⋅ G θ ( S ( t ) , ∇ S ( t ) L ( S ( t ) , I s r c ; Π s r c ) ; t ) ,  t = 0 , 1 , ⋯   , T − 1 \mathcal S^{(t+1)}=\mathcal S^{(t)}+\gamma(t)\cdot G_\theta(\mathcal S^{(t)},\nabla_{\mathcal S^{(t)}}L(\mathcal S^{(t)},I^{src};\Pi^{src});t), \ t=0,1,\cdots,T-1 S(t+1)=S(t)+γ(t)Gθ(S(t),S(t)L(S(t),Isrc;Πsrc);t) t=0,1,,T1

其中 γ ( t ) \gamma(t) γ(t)定义更新尺度。类似梯度下降,期望的衰减调度 γ ( t ) \gamma(t) γ(t)和较小的 T T T,使模型能预测初始的粗糙表达,并快速细化。本文使用DDIM中的余弦调度,并使用带稀疏卷积的3D UNet作为 G θ G_\theta Gθ。迭代过程使得3D表达能够被细化从而提高质量,同时能够使用更高效、更容易学习的小网络。

4. 训练 & 推断

对每个场景,从几何脚手架 M \mathcal M M初始化场景表达 S ( 0 ) \mathcal S^{(0)} S(0),并进行 T T T步迭代细化。为增强泛化性,本文在训练时对源视图 I s r c I^{src} Isrc和新视图 I t g t I^{tgt} Itgt均进行了渲染,并传播梯度到 G θ G_\theta Gθ f m l p f_{mlp} fmlp(注意 G θ G_\theta Gθ的更新只使用源视图的梯度)。对模型进行跨场景训练,总的损失为
L = L m s e ( I ^ , I ) + λ l p i p s L l p i p s ( I ^ , I ) + λ r e g L r e g ( G ) L=L_{mse}(\hat I,I)+\lambda_{lpips}L_{lpips}(\hat I,I)+\lambda_{reg}L_{reg}(\mathcal G) L=Lmse(I^,I)+λlpipsLlpips(I^,I)+λregLreg(G)

其中 L m s e L_{mse} Lmse为光度损失, L l p i p s L_{lpips} Llpips为感知损失, L r e g L_{reg} Lreg为正则化损失(使高斯 G \mathcal G G扁平化以和表面对齐):
L r e g ( G ) = ∑ i max ⁡ ( 0 , d i min ⁡ − ϵ ) L_{reg}(\mathcal G)=\sum_i\max(0,d_i^{\min}-\epsilon) Lreg(G)=imax(0,diminϵ)

其中 d i min ⁡ d_i^{\min} dimin是高斯 g i g_i gi 3尺度中的最小值。

推断:给定预训练重建网络 G θ G_\theta Gθ和神经高斯解码器 f M L P f_{MLP} fMLP,可重建新场景。输入新场景图像 I s r c I^{src} Isrc和3D高斯初始化 S ( 0 ) \mathcal S^{(0)} S(0),迭代计算梯度 ∇ S \nabla_{\mathcal S} S,细化3D表达。最后,将 S ( T ) \mathcal S^{(T)} S(T)转化为标准3D高斯 G ( T ) \mathcal G^{(T)} G(T)以进行实时栅格化。

实施细节:使用下采样的激光雷达点作为初始化高斯 S ( 0 ) \mathcal S^{(0)} S(0)的位置;高斯尺度被初始化为各向同性的,为第三近的点的距离。旋转被初始化为identity,不透明度被初始化为0.7。其它维度被随机初始化。未使用3DGS中的球面谐波。3D梯度 ∇ S ( t ) L ( S ( t ) ) \nabla_{\mathcal S^{(t)}}L(\mathcal S^{(t)}) S(t)L(S(t))在输入网络前,被跨点逐通道归一化。动态场景为静态背景、动态参与者和远处区域使用3个网络,输出层使用tanh激活函数。逐场景重建步数 T = 24 T=24 T=24
泛化能力:G3R能跨数据集泛化,即在A数据集上训练的模型,在B数据集上测试,可超过其它直接在B数据集上训练的方法的性能;若进一步在B数据集上使用少量数据微调,可达到与直接在B数据集上训练的G3R相当性能。

看上去本文方法是两步训练,第一步训练具有泛化能力的网络 G θ , f m l p G_\theta,f_{mlp} Gθ,fmlp,第二步是逐场景训练高斯 S \mathcal S S(速度较快)。此外,和传统3DGS不同,本文方法好像不能在训练过程中改变(静态)高斯数量(当然应该可结合进来,但速度会受到影响)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值