论文地址:FlashOcc: Fast and Memory-Efficient Occupancy Prediction via Channel-to-Height Plugin
源代码:https://github.com/Yzichen/FlashOCC

摘要
鉴于在3D目标检测中缓解长尾缺陷和复杂形状缺失的能力,occupancy已经成为自动驾驶系统中的一个关键组成部分。然而,三维体素级表示的处理不可避免地引入了在内存和计算上的巨大开销,阻碍了当前occupancy方法的部署。与使模型更大更复杂的趋势相反,本文认为一个理想的框架应该对各种芯片友好,同时保持高精度。为此,本文提出了一种即插即用的范式,即 FlashOcc,以在保持高精度的同时巩固快速和内存高效的占用预测。特别是,本文的 FlashOcc 基于当代体素级占用预测方法进行了两项改进。首先,特征保留在 BEV(鸟瞰图)中,使得可以采用高效的二维卷积层进行特征提取。其次,引入了通道到高度转换,以将 BEV 输出的逻辑从 BEV 转换到三维空间。本文将 FlashOcc 应用于挑战性的 Occ3D-nuScenes 基准上的多种占用预测基线,并进行了广泛的实验来验证其有效性。结果证明了本文的即插即用范式比以前的最先进方法在精度、运行时间效率和内存成本方面的优越性,展示了其部署潜力。
1. 引言
在环视图像中进行3D目标检测在自动驾驶系统中扮演着至关重要的角色。特别是,基于图像的三维感知由于其相较于依赖激光雷达的解决方案成本更低,并且具有良好的性能,因此受到了学术界和工业界的越来越多的关注。然而,3D目标检测任务仅限于在预定义类别内生成边界框,这引发了两个主要挑战。首先,它遇到了长尾缺陷问题,即在现实世界场景中出现的未标记类别超出了现有预定义类别。其次,它面临着复杂形状缺失的问题,因为现有检测方法未能充分捕捉到各种目标的复杂和精细的几何形状。最近,新兴的occupancy任务通过预测三维空间中每个体素的语义类别来解决上述挑战。这种方法允许识别不适合预定义类别的对象,并将它们标记为一般对象。通过在体素级特征上操作,这些方法能够更详细地表示场景,捕捉复杂形状并解决目标检测中的长尾缺陷。occupancy的核心在于有效构建三维场景。传统方法采用体素化,将三维空间划分为体素,每个体素被分配一个向量以表示其占用状态。尽管它们准确,但利用三维体素级表示引入了复杂的计算,包括3D(可变形)卷积、变换器操作等。这些在芯片上的部署和计算能力要求方面带来了重大挑战。为了缓解这些挑战,研究了稀疏占用表示和三视图表示以节省内存资源。然而,这种方法并没有从根本上解决部署和计算的挑战。受亚像素卷积技术启发,其中图像上采样被通道重排所替代,从而实现了通道到空间特征转换。相应地,在本文的工作中,旨在高效实现通道到高度特征转换。鉴于 BEV 感知任务的进步,BEV 表示中的每个像素包含了对应柱状体沿高度维度的所有对象的信息,直观地利用通道到高度转换将扁平化的 BEV 特征重塑为三维体素级占用逻辑。因此,本文专注于以通用且即插即用的方式增强现有模型,而不是开发新模型架构,如图 1(a)所列。具体来说,本文直接用二维卷积替换当代方法中的三维卷积,并用通过二维卷积获得的 BEV 级特征的通道到高度转换来替换从三维卷积输出中得到的占用逻辑。这些模型不仅在准确性和时间消耗之间实现了最佳权衡,而且还展示了出色的部署兼容性。
2. 相关工作
体素级3D Occupancy预测
3D Occupancy预测的起源可以追溯到占用网格地图(OGM)[30],其目标是从图像中提取三维场景的详细结构信息,以辅助下游的规划和导航任务。现有的研究可以根据监督类型分为稀疏感知和密集感知两类。稀疏感知类别直接从激光雷达点云中获取监督,并在激光雷达数据集上进行评估[10]。与此同时,密集感知与语义场景补全(SSC)[2, 4]有相似之处。例如,VoxFormer [14]利用2.5D信息生成候选查询,然后通过插值获取所有体素特征。Occ3D [31]重新设计了一种粗到细的体素编码器来构建占用表示。RenderOcc [22]通过2D到3D网络从环视图中提取三维体积特征,并在Nerf监督下为每个体素预测密度和标签。此外,还提出了几个具有密集占用标签的基准测试[28, 31]。上述方法将三维空间划分为体素,并用向量描述每个体素[3, 14, 15, 22–24, 28],因为体素级表示具有细粒度的三维结构,非常适合用于三维语义占用预测。然而,基于体素的表示所引发的计算复杂性和部署挑战促使我们寻找更高效的替代方案。例如,稀疏占用表示[33]和三视图表示[10]被研究用于节省内存资源。然而,这些方法并未从根本上解决部署和计算的挑战。
基于鸟瞰图(BEV)的三维场景感知
基于BEV的方法使用向量表示整个BEV网格上的特征柱。与基于体素的方法相比,它在高度维度上减少了特征表示,从而更具计算效率,并且避免了三维卷积的使用,更适合部署。在多种3D场景感知任务中已经取得了有希望的结果,例如3D车道检测[32]、深度估计[34]、3D目标检测[9, 12, 19]和3D目标跟踪[37]。尽管目前还没有基于BEV特征进行占用预测的方法,但BEV特征可以隐式捕获高度信息,这已经在不平整路面或悬空物体的场景中得到了验证。这些发现促使我们利用BEV特征进行高效的占用预测。
高效的亚像素范式
亚像素卷积层最早在图像超分辨率中提出[26],能够在与反卷积层相比几乎没有额外计算成本的情况下,将低分辨率数据超分辨率到高分辨率空间。同样的思想也应用于BEV分割[17],其中将8×8网格大小的分割表示描述为分割查询,因此仅使用625个分割查询来预测最终的200×200 BEV分割结果。基于上述方法,本文提出了通道到高度(Channel-to-Height)变换作为一种高效的占用预测方法,其中占用logits直接通过通道到高度变换从扁平化的BEV特征中重塑而来。本文是首次将亚像素范式应用于占用任务,仅使用BEV特征,而完全避免了计算密集的三维(可变形)卷积或变换器模块。
3. 框架
FlashOcc在该领域开创性地实现了实时环视3D占用预测,同时保持了显著的准确性。此外,它在多种车载平台上的部署具有更高的通用性,因为它避免了代价高昂的体素级特征处理,省略了视图变换器或3D(可变形)卷积操作。如图2所示,FlashOcc的输入数据为环视图像,输出为密集的占用预测结果。尽管FlashOcc专注于以通用且即插即用的方式增强现有模型,但其仍可划分为五个基本模块:(1)一个二维图像编码器,用于从多相机图像中提取图像特征;(2)一个视图变换模块,用于将二维感知视图图像特征映射到三维鸟瞰图(BEV)表示;(3)一个BEV编码器,用于处理BEV特征信息;(4)一个占用预测模块,用于预测每个体素的分割标签;(5)一个可选的时间融合模块,用于整合历史信息以提高性能。
3.1 图像编码器
图像编码器从输入图像中提取感知视图中的高级特征。具体来说,它使用一个主干网络来提取多尺度语义特征,然后将这些特征输入到一个颈部模块进行融合,从而充分利用具有不同粒度的语义信息。经典的ResNet [8]和强大的SwinTransformer [18]通常被选作主干网络。ResNet的多个残差块设计能够优雅地获取具有丰富多粒度语义信息的特征表示。SwinTransformer引入了一种层次结构,将输入图像划分为小块,并以渐进的方式进行处理。通过利用移位窗口机制,SwinTransformer在保持各种基准测试的竞争力的同时,实现了高效率和可扩展性。至于颈部模块,选择了简洁的FPN-LSS [9, 25]。它将细粒度特征与直接上采样的粗粒度特征进行融合。事实上,由于本文的框架并不局限于特定的架构,因此主干网络可以被替换为其他先进模型,例如SwinTransformer [18]、Vit [5]。颈部模块也可以被替换为其他有竞争力的变体,例如NAS-FPN [7]、BiFPN [29]。
3.2 视图变换器
视图变换器是环视三维感知系统中的关键组件,它将二维感知视图特征映射到BEV表示。Lift-splat-shoot (LSS) [9, 25]和Lidar Structure (LS) [13]已在最近的研究中被广泛使用。LSS利用像素级密集深度预测和相机内外参,将图像特征投影到预定义的三维网格体素上。随后,沿着垂直方向(高度)应用池化操作以获得扁平化的BEV表示。然而,LS依赖于深度均匀分布的假设来转移特征,这导致特征错位,并随后沿相机射线方向引起误检,尽管计算复杂度降低。
3.3 BEV编码器
BEV编码器增强了通过视图变换获得的粗BEV特征,从而得到更详细的三维表示。BEV编码器的架构与图像编码器相似,包括一个主干和一个颈部模块。本文在第3.1节中采用了相同的设置。通过在主干的几个块后进行特征扩散,解决了LSS的中心特征缺失问题或LS的混叠伪影问题。如图2所示,两个多尺度特征被整合以增强表示质量。
3.4 占用预测模块
如图2所示,从颈部模块获得的用于占用的BEV特征被输入到占用头部。它由一个多层卷积网络[1, 22, 23]或复杂的多尺度特征融合模块[15]组成,后者表现出更优越的全局感受野,能够更全面地感知整个场景,同时提供更精细的局部细节特征描述。占用头部产生的BEV特征随后通过通道到高度(Channel-to-Height)模块。该模块沿着通道维度执行简单的重塑操作,将BEV特征从形状为B×C×W×H的张量转换为占用logits,其形状为B×C*×Z×W×H,其中B、C、C*、W、H和Z分别表示批量大小、通道数、类别数、三维空间中的x/y/z维度数量,且C=C*×Z。

