三. LiDAR和Camera融合的BEV感知算法-BEV-SAN

目录

    • 前言
    • 0. 简述
    • 1. 算法动机&开创性思路
    • 2. 主体结构
    • 3. 损失函数
    • 4. 性能对比
    • 总结
    • 下载链接
    • 参考

前言

自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考

本次课程我们来学习下课程第三章——LiDAR和Camera融合的BEV感知算法,一起去学习下 BEV-SAN 感知算法

课程大纲可看下面的思维导图

在这里插入图片描述

0. 简述

本次课程给大家介绍一个比较新的融合感知工作,叫 BEV-SAN,其中 S 代表 Slice 切片的意思,A 代表 Attention 注意力的意思,N 代表 Network 网络的意思,所以我们知道它是用来干啥的呢,BEV 空间,要做什么呢,做 Slice Attention 切片注意力,我们从题目中能看出这么多信息

OK,我们依旧从算法动机&开创性思路、主体结构、损失函数以及性能对比四个方面展开

1. 算法动机&开创性思路

先简单看一下,我们在说 BEV-SAN 的算法动机之前,BEV 算法有哪些组成部分呢,已有的 BEV 检测方法主要包括以下三个模块:

  • RGB/LiDAR 特征提取模块
  • BEV 特征构造模块
  • 检测头模块

其中的特征提取模块其实与我们输入有关系,比如说我们输入的是纯视觉的方案,我们只有图像级的输入,那我们后续特征提取自然也就只有图像特征提取网络,如果有 LiDAR 的输入,有点云的输入,那我们自然会有点云特征提取网络,如果我们两个都有,那我们网络会既需要图像特征提取模块,也需要点云特征提取模块

有了特征提取模块之后会得到什么,我们得到特征,图像输入到图像处理模块得到图像特征,点云输入到点云处理模块我们得到点云特征,有了图像或点云特征怎么样去生成要的 BEV 表征呢,后续第二个很重要的模块是如何利用前面提取到的特征得到 BEV 表征,也就是 BEV 特征构造模块

有了 BEV 特征之后,比如已经生成好了一个比较好的 BEV 表征,我们基于 BEV 表征可以连一个检测头在 BEV 空间上做检测

那以上三个模块其实就是 BEV 算法通用的组成部分,区别就是每个模块大家可能使用不同的框架,不同的网络去干同样的一件事情,那比如 BEVFormer 当中使用 SpatialTemporal 去学习一个统一的 BEV 空间表征方式,我们今天要讲的 BEV-SAN 这篇文章也是针对于 BEV 特征构造模块的一篇工作,我们怎样能比较好的构造 BEV 特征,我们直接拍扁是一种好的方式吗,那这就是 BEV-SAN 要考虑的一个问题

那所以我们先简单梳理下 BEV-SAN 算法的动机:

  • 主要针对 BEV 特征构造模块
  • 已有算法专注于沿高度维度展平 BEV 空间,因此丢失了高度信息例如,障碍物与卡车目标往往处于不同的高度平面上,高度压缩会使得这两类目标区分特性丢失。
  • 因此,作者的核心设计是切片注意力网络(Slice Attention Network),以此突出目标高度信息。

我们之前讲过 BEV 空间是什么,BEV 空间是一个俯视空间,或者叫上帝视角空间,那因此我们之前基于 BEV 的 3D 目标检测方法大多是沿着高度维度展平到 BEV 空间的,也就是我们通常说的拍扁,按高度维度对特征进行压缩,拍到 BEV 空间,那作者考虑一个什么问题呢,考虑的是我们这样直接拍扁合不合理,我们在真实世界当中,那其实不同目标所处的高度位置是不一样的,比如普通路牌这类的障碍物其实是比较矮的,卡车或者说常见的公交车它的高度是比较高的

