(BEV论文精读)Lift, Splat, Shoot
Introduction
今天我们一起来回顾一下BEV中的经典论文LSS,只要是学习BEV,那么肯定离不开这篇文章,重要性不言而喻。
自动驾驶中,输入来自多个传感器,每个传感器有不同的坐标系,感知模型最终需要生成一个在自车坐标系下的预测,以供后续的运动规划模块使用,如图所示。
既然需要BEV,那么最原始的方法是怎么做呢:
对于来自n个摄像头的3D物体检测问题,可以对每个输入图像单独应用一个单图像检测器,然后根据该摄像头的内参和外参将每个检测结果旋转并转换到自车坐标系中。
第一步:将像素坐标转换到摄像头坐标系
摄像头获取的物体检测结果通常是在二维图像平面上的像素坐标。我们需要使用摄像头的内参将这些像素坐标转换成摄像头坐标系中的三维点(3D坐标),即找到物体在摄像头坐标系中的位置。
注意:由于图像本身是二维的,转换过程中可能需要结合深度信息(来自深度估计或其他传感器,如激光雷达)来确定物体的具体三维位置。
第二步:将摄像头坐标系中的点转换到自车坐标系
一旦得到了物体在摄像头坐标系中的三维坐标,我们接下来使用摄像头的外参将该坐标转换到自车坐标系。这个过程涉及旋转和平移操作,公式如下:
这一步的目的是将物体的三维位置从摄像头视角转化为自车的视角,使得系统可以统一处理所有摄像头的感知数据。
第三步:多摄像头融合
在自动驾驶系统中,通常有多个摄像头同时运行,每个摄像头都会检测物体并在各自的坐标系中进行标定。通过上述步骤,我们将每个摄像头检测到的物体都转换到自车的统一坐标系。
为了融合多个摄像头的检测结果,我们可以对检测到的物体位置进行加权融合、去重、或基于深度信息进行筛选,从而得到一个统一的场景表示。这一步确保了即使同一个物体被多个摄像头检测到,系统仍能得到唯一且准确的物体位置。
这种单视角到多视角的扩展方式具有以下三种对称性:
- 平移等变性——如果图像中的像素坐标整体移动,输出也会以相同的方式移动。完全卷积的单图像物体检测器大致具备这种特性,多视角扩展也继承了这一特性。
- 排列不变性——最终的输出不依赖于n个摄像头的特定排列顺序。
- 自车坐标系的等距等变性——无论摄像头相对于自车的位置如何,同样的物体在给定图像中都会被检测到。换句话说,自车坐标系的定义可以进行旋转/平移,输出会相应地进行旋转/平移。
这种检测方案无法利用深度学习的优势,学习转换信息,也不能利用好跨摄像头的融合信息,在投影过程中,图像中的每个像素会将相同的特征传递给每个体素(无论物体的深度如何)。也就是说,这些方法没有考虑像素所在物体的深度差异。
Method
输入输出
input:给定n张图像:
这些矩阵定义了从参考坐标系(x,y,z)到局部像素坐标系(h,w,d)的映射,用于表示每个相机的空间关系。
output:
Lift(将图像从局部的二维坐标系统“提升”到一个共享的三维坐标系中)
这一过程的关键在于如何处理图像像素的深度信息,因为单目图像中的深度是模糊和不确定的。
1. 为了应对深度模糊的问题,模型为每个像素生成一系列不同深度上的表示。具体来说:
2. 对于每个像素,网络预测一个上下文向量C(它捕捉了与该像素相关的特征信息)以及一个深度分布α
3. 模型通过深度分布 α和上下文向量 c 的外积,来确定沿着每个像素射线在不同深度点的特征
Splat (生成的大型点云转换为适合进行鸟瞰图推理的张量)
1. 采用了PointPillars架构,将生成的点云视作具有无限高度的柱体(voxels)
与其他方法的对比
传统体素方法:传统的体素表示通常在每个体素中都有固定的深度限制,这可能会导致丢失一些重要的信息。而点柱体结构通过无限高度的设计,确保不会因为高度限制而影响特征的整合。
与多视图合成的联系:这种点柱体结构也与多视图合成中的“多平面图像”概念相关,但点柱体强调在特征整合和计算效率方面的优势,使其在三维检测任务中表现更为出色。
2. 将点云中的每个点根据其位置分配到最近的柱体。每个柱体对应于一个特定的空间区域。
3. 对于每个点,提取其特征(如颜色、强度等),并将这些特征加到其对应的柱体的特征向量上。(完成所有点的累加后,柱体将包含其对应区域内所有点的特征总和),生成一个 C×H×W 的张量。
Shoot
在这部分,论文详细介绍了如何利用Lift-Splat模型**生成用于运动规划的成本地图(cost map),并实现从仅使用摄像头输入的端到端运动规划。以下是关键步骤的解释:
1. 成本地图与运动规划(Cost Map and Motion Planning)
Lift-Splat模型的核心特点是,利用摄像头数据推断出的成本地图可以直接用于运动规划。运动规划是通过对多个可能的轨迹(trajectories)进行“射击”评估(shooting),根据成本地图为这些轨迹打分,并选择成本最低的轨迹作为车辆的行动路径。这种方法使模型在推理时能够执行端到端的运动规划。
- 成本地图:是一个二维平面上的代价图,用于表示在不同位置行驶的“成本”。例如,高成本区域可能是有障碍物的地方,而低成本区域是安全的行驶路径。
- 轨迹评分(Trajectory Scoring):在推断出成本地图后,模型会针对多条预设轨迹进行“射击”,并根据轨迹上所有点的成本对这些轨迹进行评分。最后,选择成本最低的轨迹作为规划路径。
2. 轨迹集(Template Trajectories)
轨迹集是由多个预定义的轨迹模板构成的。每同时间点下车辆的运动路径条轨迹由一系列的空间点(xj,yj,tj)定义,这些点描述了在不。论文中的运动规划被框架为根据观测条件生成轨迹分布(distribution over template trajectories)。
- 具体地,假设有一组预定义的K条轨迹模板,运动规划的任务是从传感器观测数据中预测最优的轨迹分布,找到最符合当前场景的轨迹。
3. 轨迹打分与规划(Trajectory Scoring and Planning)
公式 p(τi∣o)描述了轨迹 τi在观测条件 o下的概率分布。该概率分布依赖于轨迹上所有点的成本累积,成本是通过索引成本地图得到的。该概率分布的形式如下:
4. K-Means与轨迹模板的选择
为了生成预设的轨迹集,论文使用了K-Means聚类,将大量的专家轨迹进行聚类,得到一组K个轨迹模板。这些模板在实验中用于“射击”到成本地图上,并用于运动规划的打分和选择。这使得轨迹的选择不仅具备数据驱动的合理性,而且规划出的路径更具解释性和鲁棒性。
5. 与NMP模型的对比
Lift-Splat模型与NMP(Neural Motion Planner)模型的不同之处在于:
- NMP使用点云数据和高精度地图来生成成本体积(cost-volume),而Lift-Splat通过摄像头输入生成成本地图。
- NMP使用硬边界损失(hard-margin loss),而Lift-Splat则通过轨迹分类的方式进行训练,使用交叉熵损失,这使得轨迹选择更加柔性和可解释。
架构细节
1. 双主干网络结构
-
第一部分:模型有两个大的网络主干,类似于OFT(Orthographic Feature Transform)。其中一个主干网络处理来自每个摄像头的图像,提取点云的特征。这部分网络是基于EfficientNet-B0架构,它是通过资源受限情况下进行架构搜索得出的网络。EfficientNet在性能上比ResNet架构要好,虽然它需要更多的优化步骤才能收敛。
-
第二部分:另一个主干网络处理的是已经“splatted”到柱体(pillars)中的点云。在完成Lift-Splat步骤后,点云转换为一个二维鸟瞰图表示,然后由另一个网络(类似于PointPillars中的ResNet结构)进一步处理。
2. EfficientNet-B0的使用
- 模型使用了预训练的EfficientNet-B0来处理每张图像。EfficientNet通过均衡网络的深度、宽度和输入分辨率,在限制资源的情况下提供了较高的性能。这在处理大规模图像时非常有效。
3. 鸟瞰图(BEV)网络
- 在处理鸟瞰图表示时,模型采用类似于ResNet的结构。首先经过一次7×7卷积和批归一化操作,接着使用了ResNet-18的前三层元层,得到三个不同分辨率的鸟瞰图表示(x1、x2、x3)。这些不同分辨率的表示通过上采样和拼接的方式被整合,最终返回到原始鸟瞰图的分辨率。
4. 超参数设置
- 输入图像尺寸:所有的输入图像被调整为128×352的尺寸,并根据新的尺寸调整外参和内参。
- 鸟瞰图网格尺寸:鸟瞰图的分辨率是200×200,表示从-50米到50米范围内,网格单元大小为0.5米×0.5米。
- 深度分辨率:网络预测的深度在4.0米到45.0米之间,间隔为1.0米。这些深度值用于在Lift步骤中生成点云。
5. 性能
- 使用这些设计选择和超参数设置,模型的前向传递在Titan V GPU上可以达到35 Hz,即每秒钟35次的推理速度,表明它具有实时处理的潜力。
原文地址:https://blog.csdn.net/qq_55794606/article/details/137926811
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!