几种流行的视觉bev算法通俗对比介绍


1.基础知识概述

1.1detr算法

Detr算法是一种基于transformer的图像检测算法(对标yolo)
detr算法流程

如上图所示,detr算法分为四个模块,backbone、encoder、decoder、prediction heads。
Backbone:
该模块就是应用图像神经网络提取图像特征,应用fpn(图像金字塔),最终输出多尺度特征图。
Positional encoding:
对图像上每一个像素点进行位置编码,并与Backbone输出的多尺度特征图相加。本质上就是给Backbone输出的多尺度特征图添加一个维度的位置信息。
Encoder:
Transformer的编码模块,简单来说就是应用q(查询向量)、k(键向量)、v(值向量)三种向量表示具备了位置信息的多尺度特征图。
可以理解为backbone做的特征提取,而encoder是结合位置编码对提取后的特征进行格式转换,本质上两个模块共同完成了特征提取工作,到此相当于完成了yolo的backbone特征提取工作。
Decoder:
首先系统初始化多个object queries,默认100个,object queries是一个255维的向量,表示图像中可能出现的物体类别与二维框,相当于yolo里的anchor。
结合encoder的结果与预测网络依次对每一个object queries内包含的物体类别与二维框进行更新,更新后依然为255维向量。
多次重复上述步骤,让object queries内的内容能够在多次迭代中更新为正确的目标类别与二维框。
Prediction heads
将decoder输出的object queries,经过全连接网络将255维向量降至低维输出正确的目标类别与二维框。

1.2Lss算法

Lss算法是最原始的bev算法,他认为图像上的每一个像素点对应的三维坐标均在由相机光心到图像像素点所形成的这条射线上。三维坐标所在位置的方向是确定的,只需要计算出每个像素点对应的深度即可完成二维坐标到三维坐标的转换,因此算法应用图像神经网络预测出每个像素点的深度概率分布。例如:这个像素点深度在1-2米内的概率为10%,在2-3米的概率为20%…由此推理出每个像素点深度的最高概率,结合深度值与方向确定三维坐标的位置。

1.3三维坐标到二维像素坐标的转换
由相机坐标到图像像素坐标的转换公式:
转换公式

其中分别表示相机的横纵焦距,相机的理论上横纵焦距是相等的,但由于工业制造原因横纵坐标会有些许不同,但近似相等。

2.Bev算法详解

2.1detr3D

应用场景:车辆环视视频
检测输入:车辆环视视频
检测输出:目标3D检测框
训练输入:车辆环视视频、目标3D检测框
原理:

在这里插入图片描述

以上为总体流程图。

在这里插入图片描述

首先先看原理图左半部分:
1.算法先将图像数据输入特征提取网络,这里选用的是resnet+FPN,最终输出多尺度特征图。(该步骤就是1.1中的Backbone模块)

在这里插入图片描述

2.系统初始化多个object queries,默认300个,object queries是255维向量表示bev图像中可能存在物体类别与三维框,相当于yolo里的anchor。(该步骤就是1.1中的Decoder模块在三维中的应用)
3.取每个object queries的三维框的中心点坐标cli(图中蓝线),应用三维坐标到二维像素坐标的转换方案将cli转换为二维图像像素坐标clmi(图中绿线)。
4.以clmi为中心对步骤1中输出的多尺度特征图进行局部采样。
5.结合4的采用结果与预测网络依次对每一个object queries内包含的物体类别与三维框进行更新,更新后依然为255维向量。(图中红线,该步骤就是1.1中的Decoder模块在三维中的应用)
6.重复步骤5,让object queries内的内容能够在多次迭代中更新为正确的目标类别与三维框。
7.应用全连接网络将步骤6输出的object queries进行降维,输出正确的目标类别与三维框。

优点:这是一个纯的二维算法,没有引入深度模型,减少了深度混合误差。算法简单运算速度快。
缺点:由于步骤4中,对多尺度特征图进行局部采样,导致方法对图像整体特征的理解少,对目标尺寸推理不敏感。

2.2Bevformer

应用场景:车辆环视视频
检测输入:车辆环视视频
检测输出:目标3D检测框
训练输入:车辆环视视频、目标3D检测框

原理:作者认为bev图像上的点云映射到图像上只有廖廖数点,而传统的bev算法 为了得到bev图像,对视频图像上的每一个像素点进行卷积运算,非常浪费计算资源,如果能在当前图像帧bev运算之前应用前一帧得到的bev图像作为先验信息,让神经网络可以有目的的在视频图像上选取值得注意的特征区域,可以在减少算力的同时增加转换精度。这里需要注意的是车载环境是一个车辆运动的过程,即不同时刻bev图像是不一样的。
在这里插入图片描述

0.假设需要观测的最远距离为n,即bev图像尺寸为n*n。
1.图中最左侧Multi-view input at time t 部分和前面算法一样应用图像网络提取时间t的图像特征Ft送入(a)overall Architecture 模块。