那不同类别的目标所处高度位置是不一样的,所以按照之前的方法统一的对高度维度进行特征压缩,显然丢失了两类目标区分性,那也就是说我们按照高度维度判定的话很难判断出我当前的目标是属于障碍物类还是我们要的卡车类。从高度维度难以区分,所以 BVE-SAN 作者想讨论的是我们利用什么样的方式可以把高度维度给表征出来,那有了这个想法,我们自然要去统计结果,我们发现 3D Box 按照高度维度统计出来是什么样子呢,是下图的样子

在这里插入图片描述

从图中我们可以看到不同目标在高度维度确实有着不同的分布,也和我们常识一样比如汽车 Car 统一分布在一个位置,但是卡车 Truck 统一分布在另一个位置,那上面只是一个统计结果,有没有详细的指标呢,也是有的,如下表所示:

在这里插入图片描述

上表中作者挑选了一个 baseline,是 BEVDepth,如果感兴趣的看官可以先去了解一下,后续我们也会有讲解,我们这里就说它是一个 baseline,是一个框架,那作者引入这个框架想做什么事情呢,调整不同的高度范围来评估不同目标的检测性能,从表中我们能看到什么呢,不同类的目标在不同高度下性能存在明显的差异,以交通锥 Traffic Cone 为例,我们知道普通的交通锥在高度上是要明显低于行人和公交车类别,也就是 Person 和 Bus,而这三类目标也分别在不同高度的范围内性能才能达到最佳,比如人是在 2-3 的范围内,车其实在 3-4 的范围内性能是最好的,那所以对于不同类目标而言在不同高度下性能是具有明显差异的,那所以作者其实考虑充分利用不同目标的高度信息来提升检测性能,同时也缓解我们以前提到的直接拍扁对高度维度特征的损失

那我们具体而言,BEV-SAN 提出了所谓的 Slice Attention 切片注意力的网络,是一种注意力机制来搜索不同类的目标在不同高度下的特征表达方式

2. 主体结构

OK,我们接下来看看主体结构,看看作者具体是怎么设计这个网络的,在开始之前我们提前梳理下作者构思 BEV-SAN 的动机和遇到的挑战:

核心动机:如何在 BEV 特征构造时,感知高度信息?

主体结构:围绕如何提取利用高度特征展开

  • 挑战一:如何选择特征提取的高度范围?(作者提出 LiDAR-guided sampling for slice attention)
  • 挑战二:如何融合多级特征?(作者提出 Fusion Transformer,同时融合全局和局部特征)

我们先简单看下 BEV-SAN 的网络结构图,如下图所示:

在这里插入图片描述

和之前基于 BEV 3D 的方式相同,BEV-SAN 也是由三个模块组成的,分为 BEV 相机特征提取模块,BEV 特征构造模块以及检测头模块,而作者其实主要关注其中的 BEV 特征构造模块,也就是说我们有了特征之后怎么样去得到 BEV 特征呢,如何感知不同类的目标高度信息呢,这就是作者的核心动机

那这里其实存在两个问题,如果想考虑高度,第一个问题,怎么样选择特征合适的高度范围呢?我们前面提到其实作者发现了不同类的目标在不同高度范围性能存在明显的差异,那么如何选择合适的高度范围呢,它是一个非常重要的问题,针对这个问题,作者提出了 LiDAR-guided,也就引入了我们所谓的多模态,点云的监督信息,引入了 LiDAR-guided sampling,也就是点云引导的采样策略

问题二其实是我们有了这样不同高度范围的特征之后,怎么样融合跨高度的特征呢,有效的特征融合也是一个很关键的问题,所以作者提出了一种基于 Transformer 的 Fusion 策略,融合全局 BEV 和局部 BEV 特征以此来达到作者想充分提取利用高度特征的想法

OK,我们这里详细展开讲一下,首先我们拆解下 BEV-SAN 看看它是怎么工作的,先从通用 BEV 模块开始看,如下图所示:

在这里插入图片描述

维度变化 I k : 3 × H × W \color{red}I_k\color{black}:3\times H\times W Ik:3×H×W F k : C × H f × W f \ \ \color{red}F_k\color{black}:C\times H_f\times W_f   Fk:C×Hf×Wf D k : D × H f × W f \ \ \color{red}D_k\color{black}:D\times H_f\times W_f   Dk:D×Hf×Wf V k : C × D × H f × W f \ \ \color{red}V_k\color{black}:C\times D\times H_f \times W_f   Vk:C×D×Hf×Wf