3.5 时序融合模块
时序融合模块旨在通过整合历史信息来增强对动态目标或属性的感知。它由两个主要部分组成:时空对齐模块和特征融合模块,如图2所示。对齐模块利用自身运动信息将历史BEV特征与当前激光雷达系统对齐。这一对齐过程确保历史特征被正确插值并与当前感知系统同步。完成对齐后,对齐后的BEV特征被传递到特征融合模块。该模块结合考虑时间上下文,整合对齐后的特征,生成动态物体或属性的综合表示。融合过程结合历史特征中的相关信息和当前感知输入,以提高整体感知的准确性和可靠性。


4. 实验
在本节中,首先详细介绍了用于FlashOcc的基准测试和评估指标,以及训练细节(见第4.1节)。随后,第4.2节展示了FlashOcc与当前最先进的占用预测方法的对比结果。最后,在第4.3节中,通过广泛的消融实验验证了FlashOcc中各个组件的有效性。
4.1 实验设置
基准测试:在Occ3D-nuScenes [31]数据集上进行了占用预测实验。Occ3D-nuScenes数据集包含700个场景用于训练,150个场景用于验证。该数据集覆盖了沿X轴和Y轴的-40米到40米范围,以及沿Z轴的-1米到5.4米范围。占用标签使用0.4米×0.4米×0.4米的体素定义,包含17个类别。每个驾驶场景包含20秒的标注感知数据,采样频率为2赫兹。数据采集车辆配备了1个激光雷达、5个雷达和6个摄像头,能够提供车辆周围环境的全景视图。作为评估指标,本文报告了所有类别的平均交并比(mIoU)。
训练细节:FlashOcc的设计是即插即用的,其泛化能力和效率已在多种主流的基于体素的占用方法上得到验证,例如BEVDetOcc [1]、UniOcc [23]和FBOcc [15]。为了公平比较,作者严格遵循这些原始主流方法的训练细节。由于用2D卷积替换3D卷积时通道数会发生变化,因此在表2中列出了每种即插即用替换的详细架构。在每个实验表格的“方法”列中,我们用“:”将每种即插即用替换与其对应的结构关联起来,例如M0-M8。所有模型均使用AdamW优化器 [20]进行训练,应用梯度裁剪,学习率为1e-4,总批量大小为64,分布在8个GPU上。BEVDetOcc和UniOcc的总训练周期为24个epoch,而FBOcc训练20个epoch。所有实验均未使用类别平衡分组和采样。

