项目主页
https://nv-tlabs.github.io/lift-splat-shoot
摘要
自动驾驶汽车感知的目标是从多个传感器中提取语义表示,并将这些表示融合到一个“鸟瞰图(Bird's-eye-view,即BEV)”坐标系中, 以供运动规划使用 。本文提出一种新的端到端架构,从任意数量的相机中直接提取场景的BEV表示。我们的方法背后的核心思想是将每个图像单独通过“抬升(Lift)”生成每个相机的3D特征(a frustum of features), 然后将所有3D特征“拍扁(Splat)”到光栅化的鸟瞰图网格中。通过对整个相机装置进行训练,证明了该模型不仅能够学习如何表示图像, 而且能够学习如何将所有相机的预测融合为一个场景的统一表示, 同时对标定误差具有鲁棒性。在目标分割和地图分割等标准鸟瞰图任务上,所提出的模型优于所有基线和之前的工作 。为了追求学习运动规划(Motion Planning)的密集表示的最终目标,我们通过将模板运动轨迹“投射(Shoot)”到我们的网络输出的BEV Cost Map中,展示了我们模型推理出的representations能够实现可解释的端到端的运动规划 。最后使用激光雷达提供的真值对模型进行了评测。
1. 简介
计算机视觉算法通常将图像作为输入,并输出与坐标系无关的预测——例如分类——或与输入图像在同一坐标系中的预测——例如目标检测、语义分割或全景分割。
这种模式与开箱即用的自动驾驶中的感知算法模式不匹配。在自动驾驶中,将多个传感器作为输入,每个传感器具有不同的坐标系,感知模型最终的任务是在新的坐标系——自车(ego car)坐标系——中产生预测结果,以供下游路径规划器(Planner)使用,如图.2所示。
有许多简单、实用的策略可以将单图像范式(paradigm)扩展到多视图场景。例如,对于n个相机的3D目标检测问题,可以将单个图像检测器单独应用于所有输入图像,然后根据相机的内参和外参(相机坐标系到自车坐标系的转换关系)将每个相机的检测目标旋转+平移(rotate and translate)到自车坐标系。这种单视图范式到多视图场景的扩展蕴含了三个宝贵的对称性:
- 平移不变性(Translation equivariance)——如果图像内的像素坐标全部被平移,输出将发生等量的位移。全卷积单图像目标检测器大致具有此属性, 这种多视图扩展也从它们继承了此属性[11][6] 。
- 顺序不变性(Permutation invariance)——最终输出不依赖于N个相机的特定顺序。
- 自车坐标系等距不变性(Ego-frame isometry equivariance)——在给定的图像中,无论捕获图像的相机相对于ego汽车位于何处, 都将检测到相同的对象。声明这个属性的一种等效方式是,ego-frame的定义可以被旋转/平移,输出也会随之旋转/平移。
上述简单方法的缺点是,使用单幅图像检测器的后处理检测结果阻碍了人们获取ego-frame中的预测结果和传感器输入之间的偏差。由此导致,这种模型无法以数据驱动的方式学习跨相机融合信息的最佳方法。这也意味着反向传播不能使用来自下游运动规划器的反馈来自动地改善感知系统。
本文提出一种名为" Lift-Splat "的模型,保留了上述设计确定的3种对称性,同时也是端到端的( end-to-end differentiabl)。在第3节中,我们解释了我们的模型如何通过生成上下文特征的截头锥体形状(frustum-shaped,参考图4)点云将图像“抬升(Lift)”为3D,并将所有截头锥体“拍扁(splats)”到参考平面上,以便下游的运动规划任务使用。在第3.3节中,我们提出了一种将建议轨迹( proposal trajectorie)“投射(Shooting)”到这个参考平面以进行可解释的端到端运动规划的方法。在第4节中,确定了在全相机平台上有效训练lift-splat模型的实现细节。在第5节中提供了经验证据,证明了我们的模型从可能输入的分布中学习到一种有效的信息融合机制。
2. 相关工作
从多个相机的图像数据中学习统一表征的方法,建立在传感器融合和单目目标检测方面的最新工作成果之上。来自Nutonomy [2] 、Lyft [13] 、Waymo [35]和Argo [3]的大规模多模态数据集,近来已经使仅以相机输入为条件的整个360度场景的局部ego车辆的充分表征学习成为可能。我们在Lift-Splat架构中探索了这种可能性。
2.1. 单目(Monocular)目标检测
单目目标检测器根据如何对坐标系转换建模来定义,这里的坐标系转换指的是图像平面(Image Plane)坐标系到给定的三维参考坐标系。一个标准的技术是在图像平面上应用一个成熟的2D物体检测器, 然后训练第二个网络,将2D Box回归到3D Box [12,26,31,27]。nuScenes benchmark [31]上目前最先进的3D物体检测器使用了这样一种架构:该架构训练了一个标准的2D检测器,并使用损失函数来预测深度,该损失函数试图将错误的深度误差与错误的Box造成的误差分离开来 。这些方法在3D目标检测benchmark上取得了很好的性能, 因为图像平面中的检测解决了单目深度预测中关于目标检测的基本问题。
最近取得成功的一种方法是分别训练两个网络,一个网络进行单目深度预测,另一个网络单独进行BEV检测[39][40]。这些方法被称为“伪激光雷达(pseudolidar)”。pseudolidar成功的直观原因是其能够训练BEV网络,该网络可以在最终评估检测的坐标系中运行,相对于图像平面坐标系,欧氏距离在BEV坐标系下更有意义 。
第三类单目目标检测器使用3维目标原语(primitives),这些primitives根据它们在所有可用相机上的投影来获取特征。Mono3D [4]通过在地平面上生成三维proposal,并通过投影到可用图像平面上对其进行评分,最终在KITTI数据集上实现了最先进的(SOTA)单目目标检测 。正交特征变换(Orthographic Feature Transform)[29] 建立在Mono3D之上,通过将体素的固定立方体映射到图像上以收集特征,然后训练第二个“BEV”CNN以在3D坐标系中检测体素中的特征。我们的模型能够解决这些模型存在的一个潜在性能瓶颈,那就是一个像素为每个体素贡献了相同的特征, 而没有依赖于该像素对应对象的深度。
2.2. BEV坐标系中的推理
最近,通过使用相机内参和外参从而直接在BEV坐标系中进行推理的模型获得了大量的关注。MonoLayout [21]从单幅图像进行BEV推理,并使用adversarial 损失来帮助模型修复合理的隐藏物体。同时期的工作,金字塔占用网络(Pyramid Occupancy Networks )[28]提出了一 种transformer架构,可将图像表示转换为BEV表示。FISHING Net [9]——也是同时期的工作——提出了一种多视图架构,同时对象进行分隔并执行未来预测。在第5节中展示了我们的模型在经验上优于之前的工作。这些架构,以及我们的架构,都使用了类似于“multi-plane”图像的数据结构, 这些图像来自机器学习图形社区 [34,32,38,20] 。
3. 方法
本节提出一种从任意相机装置捕获的图像数据中学习场景鸟瞰图表示(BEV representations)的方法。我们设计了模型,使其尊重在第1节中确定的对称性。
3.1. Lift:隐式深度分布
我们模型的第一阶段单独对相机装置中的每个图像进行操作。这一阶段的目的是将每个图像从局部二维坐标系“抬升(Lift)”到所有相机共享的三维坐标系。
单目传感器融合的挑战在于,我们需要深度信息才能将相机坐标转换为3D参考帧坐标,但与每个像素相关联的“深度”本质上是模糊的。我们提出的解决方案是为每个像素上所有可能的深度生成表示。
点云中每个点的上下文向量(context vector)被参数化,以匹配注意力和离散深度推理的概念。在像素p,网络预测每个像素的上下文向量和深度分布。然 后,与点相关联的特征被定义为像素 的上下文向量用深度分布加权的结果:
请注意,如果我们的网络预测是一个One-Hot向量,则 点的上下文将只针对某个深度非零,和pseudolidar方法[39] 一样。如果网络预测的深度为均匀分布,那么网络将为分配给像素p预测出与深度无关的点的表示,如OFT方法 [29] 。因此,从理论上讲,我们的网络能够自动选择是将图像中的上下文放置在BEV表示的特定位置,还是将上下文扩散到整个光线空间中(如果深度是模糊的)。
总而言之, 理想情况下,我们希望为每个图像生成一个函数,该函数可以在任何空间位置查询并返回上下文向量。为了利用离散卷积的优势,我们选择将空间离散化。对于相机来说,相机可见的空间体积对应于一个平头金字塔。如图3所示。
笔者注:
相当于2D图片上的一个点(像素)对应3D世界的一条射线,故可以在这条直线上采样N个点(图3中用了10个,实际用了41个);之后网络需要预测这个特征点的深度信息 (distribution over depth,参考直线上的直方图),本文是用softmax的概率表示,用一个D维的向量经过softmax来表示,D表示4-45米范围内以1米为间隔的距离,也就是 D=41,这样的话D上每个位置就代表了该像素处于这个深度范围的概率值。
利用深度信息加权 (scale) 同一位置的图像特征 C(参考图3右侧,由于网络预测的深度在第三个 bin 较高,所以当深度 D=3 时特征与图片特征C最接近,而其余深度处特征较弱)。对一张图片每个2D特征点做相同的操作,就可以生成一个形状类似平头金字塔 (frustum,如图4) 的点云。
3.2. Splat:柱状池化
我们遵循pointpillar [18]架构,转换“Lift”步骤构建的大型点云结果。“Pillars”是具有无限高度的体素。我们将每个点分配给其最近的Pillar,并执行sum pooling,以创建一 个 C×H×W 的张量,可以由标准CNN进行BEV推理。整个lift-splat架构如图4所示 。
就像OFT [29]使用积分图像来加快池化步骤一样,我们应用类似的技术来加快sum pooling过程。考虑到生成的点云大小,效率对于训练模型至关重要。我们并非填充每个Pillar然后执行sum pooling,而是通过使用打包和利用“cumsum trick”进行求和池化来避免padding。该操作具有解析梯度(analytic gradient),可以有效地计算以加速autograd,正如第4.2小节所解释的那样。
实际工程中,可以首先构建一个Pillar-based BEV视角的特征图(200x200分辨率,覆盖以车为中心边长100米的正方形区域),然后将上一步骤得到的6个平头金字塔点云中的每个点匹配 (assign) 给距离最近的Pillar,最终BEV space上每个Pillar的特征就是所有匹配到的特征点的和池化 (sum pooling)。
3.3. Shoot:运动规则
Lift-Splat模型的关键方面是,它能够从纯相机输入中进行端到端的运动规划代价图(cost map)学习。在测试时,可以通过“投射(shoot)”不同的轨迹, 对其成本进行评分, 然后根据最低成本轨迹[25]来实现使用推理的成本图进行运动规划。在5.6节中,探究了本模型实现端到端可解释的运动规划的能力,并将其性能与基于激光雷达的端到端神经运动规划器进行了比较。
我们将 “规划(planning)"定义为预测自车K个模板轨迹的分布:
以传感器观测为条件。该方法受到最近提出的神经运动规划器( Neural Motion Planne,NMP)[41] 的启发,该架构以点云和高精度地图为条件,生成可用于对所提出的轨迹进行评分的 cost-volum结果。
与NMP中提出的硬边界(hard-margin)损失不同,本文将规划定义为对一组K模板轨迹的分类。为了利用规划问题的cost-volume性质,我们强制K个模板轨迹上的分布采取以下形式:
其中是索引到位置x, y的cost map,cost map基于特定的观察 预测得到,因此可以通过优化专家轨迹的对数概率从数据中进行端到端的训练。对于标签,给定一个真值轨迹,我们计算到模板轨迹 的L2距离最近邻居,然后使用交叉熵损失(cross entropy loss)进行训练。
的这种定义使我们能够学习可解释的空间成本函数,而无需定义NMP [41]中的硬边际损失。
在实践中,通过在大量的专家轨迹上运行K-Means来确定模板轨迹集合。在我们的实验中,用于“Shooting”Cost Map的模板轨迹集可视化在图5中 。
4. 实现
4.1. 架构细节
我们模型的神经网络结构类似于OFT [29]。与OFT一样,我们的模型有两个大型骨干网络(backbones)。其中一个backbone分别对每个图像进行操作,以对每个图像生成的点云进行特征化。当点云被“Splat(拍扁)”到参考坐标系中的Pillar时,另一个backbone开始对点云发挥作用。两个网络由我们的Lift-Splat Layer连接,如第3节中的定义,并在图4中可视化 。
对于单独操作每个图像的网络,在包括baseline在内的所有模型的所有实验中,我们都利用了EfficientNet-B0[37]在Imagenet[30]上预训练的 layers 。EfficientNets是在资源有限的情况下通过穷尽的体系结构搜索发现的网络体系结构, 其深度、宽度和分辨率按比例放大。相对于ResNet-18/34/50[8],我们发现EfficientNets在所有模型上都能实现更高的性能,只是需要更多的优化步骤才能收敛,略有不便。
对于我们的BEV网络,我们使用类似于PointPillar[18]的ResNet模块(Blocks)的组合。具体来说,在内核尺寸为7,步长为2卷积之后,进行Batch Norm[10] 和 ReLU [22] ,然后是ResNet-18 的前 3 个元层,获得不同分辨率3个鸟瞰图表示,分别是,,。然后,按尺度因子4 对进行上采样,与拼接,应用resnet块,最后上采样 2,以返回到原始输入鸟瞰伪图像的分辨率。在我们的最终网络中有1430万个可训练参数。
有几个超参数决定了我们模型的“分辨率”。首先是输入图像的尺寸:H × W。在下面的所有实验中, 我们将输入图像的大小Resize和裁剪为128 × 352, 并相应地调整外参和内参。网络的另一个重要超参数是BEV网格的分辨率:X × Y。在我们的实验中,我们将bins在x和y上均设置在-50米到50米之间,cells大小为0.5米× 0.5米 。因此,结果网格是200 × 200。最后是D的选择,它决定了网络预测的深度分辨率。我们将D限制在4.0米和45.0米之间,间距为1.0米。有了这些超参数和架构设计选择,模型的前向传递在Titan V GPU上以35 hz的速度运行 。
4.2. 锥形池化累积求和技巧
训练效率对于从整个传感器平台的数据中学习至关重要。在第3节中,我们选择对Pillars进行sum pooling,而不是max pooling,因为我们的"cumulative sum"技巧可以避免由于padding而过度使用内存。“累积和技巧”是观察到,总和池可以通过根据 bin id 对所有点进行排序,对所有特征执行累积和,然后减去 bin 部分边界处的累积和值来执行。不依赖autograd对所有三个步骤进行反向传播, 而是可以推导出模块整体的analytic gradient ,将训练速度提高2倍。我们称该层为“Frustum Pooling” , 因为它处理将N个图像产生的Frustum(平头金字塔)转换为与相机数量n无关的固定维度C × H × W张量 。代码可以在我们的project page上找到。
5. 实验与结果
我们使用nuScenes[2]和Lyft Level 5[13]数据集来评估我们的方法。nuScenes是一个大型数据集,包含1k个场景的点云数据和图像数据,每个场景长度为20秒。两个数据集中的相机装置均由6个相机组成,它们大致指向前、前左、前右、后左、后右和后方向。在所有数据集中,相机的视场之间有一个小的重叠。每个数据集中都有对应的相机外参和内参进行坐标转换。由于我们的模型是在相机校准的条件下进行的,因此它能够处理这些转换。
我们定义了两个基于对象的(object-based)分割任务和两个基于地图的(map_based)任务。对于目标分割任务,我们通过向鸟瞰图中投射3D边界框来获得真实的鸟瞰图目标。nuScenes上的car Segmentation指的是类别为vehicle.car的所有边界框。nuScenes上的vehicle segmentation指的是所有vehicle类别的边界框。Lyft上的car分割指的是类别Car的所有边界框,nuScenes上的vehicle分割指的是类别 ∈ { Car, truck, other_vehicle, bus, bicycle}。对于地图,我们使用nuScenes提供的地图转换layers将nuScenes地图转换到到ego坐标系,通过提供的6自由度定位和栅格化信息。
对于所有的目标分割任务, 用正权重1.0的二进制交叉嫡(binary cross entropy)进行训练 。对于车道分割,我们将正权重设置为5.0,对于道路分割,我们使用正权重1.0 [24]。在所有情况下,我们使用Adam [14]进行300k步的训练,学习率1e−3,权重衰减1e−7。我们使用PyTorch框架[23]。
Lyft数据集没有标准的train/val划分。我们分离了48个Lyft场景进行验证,以获得与nuScenes大致相同大小的验证集(Lyft有6048个样本,nuScenes有6019个 样本)。
5.1. Baselines描述
与普通的CNN不同,我们的模型在初始化时配备了三维结构。通过与由标准模块组成的CNN进行比较,表明这种结构对良好的性能至关重要。遵循类似于MonoLayout[21]的架构,也训练一个CNN,仅从图像中输出BEV标签,但在设计架构时没有利用 inductive bias,只在单个相机上训练。该架构具有一个EfficientNet-B0 Backbone,可独立提取所有图像的特征。我们将这些表征连接起来并执行双线性插值进行上采样,转换为张量,作为我们的模型输出的张量。我们设计的网络与我们的模型具有大致相同的参数数量。该基线的弱性能表明,在多视图配置中明确将第一节中的对称性3应用到模型中是多么重要。
为了表明我们的模型正在预测有用的隐式深度,我们将其与预训练CNN的权重被冻结的模型以及OFT [29]进行比较。我们在所有任务上的表现都超过了这些基线,如表1和2所示。我们还超过了在相同的分割任务上的进行性能测试的同时期工作[9][28]。因此,该架构正在为下游任务学习有效的深度分布以及有效的上下文表示。
5.2. 分割
实验证明,Lift-Splat模型能够在BEV坐标系中根据监督学习语义3D表示。对象分割任务的结果如表1所示,地图分割任务的结果如表2所示 。在所有benchmark中,我们的表现都超过了baseline。本文相信,通过隐式投影到3D,对于性能的提高是非常巨大的,特别是在对象分割方面。我们还包括了两个同时期工作的IOU分数[9][28],尽管这两篇论文都使用了不同的鸟瞰图网格定义和不同的Lyft数据集验证分割,因此还不可能进行真正意义上的比较。
5.3. 鲁棒性
由于BEV CNN从数据中学习如何融合跨相机的信息,我们可以训练模型,使其对自动驾驶中发生的简单噪声模型具有鲁棒性,例如外参存在偏差或相机意外挂掉。在图6中,我们验证了通过在训练期间丢弃相机,我们的模型在测试时仍然可以更好地处理丢弃的相机。事实上,当所有6个摄像头都存在时,表现最好的模型是在训练过程中从每个样本中随机丢弃一个摄像头进行训练的模型。我们推断,传感器dropout迫使模型学习不同相机上图像之间的相关性,类似于dropout的其他变体[33][5]。我们在图6的左侧显示,使用噪声外参训练模型可以得到更好的测试性能。对于测试时的少量噪声,在外部环境中训练的无任何噪声的模型表现最好,因为BEV-CNN可以更有信心地相信splat的位置。对于较大的外参噪声,该模型保持了良好的性能。
在图7中,我们在nuScenes上的car分割为每个相机测量了“重要性”。请注意,在nuScenes上丢失摄像头意味着汽车局部区域的某些区域没有传感器测 量,因此性能严格地受整个传感器装置性能的上限限制 。网络由于缺少摄像头而进行修复的定性示例如图8所示。以这种方式衡量每个摄像头的重要性, 表明传感器冗余对安全性更重要。
5.4. Zero-Shot Camera Rig Transfer
我们现在探究Lift-Splat的泛化能力 。在第一个实验中, 当只对nuScenes相机组的一部分相机的图像进行训练, 但在测试时可以访问剩下的两个相机图像时,我们测量了我们模型的性能。在表3中,我们展示了对于car segmentation,当测试阶段加入了新的相机且不经过任何重新训练时,我们的模型的性能提升。
我们将上述实验进一步推进, 并探索如果只在nuScenes数据上训练, 我们的模型对Lyft摄像头的泛化能力如何。定性结果如图9所示,和baseline的对比如表4所示。
5.5. 与Oracle Depth的基准测试
将该模型与PointPillar[18]架构进行了benchmark基准测试,该架构使用激光雷达点云的真实深度信息。如表5所示,在所有任务中,我们的架构的性能略低于用激光雷达单次扫描(A single scan)训练的PointPillar。然而,至少在可驾驶区域分割方面,我们接近了LIDAR的性能 。一般来说,在一次激光雷达扫描中,并不是所有车道都是可见的。我们希望在未来在更广泛的环境中测量性能。
为了深入了解该模型与LIDAR的区别,绘制了汽车分割的性能如何随两个控制变量的变化而变化:到自车的距离和天气条件。从nuScenes数据集中每个场景标记附带的描述字符串中确定场景的天气。结果如图10所示。在夜间场景中,该模型的性能比pointpillar差得多。两个模型的性能都随着深度的增加大致呈线性下降。
5.6. 运动规划
最后,通过将Lift-Splat输出的表征训练为成本函数(cost function),来评估模型执行运动规划的能力。我们生成的轨迹间隔为5秒,间隔为0.25秒。为了获得模板,我们将K = 1000的k均值拟合到nuScenes训练集中的所有自车轨迹。在测试时,我们测量了网络预测的轨迹模板与最接近的真实轨迹之间的L2范数误差,以此来衡量网络的预测能力。
该任务是自动驾驶的一个重要实验, 因为该实验的地面真值目标的获取成本比地面真值3D边界框低几个数量级。这项任务对于评估基于相机的方法与基于激光雷达的方法的性能也很重要,因为尽管来自纯相机的3D目标检测的上限肯定是只受限于激光雷达的上限,但使用纯相机的最佳规划器原则上应该上限来自只受激光雷达训练的最佳 规划器的性能。
规划实验的定性结果如图11所示。对pointpillar进行基准测试的经验结果如表6所示 。输出轨迹表现出令人满意的行为, 如遵循道路边界,在人行横道前停车,以及在车辆后方刹车。
6. 结论
本文提出一种架构,旨在从任意相机平台推断BEV表示。该模型在一系列基准分割任务上的表现优于baseline,这些任务旨在探索模型在BEV坐标系中表示语义的能力,而在训练或测试时不需要任何真实深度数据。本文提出训练模型的方法,使网络对简单的标定噪声模型具有鲁棒性。该模型能实现遵循轨迹shooting范式(paradigm)的端到端运动规划。为了满足并可能超越只使用来自点云的真实深度数据的类似网络的性能,未来的工作将需要以图像的多个时间步(multiple time steps)为条件,而不是我们在这项工作中考虑的单个时间步。
参考文献
Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D
自动驾驶感知算法学习系列(十一)——LSS (Lift, Splat, Shoot) 方法学习(上) - 知乎
自动驾驶感知算法学习系列(十二)——LSS (Lift, Splat, Shoot) 方法学习(下) - 知乎
Lift,Splat,Shoot:通过隐式反投影到3D空间实现对任意相机图像编码
LSS (Lift, Splat, Shoot) 论文+源码万字长文解析 - 知乎