LSS (Lift, Splat, Shoot)

项目主页

https://nv-tlabs.github.io/lift-splat-shoot

图1:本文提出一种模型,给定多视角相机数据 (左), 直接在鸟瞰图 (BEV) 坐标系(右)中推理语义。我们展示了车辆分割 (蓝色),可驾驶区域 (橙色) 和车道分割 (绿色) 的结果。然后,这些BEV预测被投影回输入图像中 (左边的点) 。

摘要

自动驾驶汽车感知的目标是从多个传感器中提取语义表示,并将这些表示融合到一个“鸟瞰图(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:(左, 来自SegNet [1])传统上, 诸如语义分割等计算机视觉任务在与输入图像相同的坐标系中进行预测 。(右,来自神经网络运动规划器[41])相比之下,自动驾驶的规划通常在BEV坐标系中进行。我们的模型则直接在给定的BEV坐标中得到预测结果,从而可以直接用于多视图图像的端到端运动规划。

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:我们将模型的“lift”步骤可视化。对于每个像素,我们预测了深度上的分布(左)和上下文向量(context vector)(左上)。沿着射线的每个点的特征由α和 c的外积(右)决定。

第三类单目目标检测器使用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,网络预测每个像素的上下文向量c \in R^C和深度分布\alpha \in \Delta^{D-1}。然 后,与点p_d相关联的特征c \in R^C被定义为像素 的上下文向量用深度分布\alpha_d加权的结果:

请注意,如果我们的网络预测\alpha是一个One-Hot向量,则 点的上下文将只针对某个深度d^{*}非零,和pseudolidar方法[39] 一样。如果网络预测的深度为均匀分布,那么网络将为分配给像素p预测出与深度无关的点p_d的表示,如OFT方法 [29] 。因此,从理论上讲,我们的网络能够自动选择是将图像中的上下文放置在BEV表示的特定位置,还是将上下文扩散到整个光线空间中(如果深度是模糊的)。

总而言之, 理想情况下,我们希望为每个图像生成一个函数g_c: (x, y, z) \in R^3 \rightarrow c \in R^C,该函数可以在任何空间位置查询并返回上下文向量。为了利用离散卷积的优势,我们选择将空间离散化。对于相机来说,相机可见的空间体积对应于一个平头金字塔。如图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所示 。

Fig. 4: Lift-Splat-Shoot Outline 我们的模型将n个图像 (左) 及其相应的外参和内参作为输入 。在“lift”步骤中,为每个单独的图像生成一个平头金字塔形状的点云(中-左)。然后使用外参和内参将每个平头金字塔“拍扁(Splat)”到BEV平面上 (中-右)。最后,利用BEV CNN对BEV语义分割或运动规划的BEV表示进行处理 (右)。

就像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个模板轨迹的分布:

以传感器观测为条件p(\tau | o)。该方法受到最近提出的神经运动规划器( Neural Motion Planne,NMP)[41] 的启发,该架构以点云和高精度地图为条件,生成可用于对所提出的轨迹进行评分的 cost-volum结果。

图5:我们在训练和测试阶段,将我们“投射(shoot)”到cost map上的1K个轨迹模板进行可视化 。在训练期间,每个模板轨迹的代价被计算并解释为模板上的1K-维度的玻尔兹曼分布(Boltzman distribution)。在测试过程中, 我们选择该分布的argmax, 并根据所选择的模板进行操作 。

与NMP中提出的硬边界(hard-margin)损失不同,本文将规划定义为对一组K模板轨迹的分类。为了利用规划问题的cost-volume性质,我们强制K个模板轨迹上的分布采取以下形式:

其中c_o(x, y)是索引到位置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个鸟瞰图表示,分别是x_1x_2x_3。然后,按尺度因子4 对x_3进行上采样,与x_1拼接,应用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,可独立提取所有图像的特征。我们将这些表征连接起来并执行双线性插值进行上采样,转换为R^{X \times Y}张量,作为我们的模型输出的张量。我们设计的网络与我们的模型具有大致相同的参数数量。该基线的弱性能表明,在多视图配置中明确将第一节中的对称性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所示。以这种方式衡量每个摄像头的重要性, 表明传感器冗余对安全性更重要。

图6:我们展示了通过对网络进行训练,使其对常见的传感器误差来源具有弹性是有可能的。在左边,我们展示了当外参中存在大量噪声(蓝色)时进行训练,网络在测试时对外部噪声变得更鲁棒。右图显示,在训练期间从每个批次中随机丢弃摄像机(红色)增加了测试时对传感器丢失的鲁棒性。
图7:我们测量了当每个摄像头都缺失时,car分割的IOU。nuScenes相机装置上的后向相机具有更大的视场,因此很明显,失去这个相机相比于完整的相机装置(右侧标记为“full”)的性能最大下降。
表3:我 们对nuScenes数据集中6个相机中的4个的图像进行了训练。然后,我们用新的相机进行评估(bl对应于"左后"相机,fl对应于"左前"相机),我们发现当添加更多在训练期间未见过的传感器时,模型的性能会严格提高。

5.4. Zero-Shot Camera Rig Transfer

我们现在探究Lift-Splat的泛化能力 。在第一个实验中, 当只对nuScenes相机组的一部分相机的图像进行训练, 但在测试时可以访问剩下的两个相机图像时,我们测量了我们模型的性能。在表3中,我们展示了对于car segmentation,当测试阶段加入了新的相机且不经过任何重新训练时,我们的模型的性能提升。

我们将上述实验进一步推进, 并探索如果只在nuScenes数据上训练, 我们的模型对Lyft摄像头的泛化能力如何。定性结果如图9所示,和baseline的对比如表4所示。

图8:对于单个时间戳,我们删除每个摄像头,并可视化相机的丢失如何影响网络的预测。丢失的相机所覆盖的区域在每一种情况下都变得更加模糊。当前面的摄像头被移除时(中上), 网络推断出自车前面的车道和可驾驶区域,并推断出在右上角的摄像头中只能看到一个拐角的汽车的车身。
表4:我们在nuScenes数据集上训练了模型然后在Lyft数据集评估它们。Lyft中的相机和nuScenes是完全不同的,但是模型也取得了超越baseline的效果。注意,我们的模型拉大了与表1和表2中的标准基准的差距。

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范数误差,以此来衡量网络的预测能力。

Fig. 9: 定性地展示了所提出模型在测试时给定一个全新的相机装置时的表现 。道路分割用橙色表示,车道分割用绿色表示,车辆分割用蓝色表示 。
表5:与使用激光雷达的Oracle Depth模型相比,仍有改进的空间。从相机平台进行视频推断可能是必要的,以获得超越激光雷达所需的深度估计。

该任务是自动驾驶的一个重要实验, 因为该实验的地面真值目标的获取成本比地面真值3D边界框低几个数量级。这项任务对于评估基于相机的方法与基于激光雷达的方法的性能也很重要,因为尽管来自纯相机的3D目标检测的上限肯定是只受限于激光雷达的上限,但使用纯相机的最佳规划器原则上应该上限来自只受激光雷达训练的最佳 规划器的性能。

规划实验的定性结果如图11所示。对pointpillar进行基准测试的经验结果如表6所示 。输出轨迹表现出令人满意的行为, 如遵循道路边界,在人行横道前停车,以及在车辆后方刹车。

6. 结论

本文提出一种架构,旨在从任意相机平台推断BEV表示。该模型在一系列基准分割任务上的表现优于baseline,这些任务旨在探索模型在BEV坐标系中表示语义的能力,而在训练或测试时不需要任何真实深度数据。本文提出训练模型的方法,使网络对简单的标定噪声模型具有鲁棒性。该模型能实现遵循轨迹shooting范式(paradigm)的端到端运动规划。为了满足并可能超越只使用来自点云的真实深度数据的类似网络的性能,未来的工作将需要以图像的多个时间步(multiple time steps)为条件,而不是我们在这项工作中考虑的单个时间步。

图10:我们比较了模型的性能如何随着深度和天气的变化而变化 。正如预期的那样, 在夜间,我们的模型相对于pointpillar的性能下降了。
标题图11:我们展示了1k个轨迹模板中排名前10的轨迹。视频序列可以在我们的 project page看到 。该模型从单个时间戳的观测中预测bimodal 分布和曲线。我们的模型无法获取汽车的速度,所以引人注目的是,该模型预测了人行横道和刹车灯附近的低速轨迹。
表6:由于planning被限定为一组1K个模板轨迹的分类, 因此测量了top-5 、top-10和top-20的精度。所提出的模型在泛化方面仍然落后于基于激光雷达的方法。我们的模型输出轨迹的定性示例如图11所示。

参考文献

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) 论文+源码万字长文解析 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外包干了28天,技术退步明显......