4.2 与sota方法对比
我们在BEVDetOcc [1]和UniOcc [23]上实现了FlashOcc插件,并将其性能与流行的现有方法进行了比较,例如MonoScene [3]、TPVFormer [10]、OccFormer [36]、CTFOcc [31]、RenderOcc [22]和PanoOcc [33]。表1列出了Occ3D-nuScenes验证数据集上的3D占用预测性能。我们分别使用ResNet-101和SwinTransformer-Base进行了评估。FlashOcc即插即用实现方法在BEVDetOcc上提升了1.3 mIoU。此外,UniOcc上0.3 mIoU的提升进一步证明了通道到高度(Channel-to-Height)在保留BEV特征中的体素级信息方面的能力,因为UniOcc的渲染监督需要细粒度的体积表示。这些结果证明了FlashOcc方法的有效性和泛化能力。此外,FO(BEVDetOcc)超过了基于Transformer的PanoOcc方法1.1 mIoU,进一步证明了本文方法的优越性能。FO(BEVDetOcc)的定性可视化结果如图3所示,跨越道路的交通信号横杆(红色虚线所示)和延伸到道路上方的树木(橙色虚线所示)都可以通过FO(BEVDetOcc)有效体素化,从而证明了高度信息的保留能力。关于行人(红色椭圆所示)的体素描述,胸部向前突出的体素表示该行人手持的手机,而腿部后方延伸的体素表示该行人拖动的行李箱。此外,小型交通锥也出现在预测占用结果中(橙色实线矩形所示)。这些发现共同强调了FlashOcc在准确捕捉复杂形状方面的出色能力。
4.3 消融研究
本文进行了消融实验,以验证FlashOcc中各个组件的有效性。除非另有说明,否则所有实验均使用ResNet-50作为主干网络,输入图像分辨率为704×256。三维空间的离散化网格大小为200×200×1。所有模型均在3D目标检测任务上进行了预训练。


