Lift, Splat, Shoot 论文学习

LSS是一种将图像数据转换为BirdsEyeView(BEV)表示的端到端方法,适用于自动驾驶场景。它通过特征视锥、栅格化和平铺以及轨迹射击来处理来自不同传感器的数据,解决了多传感器融合和深度信息的不确定性问题。这种方法提高了感知系统的集成度,但依赖于深度信息的准确性,并且外积操作可能导致计算量大,不利于轻量化部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 解决了什么问题?

LSS 在工业界具有非常重要的地位。自从 Tesla AI Day 上提出了 BEV 感知后,不少公司都进行了 BEV 工程化的探索。当前 BEV 下的感知方法大致分为两类:

  • 自下而上:利用 transformer 的 query 机制,通过 BEV query 构建 BEV 特征,隐式地变换深度信息;
  • 自上而下:以本文 LSS 为代表的方法,直接估计图像的深度信息,将深度信息投影到 BEV。

传统的视觉任务如图像分类不考虑帧坐标系;而目标检测和分割任务则是在同一帧的坐标系进行预测。对于自动驾驶任务,输入来自于多个传感器,帧坐标系各不相同。算法最终的输出结果会表现在一个新的坐标系里(即车辆自身 ego frame 的坐标系),以供下游任务使用。

现有的方法比较简单,对所有的输入图像分别应用单帧图像的目标检测器,然后根据相机内外参对检测结果进行平移、旋转,得到 ego frame 坐标系的结果。但由于对单帧检测器的预测结果做了后处理,我们就很难在 ego frame 对预测结果进行追溯,它到底来自于哪个传感器,也就无法根据下游任务的反馈使用反向传播来自动改进感知系统。此外,单目融合也极具挑战性,我们需要深度信息来变换到 reference frame 的坐标系,但是每个像素的深度值是不明确的。

2. 提出了什么方法?

在这里插入图片描述

本文提出了一个端到端、可微的方法,直接从任意相机提供的图像里面提取场景 BEV 表征。对于每个相机,先将每张图像 “lift” 为一个特征视锥(frustum of features)。然后将所有的视锥 “splat” 为一个 BEV 栅格化的网格,作为 reference plane。最后将候选轨迹 “shoot” 到该 reference plane,进行后续的端到端的运动规划。

给定输入 n n n张图像 { X k ∈ R 3 × H × W } n \lbrace \text{X}_k\in \mathbb{R}^{3\times H\times W} \rbrace_n {XkR3×H×W}n,每张图像都有一个外参矩阵 E k ∈ R 3 × 4 \text{E}_k\in \mathbb{R}^{3\times 4} EkR3×4和内参矩阵 I k ∈ R 3 × 3 \text{I}_k\in \mathbb{R}^{3\times 3} IkR3×3,输出是 BEV 坐标系里栅格化的表征 y ∈ R C × X × Y \text{y}\in \mathbb{R}^{C\times X\times Y} yRC×X×Y。对于每个相机,外参和内参矩阵将 reference 坐标系的坐标 ( x , y , z ) (x,y,z) (x,y,z)映射到图像的像素坐标 ( h , w , d ) (h,w,d) (h,w,d)
在这里插入图片描述

2.1 Lift: Latent Depth Estimation

模型对每个相机的图片单独计算,将每张图像从局部的 2D 坐标系 “lift” 为 3D frame,该 3D frame 被所有相机共用。
整个 lift 过程可分为三个部分。

1. 特征提取和深度估计

如上图所示,多视角相机的画面输入主干网络提取图像特征。同时利用一个深度估计网络,生成每个像素点所有可能的深度表征。这里的深度表征和图像特征的宽度和高度是相等的,因为后续要进行外积操作。 X ∈ R 3 × H × W \text{X}\in \mathbb{R}^{3\times H\times W} XR3×H×W是一张图像,外参是 E \text{E} E,内参是 I \text{I} I p p p是图像上的一个像素点,坐标为 ( h , w ) (h,w) (h,w)。每个像素点会关联 ∣ D ∣ |D| D个点 { ( h , w , d ) ∈ R 3 ∣ d ∈ D } \lbrace (h,w,d)\in \mathbb{R}^3 | d\in D \rbrace {(h,w,d)R3dD} D D D是深度值的集合,定义为 { d 0 + Δ , . . . , d 0 + ∣ D ∣ Δ } \lbrace d_0+\Delta,...,d_0+|D|\Delta \rbrace {d0+Δ,...,d0+D∣Δ}。为每张图像创建一个大小是 D ⋅ H ⋅ W D\cdot H\cdot W DHW的点云。

2. 外积

