专栏算法工具链FlashOCC算法详解

FlashOCC算法详解

江城子2024-10-25
208
0

一、算法简介

占据预测是指在自动驾驶系统中,根据传感器的输入,预测三维空间中的每个体素是否被物体占据。占据预测可以有效地解决三维物体检测中的长尾问题和复杂形状的缺失问题。然而,占据预测也面临着一个挑战,即如何在保证准确性的同时,提高速度和降低内存消耗。现有的占据预测方法通常使用三维卷积来处理体素级别的特征,这会导致大量的计算和存储开销,不利于部署到不同的芯片上。为了解决这个问题,文章提出了一种快速和节省内存的占据预测方法,称为 FlashOcc。FlashOcc 的核心思想是利用一个通道到高度的变换,将二维的鸟瞰图特征转换为三维的占据概率,从而避免了使用三维卷积。FlashOcc 的优点是,它可以作为一个插件,直接应用到现有的占据预测方法上,无需额外的训练或微调。FlashOCC 在现有的体素级占据预测方法的基础上做了两点改进。第一,特征保留在俯视图中,以利用高效的 2D 卷积层进行特征提取。第二,引入了一种通道与高度的变换,以将输出结果从俯视图映射到三维空间。我们在具有挑战性的 Occ3D-nuScenes 数据集上进行了实验,证明了 FlashOcc 的有效性和高效性,在保持高精度的同时,显著提高了速度和降低了内存消耗,展示了其在自动驾驶场景中的潜力。

算法效果展示:

作者实现效果:

算法复现效果:

代码网址:https://github.com/Yzichen/FlashOCC

二、算法流程详解

1.算法架构

FlashOcc 系统框架如下图所示。输入数据为环视图像,输出为密集的占据预测结果。它包括五个基本模块:

(1) 二维图像编码器;

(2) 视角变换模块;

(3) BEV编码器;

(4) 占据预测模块;

(5) 时序融合模块(可选)。

2.图像编码器

图像编码器使用 backbone 网络提取输入图像的高层语义特征,然后馈入 neck 模块进行融合,从而充分利用不同粒度的语义信息。常用的 backbone 网络有经典的 ResNet 和强大的 Swin Transformer。neck 模块选择简洁的 FPN-LSS,它将细粒度特征与直接上采样的粗粒度特征集成。

3.视角变换

视角变换模块的作用是将二维感知视角特征映射到 BEV 表示中。Lift-splat-shot (LSS) 和 Lidar Structure (LS) 被广泛使用。LSS 利用像素级密集深度预测和相机内在外参将图像特征投影到预定义的三维网格体素上。然后沿垂直维度(高度)应用汇聚操作以获得扁平的 BEV 表示。然而,LS 依赖均匀分布的深度进行特征转换,这会导致沿相机光线方向的特征错配和后续的错误检测,尽管计算复杂度有所降低。

4.BEV编码器

BEV 编码器通过视角变换获得的粗糙 BEV 特征,输出更详细的三维表示。其结构与图像编码器类似,包括 backbone 和 neck。经过若干层后,特征扩散用于改善中心特征丢失的问题。如上图所示,两个不同尺度的特征被集成以增强表示质量。

5.占据预测头部

如上图所示,neck 输出供占据预测的 BEV 特征输入占据头部。它由多层卷积网络或复杂的多尺度特征融合模块组成,后者具有更好的全局感受野,从而实现对整个场景的更全面感知,同时也能更好地表征局部详细特征。然后 BEV 特征通过 Channel-to-Height 模块。该模块沿通道维度执行重塑操作,将 BEV 特征的形状从B×C×W×H变换为B×C∗×Z×W×H的占据 logits, 其中B,C,C∗,W,H和Z分别是批大小、通道数、类别数、三维空间中x/y/z维度数量。

6.时序融合组件

时序融合组件通过整合历史信息来增强动态物体或属性的感知。它包含两个主要组件:空间 - 时序对齐模块和特征融合模块。对齐模块使用自身信息将历史 BEV 特征与当前激光雷达系统对齐。这种对齐过程确保历史特征得以正确插值和与当前感知系统同步。一旦完成对齐,对齐的 BEV 特征被传递到特征融合模块。该模块考虑它们的时序上下文,集成对齐特征以生成动态物体或属性的全面表示。融合过程组合相关的历史特征和当前感知输入的信息,以提高整体感知精度和可靠性。


三、实验结果

我们对 Talk2BEV 在 Talk2BEV-Bench 上的问题进行了定量评估。我们报告了不同 LVLM 在不同任务子集和不同类型问题上的性能,以及它们的平均性能。MiniGPT-4 在所有类型问题上都取得了最佳的平均性能。BEV 中的误差对性能的影响较小,这表明随着更高性能的 LVLM 的出现,Talk2BEV 的性能有望进一步提高。表 II 展示了 Talk2BEV 使用不同 LVLM 构建的语言增强地图(BLIP-2、InstructBLIP-2、MiniGPT-4)和 BEV 变体(LSS 和 GT)在多项选择问题(MCQs)上的性能。表 III 评估了空间操作符对系统性能的影响,显示了集成空间操作符带来的显著改进。此外,表 IV 报告了不同对象类别的性能,突出了车辆类别之间的性能差异。

表1. Occ3D-nuScenes 验证集上的三维占据预测性能

表2. 各种方法的详细设置

图3. Occ3D-nuScenes 上的定性结果

表3. 在各种流行的基于体素的占据方法论上普适性 demonstration 的 FlashOcc。

表4. 时序融合中的持续改进 demonstration。

表 5. 训练和部署期间的资源消耗分析。


四、FlashOCC算法复现

1. 环境搭建

1.1 虚拟环境

1.2 安装cuda、cudnn、torch、torchvision

1.3 安装其他相关库


2. 数据准备

2.1 下载nuscenes数据集, 数据集结构如下图:

2.2 下载gts

从该链接(https://github.com/CVPR2023-3D-Occupancy-Prediction/CVPR2023-3D-Occupancy-Prediction)只下载”gts“,放在mmdetection3d/data/nuscenes目录下


2.3 生成训练数据

运行完后生成的数据集结构如下图:


2.4 生成bevdetv2-nuscenes_infos_train.pkl和bevdetv2-nuscenes_infos_val.pkl

运行完create_data_bevdet.py会在mmdetection3d/data/nuscenes目录下生成bevdetv2-nuscenes_infos_train.pkl和bevdetv2-nuscenes_infos_val.pkl


最终数据集结构如下图:


3.模型训练

3.1 下载预训练模型 flashocc-r50-256x704.pth


3.2 模型训练

4.模型推理

5.可视化

可视化结果见算法介绍部分算法复现效果。


五、在地平线J5上的部署

1.导出onnx文件

2. 将onnx文件拷贝到地平线J5

3.使用地平线工具链评测onnx

4.将onnx模型转换为能在地平线J5平台上运行的bin模型

5.使用hb_model_verifier命令检测quanti.onnx等中间模型

6.使用hrt_model_exec 命令推理bin模型

具体地平线J5部署详细内容后续补充上


算法工具链
征程5社区征文技术深度解析前沿技术
评论0
0/1000