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
{Xk∈R3×H×W}n,每张图像都有一个外参矩阵
E
k
∈
R
3
×
4
\text{E}_k\in \mathbb{R}^{3\times 4}
Ek∈R3×4和内参矩阵
I
k
∈
R
3
×
3
\text{I}_k\in \mathbb{R}^{3\times 3}
Ik∈R3×3,输出是 BEV 坐标系里栅格化的表征
y
∈
R
C
×
X
×
Y
\text{y}\in \mathbb{R}^{C\times X\times Y}
y∈RC×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} X∈R3×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)∈R3∣d∈D}, 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 D⋅H⋅W的点云。
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
c∈RC,深度估计网络预测一个深度值分布
α
∈
Δ
∣
D
∣
−
1
\alpha \in \Delta^{|D|-1}
α∈Δ∣D∣−1。特征
c
d
∈
R
C
\text{c}_d\in \mathbb{R}^C
cd∈RC与点
p
d
p_d
pd关联,定义为:
c
d
=
α
d
⋅
c
\text{c}_d = \alpha_d \cdot \text{c}
cd=αd⋅c
总之,其目的是为每张图像构建一个函数:
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)∈R3→c∈RC,可以在每个空间位置都得到一个 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(τi∣o)=∑τ∈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 的方法反而还稍好一些。