自动驾驶BEV感知的基石:深度解析LSS算法框架与工程实践
在自动驾驶感知架构的演进过程中,如何实现多视角传感器数据的有效融合一直是核心挑战。Bird's Eye View(BEV,鸟瞰图)技术通过将多路相机或雷达数据投影至统一的俯视坐标系,解决了传统后融合方案在空间一致性上的短板。在众多实现BEV转换的方案中,LSS(Lift, Splat, Shoot)凭借其优雅的数学构思和卓越的工程适配性,已成为业界主流的基线算法。无论是坚持纯视觉路径的方案,还是主张多模态融合的架构,LSS的思想都深刻影响着感知系统的设计。
1. BEV感知的演进逻辑
传统的感知范式通常在图像空间(2D)进行检测,再通过几何约束或简单的启发式规则转换到3D空间。这种方式在处理跨相机遮挡、大目标截断以及深度估计时效果欠佳。BEV感知的核心在于"特征级融合",即在网络推理的早期阶段,将来自不同视角的特征映射到以自车为中心的欧式空间网格中。这种统一的表征方式不仅消除了视角畸变,还为下游的预测与规划任务提供了标准化的输入环境。
2. LSS框架的三位一体架构
LSS算法通过"Lift"、"Splat"和"Shoot"三个阶段,构建了一套端到端的感知到规划的闭环。其本质是将不确定性的深度估计转化为显式的空间特征分布。
2.1 Lift:从像素映射到空间分布
在单目视觉中,像素的深度具有天然的二义性。LSS并不强求模型预测一个精确的深度值,而是为每个像素点预测一个离散的深度概率分布。通过将图像特征与深度概率进行外积运算,每一个2D像素都被"提升"为一个沿射线方向分布的特征视锥。
import torch
import torch.nn as nn
def lift_stage(feature_map, depth_net):
"""
Lift阶段:为图像特征注入深度分布信息
:param feature_map: 骨干网络提取的2D特征 [B, N, C, H, W]
:param depth_net: 深度预测分支
:return: 空间特征视锥
"""
# 预测深度权重与上下文语义特征
# depth_weights 形状: [B*N, D, H, W], context_vectors 形状: [B*N, C, H, W]
combined_output = depth_net(feature_map.view(-1, C, H, W))
depth_weights = torch.softmax(combined_output[:, :D], dim=1)
context_vectors = combined_output[:, D:]
# 利用外积构建3D空间特征
# [B*N, C, 1, H, W] * [B*N, 1, D, H, W] -> [B*N, C, D, H, W]
frustum_features = context_vectors.unsqueeze(2) * depth_weights.unsqueeze(1)
return frustum_features
2.2 Splat:空间特征的重投影与聚合
在获得相机坐标系下的特征视锥后,算法利用相机的内外参将这些点云化的特征投影到BEV网格中。由于多个视角或同一视角的多个像素可能落入同一个BEV网格单元(Pillar),需要一种高效的聚合方式。LSS通常采用Sum Pooling,并利用累积求和(Cumsum Trick)来加速这一过程,避免昂贵的原子操作或大规模填充。
| 环节 | 核心逻辑 | 关键挑战 |
|---|---|---|
| 坐标变换 | 将特征点从相机坐标系转换至自车坐标系 | 对标定参数(内外参)的敏感度高 |
| 网格体素化 | 根据预设的分辨率将3D点分配至对应的BEV栅格 | 计算量随网格分辨率提升呈指数增加 |
| 特征池化 | 对同一网格内的多重特征进行加权求和聚合 | 需要处理特征重叠引发的信息冗余或冲突 |
2.3 Shoot:感知与规划的解耦连接
"Shoot"阶段体现了LSS作为端到端框架的愿景。在生成的BEV特征图上,可以并行预测代价地图(Cost Map)。通过将多条候选的运动轨迹投射到该地图上,计算每条轨迹的累积风险值,从而选出最优路径。这种设计使得感知结果能够直接反馈到车辆的决策层。
def select_optimal_trajectory(bev_cost_map, trajectories):
"""
Shoot阶段:基于代价地图评估轨迹
:param bev_cost_map: 预测的BEV代价空间 [H_bev, W_bev]
:param trajectories: 预定义的候选轨迹簇 [K, T, 2]
:return: 最优轨迹索引
"""
batch_costs = []
for traj in trajectories:
# 在代价地图上采样轨迹点的代价
# 假设 traj_indices 已经过网格坐标转换
traj_indices = transform_to_grid(traj)
path_cost = bev_cost_map[traj_indices[:, 0], traj_indices[:, 1]].sum()
batch_costs.append(path_cost)
return torch.argmin(torch.stack(batch_costs))
3. LSS架构的工程优势
LSS之所以能成为行业标配,主要得益于其在复杂多变的物理环境中所展现出的稳健性:
- 鲁棒的深度容错机制:通过深度分布(Probabilistic Depth)而非硬性的深度估计,LSS在面对摄像头震动或轻微标定偏移时,能通过特征重叠后的学习能力抵消部分几何误差。
- 高并行的计算结构:Lift和Splat阶段的大部分计算可以利用GPU的算力进行大规模并行,适合对实时性要求极高的车载推理平台。
- 灵活的模态融合接口:由于Splat阶段本质上是处理"带特征的3D点",这使得接入激光雷达(LiDAR)或4D成像雷达变得非常自然。雷达点云可以直接作为高置信度的空间特征输入,与视觉生成的视锥特征进行通道级或空间级的融合。
4. 针对差异化配置的优化策略
在实际工程落地中,开发者通常需要根据传感器的配置对LSS进行针对性调优:
对于纯视觉方案,优化的重心在于提升深度预测分支的准确度。例如,可以引入BEVDepth中提到的显式深度监督,利用离线生成的点云作为真值来约束Lift阶段的深度权重。同时,结合时序特征(Temporal Fusion)可以有效弥补单帧图像在速度估计和遮挡处理上的不足。
在多传感器融合方案中,LSS框架则扮演着"特征熔炉"的角色。4D毫米波雷达提供速度和精确的距离信息,可以用来修正视觉分支在远距离探测时的深度偏差。通过不对称特征融合策略,系统可以在光照不佳或极端天气下自动提高雷达分支的权重,从而保障感知的连续性。
5. 总结与前瞻
LSS不仅是一套算法,更是一种将2D语义与3D几何进行有机结合的思维方式。尽管当前出现了基于Transformer的全隐式映射方案,但LSS所代表的显式深度建模路径,因其更强的可解释性和更低的训练门槛,依然是工业界大规模量产的首选。未来的演进方向将聚焦于如何在保持高效计算的同时,进一步利用大模型的语义先验来解决Corner Case(长尾场景),并探索如何将BEV特征更深层次地融入到端到端的预测模型中。