高效的通道到高度(Channel-to-Height)变换,无需复杂的三维卷积计算:
文章使用通道到高度(Channel-to-Height)操作来替代占用头部的输出,直接将二维特征重塑为三维占用logits。这一过程不涉及显式的高度维度表示学习。从直观上看,准确的三维占用预测似乎需要一个三维感知的体素级表示,这需要复杂的三维计算,正如以往的研究广泛讨论的那样[22, 28, 33]。为了确保公平比较,我们选择不带时间模块的BEVDetOcc [1]作为体素级竞争对手。如图4所示,我们将LSS沿Z轴的网格大小减少到1,并用二维卷积替换BEVDetOcc中的三维卷积。此外,在模型输出端插入通道到高度变换。比较结果如表3所示。我们的M0方法虽然仅损失了0.6 mIoU的性能,但速度提高了两倍多,超过了每秒92.1帧的基线方法,达到210.6 FPS。我们的M1模块表现更优,与三维体素级表示方法相比,实现了0.8 mIoU的显著提升,同时FPS达到152.7 Hz。这些结果进一步突出了我们提出的通道到高度(Channel-to-Height)范式的高效部署兼容性,消除了对计算密集型三维体素级表示处理的需求。

在多种方法上的泛化能力
为了验证FlashOcc在多种主流三维卷积占用预测方法上的泛化能力,我们对BEVDetOcc [1]、RenderOcc [22]和FBOcc [15]进行了改进。具体来说,我们将这些方法中的三维卷积替换为二维卷积,并将原始模型最终输出的占用logits替换为通过通道到高度(Channel-to-Height)变换得到的占用logits。表4展示了改进后的性能对比结果。我们的方法在性能上表现出显著提升或与原始方法相当。具体来说,我们的FO(BEVDetOcc)在原始BEVDetOcc的基础上提升了1.7 mIoU;我们的FO(UniOcc)仅比原始UniOcc下降了0.2 mIoU;我们的FO(FBOcc)比原始FBOcc提升了0.1 mIoU。这些实验结果进一步证明了我们方法的有效性和泛化能力,完全避免了计算密集型的三维体素级表示处理,同时确保了最优性能。

