Occupancy网络基础:从BEV到3D占用网格的表示方法、输入输出定义、与目标检测和语义分割的区别

在自动驾驶感知系统中,传统2D目标检测与BEV(Bird's Eye View,鸟瞰图)感知已经无法满足复杂道路场景下对几何结构与自由空间理解的需求。Occupancy Network(占用网络)通过将三维空间离散化为体素网格(Voxel Grid),对每个网格单元进行占用状态与语义类别的预测,从而构建出稠密的3D占用表示。本节将系统梳理从BEV到3D占用网格的演进逻辑、Occupancy网络的输入输出定义,并深入辨析其与目标检测、语义分割在任务范式上的本质差异。

Occupancy Network 表示与任务对比 多模态输入 6/8/12 路 Camera Lidar (可选) Radar (可选) CAN / 高精地图 分辨率: 1280×720~1920×1080 FOV: 水平≥180° 特征提取与BEV 2D Backbone (ResNet/ViT) LSS / Transformer BEV Feature Map BEV 尺寸: 200×200 网格 分辨率: 0.5m / 网格 范围: 前后各50m 3D占用网格输出 体素网格: 200×200×16 分辨率: 0.5×0.5×0.5m 占用概率 + 语义类别 类别: 车辆/行人/骑行者 道路/建筑/植被/其他 输出维度: 640,000 体素 三种感知任务范式对比 任务类型 输出粒度 几何信息 典型应用 2D目标检测 2D BBox + 类别 无(仅图像平面) 单目视觉方案 BEV感知 BEV网格 + 目标 2.5D(高度压缩) 多传感器融合 3D占用网络 体素占用+语义 完整3D几何 复杂场景/端到端 关键设计要点 • 体素分辨率权衡 精度 vs 计算量 • 高度维度重要性 区分悬空/地面 • 类别不平衡处理 空体素占绝大多数 • 时序融合策略 多帧特征对齐 • 稀疏化推理 降低计算开销 • 损失函数设计 Focal + Dice • 数据增强 场景级/体素级 • 评估指标 IoU / mIoU F-score

2.1 从BEV到3D占用网格:表示方法的演进逻辑

BEV感知的核心思想是将多视角图像或点云投影到统一的俯视平面,形成二维网格特征图。以LSS(Lift, Splat, Shoot)为代表的方案通过深度分布估计将图像特征"提升"到3D空间,再"拍扁"到BEV平面。然而,BEV表示本质上是一种2.5D表示——它将高度信息压缩到每个网格单元的通道维度中,无法精确表达物体的垂直结构、悬空物、地下空间等复杂几何信息。

Occupancy Network将BEV的二维网格扩展为三维体素网格。具体而言,自动驾驶场景通常被划分为 X×Y×Z 的体素空间,例如 200×200×16,每个体素对应物理空间中的 0.5m×0.5m×0.5m 区域。网络需要预测每个体素是否被占用(Occupancy Probability),以及被占用时的语义类别(Semantic Class)。这种表示方式直接建模了三维空间的几何结构,能够自然处理重叠物体、悬空障碍物(如交通标志、桥梁)、地面与路沿的精细边界等BEV难以表达的场景。

核心原理:BEV是"俯视压缩",Occupancy是"全量3D建模"。BEV丢失了高度维度的精确信息,而Occupancy通过体素化保留了完整的空间结构。从信息论角度看,Occupancy的输出空间维度远大于BEV,因此需要更强的模型容量和更高效的推理策略。

2.2 输入输出定义:从多模态数据到体素预测

Occupancy网络的输入通常包括多路环视相机图像(6-12路),可选配激光雷达点云或毫米波雷达数据。以纯视觉方案为例,输入为 N×C×H×W 的图像张量,其中 N 为相机数量,C 为通道数(通常为3),H×W 为图像分辨率。经过2D骨干网络(如ResNet-50、Swin Transformer)提取特征后,通过视角变换模块(LSS或Deformable Attention)将2D特征映射到3D空间,生成BEV特征或直接生成3D体素特征。

输出定义包含两个分支:占用分支输出每个体素的占用概率 p ∈ [0,1],通常使用二值交叉熵损失(BCE Loss)进行监督;语义分支输出每个被占用体素的语义类别,使用交叉熵损失或Focal Loss进行监督。最终输出张量形状为 X×Y×Z×C,其中 C 为语义类别数(如车辆、行人、骑行者、道路、建筑、植被、其他等)。

模块 输入定义 输出定义 典型维度
图像编码器 多视角图像 N×3×H×W 2D特征图 N×C×H/8×W/8 N=6, C=256, H=720, W=1280
视角变换 2D特征 + 深度分布 3D体素特征 X×Y×Z×C 200×200×16×256
占用预测头 3D体素特征 占用概率 X×Y×Z×1 200×200×16×1
语义预测头 3D体素特征 语义类别 X×Y×Z×C 200×200×16×10

2.3 与目标检测和语义分割的本质区别

目标检测(2D或3D)输出的是稀疏的边界框(Bounding Box),每个框包含位置、尺寸、朝向和类别。这种表示假设物体是刚性的、可分离的,无法处理不规则形状物体(如树木、灌木丛)、部分遮挡物体或连续的自由空间边界。语义分割在2D图像或BEV平面上进行像素级或网格级分类,但缺乏深度维度的信息,无法区分同一位置不同高度的物体。

Occupancy Network的独特优势在于:稠密预测(每个体素都有输出)、几何显式建模(直接预测3D结构)、语义与几何联合(同时输出占用和类别)。这使得Occupancy Network能够处理任意形状的障碍物、预测可行驶区域、检测悬空物体,并为规划模块提供更丰富的环境约束信息。

常见误区:初学者容易将Occupancy Network理解为"3D语义分割"。实际上,3D语义分割通常处理点云数据,输出每个点的语义标签;而Occupancy Network处理的是体素网格,输出的是占用状态+语义类别。此外,Occupancy Network的"占用"概念包含了"自由空间"的显式建模,这是语义分割所不具备的。

2.4 案例拆解:城市复杂路口场景下的表示对比

考虑一个典型的城市十字路口场景:存在红绿灯、悬空的交通标志牌、密集的行人、非机动车、路沿、绿化带以及远处的建筑物。使用传统3D目标检测方案,系统只能输出若干个3D边界框,对于红绿灯和交通标志牌这类小目标容易漏检,且无法表达绿化带和路沿的连续几何形状。使用BEV语义分割方案,虽然可以分割出道路、车辆、行人等区域,但无法区分"地面上的车辆"和"天桥上的车辆"——因为它们在BEV平面上可能重叠。

采用Occupancy Network后,系统将场景划分为 200×200×16 的体素网格。红绿灯被表示为悬空体素簇,交通标志牌被表示为薄片状体素集合,绿化带被表示为连续的不规则体素区域,行人被表示为小体积的体素簇。规划模块可以直接查询任意位置(包括高度)的占用状态,从而做出更安全的决策。例如,当车辆准备右转时,系统可以检测到右前方上方存在悬空的树枝(占用体素),虽然BEV上该区域是"空"的,但实际物理空间存在碰撞风险。

实战经验:在实际工程中,体素分辨率的选择需要权衡精度与计算量。0.5m分辨率在高速场景下可能不够精细,建议在城区复杂场景使用0.25m分辨率,但需要配合稀疏卷积或3D稀疏注意力来降低计算开销。同时,高度维度的范围设置也很关键——一般设置为[-2m, 4m](相对于地面),覆盖地下停车场入口到高架桥底部。

2.5 常见误区与总结复盘

  • 误区一:认为Occupancy Network只是BEV的简单扩展。实际上,从BEV到3D占用需要重新设计特征提取、视角变换、损失函数和推理策略,计算复杂度呈立方级增长。
  • 误区二:忽略类别不平衡问题。在 200×200×16 的体素空间中,超过95%的体素是"空"的,直接使用交叉熵损失会导致模型偏向预测"空"。需要采用Focal Loss、Dice Loss或OHEM(在线困难样本挖掘)策略。
  • 误区三:将占用概率与语义类别独立优化。实际上,语义类别预测应该只在"被占用"的体素上进行,两者需要联合训练或使用级联预测结构。
  • 误区四:忽视时序信息。单帧Occupancy预测在遮挡场景下效果有限,通过多帧特征融合(如时序注意力)可以显著提升占用预测的完整性和稳定性。