首页 > 其他分享 >浅谈 Occupancy

浅谈 Occupancy

时间:2024-09-01 10:14:22浏览次数:3  
标签:主干 浅谈 Occupancy 2D 体素 BEV 3D

01 研究意义

Occupancy Network算法因为可以更好的克服感知任务中存在的长尾问题,以及更加准确表达物体的几何形状信息,而受到来自工业界和学术界越来越广泛的关注。

Occupancy Network算法本质上是一个3D分割任务,通过将想要感知的3D空间划分成固定大小的体素网格,并让算法去预测每个体素网格被占用的概率以及可能包含的目标类别从而实现对全场景的感知。因其是对空间中的所有体素进行分类,所以对于数据集中未被标注的物体(比如土堆、石块等目标也可以预测为General Objects,从而实现开放集的目标检测,即更好的克服检测中的长尾问题);同时与直接输出一个物体粗糙3D框的算法相比,由于是直接对空间中的每个体素进行预测,所以对于不规则形状的目标,Occupancy Network算法可以给出更加细粒度的形状表示,从而得到每个物体更加丰富的细节结构信息。
图片

02 存在问题

尽管目前Occupancy Network相比于之前的基于BEV的3D感知算法有更好的感知优势,但因其将所要感知的环境空间利用3D体素特征进行中间表示,避免不了的会引入3D卷积等算子进行特征提取,无疑会大大增加模型的运算量和内存开销,从而为模型的上车部署造成不小的困难,严重影响了Occupancy Network算法的落地。

为此针对Occupancy network模型的轻量化是非常有必要的。

03 数据集选择

目前,在3D目标检测中开源的数据集包括kitti,nuscenes,waymo,lyft,scannet,s3dis,sunrgbd,智能驾驶行业内没有统一的评测数据集,根据目前开源的基础数据集包括kitti,nuscenes,waymo其中nuscenes数据集应用较多,目前科研领域内采用CVPR2023占用预测挑战赛的Occ3D-nuScenes数据集的论文屡见不鲜。

04 主干网络部分

4.1 选择更合适的主干网络

目标检测任务中常见的主干网络包括: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虽然在一些任务上表现较好,但对于目标检测任务来说可能存在训练速度较慢的问题。

图片
图片

4.2 FlashOcc主干网络

在FlashOcc中主干网络对输入的环视图像进行多尺度的特征提取,2D主干网络采用的是ResNet-50。

需要注意的是,由于当前的config配置是将时序上连续的三帧环视图像一起输入到网络模型当中,所以模型对于不同帧的处理方式是不同的。

如果当前时刻标记为t,那么对于t-2时刻的环视图像,2D主干网络只会输出降采样四倍的特征图用于后续进行双目立体的深度估计,代码中定义降采样4倍的特征为Stereo Feature。

但是对于t和t-1时刻,2D主干网络在输出降采样4倍Stereo Feature的同时,还会输出降采样16倍和32倍的特征图,用于后续完成多尺度特征的信息融合。

05 前后向投影模式

该模式由FB-Occ提出,在精度预测和推理速度上在当时都是领先的存在,该模式包含两部分:前向投影和后向投影模式。

5.1 前向投影

使用前向投影来生成3D体素表示

将 3D 体素表⽰压缩为扁平化的BEV特征图 3)最后将 3D 体素表⽰和优化的 BEV 表⽰的融合特征输⼊到后续任务头中

前向投影总结:相对原来的LSS是投影到BEV空间中,这里是投影到3D体素空间中
图片

5.2 后向投影

3D体素表示压缩为BEV表示,从⽽结合更强的语义

利⽤了投影阶段的深度分布,能够更精确地建模投影关系

后向投影总结:灵感来源于BEVFormer

与使⽤随机初始化参数作为 BEV 查询的 BEVFormer 不同

在推理阶段使用了深度分布,从而保证了更加精确的
图片
最后获得3D体素表示和优化后的BEV表示后, 通过扩展BEV特征的过程将他们组合起来, 从而产生最终的3D体素。

06 BEV特征解码

在三维空间中对提升的体素特征进行直接解码相比,由于维度的减少,二维BEV解码器会比三维解码器速度更快。将三维体素特征的z dim与其嵌入通道结合即,得到2D BEV特征B‘∈R(C2×Z2)×H2×W2如下图所示:
图片

然后用2D FCN将B‘解码为BEV特征B∈RC3×H2×W2,如图下所示。
图片
这在很大程度上降低了计算的复杂度。具体可以减少Sj的计算量:
图片

07 测评指标

7.1 BEV分割指标

对于传统OGM中的二进制分割(将网格划分为占用和空闲),大多数以前的工作使用精度作为简单的度量。对于语义分割,主要度量是每个类的IoU和所有类的mIoU。
图片

7.2 BEV预测指标

MotionNet通过将每个网格单元与BEV地图中的位移向量相关联来编码运动信息,并通过将非空网格单元分类为三个速度范围来提出运动预测的度量:静态、慢速(≤5m/s)和快速(>5m/s)。在每个速度范围内,已利用预测位移和真实位移之间的平均和中值L2距离。

7.3 3D占用率预测指标

语义场景补全的主要度量是所有语义类的mIoU,在场景补全时使用IoU、Precision和Recall来评估几何重建质量。3D占用预测挑战测量F得分作为完整性Pc的调和平均值,精度Pa,F得分计算如下:
图片

08 轻量化典型模型案例:FlashOcc

8.1 基本思想

