自动驾驶技术栈解析:从BEV感知到端到端大模型

发布时间:2026/7/19 10:11:03
自动驾驶技术栈解析:从BEV感知到端到端大模型 自动驾驶大概是深度学习工程化程度最高的领域模型要跑在车规级芯片上延迟按毫秒算长尾场景按亿公里计。过去几年这套技术栈经历了一次剧烈重构——从几十个模块拼装的传统流水线到 BEV 统一表征再到如今特斯拉 FSD V12 和各家新势力押注的端到端大模型。本文按感知-预测-规划-架构的顺序把这条演进主线拆开讲清楚。传统模块化栈精确但脆弱经典的自动驾驶栈是一条长流水线传感器标定与预处理 → 目标检测与跟踪 → 高精地图定位 → 行为预测 → 决策规划 → 控制。每个模块独立开发、独立评测用接口契约串起来。这种架构的优点是工程上可控出问题能定位到模块规则系统兜底安全符合车规开发流程。Mobileye 和早期 Waymo 都是这个路线的代表。问题在规模化之后暴露出来模块间传递的是结构化中间结果比如 3D 框列表信息被不可逆地压缩——检测器丢掉的一个模糊目标规划器永远不知道它存在过误差逐级累积放大最要命的是每个长尾 corner case 都要人工写规则代码库越滚越大系统却越来越难收敛。行业里解决 99% 的问题只花了 1% 的时间的调侃说的就是这条路线的天花板。BEV 感知给多传感器一个统一坐标系BEVBirds Eye View鸟瞰图是这几年感知侧最重要的范式升级。思路是把车周多个相机加雷达的特征统一变换到以自车为中心的俯视平面在 BEV 空间里做检测、分割和跟踪。为什么非要 BEV因为规划和控制天然在俯视平面工作而单个相机的透视图像里近大远小、遮挡关系、跨相机的同一个目标处理起来都很别扭。统一到 BEV 后多相机融合变成特征拼接时序融合变成对齐历史帧下游直接消费。技术路线上分两大流派自底向上LSS 系BEVDepth、BEVFusion 走这条路。对每个像素预测深度分布按深度把图像特征抬到 3D 再压扁到 BEV。显式用深度几何解释性好自顶向下Transformer 系BEVFormer 用一组 BEV 网格 query 通过可变形注意力去各相机特征里采样隐式学习投影关系不依赖显式深度端到端可训练。工程实践里的共识是深度监督哪怕来自稀疏激光雷达对收敛帮助巨大时序历史帧基本是白送的精度BEV 分辨率要在显存和精度间做权衡量产方案常用 0.5m~1m 栅格。Occupancy从识别目标到描述空间目标检测有一个先天缺陷它只能输出训练时定义过的类别。路上掉一个异形货物、侧翻的锥桶类别体系里没有检测器就当背景——这在安全场景里是不可接受的。Occupancy Network占用网络换了个问法不问这是什么只问这个体素被占据吗、在往哪动。把 BEV 平面再拉高成 3D 体素栅格逐格预测占据状态和语义相当于对周围空间做稠密的体素重建。任意形状的障碍物、施工区域、翻倒的车辆都能被表达。特斯拉在 2022 年 AI Day 重点推了这个方案国内各家随后跟进。代价是算力开销明显上升量产上常配合稀疏体素表示或者 TPV三平面这类压缩表征来省显存。端到端大模型把整条栈变成一个网络BEV 解决了感知内部的统一但感知和规划之间仍然是人工接口。2023 年 CVPR 最佳论文 UniAD 第一次把检测、跟踪、建图、预测、规划全部装进一个 Transformer 架构里以规划为导向联合训练证明了可微分全栈可行。特斯拉 FSD V12 走得更彻底从光子到控制信号一个网络直接输出转向和加减速。马斯克的说法是删掉了 30 多万行 C 规则代码。国内华为 ADS 3.0、小鹏、理想也都在转向端到端架构通常保留感知中间输出做安全冗余和可解释性兜底。端到端的优势是系统以最终驾驶目标优化不再有信息瓶颈行为更像人挑战是数据需求爆炸需要海量高质量人类驾驶片段、可解释性差、安全验证体系要从模块测试改成场景统计。目前行业的普遍判断是端到端负责能力上限规则冗余负责安全下限两者会长期共存。动手试试BEVFormer 推理与 LSS 核心逻辑理解 BEV 最好的方式是看 LSSLift-Splat-Shoot的核心变换import torch # Lift: 为每个像素预测深度分布, 把图像特征抬升到3D # x: (B, N相机, C, fH, fW), depth_logits: (B, N, D, fH, fW) x torch.randn(1, 6, 64, 32, 88) depth_logits torch.randn(1, 6, 41, 32, 88) depth depth_logits.softmax(dim2) # 深度概率 lifted x.unsqueeze(2) * depth.unsqueeze(3) # 外积: (B,N,D,C,fH,fW) # Splat: 按相机内外参把特征点投到BEV栅格 (需预先算好索引) # bev voxel_pooling(lifted, coords) # 工程上用CUDA加速的柱体池化 print(lifted.shape) # torch.Size([1, 6, 41, 64, 32, 88])完整实验可以直接跑 OpenDriveLab 的 BEVFormer 或 mmcv 生态的 bevfusion 配置nuScenes mini 数据集在单张 3090 上就能训出一个可用的 demo。三代架构横向对比| 维度 | 模块化流水线 | BEV多任务架构 | 端到端大模型 | | --- | --- | --- | --- | | 信息传递 | 结构化中间结果 | BEV统一特征 | 端到端隐式特征 | | 优化目标 | 各模块独立指标 | 联合损失 | 直接以驾驶行为为损失 | | 长尾处理 | 人工规则堆叠 | 数据驱动占用网络 | 数据驱动世界模型 | | 可解释性 | 强 | 中等 | 弱靠中间监督补偿 | | 数据需求 | 标注为主