OccNet
https://github.com/OpenDriveLab/OccNet
Scene as Occupancy
- 提出了一种新的场景表示方法, 利用环视摄像头,采用级联和时序体素编码的方式来重建三维Occ场景。
Method
1)提出的OCCNet首先重建占据描述符,目标是为支持下游任务获取一个代表性的占据描述符。OCCNet采用了级联的方式(解码过程被分为多个阶段,每个阶段都负责恢复特定的信息),通过多个级联阶段的迭代,从鸟瞰图特征中解码3D占据特征。 2)使用了基于体素的时间自注意力和空间交叉注意力来恢复高度信息,并结合了可变形的3D注意力模块以提高效率。
-
Reconstruction of Occupancy
OccNet使用Voxel尺度上的特征,但如果仅使用BEV特征,则无法充分恢复高度信息;但如果直接使用体素特征,则需要消耗大量算力。OccNet则在两者间寻求一个平衡点,先通过BEVFormer的encoder得到带有时序信息的BEV特征,再通过级联的decoder恢复3D占据特征。
不同层级的decoder负责恢复不同高度尺度的信息。
将前一帧的特征通过当前帧的参数进行变换,对于典型的自注意力机制,每一个query都需要与所有的key和value进行匹配,在3D特征下,这需要消耗大量的算力。因此,OccNet引入了可变形的3D注意力模块,从而大大降低了计算量。 -
Exploiting Occupancy on Various Tasks
有了细粒度的3D场景表征,就可以应用于各种下游任务:
- 分割场景补全: 使用L1 Loss 和 Focal Loss来完成类别不平衡的场景补全任务
- 3D目标检测: 基于BEVFormer,将Occ重新投影到BEV视角,并使用query-based检测头进行3D目标检测
- BEV 语义分割: 基于ST-P3, 与三D目标检测一样,地图表征和语义分割是通过 BEV 特征预测的。BEV 分割头包括用于地图表示的可驾驶区域头和车道头,以及用于语义分割的车辆分割头和行人分割头。
- 运动规划:对于运动规划任务,感知结果都可以转换为BEV分割的形式,所有形式的结果都可以以0,1的形式表示。进一步就可以用于安全代价函数的计算中。
Experiment
OpenOcc
数据集真值的生成步骤:
- 根据带标签的物体点和部分背景点生成占位数据,其中黑点表示中间帧的未知背景点。
- 根据生成的占用率数据标注部分未知背景点。
- 去除其余被视为噪声的未知背景点。
- 对占用率数据进行后处理,以确保场景的完整性,如填补红色虚线框内的空洞。