2.(a)overall Architecture的输入有三个:
(1)步骤1输出的图像特征Ft;
(2)t-1时刻的bev特征Bt-1,Bt-1是t-1时刻bev图像上每个点的特征向量bt-1的集合,尺寸是nn;
(3)系统初始化的BEV Queries Q,BEV Queries Q结构和Bt-1一样,表示t时刻系统初始化的bev特征,尺寸是n
n,和Bt-1一样,BEV Queries Q为多个BEV Query的集合,BEV Query表示t时刻bev图像上每个点的特征向量。

3.将Bt-1与BEV Queries Q输入Temporal self+attention 模块,应用Bt-1对BEV Queries Q进行增益得到BEV Queries Q2。
增益方式叫做可变注意力机制,如(c)Temporsal self_attention所示。
类比下自注意力机制,自注意力机制是每个Query都需要和所有Query进行计算,需要计算nn次,可变注意力机制是每个Querie只和自己附近的i个固定的Query进行计算,只需要计算i次。
而本模块中,是t时刻BEV QueriesQ中的每个Query,先与t-1时刻Bt-1中的每一个bt-1匹配,在与匹配点附近i个固定的bt-1进行计算。
本篇论文i取4,并且通过实验证明了4就是当前状况下最优解。至于为什么取4如今学术界没有结论,但可以肯定的是只对附近i个点进行计算的结果好于对n
n个点全部计算。

4.将步骤3的输出BEV Queries Q2与BEV Queries Q相加,相加后的结果更新到BEV Queries Q。此时BEV Queries Q具有很强先验信息。

5.接收步骤4输出的具有很强先验信息的BEV Queries,对于BEV Queries中的每一个Query所对应的bev点,均用相机参数转换法,将其转换至图像像素clmi。以clmi为中心对步骤1中输出的多尺度特征图Ft进行局部采样,应用神经网络推理更新Queries。该过程重复6次,让Queries无限逼近BEV图像上各点的特征。
6.应用递推网络将BEV Queries转换为t时间的bev图。
7.应用检测算法推理出t时刻bev图上存在的物体。

优点:特斯拉的自动驾驶方案,这是目前用到最多的bev算法。

2.3Bevdet

应用场景:车辆环视视频
检测输入:车辆环视视频
检测输出:目标3D检测框
向量需求:车辆环视视频、目标3D检测框

在这里插入图片描述

这个算法就是lss算法在工程上的应用。

1.image_view Encoder模块,特征提取模块 ,应用图像网络提取多尺度图像特征图。
2.View Transformer模块,应用图像深度预测网络对步骤1输出的图像特征进行深度分布的预测。尺寸与原特征图保持一致。
3.应用相机参数计算出图像上的每一个像素点对应的三维坐标所在的射线方程。结合步骤2中输出的每个像素点的深度分布预测,得到图像中每个像素点的三维坐标。将转换后的三维坐标以点云的形式绘制到bev图像上。
4.Bev encoder 模块主要完成的工作是对bev图像特征提取并完成多尺度融合,可以理解为和image_view Encoder模块工作类似,不过是视频图像换成了bev图像。
5.将步骤4输出的bev图像放入目标检测网络,得到3D目标检测结果。

优点:该算法其实没什么创新点,所有步骤均是作者为了工程落地而选择的成熟算法的组合。

2.4Bevdet4d

应用场景:车辆环视视频
检测输入:车辆环视视频
检测输出:目标3D检测框
训练需求:车辆环视视频、目标3D检测框
在这里插入图片描述

在Bevdet基础上增加了时序信息。

模块和Bevdet一样。
1.image_view Encoder模块,特征提取模块 ,这里的输入不再是当前时刻的一环视图片,而是多个时刻的多组环视图片。并行的应用图像网络提取多组图片的图像特征生成多尺度特征图。
2.View Transformer模块,获取步骤1中输出的多组多尺度特征图,应用Bevdet相同的原理并行的将他们转换为bev图像。
3.将步骤2输出的多时刻bev图像进行处理后相加。由于相机是安装在车上,而车辆一直处于行驶状态,bev图像不能直接相加,论文提出了一种车辆偏移算法来处理多个时刻的bev图像,使bev图像可以正常相加。
4.将步骤3输出的相加后的bev图像放入目标检测网络,得到3D目标检测结果。

优点:该算法其实没什么创新点,所有步骤均是作者为了工程落地而选择的成熟算法的组合。

2.5Petr

该算法认为2.1detr3D存在很多问题。首先,应用参考点(目标三维中心点)索引图像特征是不合理的,内外参都存在偏差,索引到的图像特征不一定表示参考点表示的区域。另外只对投影点周围的特征进行运算忽略了图像的全局特征是不靠谱的。
在这里插入图片描述

