1. 课程导入

在自动驾驶感知系统中,如何把分布在车身四周的多个摄像头图像,统一映射到一个自上而下的鸟瞰图(Bird's Eye View,BEV)空间,是近年来最具工程价值的问题之一。LSS(Lift, Splat, Shoot)正是这一方向的代表性方法:它通过“抬升—泼溅—投射”三步,把多视图 2D 图像特征转换为统一的 BEV 特征,从而支撑检测、分割、预测与规划等下游任务。本课程围绕 LSS 多视图 BEV 感知的工程实现展开,本章先建立整体认知框架。

一、什么是 LSS 多视图 BEV 感知

LSS 的核心思想可以概括为:每个相机在图像平面上的像素,并不直接对应地面上的某个点,而是对应一条从相机光心出发的三维射线。LSS 不急于在图像空间做融合,而是先为每个像素预测一组离散深度分布,把 2D 特征“抬升”为沿射线的 3D 特征点云;再通过相机内外参,把这些 3D 点“泼溅”到统一的 BEV 网格中;最后在 BEV 网格上做卷积或 Transformer 编码,完成“投射”到下游任务头。

与单目 BEV 或纯激光雷达方案相比,LSS 的关键优势在于:多相机共享同一 BEV 坐标系,遮挡与尺度问题被统一到同一空间处理,且不依赖高精地图即可端到端训练。它的代价是深度估计误差会直接传播到 BEV 特征,因此工程上必须关注深度监督、外参标定与 BEV 网格分辨率等参数。

LSS 多视图 BEV 感知信号链 多相机输入 前视 CAM_FRONT 左前 / 右前 F_L / F_R 后视 / 侧后 BACK / B_L / B_R 图像张量 N×3×H×W 内外参 + 畸变 Lift 抬升 2D 特征提取 ResNet / CSP 深度分布预测 D bins, softmax 沿射线采样 C×D×H×W 3D 特征点云 视锥体特征 Splat 泼溅 坐标变换 相机→自车→BEV 体素池化 voxel pooling BEV 网格 X×Y×C 多相机融合 求和 / 拼接 Shoot 投射与任务头 BEV 编码器 ResNet / BEVFormer 3D 目标检测 CenterPoint / DETR BEV 语义分割 map / drivable 运动预测与规划 轨迹 / 占用栅格 关键参数:BEV 网格 X×Y(如 200×200)、深度 bin 数 D(如 41)、特征通道 C(如 64/128)、相机数 N(如 6)

二、发展背景:从单目到多视图统一 BEV

早期自动驾驶感知以激光雷达为主,摄像头多用于 2D 检测与车道线识别。随着纯视觉方案兴起,行业逐渐意识到:多相机图像必须在统一空间融合,否则前视、侧视、后视的检测结果无法直接用于规划控制。2020 年前后,LSS 论文提出“抬升—泼溅”范式,随后 BEVDet、BEVDepth、BEVFormer、PETR 等方法不断演进,形成今天多视图 BEV 感知的技术谱系。

推动这一演进的因素主要有三点:其一,车载算力提升使端到端 BEV 网络可实时运行;其二,大规模多相机数据集与自动标注降低了训练门槛;其三,下游规划控制对统一 BEV 表示的需求越来越强。LSS 作为其中结构清晰、可解释性好的基线,是理解整个技术栈的最佳入口。

三、典型应用场景与工程约束

LSS 多视图 BEV 感知主要服务于以下场景:

  • 城市 NOA 与高速领航:需要 BEV 下的车辆、行人、锥桶检测与可行驶区域分割。
  • 自动泊车与记忆泊车:依赖近距离 BEV 占用栅格与车位检测。
  • 多传感器融合:BEV 特征可作为与激光雷达、毫米波雷达融合的统一接口。
  • 端到端规划:BEV 特征直接输入轨迹预测与规划网络,减少手工规则。

工程误区提醒:很多初学者认为 LSS 只是“把图像投影到地面”,忽略了深度分布预测才是精度关键。若深度监督缺失或外参标定漂移,BEV 特征会出现明显“重影”与“拉伸”,下游检测 mAP 会大幅下降。因此,深度分支的损失权重、外参在线校准与 BEV 网格分辨率必须联合调优。

四、整体课程框架与学习路径

本课程共 30 章,按“原理—数据—模型—训练—部署—排障”六段式组织。下表给出整体框架与关键产出:

阶段 章节范围 核心内容 关键产出
原理基础 第 1–5 章 LSS 定义、坐标系、深度分布、体素池化、BEV 网格 可运行的 Lift-Splat 最小实现
数据与标定 第 6–10 章 nuScenes 数据解析、相机内外参、畸变校正、时间同步 多视图数据加载与标定校验脚本
模型结构 第 11–16 章 Backbone、深度头、BEV 编码器、检测/分割头 完整 BEV 感知网络
训练与调优 第 17–22 章 损失函数、深度监督、数据增强、混合精度、分布式训练 可复现的训练配置与日志
部署与优化 第 23–27 章 TensorRT、ONNX 导出、量化、算子融合、时延分析 车载推理引擎与性能报告
排障与复盘 第 28–30 章 重影、漏检、外参漂移、深度塌缩等典型问题 故障树与调参手册

五、最小可运行示例:LSS 前向伪代码

为建立直观印象,下面给出 LSS 前向过程的核心伪代码。注意其中 depth_bins、bev_grid 与 voxel_pool 是后续章节会反复出现的参数与算子。

# LSS 前向核心步骤(伪代码)
def lss_forward(images, intrinsics, extrinsics):
    # 1. Lift:2D 特征 + 深度分布
    feats = backbone(images)                 # [N, C, H, W]
    depth = depth_head(feats)                # [N, D, H, W]
    depth = softmax(depth, dim=1)            # 沿深度维归一化
    frustum = feats.unsqueeze(1) * depth.unsqueeze(2)  # [N, C, D, H, W]

    # 2. Splat:视锥体 -> BEV 网格
    points = project_to_ego(frustum, intrinsics, extrinsics)
    bev = voxel_pool(points, bev_grid=(200, 200), x_range=(-50, 50), y_range=(-50, 50))

    # 3. Shoot:BEV 编码 + 任务头
    bev_feat = bev_encoder(bev)              # [B, C, 200, 200]
    det = detection_head(bev_feat)
    seg = segmentation_head(bev_feat)
    return det, seg

学习建议:第 1 章不必急于跑通全部代码,先建立“多相机 → 深度分布 → 3D 视锥 → BEV 网格 → 任务头”的信号链认知。后续每章都会围绕这条链上的一个环节深入,最终拼装成可部署的工程系统。

本章作为课程导入,明确了 LSS 多视图 BEV 感知的定义、发展背景、应用场景与整体框架。理解这条从图像到 BEV 的完整信号链,是后续数据、模型、训练与部署各环节的基础。