本文主要是介绍【占用网络】OccNet: Scene as Occupancy 适用于检测、分割和规划任务 ICCV2023,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
本文分享“占用网络”方案中,具有代表性的方法:OccNet。
它以多视角相机为核心,首先生成BEV特征,然后通过级联结构和时间体素解码器重建生成3D占用特征。
构建一个通用的“3D占用编码特征”,用以表示3D物理世界。这样的特征描述可以应用于广泛的自动驾驶任务,包括检测、分割和规划。
论文地址:Scene as Occupancy
开源地址:https://github.com/OpenDriveLab/OccNet
一、框架思路
OccNet输入多视角图像数据,类似BEVFormer思想,首先通过Deformable Attention融合多视角相机空间特征和时序特征,生成BEV特征。
然后通过级联-体素编码器,逐步生成Voxel特征;最后供BEV分割、3D目标检测、运动规划等任务使用。
OccNet的思路流程如下图所示,
- 输入多视角图像数据,比如6张环视图像。经过主干网络提取图形特征,得到多视角图像特征。
- 通过BEV Queries,查询先前时序的BEV特征,融合对应的特征。再融合图像的空间特征。融合了时间和空间特征的BEV Queries,也就是BEV特征。
- BEV特征经过前馈网络,生成初步的Voxel特征,也就是体素特征。
- 通过t时刻的Voxel特征,和t-1时刻的Voxel特征,做注意力操作,融合时序特征。
- 获取多视角特征和Voxel特征,做注意力操作,融合图形空间特征。
- Voxel特征生成的过程分为多步,逐步生成最终的占用特征。
- 占用特征用于各种驾驶任务。
OccNet从BEV特征(HxWxC)到Voxel特征(ZxHxWxC)的重建,分为 N 步。命名为 cascade structure,表示级联结构。
这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。
在输入的BEV特征和期望的体素特征之间,成为不同高度的“中间体素特征”,表示为:
- 分布在{1, N}之间
- 分布在{}之间
BEV特征通过前馈网络转为Voxel特征,即:通过前馈网络被提升,通过前馈网络被提升
然后得到的Voxel特征,结合多视图特征,做空间交叉注意力,融合图像特征。
通过获取先前的Voxel特征,通过时间自注意力,融合时序Voxel特征。
此时融合图像特征和时序Voxel特征,得到进一步的Voxel特征。
接着逐步融合,共执行N步,得到最终的Voxel特征,表示占用网络的特征。
二、关键设计——生成BEV特征
OccNet输入是多视角图形数据,在生成BEV特征中,类似BEVFormer思想,通过Deformable Attention融合多视角相机空间特征和时序特征。
主要由3个关键模块组成:
- BEV Queries Q:用于查询得到BEV特征图
- Spatial Cross-Attention:用于融合多视角空间特征
- Temporal Self-Attention:用于融合时序BEV特征
基本思想:使用可学习的查询Queries表示BEV特征,查找图像中的空间特征和先前BEV地图中的时间特征。
采用3D到2D的方式,先在BEV空间初始化特征,通过在BEV高度维度“升维”形成3D特征。再通过映射关系,使用多层transformer与每个图像2D特征进行交互融合,最终再得到BEV特征。
2.1 BEV Queries 查询得到BEV特征图
BEV平面(Bird's-Eye View,鸟瞰视图)是一个以车辆自身为中心的,被划分成许多小方格的二维平面。
这个平面的高度H和宽度W代表了:在x轴(横向)和y轴(纵向)上的栅格数量。
BEV平面直观地反映了车辆周围的物理空间,其中每个小方格代表现实世界中的一定面积,例如s米。
比如针对nuScenes数据集,可能会定义BEV平面的栅格尺寸为200x200,这意味着这个平面可以覆盖从车辆中心向各个方向延伸51.2米的区域。在这种情况下,每个小方格(栅格)代表的实际面积是0.512米。
关键要的:
1、BEV Queries是一组预先定义的、具有栅格形状的可学习参数, 维度是H*W*C,用来捕获围绕自车的BEV特征。
简单来说,一旦学习完成,BEV Queries就会变成BEV features,即鸟瞰视图特征。
2、BEV Queries的高度H和宽度W,与BEV平面在x轴(横向)和y轴(纵向)的栅格尺寸保持一致,这意味着它们也具有与BEV平面类似的特性,即直观地映射车辆周围的物理空间。
然而,BEV Queries的C维,即在通道(channel)维度上的尺寸,并不直接对应于BEV平面z轴的物理空间尺寸。
3、每个位于(x, y)位置的query都仅负责表征其对应的小范围区域。轮番查询“空间信息”和“时间信息”,生成BEV特征图。
重点:BEV Queries在模型中经过连续的微调和转换,最终成为BEV features。
2.2 融合多视角空间特征
通过BEV Queries查询和融合空间信息,BEV Queries表示整幅栅格图,BEV Query表示其中一个网格,步骤如下:
- 将每个BEV Query拉升为一个支柱。在z方向进行lift操作,预测该网格的离散高度,形成N个高度值。预定义它们对应的高度范围是-5m到3m。结合该网格的x,y坐标,生成N个3D参考点。
- 通过相机内外参,将柱子中的3D参考点投影到视图中,得到2D点,数量记为V_num。正常一个3D参考点,对应1~2幅多视图,毕竟不能所有相机都看到同一个物体。
- 从命中视图中的区域中采样特征。采用Deformable Attention,把像平面上的这些投影点作为2D图像参考点,在其周围进行特征采样。
- 最后,每个3D参考点有V_num个特征图,进行加权求和。每个网格有N个3D参考点,形成的特征图,进行加权求和,最终输出多视角空间特征。
如下图所示,一个3D参考点(x, y, z),投影到多视角图中,只有2幅是对应的。这样很正常,毕竟相机是四周安装的,不可能所有相机都看到同一个物体。
2.3 融合时序BEV特征
受到经典的循环神经网络(RNN)的启发,BEV特征 可以被视作一种能够传递序列信息的“记忆体”。
在这种框架下,每一个时刻生成的BEV特征 都是基于上一时刻的BEV特征 来获取所需的时序信息。
- 这种方法的优势在于,它能够动态地获取所需的时序特征,而不是像简单地堆叠不同时刻的BEV特征那样,仅能获取固定长度的时序信息。
- 这种动态获取时序特征的方式使得BEV特征能够更加有效地反映出环境的动态变化,比如车辆的移动或周围环境的变化。
融合时序BEV特征,通过BEV Queries 查询时间信息,步骤如下:
- 根据自我运动对齐两个时刻的BEV图。两个时刻是指上一时刻和当前时刻。目前是使得相同索引位置的栅格,对应于现实世界中的同一位置。
- 从过去时刻BEV图的和当前采样特征。
- 对过去和当前BEV图中采样的特征进行加权求和。
- 使用RNN风格迭代收集历史BEV图特征。
思路流程:
- 在给定时间点t-1的BEV特征的情况下,首先需要根据自我运动(ego motion)将对齐到时间点t。
- 这个对齐过程确保了和 在相同索引位置的栅格对应于现实世界中的同一位置。这样对齐后的BEV特征记作 。
- 在时间点t,位于网格中A处的BEV query所代表的物体可能是静态的(不动的)或者是动态的(在移动中)。
- 这个物体在时间点t-1会出现在的 A周围。因此,为了采集特征,使用可变形注意力机制(deformable attention)以 A为参考点,在其周围进行特征采样。
通过这种方式,模型能够更加准确地捕捉到物体随时间的动态变化。
可变形注意力允许模型关注于相邻时刻在空间上对应但位置可能略有变化的特征,从而有效地捕捉动态物体的运动轨迹和静态物体的稳定性。
这种方法在处理时序数据时,特别是在动态和复杂的环境中,如自动驾驶场景下,显得尤为重要和有效。
2.4 BEV特征
通过BEV Queries,查询先前时序的BEV特征,融合对应的时间特征。再融合图像的空间特征。
融合了时间和空间特征的BEV Queries,也就是BEV特征。
BEV特征的维度是:HxWxC。
三、关键设计——BEV特征转为Voxel特征
输入多视角图像数据,经过主干网络提取图形特征,得到多视角图像特征。
通过BEV Queries,融合了时间和空间特征的BEV Queries,得到BEV特征(HxWxC)。
需要通过前馈网络进行升维,提升多一个Z高度信息,即:
BEV特征(HxWxC)转为 Voxel特征(ZxHxWxC)
这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。
四、核心内容——逐步生成Voxel特征
上面得到Voxel特征只是初步的,由BEV特征升维得到的,不够精细,需要进一步提升Z高度信息,缩小C特征维度;
形成最终的Voxel特征,表示占用网络的特征,
OccNet从BEV特征(HxWxC)到Voxel特征(ZxHxWxC)的重建,分为 N 步。命名为 cascade structure,表示级联结构。
这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。
在输入的BEV特征和期望的体素特征之间,成为不同高度的“中间体素特征”,表示为:
- 分布在{1, N}之间
- 分布在{}之间
BEV特征通过前馈网络转为Voxel特征,即:通过前馈网络被提升,通过前馈网络被提升
然后得到的Voxel特征,结合多视图特征,做空间交叉注意力,融合图像特征。
通过获取先前的Voxel特征,通过时间自注意力,融合时序Voxel特征。
此时融合图像特征和时序Voxel特征,得到进一步的Voxel特征。
接着逐步融合,共执行N步,得到最终的Voxel特征,表示占用网络的特征。
这里过程中用到了3D Deformable Att. 即:3D可变形注意力(3D-DA)
3D Deformable Attention (3D-DA) 是一种为处理三维数据设计的注意力机制,它源于2D可变形注意力(deformable attention)的原理。
这个方法将传统的2D可变形注意力扩展到了3D形式。可变形注意力是一种自注意力机制,它允许网络学习在计算注意力时应关注的关键点位置的偏移。
扩展自传统的2D注意力机制:2D可变形注意力是设计用于处理二维数据(如图像),允许模型在计算注意力时学习到的偏移量集中在关键特征上。3D-DA将这种机制扩展到三维空间,以处理具有深度的数据(如体积医疗图像或三维环境扫描数据)。
可变形部分:“可变形”指的是模型不仅学习特征的重要性(即注意力权重),还学习在原始参照点周围的特定偏移量,这些偏移量可以使模型更准确地聚焦于有信息的区域,这与固定的、规则的采样网格不同。
由于太多公式符号了,这里一个截图,便于大家理解:
五、OccNet的实现细节
主干网络(Backbone)、多尺度特征(Multi-scale Features):
- ResNet101:OccNet使用的基础网络是ResNet101,这是一个有101层的深度卷积神经网络,广泛用于图像任务。
- 特征金字塔网络(FPN):OccNet利用FPN来提取多尺度特征,这意味着网络能够在不同的分辨率上捕捉图像信息。
- 输出特征:从ResNet101的不同阶段(S3、S4、S5)提取特征,每个阶段的输出特征具有不同的下采样率。在FPN中,这些特征被聚合并转换成三个尺度的层级,大小分别是原图的1/16、1/32和1/64,特征维度保持为256。
BEV编码器:
- BEV特征:FPN的多尺度特征被转换成BEV特征。BEV(鸟瞰图)特征是对车辆周围环境的二维顶视图表示,用于自动驾驶中的环境感知和决策。
- 编码层:BEV编码器具有两层,使用时间自注意力和空间交叉注意力。这种结构允许网络注意到不同时间步长的特征,并跨越空间位置关联信息。
- BEV查询(BEV Query ):通过空间-时间变换机制在编码层中逐步细化,以在BEV空间中学习场景表示。
体素解码器的特征转换:
- 体素特征:使用多层感知机(MLP)将体素特征Vi,t从Zi x Ci维度,转换为Zi+1 x Ci+1维度。
- 空间交叉注意力:用于体素特征的空间交叉注意力机制,使网络能够关注不同空间区域的特征。
训练策略:
- 周期和学习率:OccNet训练了24个周期(epochs),学习率设为2 x 10^-4,这是在训练过程中用于更新网络权重的步长。
- 优化器:使用带有权重衰减的AdamW优化器,这种优化器结合了Adam优化算法和权重衰减,有助于控制模型的过拟合。
- 任务训练:所有感知任务(除了BEV分割)同时训练,其他任务基于已经训练的任务进行微调,这是一种常见的多任务学习策略。
与VoxelNet和BEVNet对比:
- OccNet与VoxelNet和BEVNet不同,它使用级联特征图,而后两者使用单尺度特征图。
- VoxelNet使用体素查询来构造体素特征图,然后直接使用3D-DA扩展到完整的占用空间。
- BEVNet生成BEV特征,然后扩展到完整的占用空间。
- VoxelNet和BEVNet都采用了时间上下文融合,OccNet也采用了融合了时序信息。
评价指标:
OccNet生成的占用特征,用到了BEV分割、3D目标检测、运动规划等任务。
语义场景完成(SSC)指标:
- 这个指标是专为3D空间中的场景完成任务设计的,任务的目标是为每个体素(一个3D空间的最小单元)分配正确的语义标签。
- mIoU计算公式:这个指标是通过计算所有类别的平均交并比(mean intersection-over-union, mIoU)得出的。公式中,mIoU等于所有类别的交并比的平均值。公式如下: 其中,C是类别的数量,在这个上下文中是16。TPc、FPc 和 FNc 分别代表对于第 c 类别的真阳性、假阳性和假阴性的数量。
- 类别不可知的几何重建质量指标 IoU_geo:为了评估场景的几何重建质量,作者还考虑了一个与类别无关的指标,即 IoU_geo。
3D物体检测指标:
- 这些是nuScenes数据集专用的官方评估指标,用于评估3D检测算法的性能。这些指标包括:
- NDS:nuScenes检测分数,是一个综合指标,考虑了多个因素来评估检测性能。
- mAP:平均精度均值,是一个常见的评估指标,用于衡量模型在所有类别上的平均检测准确性。
- ATE:平均平移误差,衡量预测位置和实际位置之间的平均差异。
- ASE:平均尺度误差,衡量预测大小和实际大小之间的误差。
- AOE:平均方向误差,衡量预测方向和实际方向之间的误差。
- AVE:平均速度误差,衡量预测速度和实际速度之间的误差。
- AAE:平均属性误差,衡量预测属性(如车辆类型)和实际属性之间的误差。
运动规划指标:
- 为了评估自动驾驶系统在规划未来行动时的性能,作者使用了ST-P3指标体系中的指标:
- L2距离:这是规划轨迹和实际轨迹之间的欧氏距离,用于衡量规划路径的准确性。
- 碰撞时间(CT):这是与其他车辆和行人的预测接触时间,重要的是安全性评估,它帮助确保规划的轨迹不会导致碰撞。
六、设计占用网络的意义
为什么这部分放这么后,因为感觉不是论文的重点,简单讲讲即可。
在BEV分割中,每个单元格隐含地包含了高度信息。这意味着在BEV地图的每个单元格中,高度信息被整合进去了,但没有显式地表达出来。
在特定的、更具挑战性的城市场景中,需要明确地识别和处理地面以上物体的高度信息。例如,为了正确识别交通灯和立交桥这样的结构,仅仅隐含地处理高度信息是不够的。
占用网络映射考虑了3D空间中的物体。这表明占用网络映射是“3D几何感知”的,意味着它能够更好地理解和表达物体在三维空间中的位置和形状,包括高度信息。
七、模型效果
在语义场景完成方面的三维占用预测,对于使用RGB输入的模型,语义占用预测和几何预测指标进行了比较。
在平均交并比(mIoU)和几何交并比(IoUgeo)方面,OccNet显著超过了之前的最佳状态(SOTAs)。带有星号(*)的方法表示在OpenOcc数据集上进行训练和评估。
分割任务,OccNet(ResNet101)在nuScenes验证集上的分割性能。
使用相机输入的OccNet与基于LiDAR的方法相当。带星号(*)的方法表示从头开始在OpenOcc数据集上进行训练。
三维占用与三维检测的联合训练。在nuScenes验证集上报告的结果显示,三维占用与三维检测的联合训练可以帮助后者任务。
使用不同场景的规划结果,占用表征帮助规划任务在时间间隔内,实现更低的碰撞率和更准确的L2距离。
运动规划的可视化,蓝线代表规划的轨迹,下图是边界框和占用情况的栅格化结果。
通过栅格化占用输入得到的轨迹可以与卡车保持更大的安全距离,这归因于更精确的多边形表示。
占用预测的可视化,对于每个场景,左上图是周围相机的输入,左下图和右图分别代表占用预测结果的透视视图和俯视图。
虚线区域表示OccNet可以很好地预测小尺寸目标或远距离目标。
分享完成~
这篇关于【占用网络】OccNet: Scene as Occupancy 适用于检测、分割和规划任务 ICCV2023的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!