对于一个网络还是从输入输出看起,从图中可以看到 BEV-SAN 的输入是多视角的图像,用 I k \color{red}I_k Ik 表示,维度是 3 × H × W 3\times H \times W 3×H×W k k k 表示的是图像 index,本文实验是基于 nuScenes 数据集,所以说有 6 个不同视角的图像, k k k 的取值范围就是 1-6,从 I 1 \color{red}I_1 I1 一直到 I 6 \color{red}I_6 I6,表示的是我们输入图像 3 × H × W 3\times H \times W 3×H×W 每一张图像都是这个维度的,6 张图像通过共享的 Backbone 提取图像特征,那这个 Backbone 对应图上的 2D Encoder 部分,作者选用的 Backbone 是 ResNet50,得到对应的图像特征用 F k \color{red}F_k Fk 表示,维度是 C × H f × W f C\times H_f \times W_f C×Hf×Wf,那为什么是 C × H f × W f C\times H_f \times W_f C×Hf×Wf 呢,其实特征会对应一个下采样的过程,我们这里输出的特征维度和输入的特征维度一般而言是不一样的,一般像特征的尺寸和我们输入的尺寸可能会有 1/4 或者 1/16 的差距

我们进一步通过 View Transformer 将图像转化为 Voxel 的特征表示,每一个图像特征是 F k \color{red}F_k Fk,维度是 C × H f × W f C \times H_f \times W_f C×Hf×Wf,我们会用这个 F k \color{red}F_k Fk 的特征去预测对应的深度分布,深度分布图的维度是多少呢,每一个像素点去预测一个 D D D 维离散的深度分布,需要预测的图像范围是 H f × W f H_f\times W_f Hf×Wf 也就是图像特征尺寸,图像特征尺寸上的每个位置均预测一个 D D D 维的深度向量,所以说深度分布图也是一个三维的特征,每个点均有 D D D 个离散的深度分布值的,将二者进行一个组合,我们得到最后的体素特征 V k \color{red}V_k Vk

那大家可能对这个 V k \color{red}V_k Vk 不是特别好理解,我们解释一什么意思,它是一个四维向量,为什么会构成四维向量呢,这四维分别指的哪些维度呢,首先 H f × W f H_f\times W_f Hf×Wf 其实是我们原始图像特征尺寸,这个尺寸是必然存在的,那这个尺寸上的每一个位置有一个 D D D 维的深度向量,同时每一个 D D D 维的深度向量上的每一个位置其实包含了一个 C C C 维的特征,那是不是每一个 C C C 维的特征全都一样呢,我们在前面第二章基础模块也讲过,是不一样的,每一个位置的 C C C 维特征都乘上了不同的权重,比如我们预测出的在某个位置深度概率稍微大一点,所以权重就会高一点,其他位置权重就低一点,所以说我们这里得到的 Voxel Feature 是一个四维向量, C × D × H f × W f C\times D\times H_f \times W_f C×D×Hf×Wf 是一个四维特征

那这一块其实我们在前面第二章中讲过,2D 到 3D 的 View Transformer 是和我们讲过的一样的操作,我们得到 Voxel Feature 之后以前一般是怎么做的呢,是通过 Voxel Feature 我们直接拍扁相加可以将它聚合成一个完整的 BEV 特征,再输入到后续的 Head 去做目标检测任务。那我们得到 Voxel Feature 之后传统做法的问题是什么呢,损失了高度维度的信息嘛,也是 BEV-SAN 这篇文章强调的关键,那这种按照高度维度直接展平到 BEV 空间的方法忽略了目标的高度信息,会降低检测性能。所以作者提出了 Slice Attention 模块切片注意力,其实作者想通过切片注意力的操作可以尽可能的保留高度信息

