Lift, Splat, Shoot Encoding Images From Arbitrary Camera Rigs by Implicitly Unprojecting to 3D
记录论文《Lift, Splat, Shoot Encoding Images From Arbitrary Camera Rigs by Implicitly Unprojecting to 3D》阅读过程中的一些思考。
简介
LSS 通过学习逐像素深度概率分布,首次实现了从任意多视角图像到 BEV 表示的端到端可微转换,解决了多相机数据对齐和场景理解中的遮挡问题,是 BEV 感知领域的开山之作。

LSS 方法的核心是独立地将各相机的图像提升(lift)到各自的特征视锥(frustum of features),然后将这些特征视锥都溅射(splat)到一个光栅化(rasterized)的鸟瞰图网格(bird's-eye-view grid)中,最后将模板轨迹投射(shoot)到网络输出的鸟瞰代价地图(cost map),这证实了模型学到的密集表示能够支持可解释的端到端运动规划(motion planning)。
传统计算机视觉算法的输出通常是坐标系无关的(如分类),或与输入图像一个坐标系的预测(如目标检测、语义分割和全景分割)。这与自动驾驶中感知模型从来自不同坐标系的多传感器接受输入并处理成一个新的基于自车坐标系的预测输出,以供下游规划模块使用的范式不匹配,参考下图。

有多种简单实用的策略可以将单图像处理范式扩展到多图像处理领域,如先将单图像检测器分别应用到所有输入图像,再结合各自内外参将检测结果转到自车坐标系。这类拓展方法有三个重要对称特性:
平移等变性(Translation equivariance):如果平移图像中所有的像素坐标,那么输出将平移相同的量。全卷积单图像目标检测器基本具备该性质,而多图像扩展版本也继承了这一性质。置换不变性(Permutation invariance):最终输出与这些相机的顺序无关自车坐标系等距等变性(Ego-frame isometry equivariance):无论捕获这张图像的相机与主车的相对位置如何,这张图像都会检出同样的目标。换句话说,平移或旋转自车坐标系,那输出也会相应的平移或旋转。
这种简单方法存在的问题是,对单图像检测器使用后处理会阻断自车坐标系下的预测一直回传到传感器输入的微分(梯度)链路。因此,模型无法以数据驱动的方式学习跨相机融合信息的最佳方式。这同样意味着无法基于反向传播利用下游规划器的反馈自动提升感知系统。
而本文提出的方法不仅保留了上述 $3$ 个对称特性,而且满足端到端可微。
概念
约定
给定 $n$ 个图像 $\left\{X_k \in \mathbb{R}^{3 \times H \times W}\right\}_n$ ,它们各自有外参 $E_k \in \mathbb{R}^{3 \times 4}$ 和内参 $I_k \in \mathbb{R}^{3 \times 3}$ ,内外参矩阵共同定义了从参考坐标系 $(x,y,z)$ 到局部像素坐标系 $(h,w,d)$ 的映射。本文就是要在 BEV 坐标系 $y \in \mathbb{R}^{C \times X \times Y}$ 内找到场景的光栅化表达。
提升 / Lift:潜在深度分布(Latent Depth Distribution)
Lift 单独将每个相机的图像从(相机)局部坐标系“提升”到所有相机共享的三维坐标系。这一步的难点在于转换到三维坐标系需要深度信息而单目相机图像像素的深度是模糊不定的,为此,Lift 创新地为每个像素生成所有可能深度的表示。
对于其中一个外参为 $E$ ,内参为 $I$ 的图像 $X$ ,其中的像素 $p$ 在像素坐标系下的坐标为 $(h,w)$ 。
首先为每个像素关联 $|D|$ 个点 $\left\{(h,w,d)\in\mathbb{R}^3\,|\,d\in D \right\}$ ,其中 $D$ 是一组定义为 $\left\{d_0+\Delta,\dots,d_0+|D|\Delta\right\}$ 的离散深度。注意,该变换没有可学习的参数,只是为给定图像简单地创建了一个尺寸为 $D\cdot H\cdot W$ 的大点云。这相当于多视图合成(multi-view synthesis)中的多平面图像(multi-plane image, MPI),只是这里每个平面的特征是抽象的(经过 backbone 输出的特征)向量,而不是真正的 $(r,g,b,\alpha)$ 像素值。
点云中每个点的上下文特征向量是被参数化来匹配注意力和离散深度推理的概念。网络为每个像素 $p$ 预测一个上下文特征向量 $\boldsymbol{c}\in\mathbb{R}^C$ 和一个深度分布向量 $\alpha\in\Delta^{|D|-1}$ 。而点 $p_d$ 对应的特征向量 $\boldsymbol{c}_d\in\mathbb{R}^C$ 是通过像素 $p$ 共享的上下文向量缩放得到,即
$$\boldsymbol{c}_d = \alpha_d\boldsymbol{c}$$
网络对深度分布向量 $\alpha$ 的预测结果分两种情形:
独热(one-hot)向量:类似于伪激光雷达,仅在单个深度 $d^*$ 处的上下文特征向量非零- (深度上)
均匀分布向量:类似于OFT,所有深度点处的上下文特征向量全部相同,即与深度无关
因此,网络在理论上能够在将上下文特征向量放在 BEV 表达下的指定位置或者(在深度信息模糊时)将上下文特征向量在整个空间射线中传播之间做出选择。
总的来说,Lift 就是对于每幅图像生成一个函数(映射) $g_c:(x,y,z) \in \mathbb{R}^3 \rightarrow c \in \mathbb{R}^C$ 使得在任意空间位置都可以查询得到一个上下文特征向量,这一过程如下图所示

衡准
探微
Q1: 深度分布 $\alpha\in\Delta^{|D|-1}$ 的含义是什么?
A:记号 $\Delta^{|D|-1}$ 是数学中的概率单纯形(Probability Simplex),是指 $|D|$ 维空间中,所有分量非负且分量之和为 $1$ 的向量集合,即
$$\Delta^{|D|-1} = \left\{ \alpha \in \mathbb{R}^{|D|} \;\middle|\; \alpha_d \geq 0,\; \sum_{d=1}^{|D|} \alpha_d = 1 \right\}$$
如 $|D|=41$ ,则 $\alpha$ 为一个 $41$ 维向量,其通常是一个由 softmax 得到的表示该像素在 $41$ 个离散深度值上的概率分布。
Q2: 深度点 $p_d$ 的特征向量 $\boldsymbol{c}_d = \alpha_d\boldsymbol{c}$ 有什么含义?
A:与像素 $p$ 对应的指定深度的点 $p_d$ 通过概率 $\alpha_d$ 加权该像素共享的上下文特征向量,通过学习,让真实深度处点的特征向量趋近上下文特征向量 $\boldsymbol{c}$ ,从而将特征“放”在了正确的三维位置。
Q3: LSS 是如何在有限的 $|D|$ 上平衡深度的范围与精度?
从 $D$ 的集合定义 $\left\{d_0+\Delta,\dots,d_0+|D|\Delta\right\}$ 来看,其对超出范围的目标是截断的,即直接忽略。通过调整 $\Delta$ 的大小可以在范围和精度间取舍,通过调整 $D$ 的大小可以同时扩展范围和精度。
但 LSS 中的 $D$ 属于均匀间隔,具有明显的局限,后续有一些工作做了改进:
- 非均匀深度采样:近处密、远处疏(符合透视投影的特性——近处的深度精度比远处更重要)
BEVDepth:引入显式深度监督(用LiDAR点云作为深度真值),让深度分布预测更准确,缓解了有限 $|D|$ 下的精度问题- 自适应深度范围:根据场景动态调整 $d_0$ 和 $\Delta$