时序融合模块的一致性提升
时间增强是三维感知中用于提升性能的重要工具。为了验证FlashOcc在引入时间模块前后的性能与原始体素级方法相当,我们使用了主流模型中经过验证的时间配置进行实验验证,结果如表5所示。与基线方法BEVDetOcc相比,我们的FlashOcc在非时间模块和时间模块版本上分别提升了0.8 mIoU和1.7 mIoU。此外,虽然基线方法在引入时间信息后仅提升了4.5 mIoU,但我们的FlashOcc实现了5.4 mIoU的更大提升。对于基线方法UniOcc,我们的FlashOcc在非时间模块版本上提升了0.5 mIoU,而在引入时间信息后,提升了6.1 mIoU,与基线方法的时间增强效果一致。对于基线方法FBOcc,我们的FlashOcc在非时间模块和时间模块版本上分别提升了2.0 mIoU和0.1 mIoU。在时间模块版本中,我们观察到整体提升了2.6 mIoU。然而,FlashOcc的时间提升效果不如基线方法显著,这主要是因为我们的非时间模块方法相比于基线方法已经实现了显著提升。总的来说,FlashOcc在引入时间信息后相比于非时间模块版本实现了显著提升,并且在引入和不引入时间模块的配置中,FlashOcc相比于基线方法都实现了显著提升或相当的性能。
资源消耗分析
在上述段落中,我们已经验证了FlashOcc在多种配置下的性能。接下来,我们将进一步分析模型训练和部署过程中的资源消耗。根据表5的设置,我们详细列出了每种方法的FPS、推理时长、推理内存消耗和训练时长。由于我们的插件仅影响BEV编码器和占用预测头,我们将这两个部分归为一个独立的模块进行分析。同时,其余部分,即图像编码器和视图变换,构成一个独立模块,称为“其他”模块,用于分析目的。
在BEVDetOcc的案例中,使用FlashOcc后,BEV编码器和占用预测头的推理时长显著减少了58.7%,从7.5毫秒降至3.1毫秒。同时,推理内存消耗大幅减少了68.8%,从398 MiB降至124 MiB。训练时长也从64 GPU·H减少到32 GPU·H,从144 GPU·H减少到84 GPU·H,分别对应无时间模块和有时间模块的实验设置。此外,由于BEVDetOcc中实现的时间方法是立体匹配,因此“其他”模块在时间配置下表现出显著更长的推理时间。然而,采用通道分组匹配机制后,内存开销相对较小。在UniOcc上也得出了类似的结论,因为它与BEVDetOcc具有类似的模型结构。然而,UniOcc中引入的渲染监督显著增加了训练时长。

5. 结论
在本文中,我们提出了一种名为FlashOcc的即插即用方法,旨在实现快速且内存高效的占用预测。该方法直接用二维卷积替换体素级占用方法中的三维卷积,并引入通道到高度(Channel-to-Height)变换,将扁平化的BEV特征重塑为占用logits。FlashOcc在多种体素级占用预测方法上的有效性和泛化能力得到了验证。广泛的实验结果表明,该方法在精度、时间消耗、内存效率和部署友好性方面优于以往的最先进方法。据我们所知,我们是首次将亚像素范式(通道到高度)应用于占用任务,仅使用BEV级特征,完全避免了计算密集型的三维(可变形)卷积或变换器模块的使用。可视化结果令人信服地证明了FlashOcc成功保留了高度信息。在未来的工作中,我们将探索将FlashOcc集成到自动驾驶感知流程中,以实现高效的芯片级部署。