首页 > 编程语言 >地平线占用预测 FlashOcc 参考算法-V1.0

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

时间:2024-09-18 20:23:49浏览次数:9  
标签:特征 feat self FlashOcc V1.0 地平线 图像 BEV

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
  2. 公版模型代码:Github-FlashOcc

标签:特征,feat,self,FlashOcc,V1.0,地平线,图像,BEV
From: https://www.cnblogs.com/horizondeveloper/p/18419280

相关文章

  • 地平线秋招2025
    【地平线秋招】中秋卷起来!!!内推码kbrfck内推码kbrfck内推码kbrfck投递链接:https://wecruit.hotjob.cn/SU62d915040dcad43c775ec12c/mc/position/campus?acotycoCode=kbrfck&recruitType=1&isLimitShowPostScope=1【关于我们】地平线是市场领先的乘用车高级辅助驾驶(A......
  • 多商户消费券V1.0.0
    微信公众号开发的在微信上发布消费代金券的系统。支持发布多商户跨店统一消费券,拉动消费。适用于商圈/商场/景区/社区/街区/综合体/连锁店等。简洁易用,功能闭环。V1.0.0发布版本......
  • 餐厅预订系统V1.0.0
    餐厅预定桌位系统,支持多店切换预约,提供全部前后台无加密源代码和数据库,支持私有化部署。V1.0.0发布版本......
  • 地平线轨迹预测 QCNet 参考算法-V1.0
    该示例为参考算法,仅作为在征程6上模型部署的设计参考,非量产算法。01简介轨迹预测任务的目的是在给定历史轨迹的情况下预测未来轨迹。这项任务在自动驾驶、智能监控、运动分析等领域有着广泛应用。传统方法通常直接利用历史轨迹来预测未来,而忽略了预测目标的上下文或查询信......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十四章 LCD显示实验
    第二十四章LCD显示实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • 分类记账小程序系统V1.0.1
    一款支持多人协作的记账本小程序,可用于家庭,团队,组织以及个人的日常收支情况记录,支持周月年度统计V1.0.1修复已知BUG1、新增备案号填写入口2、小程序我的页面底部加入备案号展示3、修复已知小BUG......
  • 西陆旅游系统V1.0.0
    旅游系统,包含消费者端(手机端)、机构工作人员(手机端)、机构端(PC)、平台管理端(PC)。机构可以发布旅游线路、景点项目;用户在线购买订票,支持成人价和儿童价两种票价,支持工作人员现场扫码核销,支持二级分销(高级授权)。V1.0.0发布版本......
  • 嘀嗒陪护小程序V1.0.7
    原生微信小程序开发的陪诊陪护小程序,支持多运营区,陪护师、推广者等完整闭环功能,快速搭建陪护业务平台。提供全部无加密源码,支持私有化部署。V1.0.7自定义文字,可指定陪护师1.各运营区可选择是否开启允许用户指定陪护师进行服务2.自定义部分文字(身份资料,提现资料)......
  • 会议室预约小程序V1.0.0
    会议室预约,支持设置免费预约和付费预约(高级授权)、积分兑换商城(高级授权)、积分签到(高级授权)等。提供全部前后端无加密源代码、数据私有化部署。V1.0.0发布版本......
  • 西陆二手交易系统V1.0.1
    二手交易系统,卖家可以发布二手信息,买家可以在线询价,支持在线聊天(高级授权),在线购买支付,支持发布高价回收(高级授权)信息。自带社交板块,用户可以发布帖子、加入圈子、关注好友。V1.0.1bug修复与优化优化与bug1.留言增加小程序文本检测2.修复评论时间转换方法bug3.后台分类删除bug4.......