说一下自己的情况,本科生,19年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

<DFS剪枝>数字王国之军训排队

DFS剪枝 其实就是将搜索过程一些不必要的部分直接剔除掉。 剪枝是回溯法的一种重要优化手段,往往需要先写一个暴力搜索,然后找到某些特殊的数学关系,或者逻辑关系,通过它们的约束让搜索树尽可能浅而小,从而达到降低时间…

程序员在公司学习新项目的5步法:

1 了解业务 - 系统所在行业? - 系统是做什么的? - 系统主要面向的人群是谁? - 主要提供了哪些功能? - 系统设计的关键业务流程是什么样的? - 项目面临的挑战是什么? - 项目未来规划是什么? 2 …

HarmonyOS(鸿蒙)快速入门

一:下载开发工具 鸿蒙的开发工具叫DevEco 下载点击 其他部分都一直next 就行,这个页面出现的install 建议都点击install 然后单独选择安装目录 可能存在的问题 就是之前安装nodejs(比如自己开发web或者RN等情况)版本低 等情况 所以建议你单独安装一次 …

c语言商品库存管理系统

定制魏:QTWZPW,获取更多源码等 目录 题目 功能概述 数据结构 用户界面 ​编辑 主要函数 数据存储 完整代码 总结 题目 实现一个商品库存管理系统,可以对商品进行入库、出库、删除、修改、查询以及显示所有商品信息的操作。 功能概述 系统包含以下主要功能: 商品…

