地平线 3D 目标检测 Bevformer 参考算法-V2.0

该示例为参考算法,仅作为在 征程 6 上模型部署的设计参考,非量产算法

简介

BEVFormer 是当前热门的自动驾驶系统中的 3D 视觉感知任务模型。BEVFormer 是一个端到端的框架,BEVFormer 可以直接从原始图像数据生成 BEV 特征,无需依赖于传统的图像处理流程。它通过利用 Transformer 架构和注意力机制,有效地从多摄像头图像中学习生成高质量的鸟瞰图(Bird’s-Eye-View, BEV)特征表示。相较于其他的 BEV 转换方式:

  1. 时空注意力机制:模型结合了空间交叉注意力(Spatial Cross-Attention, SCA)和时间自注意力(Temporal Self-Attention, TSA),使网络能够同时考虑空间和时间维度上的信息。融合历史 bev 特征来提升预设的 BEV 空间中的 query 的自学能力,得到 bev 特征。
  2. Deformable attn:通过对每个目标生成几个采样点和采样点的 offset 来提取采样点周围的重要特征,即只关注和目标相关的特征,减少计算量。
  3. transformer 架构:能够有效捕捉序列中的长期依赖关系,适用于处理图像序列。

性能精度指标

模型参数:

在这里插入图片描述

性能精度表现:

在这里插入图片描述

模型介绍

在这里插入图片描述

·公版 BEVFormer 模型主要可以分为以下几个关键部分:

  1. Backbone 网络:用于从多视角摄像头图像中提取特征,本文为 tiny 版本,因此为 ResNet50。
  2. 时空特征提取:BEVFormer 通过引入时间和空间特征来学习 BEV 特征。具体来说,模型包括:
  3. Temporal Self-Attention(时间自注意力):利用前一时刻的 BEV 特征作为历史特征,通过自注意力机制来计算当前时刻的 BEV 特征。
  4. Spatial Cross-Attention(空间交叉注意力):进行空间特征注意力,融合多视角图像特征。
  5. Deformable Attention(可变形注意力):BEVFormer 使用可变形注意力机制来加速运算,提高模型对不同视角图像特征的适应性。
  6. BEV 特征生成:通过时空特征的融合,完成环视图像特征向 BEV 特征的建模。
  7. Decoder:设计用于 3D 物体检测的端到端网络结构,基于 2D 检测器 Deformable DETR 进行改进,以适应 3D 空间的检测任务。

地平线部署说明

公版 bevformer 在 征程 6 上部署相比于 征程 5 来说更简单了,需要考虑的因素更少。征程 6 对非 4 维的支持可以和 4 维的同等效率,因此 征程 6 支持公版的注意力实现,不再限制维度,因此无需对维度做 Reshape,可直接支持公版写法。但需注意的是公版的 bev_mask 会导致动态 shape。征程 6 不支持动态输入,因此 bev_mask 无法使用。在精度上,我们修复了公版的 bug 已获得了精度上的提升,同时通过对关键层做 int16 的量化精度配置以保障 1%以内的量化精度损失。

下面将部署优化对应的改动点以及量化配置依次说明。

性能优化

改动点 1:

将 attention 层的 mean 替换为 conv 计算,使性能上获得提升。

/usr/local/lib/python3.10/dist-packages/hat/models/task_modules/bevformer/attention.py

self.query_reduce_mean = nn.Conv2d(
    self.num_bev_queue * self.reduce_align_num,
    self.reduce_align_num,
    1,
    bias=False,)

# init query_reduce_mean weight
query_reduce_mean_weight = torch.zeros(
    self.query_reduce_mean.weight.size(),       
    dtype=self.query_reduce_mean.weight.dtype,
)
for i in range(self.reduce_align_num):
    for j in range(self.num_bev_queue):
        query_reduce_mean_weight[i, j * self.reduce_align_num + i] = (
            1 / self.num_bev_queue
        )
self.query_reduce_mean.weight = torch.nn.Parameter(
    query_reduce_mean_weight, requires_grad=False
)

改动点 2:

公版中,在 Encoder 的空间融合模块,会根据 bev_mask 计算有效的 query 和 reference_points,输出 queries_rebatch 和 reference_points_rebatch,作用为减少交互的数据量,提升模型运行性能。对于稀疏的 quer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值