浅谈 Occupancy
研究意义:
Occupancy Network 算法可以更好的克服感知任务中存在的长尾问题以及更加准确表达物体的几何形状信息而受到来自工业界和学术界越来越广泛的关注。
Occupancy Network 算法本质上是一个 3D 分割任务,通过将想要感知的 3D 空间划分成固定大小的体素网格,并让算法去预测每个体素网格被占用的概率以及可能包含的目标类别从而实现对全场景的感知。因其是对空间中的所有体素进行分类,所以对于数据集中未被标注的物体(比如土堆、石块等目标也可以预测为 General Objects,从而实现开放集的目标检测,即更好的克服检测中的长尾问题);同时与直接输出一个物体粗糙 3D 框的算法相比,由于是直接对空间中的每个体素进行预测,所以对于不规则形状的目标,Occupancy Network 算法可以给出更加细粒度的形状表示,从而得到每个物体更加丰富的细节结构信息。
存在问题:
尽管目前 Occupancy Network 相比于之前的基于 BEV 的 3D 感知算法有更好的感知优势,但因其将所要感知的环境空间利用 3D 体素特征进行中间表示,避免不了的会引入 3D 卷积等算子进行特征提取,无疑会大大增加模型的运算量和内存开销,从而为模型的上车部署造成不小的困难,严重影响了 Occupancy Network 算法的落地。
为此针对 Occupancy network 模型的轻量化是非常有必要的。
数据集选择:
目前,在 3D 目标检测中开源的数据集包括 kitti,nuscenes,waymo,lyft,scannet,s3dis,sunrgbd,智能驾驶行业内没有统一的评测数据集,根据目前开源的基础数据集包括 kitti,nuscenes,waymo 其中 nuscenes 数据集应用较多,目前科研领域内采用 CVPR2023 占用预测挑战赛的 Occ3D-nuScenes 数据集的论文屡见不鲜。
主干网络部分选择
更合适的主干网络目标检测任务中常见的主干网络包括:Resnet,Swin-transformer,ViT,Efficientnet,Vovnet,ShuffleNet,MobileNet,GhostNet,其中 Resnet,Swin-transformer,Vovnet 较为常见,Resnet-101,Resnet-50 网络更是大多数模型的主干网络。
ResNet(Residual Network)是由微软亚洲研究院的 Kaiming He 等人提出的,它在 2015 年的 ILSVRC 比赛中斩获了冠军,成为了经典的深度学习骨干网络之一。下面我们将对 ResNet 进行详细介绍。
EfficientNet 是由谷歌研究团队提出的一种基于复合缩放的神经网络架构,其主要特点是在不增加计算复杂度的情况下提升模型性能。EfficientNet 使用了一种称为复合缩放(Compound Scaling)的方法,同时调整网络的深度、宽度和分辨率,从而在不增加计算成本的情况下提高了模型的效果。
虽然传统 ResNet 在一定程度上改善了传统深层网络的训练困难问题,但相比 EfficientNet,ResNet 仍然存在参数量大、计算量大的问题,使得在移动设备等资源受限的环境下应用时性能不尽如人意。实际应用中,不同的骨干网络具有各自的优势和局限性。EfficientNet 在目标检测任务中表现出色,尤其适合资源受限的场景;而 ResNet 虽然在一些任务上表现较好,但对于目标检测任务来说可能存在训练速度较慢的问题。
1、FlashOcc 主干网络
在 FlashOcc 中主干网络对输入的环视图像进行多尺度的特征提取,2D 主干网络采用的是 ResNet-50。
需要注意的是,由于当前的 config 配置是将时序上连续的三帧环视图像一起输入到网络模型当中,所以模型对于不同帧的处理方式是不同的。
如果当前时刻标记为 t,那么对于 t-2 时刻的环视图像,2D 主干网络只会输出降采样四倍的特征图用于后续进行双目立体的深度估计,代码中定义降采样 4 倍的特征为 Stereo Feature。
但是对于 t 和 t-1 时刻,2D 主干网络在输出降采样 4 倍 Stereo Feature 的同时,还会输出降采样 16 倍和 32 倍的特征图,用于后续完成多尺度特征的信息融合。
前后向投影模式:
该模式由 FB-Occ 提出,在精度预测和推理速度上在当时都是领先的存在,该模式包含两部分:前向投影和后向投影模式。
前向投影:
使用前向投影来生成 3D 体素表示
将 3D 体素表⽰压缩为扁平化的 BEV 特征图
最后将 3D 体素表⽰和优化的 BEV 表⽰的融合特征输⼊到后续任务头中
前向投影总结:相对原来的 LSS 是投影到 BEV 空间中,这里是投影到 3D 体素空间中
后向投影:
3D 体素表示压缩为 BEV 表示,从⽽结合更强的语义
利⽤了投影阶段的深度分布,能够更精确地建模投影关系
后向投影总结:灵感来源于 BEVFormer
与使⽤随机初始化参数作为 BEV 查询的 BEVFormer 不同
在推理阶段使用了深度分布,从而保证了更加精确的
最后获得 3D 体素表示和优化后的 BEV 表示后, 通过扩展 BEV 特征的过程将他们组合起来, 从而产生最终的 3D 体素
BEV 特征解码
在三维空间中对提升的体素特征进行直接解码相比,由于维度的减少,二维 BEV 解码器会比三维解码器速度更快。将三维体素特征的 z dim 与其嵌入通道结合即,得到 2D BEV 特征 B‘∈R(C2×Z2)×H2×W2 如下图所示:
然后用 2D FCN 将 B‘解码为 BEV 特征 B∈RC3×H2×W2,如图下所示。
这在很大程度上降低了计算的复杂度。具体可以减少 Sj 的计算量:
测评指标
BEV 分割指标:
对于传统 OGM 中的二进制分割(将网格划分为占用和空闲),大多数以前的工作使用精度作为简单的度量。对于语义分割,主要度量是每个类的 IoU 和所有类的 mIoU。
BEV 预测指标:
MotionNet 通过将每个网格单元与 BEV 地图中的位移向量相关联来编码运动信息,并通过将非空网格单元分类为三个速度范围来提出运动预测的度量:静态、慢速(≤5m/s)和快速(>5m/s)。在每个速度范围内,已利用预测位移和真实位移之间的平均和中值 L2 距离。
3D 占用率预测指标:
语义场景补全的主要度量是所有语义类的 mIoU,在场景补全时使用 IoU、Precision 和 Recall 来评估几何重建质量。3D 占用预测挑战测量 F 得分作为完整性 Pc 的调和平均值,精度 Pa,F 得分计算如下:
轻量化典型模型案例:FlashOcc
基本思想
Flash-Occ 算法(算法流程图如下)抛弃了长耗时、难部署的 3D 卷积模块,继续使用 2D 卷积模块来完成特征的提取任务。同时,为了减少模型的计算量,Flash-Occ 不再使用 Voxel 体素特征,而是继续使用 BEV 特征来建模需要感知的 3D 空间。但为了完成 Occupancy Network 在 3D 空间的预测,Flash-Occ 算法设计了一个通道-高度转换模块实现将 BEV 空间的输出结果提升到 3D 体素空间,完成最终的结果预测。
网络结构
整体来看,Flash-Occ 的网络结构包括 2D 主干网络、Neck 网络、深度估计模块、视角转换模块、2D BEV Encoder、Occupancy Head 模块、通道高度转换模块、训练过程的 Loss 计算等部分组成。整体框架如下图所示。
通道高度转换模块也是本文所提出的核心插件。原理十分简单,即 Occupancy Head 的预测头将语义特征和高度联合在一起进行预测,最后通过 Tensor 的 view 操作实现 2D 特征转换为 3D 的体素预测结果
效果
Occ3D-nuScene 数据集上的可视化效果如下
FlashOcc 在 Occ3D-nuScenes 数据集上的 SSC miou 评估精度如下:
上表表示 Occ3D-nuScenes 估值数据集上的 3D 占用预测性能。符号 ∗ 表示模型是从预训练的 FCOS3D 主干初始化的。“Cons. Veh”代表工程车辆,“Dri.Sur“是可驱动表面的缩写。“火车。Dur.“ 是训练持续时间的缩写。“Mem.”表示推理过程中的内存消耗。• 表示主干由 nuScense 分割预训练。每秒帧数 (FPS) 指标使用 RTX3090 进行评估,采用 FP16 精度的 TensorRT 基准测试。“FO”是代表 FlashOcc 的首字母缩写词,“FO()”代表以“”命名的相应模型的插件替换。†表示在训练期间使用相机面罩报告性能。符号 ⋄ 表示使用类平衡权重进行占用分类损失
下图和表展示了该方法的推理时间与显内占用上
github 代码:https://github.com/Yzichen/FlashOCC
评论