论文地址:[2401.01339] Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting
项目主页:Street Gaussians
Abstract
本文旨在解决自动驾驶场景中动态城市街道建模的问题。近期的方法通过结合跟踪的车辆姿态来扩展神经辐射场(NeRF)以实现车辆的动画效果,从而能够对动态城市街道场景进行逼真的视图合成。然而,其显著的局限性在于训练和渲染速度较慢。我们引入了“街道高斯”(Street Gaussians),这是一种新的显式场景表示方法,可解决这些局限性。具体而言,动态城市场景被表示为一组配备语义logits和3D高斯的点云,每个点云与前景车辆或背景相关联。为了对前景对象车辆的动态进行建模,每个对象点云通过可优化的跟踪姿态以及用于动态外观的4D球谐模型进行优化。这种显式表示允许轻松组合对象车辆和背景,进而允许在半小时的训练内进行场景编辑操作和以135 FPS(1066×1600分辨率)进行渲染。所提出的方法在多个具有挑战性的基准上进行了评估,包括KITTI和Waymo Open数据集。实验表明,所提出的方法在所有数据集上始终优于最先进的方法。代码将被发布以确保可重复性。
3 Method
给定从城市街道场景中的移动车辆捕获的一系列图像,我们的目标是开发一种能够生成用于视图合成的逼真图像的模型。为了实现这一目标,我们提出了一种新颖的场景表示方法,名为“街道高斯”,专门用于表示动态街道场景。如图2所示,我们将动态城市场景表示为一组点云,每个点云对应于静态背景或移动车辆(第3.1节)。这种显式的基于点的表示允许轻松组合单独的模型,实现实时渲染以及对前景对象进行分解以用于编辑应用(第3.2节)。所提出的场景表示可以与现成跟踪器的跟踪车辆姿态一起有效地进行训练,并通过我们的姿态优化策略得到增强(第3.3节)。
3.1 Street Gaussian
在本节中,我们试图找到一种可以快速构建并实时渲染的动态场景表示方法。先前的方法[23, 64]通常面临训练和渲染速度慢以及准确跟踪车辆姿态的挑战。为了解决这个问题,我们提出了一种新颖的显式场景表示方法,名为“街道高斯”,它基于3D高斯[19]构建。在“街道高斯”中,我们用单独的神经点云来表示静态背景和每个移动车辆对象。
接下来,我们将首先关注背景模型,详细阐述与对象模型共享的几个常见属性。随后,我们将深入研究对象模型设计的动态方面。
背景模型:背景模型表示为世界坐标系中的一组点。每个点被分配一个3D高斯,以柔和地表示连续的场景几何形状和颜色。高斯参数由协方差矩阵 ∑ b \sum_b ∑b和位置向量 μ b ∈ R 3 \mu_b \in \mathbb{R}^{3} μb∈R3组成, μ b \mu_{b} μb表示均值。为了在优化过程中避免无效值,每个协方差矩阵进一步简化为缩放矩阵 S b S_{b} Sb和旋转矩阵 R b R_{b} Rb,其中 S b S_{b} Sb由其对角元素表征, R b R_{b} Rb转换为单位四元数。协方差矩阵 ∑ b \sum_{b} ∑b可以从 S b S_{b} Sb和 R b R_{b} Rb中恢复为
∑ b = R b S b S b T R b T ( 1 ) \sum_{b}=R_{b} S_{b} S_{b}^{T} R_{b}^{T} \quad(1) b∑=RbSbSbTRbT(1)
除了位置和协方差矩阵外,每个高斯还被分配一个透明度值 α b ∈ R \alpha_{b} \in \mathbb{R} αb∈R和一组球谐系数 z b = ( z m , l ) l : 0 ≤ ℓ ≤ ℓ m a x m : − ℓ ≤ m ≤ ℓ z_{b} = (z_{m, l})_{l: 0 ≤\ell ≤\ell_{max}}^{m:-\ell ≤m ≤\ell} zb=(zm,l)l:0≤ℓ≤ℓmaxm:−ℓ≤m≤ℓ,以表示场景几何形状和外观。为了获得与视角相关的颜色,球谐系数进一步乘以从视角方向投影的球谐基函数。为了表示3D语义信息,每个点添加一个语义logit β b ∈ R M \beta_{b} \in \mathbb{R}^{M} βb∈RM,其中 M M M是语义类别的数量。
对象模型。考虑一个包含N个移动的前景对象车辆的场景。每个对象都由一组可优化的跟踪车辆姿态和一个点云来表示,其中每个点都被赋予一个三维高斯分布、语义逻辑值以及一个动态外观模型。
物体和背景的高斯属性相似,透明度 α o \alpha_{o} αo和缩放矩阵 S o S_{o} So的含义相同。然而,它们的位置、旋转和外观模型与背景模型有所不同。位置 μ o \mu_{o} μo和旋转 R o R_{o} Ro是在物体局部坐标系中定义的。为了将它们转换到世界坐标系(即背景的坐标系)中,我们引入了物体跟踪姿态的定义。具体而言,车辆的跟踪姿态被定义为一组旋转矩阵 { R t } t = 1 N t \{R_{t}\}_{t = 1}^{N_{t}} {Rt}t=1Nt和平移向量 { T t } t = 1 N t \{T_{t}\}_{t = 1}^{N_{t}} {Tt}t=1Nt,其中 N t N_{t} Nt表示帧数。这种转换可以定义为:
μ w = R t μ o + T t , R w = R t R o ( 2 ) \begin{aligned} \mathbf{\mu}_{w} &= \mathbf{R}_{t}\mu_{o}+\mathbf{T} _{t},\\ \mathbf{R} _{w} &= \mathbf{R}_{t}\mathbf{R} _{o} \end{aligned} \quad(2) μwRw=Rtμo+Tt,=RtRo(2)
其中 μ w \mu_{w} μw和 R w \mathbf{R}_{w} Rw分别是相应物体高斯分布在世界坐标系中的位置和旋转。经过转换后,物体的协方差矩阵 ∑ w \textstyle{\sum}_{w} ∑w可以通过公式1利用 R w \mathbf{R}_{w} Rw和 S o \mathbf{S}_{o} So得到。需要注意的是,我们还发现从现成的跟踪器获取的跟踪车辆姿态存在噪声。为了解决这个问题,我们将跟踪车辆姿态视为可学习的参数。我们会在3.3节详细阐述这一点。
如图3所示,仅仅用球谐系数来表示物体外观对于对移动车辆的外观进行建模是不够的,因为移动车辆的外观会受到其在全局场景中位置的影响。一个直接的解决方案是在每个时间步都使用单独的球谐函数来表示物体。然而,这种表示方式会大幅增加存储成本。**相反,我们引入了4D球谐模型,通过用一组傅里叶变换系数 f ∈ R k f \in \mathbb{R}^{k} f∈Rk(其中 k k k是傅里叶系数的数量)来替换每个球谐系数 z m , l z_{m, l} zm,l。**给定时间步 t t t, z m , l z_{m, l} zm,l可通过执行实值离散傅里叶逆变换来恢复:
z m , l = ∑ i = 0 k − 1 f i cos ( i π N t t ) ( 3 ) z_{m, l}=\sum_{i = 0}^{k - 1} {f}_{i} \cos \left(\frac{i \pi}{N_{t}} t\right) \quad(3) zm,l=i=0∑k−1ficos(Ntiπt)(3)
通过所提出的模型,我们可以在不产生高存储成本的情况下将时间信息编码到外观中。
对象模型的语义表示与背景的语义表示不同。主要区别在于,对象模型的语义是一个可学习的一维标量 β o \beta_{o} βo,它表示来自跟踪器的车辆语义类别,而不是一个 M M M维向量 β b \beta_{b} βb。
初始化方面,三维高斯中使用的运动恢复结构(SfM)[46]点云适用于以对象为中心的场景。然而,对于存在许多观测不足或无纹理区域的城市街道场景,它无法提供良好的初始化。相反,我们使用由自车(ego vehicle)捕获的聚合激光雷达(LiDAR)点云作为初始化。激光雷达点云的颜色是通过投影到相应的图像平面并查询像素值来获得的。
为了初始化对象模型,我们首先收集三维边界框内的聚合点,并将它们转换到局部坐标系中。对于激光雷达(LiDAR)点数少于2000的对象,我们改为在三维边界框内随机采样8000个点作为初始化。对于背景模型,我们对剩余的点云进行体素下采样,并过滤掉训练相机无法观测到的点。我们结合运动恢复结构(SfM)点云来弥补激光雷达在大面积区域覆盖有限的问题。
3.2 Rendering of Street Gaussians
为了渲染“街道高斯”(Street Gaussians),我们需要汇总每个模型的贡献以渲染出最终图像。先前的方法[23, 39, 64, 71]由于采用了神经场表示,所以需要通过复杂的光线行进(raymarching)进行合成渲染。相反,“街道高斯”可以通过将所有点云连接起来并将它们投影到二维图像空间来进行渲染。
具体来说,给定一个要渲染的时间步长 t t t,我们首先根据公式3计算球谐函数,然后根据跟踪的车辆姿态 ( R t , T t ) (R_{t}, T_{t}) (Rt,Tt)利用公式2将对象点云转换到世界坐标系中。接着,我们将背景点云与转换后的对象点云连接起来,形成一个新的点云。
为了利用相机外参 W W W和内参 K K K将这个点云投影到二维图像空间,我们为点云中的每个点计算二维高斯分布:
μ ′ = K W μ , ∑ ′ = J W ∑ W T J T ( 4 ) \begin{aligned} \mu' = \mathbf{KW\mu},\\ {\textstyle \sum}^{\prime} = \mathbf{JW{\textstyle \sum} W}^{T}J^{T} \end{aligned} \quad(4) μ′=KWμ,∑′=JW∑WTJT(4)
其中 J J J是 K K K的雅可比矩阵。 μ ′ \mu' μ′和 ∑ ′ \textstyle {\sum^{\prime}} ∑′分别是二维图像空间中的位置和协方差矩阵。
然后对每个像素进行基于点的 α \alpha α-混合(alpha-blending)用于计算颜色 C C C:
C = ∑ i ∈ N c i α i ∏ j = 1 i − 1 ( 1 − α j ) ( 5 ) C=\sum_{i \in N} c_{i} \alpha_{i} \prod_{j = 1}^{i - 1}(1 - \alpha_{j}) \quad(5) C=i∈N∑ciαij=1∏i−1(1−αj)(5)
在此, α i \alpha_{i} αi是透明度 α \alpha α乘以二维高斯分布的概率, c i c_i ci是根据球谐函数 z z z以及视角方向计算得出的颜色。
我们还可以渲染其他信号,如深度、透明度和语义信息。例如,通过将公式5中的颜色 c c c替换为语义逻辑值 β \beta β来渲染语义图。
3.3 Training
跟踪姿态优化。如公式2所示,在3.2节渲染过程中,物体高斯分布的位置和协方差矩阵与跟踪姿态参数密切相关。然而,跟踪器模型生成的边界框通常存在噪声。直接使用它们来优化我们的场景表示会导致渲染质量下降。因此,我们将跟踪姿态视为可学习参数,方法是为每个变换矩阵添加一个可学习的变换。具体来说,公式2中的 R t R_{t} Rt和 T t T_{t} Tt被 R t ′ R_{t}^{\prime} Rt′和 T t ′ T_{t}^{\prime} Tt′取代,它们的定义如下:
R t ′ = R t Δ R t T t ′ = T t + Δ T t ( 6 ) \begin{aligned} R_{t}' & = R_{t} \Delta R_{t}\\ T_{t}' & = T_{t} + \Delta T_{t} \end{aligned} \quad(6) Rt′Tt′=RtΔRt=Tt+ΔTt(6)
其中 Δ R t \Delta R_{t} ΔRt和 Δ T t \Delta T_{t} ΔTt是可学习的变换。我们将 Δ T t \Delta T_{t} ΔTt表示为一个三维向量,将 Δ R t \Delta R_{t} ΔRt表示为一个由偏航偏移角 Δ θ t \Delta \theta_{t} Δθt转换而来的旋转矩阵。这些变换的梯度可以直接获取,无需任何隐式函数或中间过程,在反向传播过程中也不需要任何额外的计算。
损失函数:我们使用以下损失函数联合优化我们的场景表示、天空立方体贴图和跟踪姿态:
L = L c o l o r + λ 1 L d e p t h + λ 2 L s k y + λ 3 L s e m + λ 4 L r e g ( 7 ) \mathcal{L} = \mathcal{L}_{color} + \lambda_{1} \mathcal{L}_{depth} + \lambda_{2} \mathcal{L}_{sky} + \lambda_{3} \mathcal{L}_{sem} + \lambda_{4} \mathcal{L}_{reg} \quad (7) L=Lcolor+λ1Ldepth+λ2Lsky+λ3Lsem+λ4Lreg(7)
在公式7中, L c o l o r \mathcal{L}_{color} Lcolor是按照[19]所定义的渲染图像和观测图像之间的重建损失。 L d e p t h \mathcal{L}_{depth} Ldepth是渲染深度与将稀疏激光雷达点投影到相机平面所生成深度之间的L1损失。 L s k y \mathcal{L}_{sky} Lsky是用于天空监督的二元交叉熵损失。 L s e m \mathcal{L}_{sem} Lsem是渲染语义逻辑值与输入二维语义分割预测之间的可选的逐像素软最大化 - 交叉熵损失[24], L r e g \mathcal{L}_{reg} Lreg是一个用于去除漂浮物并增强分解效果的正则化项。关于每个损失项的详细信息,请参考补充材料。
5 Experiment
5.4 Applications
“街道高斯”(Street Gaussians)可应用于计算机视觉中的多个任务,包括对象分解、语义分割和场景编辑。
场景编辑:我们这种具有实例感知的场景表示方法能够实现多种类型的场景编辑操作。我们可以旋转车辆的行驶方向(图7(a)),平移车辆(图7(b)),以及将场景中的一辆车替换为另一辆车(图7(c))。
物体分解:我们在Waymo数据集下将我们的方法的分解结果与NSG [39]和MARS [64]进行了比较。如图8所示,NSG无法将前景物体从背景中分离出来,而MARS的结果由于模型容量以及缺乏正则化处理而显得模糊不清。相比之下,我们的方法能够生成高保真且清晰的分解结果。
语义分割:我们将我们渲染出的语义图的质量与Video-K-Net [24]在KITTI数据集上的语义预测结果进行了比较。我们的语义分割模型是依据Video K-Net的结果进行训练的。定性和定量结果分别如图9和表4所示。得益于我们的表示方法,我们的语义图取得了更好的性能。
6 Conclusion
本文介绍了“街道高斯”(Street Gaussians),这是一种用于对动态城市街道场景进行建模的显式场景表示方法。所提出的表示方法将背景和前景车辆分别建模为一组神经点云。这种显式表示允许轻松组合对象车辆和背景,能够在半小时的训练时间内实现场景编辑和实时渲染。此外,我们还证明了,仅使用现成跟踪器所提供的姿态,所提出的场景表示方法就能够取得与使用精确的真实姿态所达到的性能相当的效果。我们在多个数据集上进行了详细的消融实验和对比实验,证明了所提出方法的有效性。
A More implementation details
A.1 Street Gaussians implementations.
点云初始化。我们将相机位姿视为已知参数,通过三角测量法来获取背景模型的运动恢复结构(SfM)点云。由于运动物体违背了多视图一致性的假设,所以在特征提取过程中,我们利用如图10所示的掩模来忽略这些部分。由于运动恢复结构点云和激光雷达(LiDAR)点云都是在世界坐标系中定义的,所以我们可以直接将它们连接起来。
物体语义。为了将表示物体的一维标量 β o \beta_{o} βo与表示背景的 M M M维向量 β b \beta_{b} βb进行合并,在渲染过程中,我们将 β o \beta_{o} βo转换为一个针对车辆标签的 M M M维独热向量(one-hot vector)。
天空立方体贴图。天空立方体贴图将视角方向 d d d作为输入,并输出天空颜色 C s k y C_{sky} Csky。设高斯分布的渲染颜色和不透明度分别为 C g C_{g} Cg和 O g O_{g} Og,则最终的渲染颜色 C C C可写为:
⁍ ⁍ ⁍
损失函数Loss functions
正如我们在主文中所探讨的,我们的总损失函数如下:
L = L c o l o r + λ 1 L d e p t h + λ 2 L s k y + λ 3 L s e m + λ 4 L r e g ( 9 ) \mathcal{L}=\mathcal{L}_{color}+\lambda_{1}\mathcal{L}_{depth}+\lambda_{2}\mathcal{L}_{sky}+\lambda_{3}\mathcal{L}_{sem}+\lambda_{4}\mathcal{L}_{reg} \quad(9) L=Lcolor+λ1Ldepth+λ2Lsky+λ3Lsem+λ4Lreg(9)
以下是对各项损失函数的详细说明:
- 颜色损失( L c o l o r \mathcal{L}_{color} Lcolor)
我们在渲染图像与观测图像之间应用 L 1 L_{1} L1损失和离散结构相似性指数度量(D - SSIM)损失,其计算公式为:
⁍ ⁍ ⁍
我们依照文献[19]的做法,将 λ S S I M \lambda_{SSIM} λSSIM设置为0.2 。
- 深度损失( L d e p t h \mathcal{L}_{depth} Ldepth)
我们针对渲染深度 D D D和激光雷达测量所得的深度 D lidar D^{\text{lidar}} Dlidar应用 L 1 L_{1} L1损失,具体公式为:
L d e p t h = ∑ ∥ D − D lidar ∥ 1 ( 11 ) \mathcal{L}_{depth}=\sum\|\ D - D^{\text{lidar}}\|\ _{1} \quad(11) Ldepth=∑∥ D−Dlidar∥ 1(11)
(这里 ∑ ∥ D − D lidar ∥ 1 \sum\|\ D - D^{\text{lidar}}\|\ _{1} ∑∥ D−Dlidar∥ 1表示对所有对应点处的 ∥ D − D lidar ∥ 1 \|\ D - D^{\text{lidar}}\|\ _{1} ∥ D−Dlidar∥ 1进行求和操作,以得到整体的深度损失值)我们对深度误差最小的95%的像素进行优化,以防止有噪声的激光雷达观测数据影响优化过程[71]。 λ 1 \lambda_{1} λ1被设置为0.01。
- 天空损失( L s k y \mathcal{L}_{sky} Lsky)。
我们在渲染出的不透明度 O g O_{g} Og和预测的天空掩模 M s k y M_{sky} Msky之间应用二元交叉熵损失:
L s k y = − ∑ ( ( 1 − M s k y ) log O g + M s k y log ( 1 − O g ) ) \mathcal{L}_{sky}=-\sum((1 - M_{sky})\log O_{g} + M_{sky}\log(1 - O_{g})) Lsky=−∑((1−Msky)logOg+Mskylog(1−Og))
M s k y M_{sky} Msky是由基于文本的分割模型(Grounded SAM)[44]生成的。具体来说,我们首先通过向目标检测模型(Grounding Dino)[31]输入文本“sky”来获取二维框。然后我们将这些框作为提示输入到分割模型(SAM)[21]中,并得到预测的天空掩模。 λ 2 \lambda_{2} λ2被设置为0.05。
- 语义损失( L s e m \mathcal{L}_{sem} Lsem)。我们在渲染出的语义逻辑值和预测的二维语义分割结果[24]之间应用逐像素的软最大化 - 交叉熵损失。为了防止有噪声的输入语义标签影响场景几何结构[49],对于 L s e m L_{sem} Lsem,我们仅对语义逻辑值 β \beta β进行反向传播。 λ 3 \lambda_{3} λ3被设置为0.1。
- 正则化损失( L r e g L_{reg} Lreg):我们损失函数中的正则化项被定义为对分解出的前景物体的累积透明度值( O o b j O_{obj} Oobj)的熵损失:
L r e g = − ∑ ( O o b j log O o b j + ( 1 − O o b j ) log ( 1 − O o b j ) ) \mathcal{L}_{reg}=-\sum\left(O_{obj}\log O_{obj}+(1 - O_{obj})\log(1 - O_{obj})\right) Lreg=−∑(OobjlogOobj+(1−Oobj)log(1−Oobj))
我们在自适应控制过程之后添加这项损失,以帮助我们的模型更好地区分前景和背景。图11展示了定性结果,这些结果证明了该正则化项的效果。 λ 4 \lambda_{4} λ4被设置为0.1。
参考资料
1.einsum用法解释:https://rogerspy.github.io/2021/09/12/einsum-mhsa/, https://pytorch.org/docs/stable/generated/torch.einsum.html#torch-einsum,
本文仅做学术分享,如有侵权,请联系删文。