目录

00 前言

01 创新点

02 算法细节

Lift:潜在深度分布:

Splat: Pillar Pooling(支柱池)

Shoot: Motion Planning

03 实验和验证


Title:Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D

cs.CV 2020;

Github: here


00 前言

目前的计算机视觉算法任务,基于输出结果是否与输入图像在同一个参考系下,可以分为两类:

• 预测结果与输入不在同一个参考系:分类

• 预测结果与输入在同一个参考系:目标检测、语义分割、全景分割

从这个角度来看,基于BEV的自动驾驶感知算法,属于前一个类别,即预测结果与输入不在同一个参考系,最终得到的BEV结果属于本体车辆参考系,而图像属于相机参考系,一般的做法是,通过算法模型,把属于多个参考系下的多模态数据,进行融合预测,形成在BEV参考系下的预测结果。

针对多参考系转换问题,又引出了很多研究方法。例如,可以扩展传统单视图的范式,把它扩展到多视图模式上。具体来说,针对来自n个相机的图像数据,我们使用一个单视图检测器,针对每个相机的每张图像数据进行检测,然后将检测结果根据对应相机的内外参数,转换到车辆本体参考下,这样就完成了多视图的检测。

但是这样的简单后处理方法是有问题,比如,我们可能想要通过训练结果反馈,进行反向传播,并进一步调整对应相机的输入,这一步是无法完成,因为上面的转换是单向的,也就是说,我们无法反向区分不同特征的坐标系来源,因此我们无法轻易的使用一个端到端的模式来训练改善我们的自动感知系统。

01 创新点

本文的做法是通过,将二维图像特征生成3D特征(这一步对应论文中的”Lift”操作),然后把3D特征“拍扁”得到BEV特征图(这一步对应论文中的”Splat”),最终在BEV特征图上进行相关任务操作(这一步对应于”Shooting”)。具体来说,二维图像特征生成3D特征这一步使用了“视锥”点云的操作,如下图所示:

就是预测了一个深度值分布,提取的特征c,然后将两种进行外积操作,实现了增维。Splat操作则是使用了一种特殊的“求和池化”操作,实现降维。最后的Shooting,则是将预测的一组轨迹投射出来,选取最好的轨迹作为预测结果。

整体效果

02 算法细节

首先构造矩阵:是输入的图像,是相机外参,;现在的目的是寻找BEV坐标下场景的光栅化表示 y;,

图像的2D特征是

视锥体池化累积求和技巧

该模型使用的是Pillar的累积求和池化,“累积求和”是通过bin id 对所有点进行排序,对所有特征执行累积求和,然后减去 bin 部分边界处的累积求和值来执行求和池化。无需依赖 autograd 通过所有三个步骤进行反向传播,而是可以导出整个模块的分析梯度,从而将训练速度提高 2 倍。 该层被称为“Frustum Pooling”,因为它处理将 n 个图像产生的截锥体转换为与摄像机数量 n 无关的固定维度 C × H × W 张量。

过程示意图:

Shoot: Motion Planning

Lift-Splat模型的关键是可以仅从图像角度实现端到端的运动规划,在测试时,使用推断的成本图进行规划,可以通过“拍摄”不同的轨迹,对其成本进行评分,然后根据最低成本轨迹[25]进行行动,在section 5.6上有详细的介绍;

03 实验和验证

本文在nuScenes和Lyft数据集上,对本位提出的模型算法进行验证,分别对以下几个方面做实验比较:

baseline比较;分割结果比较;鲁棒性比较;与LiDAR算法进行比较;

baseline and segment

robustness

检测当某个位置相机缺失时,语义分割指标IOU分数的变化,正常情况下的IOU是“full”,可以看出“CAM BACK ”相机缺失时对鲁棒性的影响是最大的,也是因为nuScenes数据集中后置相机拥有很大的视野的原因导致的。之后训练的时候使用6个相机中的4个相机,在测试的时候分别增加不同位置的相机,发现测试的性能是提升的。