三个算法对比:
Detr:2D图像特征与2D位置编码相加后进行transformer 编码,结合初始化query,预测出2D检测结果。
Detr3D:将初始化query2D转换为2D像素位置坐标对图像特征进行部分采样,进行transformer 编码,结合初始化query,预测出2D检测结果。
Petr:2D图像特征与3D位置编码相加后进行transformer 编码,结合初始化query,预测出2D检测结果。
对比之下,Detr与Petr的结构更为相似,三种算法在transformer 编码后是一样的。
输入:车辆环视视频
输出:目标3D检测框
训练需求:车辆环视视频、目标3D检测框

在这里插入图片描述

原理:
在这里插入图片描述

1.左上方特征提取模块和前面算法一样 ,应用图像网络提取图像特征生成多尺度特征图。
在这里插入图片描述

2.左下方3D位置编码模块。他的主要目的是对二维图像上的每个像素点进行粗略的3D位置编码。编码方式如下:
在这里插入图片描述

(1)将图像映射到相机视锥空间上,三维视锥空间如上图左侧图片所示,红色实线表示带转换图像,由相机光心到图像上每个像素点所连成的射线集合会成为一个锥形区域。这个锥形区域称为相机视锥空间。
(2)将相机视锥空间离散成大小为的网格,其中
网格中的第j个点用表示,表示该点在映射前原始图像上对应的像素坐标,表示神经网络预测的该点大致深度。
(3)应用相机参数将视锥空间坐标转换为3D坐标。,为转换点3D坐标,为视锥坐标,K为相机内参。
(4)对其结果进行归一化

3.后面的过程与detr相似。
在这里插入图片描述

将步骤1输出的多尺度特征图与步骤2中输出的3D位置编码相加进行transformer编码,即应用q(查询向量)、k(键向量)、v(值向量)三种向量表示具备了位置信息的多尺度特征图。
4.系统初始化多个固定的Query,表示图像中可能出现的物体类别与三维框,应用步骤3输出的编码后的具备了位置信息的多尺度特征图对Query进行迭代更新,使Query结果可以逼近准确的检测类别与3D框。

在Petr发布以后旷视很快发布了Petrv2,与bevdet4D类似,Petr2在Petr基础上添加了时序信息来提高准确率,此外petrv2还添加了许多新的功能,例如行车线检测等。

优点:旷视使用的bev方案。比detr3D相比,该算法考虑到了更多三维信息,提高了准确率。

2.6Bevdepth

检测输入:车辆环视视频
检测输出:目标3D检测框
训练需求:车辆环视视频、目标3D检测框、激光雷达点云
作者认为之前的所有算法均是以3D目标检测框作为负反馈,神经网络只是为了完成3D目标检测的需求,而并非完全准确的对图像上的每一个像素点进行深度推理。此外,每个相机参数需要对应一个网络模型太过麻烦。因此作者先应用激光雷达与图像的对应关系,完成对图像深度预测实时监督的目的。
在这里插入图片描述

左图是输入图像,中间是lss输出的深度图像,右图是BEVDepth的深度图像。
原理:
在这里插入图片描述

其总体流程如上图所示:
1.总体流程图的左侧部分,和前面算法一样 ,应用图像网络提取图像特征生成多尺度特征图F1。

在这里插入图片描述

2.将F1与相机参数一起输入深度预测网络(Depth Net)。
在这里插入图片描述

深度预测网络结构如下:
在这里插入图片描述

(1)将F1与相机参数放入神经网络。
(2)对F1进行一次卷积,即做一次简单的特征提取,输出新的图像特征图F2。
(3)对相机参数进行增广,使其维度与步骤(2)输出的图像特征图相同。
(4)将(3)增广后的相机参数与(2)输出的图像特征图F2相乘,这个步骤就是给特征图上的每一个具体特征增加一个权重,让系统明白哪些特征是重要的。输出带有权重信息的图像特征图F3
(5)将(4)的输出结果F3进行三次残差运算,再应用DCN(这个就是特征图的resize操作)处理后输出含有深度分布信息的图像特征图F4。
3.将步骤2输出的F4与步骤1输出的F1相乘,得到多尺度含有深度分布信息的特征图F5。同时应用点云数据对F5进行监督,并且进行负反馈,让F5能在迭代中趋近于点云数据。
4.由于外参计算都是存在偏差的,depth refinement 模块可以对步骤3输出的F5进行偏差修正,输出修正后含有深度分布信息的特征图F6。

5.Efficient voxel pooling模块是将F6映射到bev图上。
6.对bev图上的目标进行3D检测。

优点:算法支持带相机参数进行计算,模型可以复用,bev图像展示效果好。
缺点:算法需要点云数据进行监督。

3 性能对比

在这里插入图片描述

上图是以上所有算法在nuscence数据集上的性能对比图.nuScense包含1000个,每个约20s的数据,标注2Hz,每个样本包含6个摄像机具有360度的水平场景。对于目标检测任务有标注了1.4M个3D框,共包含10个类别。其中CenterPoint算法是一个经典的激光雷达算法,是所有图像3D检测算法的标杆。FCOS3D是一个经典的BEV算法,是之后BEV算法的baseline。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值