这一步是 LSS 的灵魂操作。作者在论文里多次提到,深度信息是 ambiguous,因此作者并没有直接预测每个像素点的深度值,而是预测每个像素点的深度分布,来表示像素点的深度信息。使用外积操作,用 H × W × C H\times W\times C H×W×C维度的图像特征和 H × W × D H\times W\times D H×W×D维度的深度特征构造出一个 H × W × D × C H\times W\times D\times C H×W×D×C维度的特征视锥。在像素点 p p p,主干网络预测一个 context 向量 c ∈ R C \text{c}\in \mathbb{R}^C cRC,深度估计网络预测一个深度值分布 α ∈ Δ ∣ D ∣ − 1 \alpha \in \Delta^{|D|-1} αΔD1。特征 c d ∈ R C \text{c}_d\in \mathbb{R}^C cdRC与点 p d p_d pd关联,定义为:
c d = α d ⋅ c \text{c}_d = \alpha_d \cdot \text{c} cd=αdc
总之,其目的是为每张图像构建一个函数: g c : ( x , y , z ) ∈ R 3 → c ∈ R C g_c:(x,y,z)\in \mathbb{R}^3 \rightarrow \text{c}\in \mathbb{R}^C gc:(x,y,z)R3cRC,可以在每个空间位置都得到一个 context 向量。如下图,每个相机的可见空间都对应着一个视锥。 α \alpha α c \text{c} c的外积计算了每个点的特征。

3. Grid Sampling

目的是将上面构造的特征视锥利用相机外参和内参转换到 BEV 视角下。限定好 BEV 视角的范围,划定一个一个的 grid,将能投影到相应 grid 的特征汇总到一个 grid 里,之后进行 splat 操作。
在这里插入图片描述

2.2 Splat: Pillar Pooling

“Lift” 步骤会生成一个点云。“Pillar” 是高度无穷的 voxels。每个像素点会被分到最近的 pillar,用 sum pooling 得到一个 C × H × W C\times H\times W C×H×W 张量,然后通过 CNN 来推理出 BEV。

2.3 Shoot: Motion Planning

Lift-Splat 模型使我们只需相机输入,即可实现端到端的 cost map 学习,然后进行运动规划。测试时,我们将不同的轨迹 “shoot” 到 cost map 上,计算它们的代价,然后选取代价最低的轨迹。

本文将“规划”问题看作为一个分布预测问题,车辆自身共有 K K K个模板轨迹:
T = { τ i } K = { { x j , y j , t j } T } K \mathcal{T}=\lbrace\tau_i\rbrace_K=\lbrace\lbrace x_j,y_j,t_j\rbrace_T \rbrace_K T={τi}K={{xj,yj,tj}T}K
T \mathcal{T} T由传感器数据 p ( τ ∣ o ) p(\tau|o) p(τo)决定。根据这 K K K个模板轨迹,作者将规划问题当作分类问题解决。 K K K个模板轨迹的分布符合下面形式:
p ( τ i ∣ o ) = exp ⁡ ( − ∑ x i , y i ∈ τ i c o ( x i , y i ) ) ∑ τ ∈ T exp ⁡ ( − ∑ x i , y i ∈ τ c o ( x i , y i ) ) p(\tau_i|o)=\frac{\exp(-\sum_{x_i,y_i\in\tau_i}c_o(x_i,y_i))}{\sum_{\tau\in \mathcal{T}}\exp(-\sum_{x_i,y_i\in\tau}c_o(x_i,y_i))} p(τio)=τTexp(xi,yiτco(xi,yi))exp(xi,yiτico(xi,yi))
给定位置 ( x , y ) (x,y) (x,y)处的观测值 o o o,在 cost map 上进行索引,得到 c o ( x , y ) c_o(x,y) co(x,y)。对于标签,给定一个 ground-truth 轨迹,我们计算与模板轨迹 T \mathcal{T} T的 L2 距离最近的轨迹,然后用交叉熵损失训练。

如下图,在实际操作中,我们使用 K-Means 算法在大量的专家轨迹上进行聚类,得到一组模板轨迹,然后将这些模板轨迹 shoot 到预测的代价图上。训练时,计算每个模板轨迹的代价,对这些模板计算出一个 1000 维的 Boltzman 分布。测试时,选择分布的 argmax 进行后续操作。
在这里插入图片描述

整体流程如下,模型的输入是 n n n张图像以及对应的外参和内参。在 “lift” 步骤,每张图像会产生一个视锥点云。然后用外参和内参将每个视锥 splat 到 BEV 平面。最后,BEV CNN 计算 BEV 表征,完成 BEV 语义分割或规划任务。
在这里插入图片描述

3. 有什么优点?

提出了一个端到端的训练方法,解决了多传感器融合的问题。传统的多传感器先单独检测再后处理的方法,无法将此过程的损失反向传播,从而调整相机输入,而 LSS 省去了这一阶段的后处理步骤,直接输出融合结果。

  • 提出了一个很好的融合到 BEV 视角的办法。基于此方法,无论是动态目标检测,还是静态道路结构感知,甚至是红绿灯检测,前车转向检测等信息,都可以用该方法提取到 BEV 特征下进行输出,极大提高了自动驾驶感知框架的集成度;
  • 虽然 LSS 初衷是为了融合多视角相机特征,为纯视觉模型服务。但在实际应用中,此方法完全兼容其它传感器的特征融合;

4. 有什么缺点?

  • 极度依赖深度信息的准确性,必须显式地提供深度信息。如果直接使用此方法通过梯度反传来优化深度网络,而深度估计网络又比较复杂,会因为反传链过长而导致优化方向模糊,难以取得理想效果。
  • 外积操作耗时。当图片的特征图较大时,且想要预测的深度距离和精细度高时,外积这一操作带来的计算量则会大大增加。这十分不利于模型的轻量化部署,而这一点上,Transformer 的方法反而还稍好一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值