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

news2024/11/27 12:56:54

目录

    • 前言
    • 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.coloradmin.cn/o/1300712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

弧形导轨的结构特点

弧形导轨,顾名思义就是滑座沿着导轨做弧线运动,在工业自动化的许多运用中,直线运动很遍及,但是有些运用,需求弧线运动,或者两个相交或平行的直线运动,需求通过弧线运动衔接起来,那么…

qt可以详细写的项目或技术

1.QT 图形视图框架 2.QT 模型视图结构 3.QT列表显示大量信息 4.QT播放器 5.QT 编解码 6.QT opencv

高级Linux监控堡垒机学习指南

高级Linux监控堡垒机学习指南 在现代复杂的网络环境中,安全性和监控是系统管理的核心关注点。Linux监控堡垒机作为一种安全管理工具,不仅可以追踪系统活动,还能提供对服务器和网络资源的高级监控。本文将深入探讨高级Linux监控堡垒机的学习内…

windows端口被占用怎么办 怎么关闭那个占用的端口

目录 这是出现的情况怎么解决了1.请打开这玩意2.输入下面---查询 先关端口的信息根据id获得服务 上图的8888 对应的ip 上图就是134243.杀死进程134244.重启服务 这是出现的情况 怎么解决了 1.请打开这玩意 2.输入下面—查询 先关端口的信息 netstat -ano过滤信息查询想要的端…

用 Python 自动创建 Markdown 表格

更多资料获取 📚 个人网站:ipengtao.com Markdown表格是文档中整理和展示数据的重要方式之一。然而,手动编写大型表格可能会费时且容易出错。本文将介绍如何使用Python自动创建Markdown表格,通过示例代码详细展示各种场景下的创建…

Python列表的排序方法:从基础到高级

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python列表的排序方法:从基础到高级,全文3400字,阅读大约10分钟。 在Python中,列表是一种常用的数据结构,而对列表…

排序算法之六:快速排序(非递归)

快速排序是非常适合使用递归的,但是同时我们也要掌握非递归的算法 因为操作系统的栈空间很小,如果递归的深度太深,容易造成栈溢出 递归改非递归一般有两种改法: 改循环借助栈(数据结构) 图示算法 不是…

P1317 低洼地题解

题目 一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地? 如图:地高变化为 [0,1,0,2,1,2,0,0,2,0]。 输入输出格式 输入格式 两行,第一行n, 表示有n个数。第…

【Unity动画】什么是任意状态(Any state)

(Any state)可以从某个状态A直接切换到另一个状态 B\C\D\E\F 比如A到C的过渡,直接设置从Any state 到C的过渡线触发参数即可。而不需要让A到C直接在连接,同样,B到C之间也无需直接链接。 这样设计是在每一个动画之间都…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本课目标(Objective) 掌握CSS三大特性理解什么是盒子模型掌握内边距padding的用法掌握外边距margin的用法 1. CSS的层叠,继承,优先级 1.1 CSS层叠 层叠:是指多个CSS样式叠加到同一个元…

Java 类加载器和双亲委派机制原理剖析

目录 一、类加载器(ClassLoader)二、四种类加载器之间的关系三、双亲委派机制3.1、为什么要设计双亲委派机制3.2、类加载器loadClass(String name) 源码解析3.3、打破双亲委派机制 一、类加载器(ClassLoader) JVM的类加载机制是按需加载的模式运行的,也就是代表着&a…

万户 ezOFFICE convertFile 文件读取漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Linux环境下socket本地通信

最近项目有用到了socket本地通信,故复习一下。之前都是基于本地虚拟机的ip地址通信的,现在项目,Linux单板上面有2个进程需要通信,故用到了本地socket通信,主要其实就是用了sockfd,文件描述符,也叫句柄。 服…

MySQL概述-安装与启动

数据库相关概念 MySQL数据库 下载地址 MySQL :: Download MySQL Installer (Archived Versions) 启动方法 启动密令:net start mysql80 停止密令:net stop mysql80 客户端链接方法 注意用系统自带的命令行工具执行指令需要设置环境在高级系统设置中…

Vue 创建虚拟DOM元素的几种方式和实际应用。

目录 创建虚拟DOM元素的方式 创建一个简单的元素: 创建一个带有属性的元素: 创建一个带有子元素的元素: 创建一个带有事件监听器的元素: 创建一个Vue组件 创建一个带Props的组件 创建一个带Slot的组件 实际应用 创建虚…

Python源码17:使用海龟画图turtle画五星红旗

turtle模块是一个Python的标准库之一,它提供了一个基于Turtle graphics的绘图库。Turtle graphics是一种流行的绘图方式,它通过控制一个小海龟在屏幕上移动来绘制图形。 turtle模块可以让您轻松地创建和控制海龟图形,从而帮助您学习Python编…

SpringSecurity6 | 登录成功后的JSON处理

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

Gilisoft Video Editor——迈出剪辑的第一步

今天博主分享的是又一款剪辑软件——视频剪辑手(GiliSoft Video Editor),对剪辑视频感兴趣的小伙伴千万不要错过。这是一款专门用于视频剪辑的软件,功能比较简单,相比于专业的pr是比不了的,但是制作一些简单…

内存映射机制

什么是内存映射 Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟区域的内如,这个过程称为内存映射。 代码示例: /******************************************************************** > File Name: mmap…

如何查询川菜食材配料的API接口

在当今的美食文化中,菜谱不只是一张简单的食谱,更是了解美食文化和饮食知识的重要途径。然而,若没有准确的食材配料,烹制出的每道菜品都将难以达到完美的味道。因此,为了更好地满足人们对于菜谱和食谱的需求&#xff0…