自动驾驶视觉
一、自动驾驶分级
| 级别 | 名称 | 描述 | 责任方 |
|---|---|---|---|
| L0 | 无自动化 | 全部由人驾驶 | 人 |
| L1 | 辅助驾驶 | 单功能自动化(ACC/车道保持) | 人 |
| L2 | 部分自动 | 多功能协同(需手扶方向盘) | 人 |
| L3 | 条件自动 | 系统驾驶,人可接管 | 系统(限定场景) |
| L4 | 高度自动 | 全无人(限定区域) | 系统 |
| L5 | 完全自动 | 全场景无人 | 系统 |
二、感知模块 ⭐
2.1 传感器配置
| 传感器 | 优势 | 劣势 | 典型厂商 |
|---|---|---|---|
| 摄像头 | 低成本/颜色识别/车道线 | 受光照/天气影响 | 车载 |
| LiDAR | 精确3D/全天候 | 昂贵/稀疏点云 | Velodyne, Hesai |
| 毫米波雷达 | 速度检测/全天候 | 分辨率低 | Bosch, Continental |
| 超声波 | 短距离精确 | 范围短 | 倒车雷达 |
| IMU+GPS | 定位 | 漂移/精度 | 导航定位 |
2.2 纯视觉方案 (Tesla vs 多传感器)
| 方案 | 代表 | 特点 |
|---|---|---|
| 纯视觉 | Tesla | 低成本,靠大量数据+大模型 |
| 多传感器融合 | Waymo, 百度 | LiDAR+Radar+Camera,精确安全 |
| 低成本组合 | Mobileye | Camera+Radar |
2.3 3D目标检测
| 模型 | 输入 | 特点 |
|---|---|---|
| PointPillars | LiDAR点云 | 柱子化,速度快 |
| VoxelNet | LiDAR点云 | 体素化3D卷积 |
| CenterPoint | LiDAR点云 | 中心点检测 |
| Frustum-PointNet | RGB+LiDAR | 融合方案 |
| BEVDet | Camera | 鸟瞰图检测 |
| BEVFormer ⭐ | Camera | Transformer BEV |
| LSS (Lift-Splat-Shoot) | Camera | 深度估计+BEV |
2.4 BEV感知 ⭐
核心: 将多个摄像头视角融合到鸟瞰图统一空间
前视相机 ──┐
侧前相视 ──┤ ┌─────────────────┐
侧后相机 ──┼── Transformer ──→│ BEV空间 │
后视相机 ──┤ │ (统一鸟瞰图) │
环视相机 ──┘ └─────────────────┘
├── 3D检测
├── 车道线
├── 可行驶区域
└── 运动预测
| BEV模型 | 年份 | 创新 |
|---|---|---|
| LSS | 2020 | Lift-Splat深度估计 |
| BEVDet | 2022 | 高效BEV检测 |
| BEVFormer ⭐ | 2022 | 时空Transformer注意力 |
| PETR | 2022 | 位置编码增强 |
| UniAD | 2023 | 端到端自动驾驶(感知→规划) |
| SparseBEV | 2023 | 稀疏query BEV |
2.5 车道线检测
| 模型 | 方法 | 特点 |
|---|---|---|
| LaneNet | 实例分割 | 经典 |
| UFLD | 无分割 | 极快 |
| CLRNet | 曲线回归 | SOTA |
| RESA | 循环特征 | 长距离依赖 |
2.6 可行驶区域/语义分割
- 城市环境分割 (Cityscapes)
- 全景驾驶分割 (BDD100K)
三、预测与规划
| 模块 | 任务 | 代表方法 |
|---|---|---|
| 运动预测 | 预测其他物体的未来轨迹 | Transformer, VectorNet |
| 路径规划 | 本车路径生成 | RRT, A*, Hybrid A* |
| 行为规划 | 变道/减速决策 | 规则引擎, RL |
端到端驾驶
# UniAD: 感知→预测→规划端到端
# 1. 特征提取 → BEV特征
# 2. 3D检测 + 跟踪
# 3. 地图理解
# 4. 运动预测
# 5. 轨迹规划
四、自动驾驶数据集
| 数据集 | 年份 | 规模 | 特点 |
|---|---|---|---|
| KITTI | 2012 | 15K | 最早的自动驾驶标准 |
| Cityscapes | 2016 | 25K | 城市街景分割 |
| BDD100K | 2018 | 100K | 大规模+多任务 |
| nuScenes ⭐ | 2019 | 1.4M | 多模态+多任务 |
| Waymo Open | 2019 | 1.1K | 最高质量LiDAR |
| Argoverse 2 | 2022 | 1K | 运动预测 |
| ONCE | 2021 | 15K | 中国路况 |
| SODA10M | 2022 | 10M | 大规模半监督 |
📺 推荐视频
- Tesla AI Day (每年): YouTube
- Waymo技术报告: YouTube
- BEVFormer论文精讲: B站
- 自动驾驶感知综述: B站搜索
📚 论文必读
| 领域 | 论文 | 年份 |
|---|---|---|
| 3D检测 | PointPillars | 2019 |
| 3D检测 | CenterPoint | 2021 |
| BEV | BEVDet | 2022 |
| BEV | BEVFormer | 2022 |
| 端到端 | UniAD | 2023 |
| 3D检测 | 3D Multi-Object Tracking | 近年 |
| 运动预测 | Waymo Motion | 2022 |
| 规划 | ChauffeurNet | 2019 |
🔗 资源链接
- nuScenes: https://www.nuscenes.org/
- KITTI: https://www.cvlibs.net/datasets/kitti/
- Waymo Open Dataset: https://waymo.com/open/
- Apollo (百度开源): https://github.com/ApolloAuto/apollo
- OpenPilot (Comma.ai): https://github.com/commaai/openpilot
附录:深层补充
一、BEV 感知详解
1.1 LSS(Lift-Splat-Shoot)视锥投射
LSS 是 BEV 感知的奠基性工作,核心分为三步:
Step 1: Lift(提升 → 视锥点云)
对每个相机,为像素
(
u
,
v
)
(u,v)
(u,v) 预测深度分布
α
u
v
∈
R
D
\boldsymbol{\alpha}_{uv} \in \mathbb{R}^{D}
αuv∈RD(
D
D
D 个离散深度 bin),结合图像特征
f
u
v
∈
R
C
\mathbf{f}_{uv} \in \mathbb{R}^{C}
fuv∈RC,构造视锥点云:
p
u
v
,
d
=
α
u
v
,
d
⋅
f
u
v
∈
R
C
\mathbf{p}_{uv,d} = \boldsymbol{\alpha}_{uv,d} \cdot \mathbf{f}_{uv} \in \mathbb{R}^{C}
puv,d=αuv,d⋅fuv∈RC
每个像素产生
D
D
D 个带特征的点,位于相机坐标系下沿射线的不同深度。利用相机内参
K
K
K 和外参
[
R
∣
t
]
[R|t]
[R∣t] 将相机坐标
(
u
,
v
,
d
)
(u,v,d)
(u,v,d) 变换到自车坐标系:
[
x
y
z
]
=
R
⋅
d
⋅
K
−
1
[
u
v
1
]
+
t
\begin{bmatrix} x \\ y \\ z \end{bmatrix} = R \cdot d \cdot K^{-1} \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} + t
xyz
=R⋅d⋅K−1
uv1
+t
深度分布预测:对特征图施加分割式深度预测——对 H × W H\times W H×W 空间的每个位置,用 softmax 归一化后获得 D D D 个深度概率值,求和为1。这是一个分类任务(深度属于哪个 bin),而非回归任务。
Step 2: Splat(溅射 → BEV 栅格池化)
将大量带特征的点云投影到定义好的 BEV 栅格(如 200×200,每个栅格对应 0.5m×0.5m)。由于多相机点云重叠,使用 cumsum trick(基于排序的累积求和)高效实现:
- 将所有视锥点按 BEV 栅格索引排序
- 在每个栅格内对特征求和
- 最终每个栅格得到一个聚合特征向量
Step 3: Shoot(射击 → 端到端规划/检测)
BEV 特征图可直接输入检测头(分类 + 回归)或规划头。
关键创新:LSS 将 2D 图像特征与可微深度预测结合,实现了端到端的 2D→3D→BEV 转换,为后续 BEV 感知奠定了基础。
1.2 BEVFormer 的时空注意力
BEVFormer 使用 Transformer 的注意力机制替代 LSS 的显式几何投射,核心包含两种注意力:
空间交叉注意力(Spatial Cross-Attention, SCA):
-
BEV query Q p ∈ R H B E V × W B E V × C Q_p \in \mathbb{R}^{H_{BEV} \times W_{BEV} \times C} Qp∈RHBEV×WBEV×C 的每个栅格在 3D 空间中采样 N r e f N_{ref} Nref 个参考点(通常沿高度轴采样 4 个平面)
-
参考点通过相机内外参投影到多相机图像平面
-
每个参考点在图像特征图上采样变形注意力(Deformable Attention)
-
公式:
SCA ( Q p ) = 1 ∣ V ∣ ∑ v = 1 V ∑ k = 1 K A p v k ⋅ W ⋅ F v ( Proj v ( p , k ) ) \text{SCA}(Q_p) = \frac{1}{|V|} \sum_{v=1}^V \sum_{k=1}^{K} A_{pvk} \cdot W \cdot \mathbf{F}_v(\text{Proj}_v(p, k)) SCA(Qp)=∣V∣1v=1∑Vk=1∑KApvk⋅W⋅Fv(Projv(p,k))
其中 V V V 是相机数, K K K 是采样点数, Proj v ( p , k ) \text{Proj}_v(p,k) Projv(p,k) 将 BEV 位置 p p p 的 3D 参考点投影到相机 v v v 的像素坐标。
时间自注意力(Temporal Self-Attention, TSA):
- 将上一时刻的 BEV 特征 B t − 1 \mathbf{B}_{t-1} Bt−1 对齐到当前时刻(通过 ego-motion 进行 3D 空间变换)
- 当前 BEV query 与历史 BEV 特征做自注意力,捕获时序信息
- 对静止物体和移动物体都能利用时间上下文确定深度和速度
BEVFormer 的整体流程:
- 初始化 BEV query
- 先做时间自注意力(对齐历史 BEV 特征)
- 再做空间交叉注意力(从多相机图像聚合特征)
- 经过 FFN 和残差连接得到当前 BEV 特征
- 叠加 6 层 Encoder
BEVFormer 与 LSS 的本质差异:
| 维度 | LSS | BEVFormer |
|---|---|---|
| 空间交互 | 显式投影+池化 | 可变形注意力隐式学习 |
| 时序融合 | 无专门处理 | 显式时序注意力 |
| 灵活性 | 依赖精确标定 | 端到端学习投影关系 |
| 速度 | 快(纯卷积/池化) | 慢(注意力计算) |
1.3 Transformer 统一 BEV 范式
当前 BEV 感知已进入 Transformer 统一范式的阶段,核心趋势:
- 统一 query 设计:利用可学习的 object query(如 PETR、SparseBEV)替代密集 BEV 栅格,降低计算量
- 跨模态融合到 BEV:Lidar + Camera 在 BEV 空间中统一表示
- 端到端可微:从原始传感器到最终检测/规划全程可导
二、端到端自动驾驶(UniAD)
2.1 UniAD 的感知-预测-规划联合框架
UniAD 是第一个将全部驾驶模块整合为端到端可微框架的方法,摒弃了传统分离式 pipeline,包含 5 个核心模块:
模块一:TrackFormer
- 输入:多帧 BEV 特征
- 输出:3D 目标检测 + 多目标跟踪(检测即跟踪的范式)
- 使用 query 从时间维度跟踪每个物体实例
- 输出每个物体的类别、位置、尺寸、速度
模块二:MapFormer
- 输入:BEV 特征
- 输出:地图元素(车道线、人行道、路缘等)的矢量化表示
- 使用 point query 逐点预测地图元素的顶点坐标
- 输出变为自动驾驶可用的结构化地图(非栅格化)
模块三:MotionFormer
- 输入:TrackFormer 检测到的物体 + MapFormer 的地图
- 输出:每个物体的多模态未来轨迹(通常 K=6 条候选轨迹)
- 关键设计:交互注意力(Interaction Attention)——代理-代理、代理-地图之间的相互影响
- 每条轨迹附带置信度分数
模块四:OccFormer
- 输入:BEV 特征 + 运动预测结果
- 输出:未来时刻的 3D 语义占用预测
- 建模其他交通参与者的形状占用,用于碰撞检测
模块五:Planner
- 输入:上述所有模块的中间特征
- 输出:自车未来 N 秒的规划轨迹( τ p l a n \tau_{plan} τplan 个 waypoint)
- 最小化规划路径的碰撞代价 + 舒适代价 + 交通规则代价
2.2 梯度传播关系
UniAD 的核心优势在于梯度在各模块间全流通:
Planner ← MotionFormer ← TrackFormer ← BEV Encoder
↕ ↕
OccFormer MapFormer
- Planner 的损失反向传播到所有下游模块
- MotionFormer 的损失影响 TrackFormer 的检测效果
- 感知误差通过梯度信号自动校正(例如:Detector 漏检车辆 → 规划路径变差 → loss 增大 → 更新检测器提高召回)
这种 End-to-End 训练方式相比分离式训练(每个模块独立训练,后融合)能提升约 12% 的规划安全性。
三、Occupancy Network
3.1 OccNet(3D 语义占用预测)
OccNet 将自动驾驶感知从 3D BBox 检测扩展到3D 占用网格预测,将自车周围空间划分为 X × Y × Z X\times Y\times Z X×Y×Z 体素网格,为每个体素预测:
- 是否被占用(二值分类)
- 占用物体的语义类别(语义分类)
- 速度/流向(运动场)
输出格式: O ∈ R H × W × Z × ( 1 + C + 3 ) \mathcal{O} \in \mathbb{R}^{H\times W\times Z \times (1 + C + 3)} O∈RH×W×Z×(1+C+3)(占用标志 + 语义 logits + 速度向量)
优势:
- 能检测任意形状的物体(不限于标准 3D 框的矩形假设)
- 对行驶区域的可通行性提供体素级判断
- 对长尾形状物体(如施工障碍物、不规则车辆装载)有效
3.2 OCC 的监督信号构建
占用网格的 ground truth 来自激光点云的体素化:
- 将当前帧 LiDAR 点云 P = { p 1 , . . . , p n } \mathcal{P} = \{p_1, ..., p_n\} P={p1,...,pn} 转换为 XYZ 坐标
- 体素化: v i j k = 1 v_{ijk} = 1 vijk=1 当且仅当 ∃ p ∈ P \exists p \in \mathcal{P} ∃p∈P 落在体素 ( i , j , k ) (i,j,k) (i,j,k) 范围内
- 语义标签:通过点云的语义分割标签映射到体素类别
- 时间积累:将前后多帧 LiDAR 点云通过 ego-motion 变换对齐后联合体素化,填充更多体素
稀疏监督问题:
- LiDAR 点云仅覆盖物体的暴露表面(外表面),内部体素无监督信号
- 解决方案:使用**射线投射(ray casting)**推断——从传感器原点沿射线判断体素是被遮挡(occupied)还是自由(free)
3.3 Occ vs 检测的互补性
| 特性 | 3D 目标检测 | Occupancy 预测 |
|---|---|---|
| 输出形式 | 稀疏 3D BBox | 稠密体素网格 |
| 物体形状假设 | 矩形框 | 无限制(任意形状) |
| 远距离性能 | 降级(框回归不稳定) | 相对稳定(二分类) |
| 运动预测 | 附加轨迹预测头 | 体素级速度场 |
| 可行驶区域 | 间接推断 | 直接预测(free voxels) |
| 与规划接口 | 后处理碰撞检测 | 直接占用损失 |
实际系统通常两者混合:检测负责精准的物体识别和跟踪,Occ 负责通用形状的空间占用建模。
四、多传感器融合
4.1 前融合 vs 特征融合 vs 后融合
| 融合层级 | 融合时机 | 对齐方式 | 典型方式 | 优缺点 |
|---|---|---|---|---|
| 前融合(Early Fusion) | 原始数据/低层特征 | 像素/体素精对准 | RGB + LiDAR 体素对齐输入 | 信息最完整,但计算量最大,对时空间对准要求极严 |
| 特征融合(Feature Fusion) | 中等层特征 | 特征图空间对齐 | BEV 特征相加/拼接 | 平衡信息量和计算量,当前主流 |
| 后融合(Late Fusion) | 各模态独立推理后的决策 | 检测框/分割图层面 | NMS / IoU 一致 | 解耦合,容错好,但丢失低级特征交互 |
特征融合是当前主流,典型架构:
- Camera 分支:2D→BEV 转换(LSS/BEVFormer)
- LiDAR 分支:点云→BEV 转换(PointPillars/VoxelNet)
- 在 BEV 空间中对齐并融合两路特征
4.2 BEVFusion(Lidar + Camera 异源融合)
BEVFusion 是异源融合的里程碑工作:
LiDAR 分支:
- 点云 → Pillar VFE(PointNet 编码每个 pillar 内的点)
- Pillar scatter → 2D BEV 特征
Camera 分支:
- 多相机图像 → 2D 骨干网络 → 通过 LSS 深度估计转换为 BEV 特征
融合策略:
- BEV 空间中的通道拼接 + 卷积融合
- 更优方案:自适应融合(Attention-based)——学习每个位置对不同模态的注意力权重
- 消融实验表明:Camera BEV 特征主要贡献语义信息(车道线/交通标志),LiDAR BEV 特征主要贡献几何定位(精确的物体边界)
4.3 融合的对齐问题
空间对齐:
- Camera 2D→3D 的多义性(深度不确定性大)
- LiDAR 3D→BEV 的下采样丢失细节
- 解:通过可变形注意力(deformable attention)引入学习能力,使模型自适应调整对应关系
时间同步:
- 不同传感器采集帧率不同(Camera 30fps, LiDAR 10fps, Radar 50fps)
- 融合时需基于硬件时间戳对齐到同一时刻
- 大时间差下的物体移动导致空间位置错位(motion compensation):使用 IMU 或卡尔曼滤波外推/插值
五、自动驾驶数据集详解
5.1 nuScenes
| 属性 | 数值 |
|---|---|
| Scenes(场景) | 1000 |
| Key frames | 40K |
| Annotations | 1.4M 3D BBox |
| 类别 | 23 类 |
| Cameras | 6 (前/后/左前/右前/左后/右后) |
| Radars | 5 |
| LiDAR | 1 (32-beam) |
| 地点 | 波士顿 + 新加坡 |
特有评估指标:
-
NDS(nuScenes Detection Score):综合指标,将 mAP 与 5 个 true positive 指标(ATE/ASE/AOE/AVE/AAE)加权:
NDS = 1 6 [ mAP + ∑ m TP ∈ { ATE , . . . } ( 1 − m TP ) ] \text{NDS} = \frac{1}{6} \left[ \text{mAP} + \sum_{m_{\text{TP}} \in \{\text{ATE}, ...\}} (1 - m_{\text{TP}}) \right] NDS=61 mAP+mTP∈{ATE,...}∑(1−mTP) -
mAP:使用 2D 中心距离(0.5m/1.0m/2.0m/4.0m 四个阈值)而非 IoU 匹配(因为 LiDAR 稀疏导致 IoU 不稳定)
5.2 Waymo Open Dataset
| 属性 | 数值 |
|---|---|
| Scenes | 1150 (1000 train + 150 val) |
| Frames | 230K (每 scene 200 frames, 20s) |
| Annotations | 12M 3D BBox |
| 类别 | 4 类 (Vehicle/Pedestrian/Cyclist/Sign) |
| LiDAR | 5 (1 Top + 4 Side) |
| Cameras | 5 |
特有评估指标:
- mAP / mAPL(mAP with heading accuracy)
- 按距离分组:LEVEL_1(0-30m)和 LEVEL_2(30-50m)
- IoU 匹配:Vehicle 用 0.7, Pedestrian 用 0.5, Cyclist 用 0.5
Waymo 的优势:
- 最高质量的 LiDAR(5 个激光雷达,高密度点云)
- 长时域(20s/scene),适合运动预测
- 具有全面的场景标注(包括行人、被遮挡物体)
5.3 Argoverse 2
| 属性 | 数值 |
|---|---|
| Scenes | 1000 |
| 传感器 | 2 LiDAR (中/长距) + 7 环视相机 + 2 立体相机 |
| 矢量地图 | ✅(高精度 HD Map) |
| 运动预测 | ✅(多模态轨迹标注) |
特有评估指标:
- minADE(最小平均位移误差):在 K 个预测轨迹中,与 ground truth 最近的那条轨迹的平均 L2 距离
- minFDE(最小最终位移误差):在 K 个预测轨迹中,最终位置的最短 L2 距离
- Miss Rate:最终位移 > 2m 的比例
最大特色:
- 提供矢量地图(车道中心线、道路边界、交通灯)
- 专注运动预测任务的多模态评估
更多推荐
所有评论(0)