写在前面&笔者的个人理解
从这一两年发表的论文数量可以看出,自动驾驶街景的重建与仿真备受关注,由此构建的自动驾驶仿真器对corner case的生成以及端到端模型的闭环评估/测试都非常重要,本次分享的是一篇关于自动驾驶场景4D重建的工作DrivingRecon。
- 论文链接: https://arxiv.org/abs/2412.09043
- 开源地址: https://github.com/EnVision-Research/DriveRecon
过去有很多使用3DGS或者Diffusion来做自动驾驶街景重建/生成的工作,比较具有代表性的是StreetGaussian,OmniRe这一类借助3D bbox将静态背景和动态物体解耦的框架,后来又出现了使用4D NeRF学习动态信息的方法,虽然取得了不错的效果,但这些方法都有一个共性,就是需要不断的训练来进行重建,即每个场景训练一个模型,非常耗时。因此作者提出了一种可泛化的自动驾驶4D重建模型DrivingRecon。在模型中,作者引入了PD-Block来更好的融合相邻视角的图像特征,消除重叠区域的高斯;也引入了Temporal Cross-attention来增强时序的信息融合,并且解耦动态和静态物体来更好的学习几何和运动特征。实验结果表明,与现有的视图合成方法相比,DrivingRecon 方法显著提高了场景重建质量和新视图合成。此外,作者还探讨了 DrivingRecon 在模型预训练、车辆自适应和场景编辑中的应用。
相关工作回顾
驾驶场景重建
现有的自动驾驶模拟引擎如 CARLA或 AirSim,在创建虚拟环境时需要花费很多时间,而且生成的数据缺乏现实性。Block-NeRF和 Mega-NeRF提出将场景分割成不同的Block用于单独建模。Urban辐射场利用来自 LiDAR 的几何信息增强了 NeRF 训练,而 DNMP利用预先训练的可变形mesh primitive来表示场景。Streetsurf将场景分为近景、远景和天空类别,获得较好的城市街道表面的重建效果。MARS使用单独的网络对背景和车辆进行建模,建立了一个实例感知的仿真框架。随着3DGS的引入,DrivingGaussian引入了复合动态高斯图和增量静态高斯,而 StreetGaussian优化了动态高斯的跟踪姿态(位姿),并引入了四维球谐函数,用于不同时刻的车辆外观建模。Omnire进一步关注驾驶场景中非刚性对象的建模,例如运动的行人。然而,这些重建算法需要耗时的迭代来建立一个新的场景。
大型重建模型
一些工作提出通过训练神经网络来直接学习完整的重建任务,从而大大提高了重建速度。LRM利用大规模多视图数据集来训练基于Transformer的 NeRF 重建模型,训练完的模型具有更好的泛化性,在单次模型前向传递中,从稀疏姿态图像中重建以物体为中心的3D形状质量更高。类似的工作研究了将场景表示改变为高斯溅射,也有一些方法改变模型的架构以支持更高的分辨率,并将方法扩展到3D 场景。L4GM 利用时间交叉注意力融合多帧信息来预测动态物体的高斯表示。然而,对于自动驾驶,还没有人探索融合多视图的特殊方法。简单的模型会预测相邻视图的重复高斯点,显著降低了重建性能。此外,稀疏的图像监督和大量的动态物体进一步让重建的任务变得更复杂。
文章主要贡献如下:
- DrivingRecon是第一个专门为环绕视图驾驶场景设计的前馈4D 重建模型
- 提出了 PD-Block,学习从不同的视角和背景区域去除冗余的高斯点。该模块还学会了对复杂物体的高斯点进行扩张,提高了重建的质量
- 为静态和动态组件设计了渲染策略,允许渲染图像跨时间序列进行有效监督
- 验证了算法在重建、新视图合成和跨场景泛化方面的性能
- 探索了 DrivingRecon 在预训练、车辆适应性和场景编辑任务中的有效性
方法详解
通常,先看一下论文的框架图有益于对整体的理解,DrivingRecon的整体框架如下:
以上是DrivingRecon的整体思路,下面看一些细节:
3D Position Encoding
这部分主要是为了融合不同视角和不同时间间隔的特征:首先用DepthNet获得uv坐标下的像素深度d_(u,v),方法也很简单,直接使用Tanh激活函数来处理第一个通道的图像特征,然后再将深度投影到世界坐标系:
最后结合图像特征一起输入到PD-Block进行多视角特征融合。为了更好的融合,作者在训练时使用lidar得到的稀疏深度进行约束,即lidar点投影到图像上与之对应的深度算loss,具体计算为:
其中Md为有效深度的mask。
Temporal Cross Attention
因为视角的稀疏性,精确的街景甚至其他场景的重建是非常困难的。为了获取更多的有用特征,增强场景建模效果,在时间维度或空间维度来融合特征是比较常见的方法。文章中的方法可以简单表示为:
其中x是输入的特征,B表示Batch size, T表示时间维度,V表示视角个数,H,W,C表示特征的高,宽以及通道数。注意,与更为常见的时序交叉注意力不一样的是,这里同时考虑时间空间的信息融合, 从倒数第二维度可以看出。
Gaussian Adapter
这里为啥要预测坐标偏移量?是因为作者使用的方法不是严格的像素对齐的,原因是PD -Block通过将资源从简单场景重新分配到更复杂的物体上,有效的管理空间的计算冗余。此时世界坐标的计算变为:
这里输出的光流可以用来获得每一个世界坐标下的点在下一帧的位置,即:
Prune and Dilate Block(PD-Block)
如上图所示,自动驾驶车辆上的相邻相机视野通常会存在重叠部分,就会导致不同视角中的同一个物体会出现重复gaussian预测,叠加后生成的效果会变差,另外在场景表示中,像天空这些区域不需要太多的gaussian来表达,而对于物体边缘处(高频处)则需要更多的gaussian来表示,因此作者提出了一个PD-Block的模块,它可以对复杂实例的高斯点进行扩张,并对相似背景或不同视图的高斯点进行修剪,步骤如下:
(1)将相邻视角的特征图以range view的形式拼接起来,那重叠部分的特征在位置上是比较靠近的,易于融合(2)然后为了减少内存的使用将range view特征分割成多个区域(3)在空间中均匀地选择K个中心,中心特征通过平均其Z个最近点来计算(4)计算区域特征和中心点之间的余弦相似矩阵S(5)根据阈值生成生成mask
动静解耦
分割
主要有两个作用:一是为了获得动态物体的mask(例如车辆和行人),静态物体的mask,以及天空的mask,另外引入语义监督有利网络对整个场景的理解(建模),作者用的模型是DeepLabv3plus。作者还将3D bbox投影到2D图像上,以此做为prompt通过SAM获得更精确的mask,这里使用一个简单的“或”逻辑合并两种处理的方式,确保所有动态的物体都获得对应的mask,相当于双重保障了。
损失函数
训练中的损失函数为:
实验分析
与现有方法的渲染结果对比:
与现有方法的指标对比:
从表1和表2可以看出,不管是动态还是静态对象,指标提升的还是很大的。
重建结果可视化:
泛化性测试结果如下:
消融实验:
最后,文章最后还讨论几个潜在的应用:
车辆适应性:新车型的引入可能导致摄像机参数的变化,如摄像机类型(内参)和摄像机位置(外参)。所提出的四维重建模型能够用不同的摄像机参数来渲染图像,以减小这些参数的潜在过拟合。实验中作者在 Waymo 上使用随机的内参渲染图像,并以随机的方式渲染新的视角图像作为一种数据增强的形式。渲染的图像也会使用图像检测中的数据增强方式,包括调整大小和裁剪,然后结合原始数据训练BEVDepth,结果如下:
预训练模型:四维重建网络能够理解场景的几何信息、动态物体的运动轨迹和语义信息。这些能力反映在图像编码中,其中这些编码器的权重是共享的。为了利用这些能力进行预训练,作者用 ResNet-50替换了编码器。然后重新训练DrivingRecon,没有使用任何语义注释,属于完全无监督的预训练。随后,用预先训练好的模型替换了 UniAD 的编码器,并在 nuScenes 数据集上对其进行了微调。与 ViDAR 相比,使用新的预训练模型取得了更好的性能。
场景编辑:四维场景重建模型能够获得一个场景的全面的四维几何信息,这允许删除,插入和控制场景中的对象。文中给出了一个例子,在场景中的固定位置添加了带有人脸的广告牌,表示汽车停下的corner case:
结论
文章中提出了一种新的4D重建模型DrivingRecon,输入全景视频(环视)即可快速重建出4D自动驾驶场景。其中关键的创新点是提出了PD-Block,可以删除相邻视角的冗余高斯点,并允许复杂边缘周围进行点扩张,增强了动态和静态物体的重建。另外,文章中也引入了一种使用光流预测的动静态渲染方法,可以更好的监督跨时间序列的动态对象。实验表明,与现有方法对比,DrivingRecon在场景重建和新视角生成方面具有更优越的性能。并通过实验证明了可以用于模型的预训练,车辆自适应,场景编辑等任务。