Flash-Occ算法(算法流程图如下)抛弃了长耗时、难部署的3D卷积模块,继续使用2D卷积模块来完成特征的提取任务。同时,为了减少模型的计算量,Flash-Occ不再使用Voxel体素特征,而是继续使用BEV特征来建模需要感知的3D空间。但为了完成Occupancy Network在3D空间的预测,Flash-Occ算法设计了一个通道-高度转换模块实现将BEV空间的输出结果提升到3D体素空间,完成最终的结果预测。
图片

8.2 网络结构

整体来看,Flash-Occ的网络结构包括2D主干网络、Neck网络、深度估计模块、视角转换模块、2D BEV Encoder、Occupancy Head模块、通道高度转换模块、训练过程的Loss计算等部分组成。整体框架如下图所示。
图片
通道高度转换模块也是本文所提出的核心插件。原理十分简单,即Occupancy Head的预测头将语义特征和高度联合在一起进行预测,最后通过Tensor的view操作实现2D特征转换为3D的体素预测结果

#我们将2D BEV Encoder模块的输出到如下2D卷积层
occ_pred = self.final_conv(img_feats).permute(0, 3, 2, 1)    
#联合语义特征和高度联合在一起进行预测
#输出结果格式:Tensor([bs, H, W, height×num_classes ])    
occ_pred = self.predicter(occ_pred)    

#通道高度转换模块
occ_pred = occ_pred.view(bs, Dx, Dy, Dz, num_classes)
# 其中
# Dx = BEV空间的大小; 
# Dy = BEV空间的大小; 
# Dz = 体素高度; 
# num_classes = 类别数目

8.3 效果

Occ3D-nuScenes数据集上的可视化效果如下:
图片
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
论文地址:https://arxiv.org/abs/2311.12058

标签:主干,浅谈,Occupancy,2D,体素,BEV,3D
From: https://www.cnblogs.com/horizondeveloper/p/18391048

相关文章

  • C# 一分钟浅谈:第一个 C# 控制台应用程序
    引言C#是一种现代化的、面向对象的编程语言,广泛应用于各种领域,包括桌面应用程序、Web应用、游戏开发等。对于初学者而言,从创建一个简单的控制台应用程序开始学习C#是一个非常好的起点。本文将详细介绍如何创建第一个C#控制台应用程序,并探讨一些常见的问题及其解决方案。准......
  • C# 一分钟浅谈:变量与数据类型简介
    引言在C#编程中,了解和使用变量与数据类型是非常基础且重要的一步。正确的数据类型选择不仅能够提高程序的性能,还能避免许多潜在的问题。本文将详细介绍C#中常见的数据类型和变量的使用方法,并探讨一些常见的问题及其解决方法。常见数据类型C#中的数据类型主要分为两大类:值......
  • 浅谈摩尔投票法
    问题引入给定\(n\)个数\(a_i\),求出该数列的绝对众数,保证该绝对众数存在。\(n\le10^7\),空间限制1MB。算法介绍摩尔投票法可以\(O(1)\)空间\(O(n)\)时间内求出一个数列的绝对众数,使用前提是数列保证存在绝对众数,否则你只能求出一个可能是绝对众数的数,这时你还需要使用......
  • 浅谈Java loombook框架
    一、基本介绍        Java的LoomProject是一个处于早期开发阶段的项目,旨在为Java平台添加轻量级的协程支持。协程是一种比线程更加轻量级的存在,它可以在一个线程中并发执行多个任务,从而减少上下文切换的开销,并提高系统的吞吐量。        LoomProject提......
  • java.time包时间类浅谈
    Java早期日期时间API:java.util.Date与java.util.Calendar一、背景在Java的早期版本中,处理日期和时间的需求主要由java.util.Date类和随后加入的java.util.Calendar类来满足。这两个类在Java1.0和Java1.1中分别被引入,为Java程序提供了基本的日期和时间操作能力。然而,随着......
  • 【环境部署系列】浅谈灾难恢复站点:冷/暖/热站点
    原创祺印说信安一般来说,备用站点是指将人员及其工作所需的设备重新安置一段时间,直到恢复或更换正常生产环境为止的站点。包含完全冗余的硬件和软件,具有电信、电话和公用事业连接,以继续所有主要站点的操作。根据维基百科的资料解释,站点通常根据准备程度和投入运行的速度进行......
  • 浅谈二分算法
    浅谈二分算法二分首先知道一下二分是什么。二分,是一种快速处理大型数据的方法。基本逻辑是折半查找。设有一个共有\(n\)个数字的数组,要从中查询某个元素,就可以用二分查找。注:这里的数组默认其成员数值具有单调性。这个点十分重要。还记得小时候(我现在才新初一)跟同学玩过一......
  • 浅谈AI--我们为什么要学会用AI
    为什么要用AI人工成本低、为工作提高效率。了解AIAI入门工具要数ChatGPT,无奈在国内打不开,要用它得通过科学上网或者调用代理商接口。但是今年3月份,百度也发布了免费产品——文心一言,对标ChatGPT3.5。虽然刚开始文心一言给的问答效果不如人意,尤其是答非所问的情况比较多,而且......
  • STC89C52 定时器浅谈
    文章目录1、定时器1.1定时器简介1.2定时器构成1.2.1系统时钟1.2.2计数单元1.2.3中断系统1.2定时器0/1的相关寄存器1.2.1TMOD1.2.2TCON1.3初始化定时器01、定时器1.1定时器简介定时器,又称为计数器,是51单片机的内部资源,即电路的连接和运转都在单片机内部......
  • 浅谈【数据结构】树与二叉树一
    目录1、树与二叉树1.1树的概念2、二叉树2.1二叉树的五大形态2.2二叉树的性质2.3二叉树的存储结构2.4二叉树的遍历谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注没错,说的就是你,不用再怀疑!!!希望我的文章内容能对你有帮助,一起努力吧!!!1、树与二叉树1.1树......