视频链接:【手撕BEVFormer】6小时跟着博士学会基于transformer的自动驾驶BEV视觉感知!让你感受上帝视角的光环!视觉地理定位/深度学习/人工智能_哔哩哔哩_bilibili
参考链接:一文读懂BEV空间内的特征级融合_九章智驾的博客-CSDN博客
BEV视角是什么
BEV视角就是鸟瞰图又称为上帝视角。相当于人眼俯视看桌子,每一个物体都是三维的,例如铅笔盒或者橡皮擦,但是你又能明确的看出两者之间的遮挡关系(橡皮擦在铅笔盒后面多远)这就相当于鸟瞰图。如果单纯的3D视角进行遮挡你无法确定后面是有什么东西,如果俯视看,你又无法确定他们的高度,所以BEV视角在解决3D分割等问题中具有很大的优势,具体如下:
- 可以直观地展示汽车周围环境
- 避免图像视角下的尺度(scale)和遮挡(occulsion)问题,可以有效识别有遮挡或交叉交通的情况
- 有利于后续规划控制模块的开发
BEV 多模块多传感器融合
- 主要用于解决当目前任务中具有多个视觉传感器,分别提取特征后如何用于聚合呢。
- 每个视角都需要贡献输入,基本上就是投影得到高维特征空间表示
- 将多相机图像特征转换为鸟瞰( BEV )特征,可以为各种自动驾驶感知任务提供统一的周围环境表征
BEV要解决一件什么事情(上帝视角光环)
- 跟驾驶相关的视觉任务基本都是多传感器融合,但是如何进行融合呢
- 后融合(结果进行融合);前融合(数据进行融合);特征级融合(今天的主体)
- 将多传感器的特征汇总在3D空间上,在者上面做预测分析决策(2D空间的特征向3D空间中作投影)
- 而且BEV空间特征可以更容易拓展到下游任务。
BEV特征空间可以得到什么
- 相当于我们在上帝视角下重构了一个特征空间,空间的大小我们自己定义(特征空间中的点不是一个数值而是一个特征,对于特征空间中的每一个点需要从不同特征图中所有的点提取特征后计算)
- 特征空间相当于一个网络,网络的间隔也可以自己定义,对应的精度也会由差异
- 在特征空间中我们可以以全局的视角来进行预测,特征都给你了。
3D VS 4D
- BEV空间的特征我们可以当作是3D的,但是能不能再拓展一步形成4D?
- 如果考虑到时间维度,那就是一个4D特征空间了,包括时序信息。
- 时序特征更适合预测速度,轨迹,检测等任务,还可以进行猜想
特征融合过程中可能遇到的问题
- 自身运动补偿:车载运动,不同时刻之间的特征需要对齐
- 时间差异:不同传感器可能具有时间差,要对齐这部分信息
- 空间差异:最后肯定要映射到同一坐标系,空间位置特征也要对齐
- 不依赖传感器的参数(latent variable)
BEV的感知架构:
- 先将摄像头数据输入到共享的骨干网络(Backbone),提取每个摄像头的数据特征(feature)。
- 把所有的摄像头数据(跨摄)进行融合,并转换到BEV空间(主要采用Transformer)。
- 在BEV空间内,进行跨模态融合,将像素级的视觉数据和激光雷达点云进行融合。
- 进行时序融合,形成4D时空维度的感知信息。
BEVformer
模型学习如何将特征从图像坐标系转换到BEV坐标系。
基本框架
- 一个核心:纯视觉解决方案(多个视角摄像头进行特征融合)
- 两个策略:将Attention应用于时间与空间维度(其实就是对其特征)
- 三个节约:Attention计算简化,特征映射简化,粗粒度特征空间
- 基本奠定了框架结构:时间+空间+DeformableAttention
Deformable attention
可变形注意力机制于局部感兴趣区域交互,只对每个参考点附近K个点进行采样,并计算注意力结果,采样的位置相对于参考带你的偏移量和每个采样点在加权的比重均靠Query和Linear层来进行计算。我们主要注意如下两个方面。
- 当前值的偏移量
- 对于每一个偏移量的权重
总体框架
在t时刻,我们将多相机图像馈送到骨干网络(例如ResNet - 101 ),得到不同相机视图的特征,其中是第i个视图的特征,是相机视图的总数。同时,我们在前一时刻t - 1保留了BEV特征。在每个编码器层,我们首先使用BEV查询Q通过时间自注意力从先验BEV特征中查询时间信息。然后利用BEV查询Q通过空间交叉注意力从多相机特征中查询空间信息。经过前馈网络后,编码器层输出细化后的BEV特征,作为下一个编码器层的输入。经过6层编码器堆叠,生成当前时间戳t的统一BEV特征Bt。先时间再空间,因为前面时刻的BEV有很多信息,相当于要充分利用先验知识,再次基础上再继续融合当前帧的特征,从而构建BEV以BEV特征Bt作为输入,3D检测头和地图分割头预测3D 等感知结果
时间注意力模块
- 类似RNN的方式来利用前面一些时刻的特征
- 采用DeformableAttention模块选取历史中所需要的信息。
空间注意力模块
- 要融合多个视角的特征,相当于query遍历所有视角找到有用的信息
- 3D的点要投影到2D空间,投影点再附近上进行采样,我们采用DeformableAttention模块计算