我们在说 slice attention 之前,我们说切片是什么,为什么叫切片呢,那其实文中作者给出了切片的定义即 define the slice using the height range in BEV space,切片是一个高度范围,翻译过来就是说我们的 BEV 空间有一个高度范围,把 BEV 空间沿着高度范围切分成一片一片的子空间,比如说 -1 到 3 的一个 BEV 空间高度可以切分成 0 到 1,-1 到 2 等等很多个切片,作者说的切片是 BEV 空间的高度切片

我们在解说完切片含义之后,再来看一下原本的 Slice Attention 是怎么做的,如下图所示:

在这里插入图片描述

那 attention 我们已经强调过很多次了,attention 就是注意力嘛,需要额外关注那个部分,那比如说我们需要额外关注 -1 到 1 这个区间的高度信息,我们就给 -1 到 1 这个区间的高度赋高一点的权重,比如我们要关注 0 到 3 的,我们就给 0 到 3 这个高度赋高一点的权重。BEV-SAN 作者认为通过这样的方式可以尽可能的保留 BEV 空间的高度信息,那主要切片有哪种方式呢,一种叫全局切片,一种叫局部切片

  • 全局切片:覆盖 BEV 空间的整体高度范围(查全)
  • 局部切片:关注不同高度段的信息(查细)

全局切片是覆盖 BEV 空间完整高度的,比如说 BEV 空间原本高度是 0 到 3,全局切片是要完整覆盖 0 到 3 的,而局部切片是关注不同高度段的信息,比如说我关注 0 到 1,0 到 1 就是一个局部的高度段,那如何划分这个高度段呢,所以我们就引出了点云引导的采样策略。划分高度段并不是利用图像去划分的,而是什么呢,利用点云划分的,引入的点云采样策略也是我们把这篇文章归类在融合方案里面的原因之一,也就是说 BEV-SAN 这篇文章不仅仅用了图像的输入,虽然它的测试过程是依赖图像的,然而在引导策略上,切片方法上其实是利用了点云数据的

OK,我们看一下 BEV-SAN 的作者是怎么做这个全局切片和局部切片操作的,我们先简单总结下:

全局切片

  • 三种高度范围 [-6,4],[-5,3],[-4,2]
  • 由于 BEV 特征中的高度信息被视为通道维度,因此采用通道注意力机制自适应地聚合多个级别的全局切片

局部切片

  • 覆盖不同高度段地信息,[-6,-3],[-3,-2],[-2,-1],[-1,0],[0,2],[2,4]
  • 与全局切片类似,将通道注意力机制应用在局部区间,有效地聚合了不同高度的信息

在这里插入图片描述

对于全局切片其实是按照经验划分了三种不同的高度范围 [-6,4]、[-5,3]、[-4,2] 来作为全局切片范围,[-6,4] 这个高度范围我们可以一定程度上认为它包含整个空间的信息,那当然也包含了 [-5,3] 和 [-4,2] 两个高度范围,但它们所对应的 BEV 特征却有很大的差异,我们不仅要用 [-6,4] 的特征还要用 [-5,3] 和 [-4,2] 的特征,上图是 Slice Attention 详细的网络结构

我们说的全局切片其实是 Global Pooling 之后的过程,那在 Global Pooling 之后我们可以得到三种全局特征分别对应 [-6,4]、[-5,3] 以及 [-4,2] 三种不同高度范畴的特征,通过 Selector 选择器我们可以得到当前目标所需要的那个特征,通过选择器也就是我们所谓的注意力机制挑选合适的特征用于后续的检测任务。

那局部切片怎么做呢,对于局部切片而言需要关注不同高度段的信息,也就是说我们不同的目标分布在不同的高度段,如何提取不同高度段的信息是我们局部切片要做的事情,使其能够表征不同目标高度下细节信息。从技术上来讲,我们可以认为局部切片其实是全局切片的一个细分,局部切片是在全局切片的基础上希望能够更精细的提取到目标的局部表征,那当然是从高度这个维度来讲的

