地平线占用预测 FlashOcc 参考算法-V1.0

news2024/11/19 15:14:30

1.简介

3D Occupancy Networks 的基本思路是将三维空间划分成体素网格,并对每个网格进行各类感知任务的预测。目前以网格为中心的方法能够预测每个网格单元的占用率、语义类别、未来运动位移和实例信息。3D occupancy 可以对道路障碍物进行更细粒度的划分,同时获取更精确的占用和语义信息。然而,三维体素表示的处理带来了巨大的内存和计算开销,导致当前占用率预测方法的部署受到限制。FlashOcc 作为即插即用的占用网络,在保持精度的同时实现了更快的推理速度和更低的内存消耗。本文将介绍 FlashOcc 在地平线征程 6E/M 平台上的优化部署。

2.性能精度指标

在这里插入图片描述

3.公版模型介绍

FlashOcc 在该领域做出了开创性的贡献,成功地以惊人的精度实现了实时 surround 视图 3D 占用预测。此外,在不同的车载平台上部署时表现出更强的通用性,因为它消除了对昂贵的体素级特征处理的需要,其中避免了视图变换器或 3D(可变形)卷积算子。如下图所示,FlashOcc 的输入为 6 张图像(前后视角+周视),输出是密集占用预测结果。

在这里插入图片描述
FlashOcc 网络主要由 5 个部分组成:

  • 2D 图像编码器:使用 ResNet50+FPN 从多视角图像中提取多尺度图像特征;
  • 视图转换模块:使用 LSS 实现从 2D 感知视图图像特征到 3D BEV 表示的映射;
  • BEV 编码器:提取 BEV 空间的特征,并结合了多尺度的 BEV 特征来提升特征表示质量;
  • 占用预测模块:由多层 Conv 或者复杂的多尺度特征融合模块组成,该模块预测每个体素的分割标签;
  • 可选的时间融合模块:由时空对齐模块和特征融合模块组成,增强对动态目标或属性的感知。

4.地平线部署优化

改动点说明:

  1. 输入图像大小:由公版的 256x704 调整为 512x960;
  2. BEV 网格大小:由公版的 200x200 调整为 128x128;
  3. Image encoder backbone:使用地平线深度优化的高效 backbone HENet 替换公版中的 ResNet50;
  4. Bev encoder backbone:使用地平线深度优化的高效 backbone HENet 替换公版模型中的 CustomResNet;
  5. 视图转换模块:使用地平线针对性优化后的 LSSTransformer 来替换公版中的 bevpooling 实现的 LSSViewTransformer,且移除了公版中的时序融合模块;

4.1 性能优化

4.1.1 Backbone

Image Encoder 采用了 HENet+FPN 来提取 6V 图像的多尺度特征,不仅在精度上可与 ResNet50 相媲美,而且在性能上有显著优势,这里的 FPN 采用的是地平线的高效实现,相对于公版更加高效。BEV Encoder 同样采用了 HENet+BiFPN 来提取 BEV 特征,BiFPN 这种重复双向跨尺度连接的结构,可以更好地实现梯度传播,从而实现 BEV 特征的多尺度融合。

HENet 是针对 J6 平台专门设计的高效 backbone,其采用了纯 CNN 架构,总体可分为四个 stage,每个 stage 会进行 2 倍下采样。以下为总体的结构配置:

depth = [4, 3, 8, 6]
block_cls = ["GroupDWCB", "GroupDWCB", "AltDWCB", "DWCB"]
width = [64, 128, 192, 384]
attention_block_num = [0,0,0,0]
mlp_ratios, mlp_ratio_attn = [2, 2, 2, 3], 2
act_layer = ["nn.GELU", "nn.GELU", "nn.GELU", "nn.GELU""]
use_layer_scale = [True,True,True,True]
final_expand_channel, feature_mix_channel = 0,1024
down_cls = ["S2DDown", "S2DDown", "S2DDown", "None"71

模型相关细节可以参考 HENet 高效模型相关介绍。

代码路径:/usr/local/lib/python3.10/dist-packages/hat/models/backbones/henet.py

4.1.2View transformer

View transformer 采用地平线深度优化后的 LSSTransformer,替换 J6 平台暂不支持的 bevpooling,从而高效地将图像特征转换到 BEV 空间。为了进一步提升性能,将 bev grid size 由公版的 200x200 调整为了 128x128。LSSTransformer 主要的工作流程如下所示:

在这里插入图片描述

View transformer 主要包括分为 3 个部分:

  1. 生成深度特征
  2. 对深度特征和图像特征做 bev 坐标转换
  3. 生成视锥点云特征(frustum features)

接下来将对这三个部分的具体代码实现进行介绍:

生成深度特征

View transformer 是基于图像特征,经过卷积层生成了 depth 为 45 的 depth_feature,并使用 softmax 计算 depth_feature 的 score 值。对应代码如下所示:

self.depth_net = ConvModule2d(
    in_channels=in_channels,
    out_channels=depth,
    kernel_size=1,
    padding=0,
    stride=1,
    bias=False,
)
depth = self.softmax(self.depth_net(feats))

代码路径:/usr/local/lib/python3.10/dist-packages/hat/models/task_modules/view_fusicon/view_transformer.py

生成 BEV 特征

为了减少计算量,LSSTransformer 首先将图像特征和深度特征分别转换到 BEV 视角下,然后对二者进行点乘计算。其中,图像特征转换到 BEV 空间的采样坐标 points 的生成在_gen_reference_point函数中,计算逻辑如下:

在这里插入图片描述

生成视锥点云特征

为了不遗失坐落在相同 voxel 中的点云特征,将对每个 voxel 都采样 10 次,最终将每个点云特征相加得到 BEV 特征图。对应代码:

 class LSSTransformer(ViewTransformer):
     ...
     def ``_spatial_transfom(self``, feats, points):
        ...
        for i in range(self.num_points):
            #将图像特征转换到 BEV 视角下
            homo_feat = self.grid_sample(
                feat,#[1, 64, 96, 30]
                fpoints[i * B : (i + 1) * B],)
            #将深度特征转换到 BEV 视角下
            homo_dfeat = self.dgrid_sample(
                dfeat,#[1, 1, 270, 480]
                dpoints[i * B : (i + 1) * B],
            )
            #生成视锥点云特征
            homo_feat = self.floatFs.mul(homo_feat, homo_dfeat)#[1, 64, 128, 128]
            homo_feats.append(homo_feat)
        trans_feat = homo_feats[0]
        for f in homo_feats[1:]:
            trans_feat = self.floatFs.add(trans_feat, f)
        return trans_feat #[1, 64, 128, 128]

4.2 精度优化

FlashOcc 采用以下策略提升浮点精度:

模型结构优化:使用更多地平线进行针对性优化后的结构,包括 backbone、view_transformer、bevencoder 等,浮点精度相对于公版有所提升;

加载预训练权重:加载 HENet 的浮点预训练权重。

总结与建议

5.1 训练建议

  1. 浮点训练时加载 HENet 的预训练权重;

5.2 部署建议

选择合适的 BEV Grid 尺寸

从图像空间到 BEV 空间的转换,是稠密特征到稠密特征的重新排列组合,计算量比较大,与图像尺寸以及 BEV 特征图尺寸成正相关。若要保持 BEV Grid 的分辨率不变(比如 0.5m/格),则需要大大增加 BEV 特征图的尺寸,从而使得端上计算负担和带宽负担都过重;若保持 BEV 特征图的尺寸不变,则需要使用更粗粒度的 BEV Grid,感知精度就会下降(每个 grid 的尺寸增加)。所以在模型设计之初,综合考虑模型的精度和性能以选择合适的 BEV Grid 尺寸。

使用高效 backbone 提取特征

建议选择 征程6 平台高效 Backbone 来搭建模型,高效 Backbone 经过在 征程6 平台的迭代优化和验证,相比其它公版 Backbone,在性能和精度上可以取得更加出色的效果,因此选取 征程6 平台高效 Backbone 来搭建模型可以对整个场景模型带来性能和精度的增益。

附录

  1. 论文:FlashOcc
    化和验证,相比其它公版 Backbone,在性能和精度上可以取得更加出色的效果,因此选取 征程6 平台高效 Backbone 来搭建模型可以对整个场景模型带来性能和精度的增益。

附录

  1. 论文:FlashOcc
  2. 公版模型代码:Github-FlashOcc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】解决Docker Engine stopped

解决Docker Engine stopped 解决Docker Engine stopped1.检查虚拟设置2 安装wslwindows安装wsl 解决Docker Engine stopped 在安装完docker之后不少用户会遇到Docker Engine stopped。下面就下给出解决方法让docker正常运行起来 1.检查虚拟设置 打开任务管理器查看cpu页面&a…

vue-入门速通

setup是最早的生命周期,在vue2里边的data域可以使用this调用setup里面的数据,但是在setup里边不能使用thisvue项目的可执行文件是index,另外运行前端需要npm run vue的三个模块内需要三个不同的结构,里边放置js代码,注…

LED驱动电路

LED驱动电路简介 摘要: LED照明是今年来快速兴起发展的一种新型光源,它的许多良好特点使得它的应用面越来越广。LED的单向导电特性使人一般认为应该用直流驱动,但是对直流恒压和限流的装置在保证比较好的限流特性时,自身功耗是很…

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介: 6.2.enum和set的一般使用方法 6.3.用数字的方式…

Excel的基本应用__1

1. 模拟运算 1.1 单变量求解 1.1.1 步骤 1.1.1 效果 1.2 模拟运算表 1.2.1 步骤 1.2.2 效果 2.选择性粘贴--转至 3. Excel中如何使用和定义名称 使用 相当于全局变量,可以在不同表中调用 3.1名称中使用常量 3.2名称中使用函数 调用 可以在不同的表中调用 3.…

[vulnhub] SickOS1.1

https://www.vulnhub.com/entry/sickos-11,132/ 主机发现端口扫描 探测存活主机,136是靶机,因为靶机是我最后添加的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 11:36 CST Nmap scan report for 192.168.75.1 …

vue-animate-onscroll动画库(可来回触发动画)

效果展示 ①触发一次动画 触发一次 ②触发多次动画 触发多次 1.什么是vue-animate-onscroll 它是一个 Vue 插件,用于在滚动时触发动画效果。它可以帮助开发者在用户滚动页面时,逐渐展示元素,增强用户体验。基本用法是通过在元素上添加特定的指…

IR21364的代替品SLM21364CF-DG:带过流保护、使能和故障反馈 高压三相半桥驱动芯片 神秘芯片背后的惊人力量

SLM21364CF-DG是一款高压、高速的三相功率MOSFET和IGBT驱动器。采用专有的高压集成电路和锁存免疫CMOS技术,提供可靠的单芯片驱动方案。逻辑输入电平与标准CMOS或LSTTL输出兼容,最低支持3.3V逻辑。通过检测外部电流电阻上电流,过流保护功能能…

nginx如何拦截未经授权的跳转

nginx如何拦截未经授权的跳转 背景准备好一个网站准备好引用网站配置nginx拦截效果 背景 在现实工作中往往有一些企业或人未取得授权但是转载或挂载我们的网址。那么有些要求严格或者有其他原因的情况下不希望这些链接正常访问。所以就有了这样的需求。前提是咱们的网站什么的是…

【深度学习】批量规范化

训练深层神经网络是十分困难的,光是之前简单的模型在简单的数据集上训练都不太轻松。 而批量规范化(batch normalization)是一种流行且有效的技术,可以帮助加快深层网络的收敛速度。 一、训练深层网络 我们回顾一下训练神经网络…

【第十三章:Sentosa_DSML社区版-机器学习之聚类】

目录 13.1 KMeans聚类 13.2 二分KMeans聚类 13.3 高斯混合聚类 13.4 模糊C均值聚类 13.5 Canopy聚类 13.6 Canopy-KMeans聚类 13.7 文档主题生成模型聚类 13.8 谱聚类 【第十三章:Sentosa_DSML社区版-机器学习之聚类】 13.1 KMeans聚类 1.算子介绍 KMeans…

【全新课程】正点原子《ESP32物联网项目实战》培训课程上线!

正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!通过多个项目实战,掌握ESP32物联网项目的开发! 一、课程介绍 本课程围绕物联网实战项目展开教学,内容循序渐进,涵盖了环…

后台管理系统开箱即用的组件库!!【送源码】

今天给大家推荐几款的后台管理系统开箱即用的组件库,基于ElementUI二次封装,开发必备 Headless UI Headless UI 是一款出色的前端组件库,专为与 Tailwind CSS 集成而设计。一组完全无样式、完全可访问的 UI 组件,可以自由的引入…

【Linux】nginx连接前端项目

文章目录 一、项目编译1.编译文件2.dist文件 二、Linux nginx配置三、启动nginx 一、项目编译 1.编译文件 2.dist文件 二、Linux nginx配置 在Xshell软件中,点击CtrlAltF进入文件传输找到地址:/usr/local/nginx/html将dist文件传入 找到nginx.conf&…

考研数据结构——C语言实现冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较每对相邻元素,并在顺序错误的情况下交换它们。这个过程重复进行,直到没有需要交换的元素,这意味着列表已经排序完成。冒泡排序的名字来源于较小的元素会逐…

mybaits获取sqlsession对象后自动开启事务,增删改要记得提交事务!

mybaits中在使用 SQLSession 对象进行数据库操作时,需要注意事务的处理。 以下是关于这个问题的详细说明: 一、SQLSession 与事务的关系 SQLSession 是 MyBatis 框架中用于执行 SQL 语句和与数据库交互的关键对象。当获取 SQLSession 对象后&#xff…

Kali crunsh字典工具

查看自带密码字典 vim /usr/share/wordlists 使用 crunch 字典工具 随机组成6位纯数字密码 crunch 6 6 0123456789 -o test1.txt 由 Abc1234 随机组成的 6~8 位密码 crunch 6 8 Abc1234 -o test2.txt 以A开头后面跟3位数字组成的4位密码 crunch 4 4 -t A%%% -o test3.txt

【鸿蒙HarmonyOS NEXT】用户首选项Preference存储数据

【鸿蒙HarmonyOS NEXT】数据存储之用户首选项Preference 一、环境说明二、Preference运作机制三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、Preference运作机制 应用场景: 用户首选项为应用提…

2024全球科技品牌价值榜50强:苹果第一

根据《Brand Finance 2024年全球最具价值科技品牌榜单报告》,中国品牌在社交媒体、电子和电器行业表现卓越。 全球排名前三的是:苹果、微软以及 Google。国内前几的是:抖音、微信和华为,分为位于第五、十一、十五位。 英伟达在人工…

深度学习|误差逆传播:梯度速解

文章目录 引言链式法则误差逆传播加法的逆传播乘法的逆传播逆传播求梯度 SoftmaxWithLoss 层正向传播逆传播代码实现参考 结语 引言 我们知道训练神经网络模型的核心是以损失函数为基准来调整优化网络参数,使得网络的输出尽可能接近真实标签。在神经网络中&#xf…