3. Occupancy网络基础:3D占用网格的定义、体素化、语义标签、与BEV的关系及优势
在上一章中,我们建立了BEV(Bird's Eye View,鸟瞰视角)感知的基本概念,理解了如何将多目相机或激光雷达信息投影到统一的俯视平面。然而,BEV表示本质上是一种2D的俯视栅格,它丢失了物体的高度信息、垂向重叠关系以及自由空间与占据空间的精细边界。在真实的自动驾驶场景中,一个倒下的树干、一辆半挂车的货箱悬空、或者一个施工路障,往往在BEV中难以被准确表达。这正是Occupancy Network(占用网络)需要解决的问题。本章将系统性地讲解3D占用网格的定义、体素化方法、语义标签体系,并深入剖析其与BEV表示的内在联系与核心优势,为后续的联合训练实战打下坚实的理论基础。
上图清晰地展示了从多传感器输入到最终3D Occupancy输出的完整链路。我们首先需要理解,Occupancy网络并不是一个完全脱离BEV的独立架构,而是BEV感知在三维空间中的自然延伸。其核心思想是将自动驾驶车辆周围的环境离散化为一系列均匀的、带有语义标签的立方体网格(即体素),每个体素独立地表示该空间位置是否被占据,以及被何种物体占据。这种表示方式直接对应了物理世界的三维几何结构,为规划控制模块提供了更丰富的障碍物信息。
3.1 3D占用网格的定义与体素化原理
核心原理:3D占用网格(Occupancy Grid)是一种将连续的三维空间离散化的数据结构。在自动驾驶场景中,我们通常以自车为中心,定义一个感兴趣区域(ROI),例如前方100米、左右各40米、高度从-2米到5米的空间范围。这个空间被切割成大小相等的立方体单元,即体素(Voxel)。每个体素都对应一个二值或概率值,表示该空间是否被障碍物占据。体素化(Voxelization)的过程,就是将连续的点云或图像特征映射到这些离散网格中的过程。
体素分辨率的选取策略:体素大小直接决定了感知精度与计算量的平衡。常用的分辨率包括0.2m、0.4m和0.8m。较小的体素(如0.2m)能捕捉到细长的物体(如电线杆、自行车把手),但会显著增加3D卷积的计算量;较大的体素(如0.8m)计算效率高,但会丢失细节,导致相邻物体粘连。在实际工程中,我们通常采用近密远疏的非均匀体素划分策略,即自车周围40米范围内使用0.4m分辨率,更远处使用0.8m分辨率,以平衡性能与精度。
3.2 语义标签体系与多任务输出
判断方法:Occupancy网络不仅要回答“哪里被占了”,还要回答“被什么占了”。因此,每个体素除了占据概率外,还需要一个语义类别标签。常见的语义类别包括:背景(空)、地面、车辆、行人、骑行者、建筑物、植被、路障、未知动态物体等。在训练时,我们通常使用激光雷达点云作为监督信号,将点云配准到体素网格中,并利用点云的语义分割标签(如SemanticKITTI数据集格式)为每个体素赋予类别。
多任务学习框架:一个完整的Occupancy网络通常包含三个并行的预测头:
- 二值占据头(Binary Occupancy):输出每个体素是否被占据的概率,用于通用障碍物检测。
- 语义分割头(Semantic Segmentation):输出每个体素在各类别上的概率分布,用于精细的语义理解。
- 场景流头(Scene Flow,可选):预测每个占据体素的运动矢量,用于动态障碍物的速度估计。
这种多任务设计使得网络在共享Backbone特征的同时,能够从不同粒度学习空间表示,从而提升整体鲁棒性。
| 输出类型 | 维度定义 | 监督信号来源 | 主要用途 |
|---|---|---|---|
| 二值占据 | X × Y × Z × 1 | LiDAR 点云二值化 | 通用障碍物避障 |
| 语义占据 | X × Y × Z × C | LiDAR 语义分割标签 | 精细场景理解、可通行区域 |
| 实例占据 | X × Y × Z × K | 3D 实例分割标签 | 目标跟踪、轨迹预测 |
3.3 与BEV表示的关系及核心优势
关系剖析:BEV是Occupancy的一种特例。当我们将3D体素网格沿Z轴方向进行最大池化(Max Pooling)或求和(Sum Pooling)时,得到的2D俯视图就是BEV表示。因此,Occupancy网络天然包含了BEV信息,并且额外提供了高度维度的细节。在联合训练中,我们通常将BEV特征作为中间特征层,在其上添加一个轻量级的3D解码头(如3D Deconvolution或Transformer Decoder)来生成体素预测。
核心优势对比:相较于传统的BEV框检测(如CenterNet、DETR3D),Occupancy网络具有以下不可替代的优势:
- 不规则形状描述能力:BEV框检测假设物体是轴对齐的矩形,无法准确描述正在转弯的卡车、伸出的吊臂或倒下的树木。而体素网格可以精确地拟合任意形状的几何轮廓。
- 垂向空间利用率:BEV丢失了高度信息,导致高架桥上的车辆与桥下车辆在BEV中重叠。Occupancy通过Z轴分层,有效区分了不同高度的障碍物,避免了误判。
- 开放词汇与长尾场景:对于训练集中未出现过的异形物体(如散落的货物、施工围挡),BEV检测器往往无法给出合适的框,而Occupancy网络可以将其预测为“未知占据”,从而保证安全性。
3.4 常见误区与工程复盘
误区一:体素分辨率越高越好。虽然高分辨率能提升精度,但会导致3D卷积的显存占用呈立方级增长。在A100(80GB)显卡上,0.2m分辨率的100m×40m×5m空间需要约2.5亿个网格,直接训练几乎不可能。工程上通常采用稀疏卷积(Sparse Convolution)或窗口注意力(Window Attention)来规避这一瓶颈。
误区二:忽略Z轴范围的定义。如果Z轴范围设置过小(如-1m到3m),会漏掉高架桥、交通标志牌等高处障碍物;设置过大则会引入大量无意义的空体素,增加计算负担。建议根据车型和法规要求,动态调整Z轴范围,例如在高速场景下将上限提升至6米。
误区三:将Occupancy与BEV割裂训练。在联合训练实战中,如果BEV分支和Occupancy分支使用独立的Backbone,不仅计算量翻倍,而且两个分支的特征域不一致,导致梯度冲突。正确的做法是共享Backbone和BEV Encoder,仅在最后几层进行任务分支。