那么问题来了,对于 [-6,4] 这个高度而言它是一个很大的高度跨度,这么大的一个范围要切割成多少段,每段的范围要设置成多少才合理呢。那对于这个问题作者提了一个叫 LiDAR-guided sampling 点云引导的采样策略,通过不同高度范围内的点云分布来确定局部切片的高度,我们应该怎么切这个局部切片最好,是通过点云引导来做的。

那作者将 LiDAR 点云通过 3D 到 2D 的转换方式投影到 BEV 空间进一步沿着高度方向计算直方图,发现大多数的点云 LiDAR 其实是集中在 [-2,0] 这个高度范围内的,这个范围内大多数都是尺度比较小的目标,而在一些比较高的维度比如 [0,2] 的这个高度范围往往会集中一些尺寸比较大的目标。那这其实也比较好理解,因为尺度比较小的目标它本身就比较矮,比如像一些障碍物等等本身比较矮,所以说它往往能够集中的高度范围都比较低,那本身尺度比较大的目标我们认为它比较高,像卡车、公交车等等,所以它会往往分布在一个比较高的高度范围上。所以作者按照这个思路对于 [-6,4] 这个高度范围最终划分成了 6 个子范围包括 [-6,-3]、[-3,-2]、[-2,-1]、[-1,0]、[0,2]、[2,4] 以覆盖不同高度段的信息。那最后与全局切片类似,作者利用了通道注意力机制可以有效聚合不同高度的信息,每一个不同高度范围段提取出不同的特征,比如前面我们划分了六个高度,那我们对应特征其实也是六片,六片特征用哪个呢,是 Selector 决定的,它是一种自适应的机制

OK,我们讲完了 Slice Attention,我们再看一下上述如果通过了 Slice Attention 的模块之后我们得到什么东西呢,得到一个全局切片和局部切片的结果,也就是我们按照全局高度划分出的特征和局部切片的特征结果,那全局信息和局部信息要怎么用比较好呢,作者提出了一个多级特征融合模块

我们要去做融合才能充分的利用不同高度的信息,有效的融合这两个特征是后续检测的关键,因此作者在这里引入了注意力机制,所以我们一再强调注意力机制是 BEV 感知算法中非常重要的一个东西,那不仅是 BEV-SAN 这篇文章当中用到,后续我们也能看到很多文章当中全都引入了这个注意力机制,融合包括以下两个阶段:

  • 第一阶段:基于SE(Squeeze-and-Excitation)结构分别对局部切片和全局切片特征进行通道间的融合
  • 第二阶段:基于Transformer融合一阶段得到的全局特征和局部特征

在这里插入图片描述

第一个阶段叫 SE 模块,这个 SE 模块我们在前面第二章基础模块中也讲过,是什么呢,通道注意力机制,是进行通道间的加权,对重点通道我们重点关注,对其他通道,我们少关注一点。第二个阶段是基于 Transformer 的融合,Transformer 融合什么呢,融合我们一阶段得到的全局特征和局部特征,我们先来看下 SE 模块如下图所示:

在这里插入图片描述

前面第一阶段是融合的 SE 模块的通道间加权,从而关注通道间的关系,希望模型可以学到不同通道特征之间的一个重要程度,比如有的通道可能重要一点,那我们给的权重大一点,有的通道不太重要,权重小一点,以局部切片为例比如我们输入特征是 J × C × H e × W e J\times C\times H_e \times W_e J×C×He×We,后面的 H e × W e H_e \times W_e He×We 是特征尺寸, C C C 是特征通道数,前面的 J J J 是我们切片的个数,按照高度维度切分成多少片,切分成了总共 J J J 片,那这个 J J J 片的特征按照通道进行加权,我们可以得到最终的特征。我们认为我们得到的这个特征是融合了切片信息的特征,是按通道融合了切片信息的特征的,也就得到了后面所谓的 Local BEV Feature,同样按照这样的一个操作通过 SE 模块我们可以得到 Global BEV Feature 全局 BEV 特征,那有了全局 BEV 特征有了局部 BEV 特征,它们俩怎么能融合呢,通过 Transformer,如下图所示:

在这里插入图片描述

我们说过 Transformer 是判断特征和特征间的注意力,那我们这里一个输入是全局 BEV 特征,一个输入是局部 BEV 特征,那自然我们的 Transformer 是度量全局 BEV 和 局部 BEV 关系的,这个 Transformer 包含两个部分,一个是从 global 到 local 的,一个是从 local 到 global,从而进行局部特征和全局特征之间的交互,两个特征输出完事之后去进行相加可以得到最终的特征图。特征是什么空间的特征呢,是 BEV 空间的特征,拿这个 BEV 特征直接做表征我们就可以直接得到 3D 检测任务的结果了

3. 损失函数

OK,那我们再把 BEV-SAN 的整体流程梳理一遍

在这里插入图片描述

BEV-SAN 的输入是多视角的图像,输出是 3D 检测结果,具体而言呢,输入多视角图像通过一个 2D Encoder 得到图像特征,图像特征通过视角转换投影到 BEV 空间。那这个 BEV 我们怎么做,像传统的一样拍扁吗,那 BEV-SAN 不是,BEV-SAN 对 BEV 空间从高度维度进行切片,划分成了很多个子空间,每个子空间提供一种 BEV 特征,比如 [-6,4] 这个空间提供的是全局的 BEV 特征,比如像 [-3,-2] 提供的就是局部的 BEV 特征。通过这样的切片的方式提取到不同的 BEV 特征,然后考虑的事情就是怎么样把全局 BEV 特征和局部 BEV 特征融合在一起,通过一个通道注意力机制我们的 SE 模块一个 Transformer 的机制将两阶段特征进行融合从而得到我们最终的 BEV Feature,这个 BEV 特征是可以来做检测的,送入检测头之后可以直接得到检测结果从而完成 3D 检测任务

那我们说的点云数据用在哪呢,点云数据其实实现的是一个统计功能,也就是说我们现在不知道我们高度维度要怎么切分,以什么为参考呢,以点云数据为参考,所以说点云数据的引入其实是作为我们切分标准的,我们如何划分局部的 local 的切片范围,是以点云统计结果为准的

4. 性能对比

我们再来看一下性能,如下图所示:

在这里插入图片描述

BEV-SAN 文章在 nuScenes 数据集上做了验证的,nuScenes 数据集是包括很多的评价指标,我们之前也讲过其中的 mAP 和 NDS 是越高越好的指标,后续的 mATE 到 mAAE 其实是 Error 误差指标,那自然是越低越好的。那在表中作者详细对比了 nuScenes 数据集用到的评价指标,从性能上看与 BEVDepth 相比有一点点的提升

另外作者给了一个消融实验的结果,如下图所示:

在这里插入图片描述

表 3 对比了使用 CBGS 策略是什么样的,那使用这个策略之后它的基本性能均优于 BEVDepth,那表 4 是给了详细类别的检测结果,因为我们刚提到作者对于不同类别其实采用了不同的策略,它其实主要考虑的就是不同类别在不同高度上产生不同的效益,有不同的性能收益,所以说我们这里也看到作者给出了在不同类别下的性能评价标准,性能指标。相比 baseline 而言 SANet 对行人、自行车、交通锥,障碍物等类别的性能都是有所提升的,

我们再看一个偏定性的可视化结果图,如下所示:

在这里插入图片描述

BEV-SAN 它主要是在行人、自行车类别上性能提高得比较多,上图中黄色圈中其实就是行人,黄色圈中以前可能是漏掉了比如上面图中的 Baseline 行人目标是检测不到的,在 BEV-SAN 中行人目标是很好的感知到的,我们可以看到它的 Baseline 是没有行人这个检测框的

我们再来看下其他的消融实验,如下图所示:

在这里插入图片描述