Web基础06-AJAX,Axios,JSON数据

目录 一、AJAX 1.概述 2.主要作用 3.快速入门 4.AJAX的优缺点 (1)优点 (2)缺点 5.同源策略 二、Axios 1.概述 2.快速入门 3.请求方式别名 三、JSON 1.概述 2.主要作用 3.基础语法 4.JSON数据转换 (1…

【MLLM+轻量多模态模型】24.02.Bunny-v1.0-2B-zh: 轻量级多模态语言模型 (效果一般)

24.02 北京人工智能研究院(BAAI)提出以数据为中心的轻量级多模态模型 arxiv论文:2402.Efficient Multimodal Learning from Data-centric Perspective 代码:https://github.com/BAAI-DCAI/Bunny 在线运行:https://wis…

day6 3/18

2.试编程: 封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪 再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整…

【JavaEE -- 多线程进阶 - 面试重点】

多线程进阶 1. 常见锁策略1.1 乐观锁和悲观锁1.2 轻量级锁和重量级锁1.3 自旋锁和挂起等待锁synchronized具有自适应能力1.4 普通互斥锁和读写锁1.5 公平锁和非公平锁1.6 可重入锁和不可重入锁 2. Synchronized原理(特点、加锁过程、自适应)2.1 Synchron…

数据结构(三)——栈

三、栈、队列和数组 3.1 栈 3.1.1 栈的基本概念 线性表是具有相同数据类型的n(n≥0)个数据元素的有限 序列,其中n为表长,当n 0时线 性表是一个空表。若用L命名线性表,则其一般表示为 L (a1, a2, … , ai , ai1, ……

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器?1.1设计一个简单的空间配置器,JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器,std::allocator2.2 SGI特殊的空间配置器,std::alloc2.…

ARM汇编与逆向工程 蓝狐卷 基础知识

文章目录 前言内容简介作者简介译者简介目录 前言 与传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比,Arm架构的指令集更加简洁明了,指令执行效率更高,能够在更低的功耗下完成同样…

13 秒插入 30 万条数据,这才是 Java 批量插入正确的姿势!

本文主要讲述通过MyBatis、JDBC等做大数据量数据插入的案例和结果。 30万条数据插入插入数据库验证 实体类、mapper和配置文件定义 User实体 mapper接口 mapper.xml文件 jdbc.properties sqlMapConfig.xml 不分批次直接梭哈 循环逐条插入 MyBatis实现插入30万条数据 J…

python redis中blpop和lpop的区别

python redis中lpop()方法是获取并删除左边第一个对象。 def lpop(self,name: str,count: Optional[int] None,) -> Union[Awaitable[Union[str, List, None]], Union[str, List, None]]:"""Removes and returns the first elements of the list name.By de…

2258: 【搜索】【广度优先】最少转弯问题

题目描述 给出一张地图&#xff0c;这张地图被分为nm&#xff08;n,m<100&#xff09;个方块&#xff0c;任何一个方块不是平地就是高山。平地可以通过&#xff0c;高山则不能。现在你处在地图的&#xff08;x1,y1&#xff09;这块平地&#xff0c;问&#xff1a;你至少需要…

Vulnhub - Morpheus

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Morpheus 靶机下载地址&#xff1a;Matrix-Breakout: 2 Morpheus ~ VulnHub 0x01 信息收集 Nmap扫描…

Spring学习记录

为什么要学Spring&#xff1f; 在回答这个问题时&#xff0c;我们先来看看现在的Java程序是如何实现的&#xff0c;以最简单的服务层与持久层为例&#xff0c;其遵循接口与具体实现类的这种方式&#xff1a; Service层接口&#xff1a;BookService.java package service; pu…

mysql笔记:22. 事务隔离级别的一种通俗讲解

事务隔离级别&#xff0c;是为了解决多个并行事务竞争导致的数据安全问题的一种规范。具体来说&#xff0c;多个事务竞争可能会产生三种不同的现象。假设有两个事务T1、T2同时执行&#xff0c;有如下三种不同的情形&#xff1a; T1可能会读到T2未提交的数据&#xff0c;但是未…

粤嵌6818开发板通过MobaXterm使用SSH连接开发板

链接&#xff1a;https://pan.baidu.com/s/18ISP4Ub1HtQx6jCvTQTUHw?pwdfjmu 提取码&#xff1a;fjmu 1.把SSH_config.tar.bz 下载到开发板中 2.解压 SSH_config.tar.bz 解压命令&#xff1a;tar -xzvf SSH_config.tar.bz 3.配置SSH 进入SSH/openssh目录&am…

关于Zookeeper分布式锁

背景 之前说到分布式锁的实现有三种 1、基于数据库实现的分布式锁 2、Redis分布式锁 3、Zookeeper分布式锁 前者redis分布式锁博客已具体介绍&#xff0c;此博客最终决定补齐关于Zookeeper分布式锁的实现原理。 简述 Zoopkeeper&#xff0c;它是一个为分布式的协调服务&…