表 5 它讨论的是两种切片方式的差距一种是 Global 一种是 Local 的,就是我们前面提到的全局和局部切片的方式对性能的一个影响,可以发现两种都用的话性能是最好的到了 0.366,另外在表 6 中作者又继续验证了 LiDAR-guided sampling 也就是说我们基于点云采样的策略性能有什么优势,点云采样的策略其实是一种统计的结果,所以这里作者叫统计学的一个方案,统计学的方案通过点云统计结果之后,按照点云统计结果进行切片之后性能有提升了,主要是 NDS 的提升 mAP 其实没啥变化。表 7 讨论了不同的融合策略,我们知道我们得到了全局特征,得到了局部特征,怎么做融合也是一个关键性的问题,那所以作者在这里其实讨论了不同的融合策略,比如像 SE、SA-SE 等等

那最后我们再简单聊一下 BEV-SAN 模型的局限性和未来可能改变的方向,我们先简单总结下:

SAN局限

  • 有参数量和计算耗时的提升,构建局部特征和全局特征带来较大的耗时
  • SAN 对于深度值以及深度分布比较敏感

SAN 未来可能改进的方向

  • 设计计算较小损耗的注意力模块,提取全局和局部特征
  • 如何将 SAN 网络应用到其余的 BEV 检测框架中,比如 BEVFormer?

那就局限性而言,首先要想到的是模型的参数量有没有减少,我们在做一个算法时首先要考虑是不是好落地,我们也不能完全从论文角度出发,我们得考虑它的实用性,落地方案的可行性。首先 SAN 一个问题就是模型参数量的变大耗时的提升,为什么这么说呢,那本身 BEV 空间按照高度维度我们拍扁一次就够了,按照 Slice Attention 的做法划分成那么多的切片,那就意味着我们在不同的切片上得重新拍扁,那耗时显然就上来了,所以说尤其是在局部特征和全局特征构建上耗时是比较大的

另外一个想说的事情是什么呢,是它对于深度的分布比较敏感,我们这里说的深度分布是沿高度方向的,那不同目标不同区域如果高度分布易变性能就会变化的很厉害,那比如说我当前数据集可能车比较多,而且都是属于那种很高的车,它的一个深度分布就发生了变化。那比如另一个数据集人比较多或者说平面物体比较多,它的高度可能分布得比较矮,那我们这样是不是得重新统计数据集的一个变化规律才能得到一个比较好的切片结果呢。所以说 BEV-SAN 另一个明显的局限性其实在于鲁棒性不太够

那从改变方向来看其实也是可以从它的局限性出发,那既然耗时比较高,我们会想能不能设计损耗比较小的注意力模块提取全局和局部特征呢,它本身的思路其实是沿用了切片的思路,那这个思路其实在任何框架当中都是使用的,所以说它能不能做一个 Plugin 的模块也就是我们即插即用的模块,可以比较方便的嵌入到其他 BEV 框架当中去使用,那这其实也是一个通用性的拓展

OK,BEV-SAN 就和大家一起学习这么多,我们下节课也是一个非常重要的内容叫 BEVFusion

总结

这节课程我们学习了一种多模态融合感知方案叫 BEV-SAN,BEV-SAN 的作者发现不同类的目标在不同高度下性能存在明显差异,那所以他其实考虑的就是充分利用不同目标的高度信息来提升检测性能,缓解将 BEV 直接拍扁引起的对高度维度特征的损失。BEV-SAN 的核心点是 Slice Attention 也就是所谓的切片注意力,BEV-SAN 的作者通过全局和局部两种切片方式来尽可能多的保留 BEV 空间的高度信息,其中局部切片采用了 LiDAR-guided sampling 点云引导采样策略,通过统计不同高度范围内的点云分布来确定局部切片的高度。有了全局和局部特征后通过 SE 和 Transformer 多级特征融合模块对二者进行融合得到最终的 BEV 特征。那这篇文章的局限性主要在于其全局和局部特征构建耗时大不利于落地,其次它对深度分布比较敏感鲁棒性不够。

OK,这就是 BEV-SAN 的全部内容了,下节我们分享另外一篇优秀的多模态融合感知方案 BEVFusion,敬请期待😄

下载链接

  • 论文下载链接【提取码:6463】
  • 数据集下载链接【提取码:data】

参考

  • [1] Chi et al. BEV-SAN: Accurate BEV 3D Object Detection via Slice Attention Networks

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】逻辑回归怎么做多分类

目录 一、逻辑回归模型介绍 1.1 逻辑回归模型简介 1.2 逻辑回归二分类模型 1.3 逻辑回归多分类模型 二、如何实现逻辑回归二分类 2.1 逻辑回归二分类例子 2.2 逻辑回归二分类实现代码 三、如何实现一个逻辑回归多分类 3.1 逻辑回归多分类问题 3.1 逻辑回归多分类的代…

IT领域的鄙视链现象分析

1 前言 在当今快节奏的科技领域,IT行业内部不可避免地存在着一种微妙而又显而易见的“鄙视链”。这种链条似乎在技能、编程语言、框架和工具的选择上形成了一种看似无休止的等级制度,而每个人都试图站在这个链条的顶端。 在这个看似平等开放的行业中&a…

Python:核心知识点整理大全12-笔记

目录 6.3.3 按顺序遍历字典中的所有键 6.3.4 遍历字典中的所有值 6.4 嵌套 6.4.1 字典列表 aliens.py 6.4.2 在字典中存储列表 pizza.py favorite_languages.py 注意 往期快速传送门👆(在文章最后): 6.3.3 按顺序遍历字…

MVC Gantt Wrapper:RadiantQ jQuery

The RadiantQ jQuery Gantt Package includes fully functional native MVC Wrappers that let you declaratively and seamlessly configure the Gantt component within your aspx or cshtm pages just like any other MVC extensions. 如果您还没有准备好转向完全基于客户端…

代码随想录算法训练营第四十六天 _ 动态规划_背包问题总结。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 本文大多数内容引用自代码随想录 60天训练营打卡计划! 学习内容: …

实现Django Models的数据mock

目录 一、创建测试数据 二、使用随机数据 三、使用第三方库生成数据 四、编写测试用例 五、总结 在 Django 中,Model 是用于定义数据库表的结构的类。有时候,我们需要在测试或者开发过程中,模拟 Model 的数据,而不是直接从数…

AWS Ubuntu设置DNS解析(解决resolve.conf被覆盖问题)

众所周知: Ubuntu在域名解析时,最直接使用的是/etc/resolve.conf文件,它是/run/systemd/resolve/resolve.conf的软链接,而对于刚装完的ubuntu系统,该文件的内容如下 ubuntuip-172-31-36-184:/etc$ cat resolv.conf #…

React-hooks

1 hooks使命 #逻辑组件复用 逻辑与UI组件分离 React 官方推荐在开发中将逻辑部分与视图部分结耦,便于定位问题和职责清晰 函数组件拥有state 在函数组件中如果要实现类似拥有state的状态,必须要将组件转成class组件 逻辑组件复用 社区一直致力于逻辑…

一文读懂MySQL基础知识文集(8)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

本地团购分销--在您身边的省钱小技巧!APP小程序H5三端源码交付,支持二开!

近年来,本地团购分销市场崛起,给消费者带来了更多选择。本地团购分销平台利用互联网和移动支付技术,将商家和消费者相连,为消费者提供了一站式购物体验。消费者不再需要费尽心思去寻找物美价廉的商品,只需轻轻一点&…

JavaScript常用技巧专题二

文章目录 一、前言二、生成随机字符串三、转义HTML特殊字符四、单词首字母大写五、将字符串转换为小驼峰六、删除数组中的重复值七、移除数组中的假值八、获取两个数字之间的随机数九、将数字截断到固定的小数点十、日期10.1、计算两个日期之间天数10.2、从日期中获取是一年中的…

Python开发运维:Python项目发布到K8S集群

目录 一、实验 1.Python项目发布到K8S集群 一、实验 1.Python项目发布到K8S集群 (1)获取应用程序代码 #把hello-python.tar.gz压缩包上传到k8s控制节点master1的root下,手动解压 tar zxvf hello-python.tar.gz (2&#xff0…