文章地址:[2206.09474] 3D Object Detection for Autonomous Driving: A Comprehensive Survey (arxiv.org)
这篇文章紧接上一篇文章:自动驾驶3D目标检测综述(一)-CSDN博客从第三章开始介绍。
目录
第三章 基于激光雷达的3D目标检测
本章主要介绍基于激光雷达的3D目标检测方法,这也是目前最常使用的方法。主要会介绍一些算法的模型(有基于点的、基于网格的、基于点体素的和基于范围的)。之后学习3D目标检测器的学习目标,有基于锚点(anchor)的框架和无锚点的框架以及基于雷达的3D目标检测的辅助任务。
首先下图展示了基于激光雷达的目标检测方法时间序列图:
可以看到基于网格(Grid)的方法最早在2015年出现,也就是vote3D;接着是基于点(Point)的方法,即PointRCNN和IPOD;之后是基于范围(Range)的方法LaserNet;最后出现的是基于点体素(Point-Voxel)的方法:PVCNN,在2019年才被提出。
一、3D目标检测的数据表示
我们生活上拍摄的照片都是由大量的像素组成,这些像素排列都是均匀的:
从上面的图我们可以看到,照片无非就是由许许多多的像素点组成的(也就是图中一个个小格子),分辨率就是像素点数量的表示:像素点越小越多,分辨率越高,图片越清晰。而点云是一种较为稀疏和不规则的表示,通常需要对专门设计的模型进行特征提取:
可以看到,点云图是由大量的点组成,这里的点是一个个小圆点,而不是像像素点那样的方格点。可以看到,这里的点都非常密集、紧凑,这种图像包含了3D信息但没有RGB的值。RGB代表图像的三元色(Red Green Blue三种通道颜色的值)。要想使用点云图就需要对其进行处理,而不是直接使用卷积网络。我们的目标就是找到这样一个能够有效处理点云图像并且尽可能保持高效率的模型。
1、基于点的3D目标检测
1.1 整体架构
上图展示了基于点的3D目标检测方法的简单流程。输入的点云数据首先通过基于点的骨干网络进行点的逐级采样,其中特征被被点云算子学习,之后下采样特点和特征用于预测3D边界框。下采样实际就是卷积神经网络的池化操作(最大池化或平均池化):
上面展示的最大池化的操作,通过下采样减少了特征和参数的数量,且降低了卷积网络计算的复杂度;实际上就是过滤作用小、信息冗余的特征,保留关键信息(而信息关键与否就体现在对应像素的value是否被激活的更大。
上图是基于点云采样和特征学习的基于点的目标检测方法分类。
1.2 点云采样
上图展示的方法从左到右分别是最远点采样(FPS)、基于分割的采样以及基于体素的采样。
最远点采样是目前最为广泛使用的方法,主要方法是从初始点开始依次选取离该点最远的点收集采样,这样可以保证最大范围内采样点云集,这种方法也可以确保采样的均匀性和代表性。PointRCNN是最早采用这种方法的网络;
基于分割的采样通常是现将图像利用分割算法分割成几个区域,通常每个区域对应着一个对象或者背景,再将每个分割区域中的点进行收集采样;
基于体素的采样通常首先对整个点云数据计算边界框,确定所有点云的分布范围,再根据需求和分辨率大小对整个边界框进行划分,这样整个点云数据就被划分成一个个小立方体(也就是体素),每个体素内包含的点云数量不一定相同。
1.3 特征学习
上图展示的三种特征学习的方法,从上至下分别是抽象集合、图神经网络和变换器。抽象集合对于每一个采样的点(图中红色的圈)计算其与每个其他输入点的距离,并选择距离小于某个阈值的邻居点作为该点的的一个集合,图中红色虚线圈内的蓝色点就是通过计算得到的邻居点。对每个集合内的点使用多层感知器等神经网络进行特征提取,生成相同长度的特征向量(图中蓝色长方体代表着n维的特征向量),这些向量以邻居点的坐标、颜色、法线等作为输入。将着四个向量通过最大池化操作生成最终的特征,这个过程叫做聚合,图中红色长方体代表生成的最终特征。图神经网络中不仅有节点还有边的概念存在,如图所示的代表点(采样得到的点,红色圈)及其邻居点之间都有以双向箭头表示的边存在,邻居点和各边都具有特征向量:点特征向量描述节点的属性或状态,而边特征向量描述节点之间的关系或交互行为。在得到四个【这里三条边却有四个权重 待博主进一步学习解答】初始化的特征向量(w1 w2 w3 w4)之后使用图算子进行处理(Graph Operator),图算子可以进行多种操作:1、节点的增删改2、聚合邻居节点以更新节点特征表示或者应用变换函数转换节点特征向量3、实现图算法,执行图遍历算法等等 4、构建图神经网络层,将节点特征向量和边信息输入提取节点深层特征表示。经图算子处理后得到了最终的特征向量(红色长方体)。变换器在接受输入图节点特征后将其转换成固定维度的向量(嵌入操作),在通过三组线性变换分别得到查询(Query)、键(Key)、值(Value)向量,计算公式为:
,,
其中、、是不同的可训练权重矩阵,Q、K、V分别表示查询、键和值矩阵。对于每一个查询向量和键向量计算相似性得分:
得分代表了每个节点和其他节点的相关性。为了稳定梯度和避免极大的数值,通常将点积的结果score除以一个缩放因子,是键向量的维度。最后对每个查询位置的得分应用Softmax函数,得到其他元素注意力权重:
根据计算得到的权重对所有值向量加权求和得到该位置最终输出向量:
这里就是Transformer最终输出的特征向量,综合了输入中其他节点的信息。这个特征向量会根据输入节点的全局信息进行动态调整,从而捕捉输入序列的长距离依赖关系。
1.4 预测
最后是预测模块,从候选的点(采样点)和特征中预测3D的目标。
1.5 数据处理流程
接下来是整个流程的数据处理过程图:
下面对每个部分进行单独介绍
1.6 输入
首先我们的输入是N个点云数据,每个点都是三维的,即笛卡尔坐标系的(x,y,z)三个参数,代表该点在空间中的位置。
1.7 骨干网络
接下来进入骨干网络进行处理,主要就是进行采样和特征学习,首先通过一次采样获得个三维点云(相当于点数量减半),接着进行特征学习得到了个C1维度的点(邻居点和采样点共同生成最终的一个输出特征)最大池化操作一般不改变数据维度,但图神经网络和变换器不一定,对这些点再次进行采样,点数减半变为,接着再次特征学习变为个C2维度的点。
1.8 预测头
将主干网络输出的个C3维度的点作为预测头的输入,生成M个C3维度的候选点。
1.9 输出
最终输出了M个七维的点,即(x,y,z,l,w,h,,class)。
1.10 潜力和挑战
基于点的检测器主要受到上下文点数量和特征学习中采用的上下文半径两个因素的限制。上下文数量过多能够获得更多表示能力,但也增加了更多的内存消耗。球查询中的上下文半径也是一个很重要的因素,半径太小上下文信息不够,半径太大细粒度3D信息可能会丢失。故这些因素都必须仔细确定来平衡检测模型的有效性和效率。
点云采样通常复杂且耗时较长,从而使得推理时间增加。可以考虑采用随机均匀采样进行高效率并行进行。但是前面讲过,激光雷达的生成的点云通常不是均匀分布的,这就导致了在进行随机取样的时候可能倾向在高点云密度的区域采样,而稀疏点云的区域欠采样。这样比最远点采样的性能更差。最远点采用虽然能够得到更加均匀的采样结果但本质上只是一种顺序算法,不能够高度并行。因此,最远点采样耗时且不适合实时检测的算法。
2、基于网格的3D目标检测
2.1 整体架构
上图展示了基于网格的3D目标检测算法的网络架构。输入数据首先被栅格化为离散的网格表示,即体素(Voxel)、柱子(pillar)和鸟瞰图(BEV)特征图,之后用传统2D卷积神经网络或3D稀疏卷积神经网络从网格中提取特征。最后从BEV中检测到3D对象。主要分为两个部分:基于网格的表示和基于网格的神经网络。
基于网格的检测器分类如图所示。
2.2 基于网格的表示
网格表示主要有三种:体素、柱子和鸟瞰图,下面分别进行介绍。
2.3 体素表示
检测空间被规则化的栅格化之后形成的就是体素网格。
其架构如图所示。由于点云分布的稀疏性导致了大部分的体素中点云为空,即不包含点。而在实际的应用中,只有非空的体素网格才会被存储下来并用作特征提取。在VoxelNet中,作者提出了新的体素编码模式VFE,可以参考我的这篇博客:VoxelNet文献理解-CSDN博客,里面有介绍VFE的具体实现。此外,也有人对其进行了改进:多视图的体素和多尺度的体素,一个是通过不同视图的动态体素化和融合,另一个是生成不同尺度的体素或使用可重构的体素。
2.4 柱子表示
柱子的表示可以看作是一种特殊的体素,也是将原有的点云空间进行划分,但其体素在垂直方向上是无限的。相当于y坐标无限大。
柱子特征可以通过 PointNet 从各种点进行聚合,然后分散回构建 2D BEV 图像进行特征提取。这里可以参考这篇博客,其采用的就是经典的柱子表示方法:PointPillars文献理解_pillarnet复现-CSDN博客
2.5 BEV特征图
鸟瞰特征图是一种密集的2D表示,其中每个像素对应一个特定的区域,并对该区域的点信息进行编码。通过将3D的特征投影到鸟瞰图中,我们就可以从体素和柱子中获得BEV特征图(如体素表示和柱子表示的网络架构图最后一步所示),也可以通过直接从原始点云数据中整理像素区域点的统计信息获得BEV特征图。
如图所示,该像素区域内包含四个点,将统计信息存入该点后再回归该像素区域位置,对每个区域进行这样的操作后就形成了最终的BEV特征图。
2.6 基于网格的神经网络
基于网格的神经网络主要有两种:针对BEV特征图和柱子表示的2D卷积神经网络以及针对体素表示的3D稀疏神经网络。
2.7 2D卷积神经网络
传统的2D卷积神经网络可以应用与BEV特征图以鸟瞰图视角检测3D目标,大部分的2D网络架构都是改变自一些2D目标检测中成功的架构。
上面是Region Proposal Network(RPN)的网络架构图。
2.8 3D稀疏神经网络
3D稀疏卷积神经网络主要基于两个专门的3D卷积算子:稀疏卷积和子流形卷积,该网络只在非空体素上进行高效3D卷积。
以上是一个“子流形”膨胀的例子,从左至右分别是原始曲线、应用权重为1/9的常规3×3卷积结果和再次应用相同卷积的结果。这个例子可以看到常规卷积大大减少了每个卷积层特征的稀疏性,即非空的点变多,稀疏性更差了。子流形稀疏卷积类似于OctNets,因为它们保留了稀疏结构。然而,与OctNets不同的是,空的空间在子流形稀疏卷积的实现中没有计算开销或内存开销。
Engelecke、Najibi等人在整个体素空间执行标准3D卷积,稀疏卷积算子非常有效,可以获得实时的推理速度。SECOND算法也是一项开创性的工作,使用了基于GPU的哈希表实现了两个稀疏算子,构建稀疏卷积网络提取3D体素特征,这也成为基于体素的检测器中最广泛使用的骨干网络。
2.9 不同网格表示优缺点
与 BEV 特征图和柱子等 2D 表示相比,体素包含更多的结构化 3D 信息。此外,深度体素特征可以通过 3D 稀疏网络进行学习。然而,3D神经网络带来了额外的时间和内存成本。BEV特征图是最有效的网格表示,它直接将点云投影到2D伪图像中,而不需要专门的3D算子,如稀疏卷积或柱编码。2D检测技术也可以无缝地应用于BEV特征图,而无需太多修改。基于 BEV 的检测方法通常可以获得高效率和实时推理速度。然而,简单地总结像素区域内的点统计信息会丢失太多的3D信息,与基于体素的检测相比,这会导致检测结果不准确。基于柱子的检测方法利用 PointNet 对支柱单元内的 3D 点信息进行编码,然后将特征分散回 2D 伪图像中进行有效检测,平衡了 3D 对象检测的有效性和效率。
2.10 潜力和挑战
所有的网格表示方法都有一个关键的问题:如何选取合适大小的网格单元。网格表示本质上就是将连续点的坐标转换为离散的网格索引,是一种点云离散格式。这种量化过程没法避免丢失部分3D信息,这种有效性也在很大程度上取决于网格单元大小的选取:网格较小,网络高分辨率,也会保持更高细粒度的细节,然而过小也会导致2D网格表示(如BEV和柱子表示)内存消耗二次增加。对于3D网格表示则更加严重。因此如何平衡网格大小和内存增加的方法仍然是基于网格的3D目标检测面临的一个重大问题。
3、基于点体素的3D目标检测
3.1 整体架构
上图展示了基于点体素的3D目标检测网络架构图。这种方法主要使用一种混合的框架,分别使用基于点和体素的架构进行3D目标检测。这种方法主要分两类:单阶段检测框架和两阶段检测框架。
上图展示了两类方法的分类。
3.2 单阶段点体素检测
上图是单阶段点体素检测框架,可以看到从点云数据中分别获取一份体素化的点数据以及原始点数据,体素化的点通过基于体素的主干网络进行处理,最后生成融合BEV特征图,另外也同原始点数据进行体素到点的融合,经过一次基于点的主干网络处理后再次进行体素到点的融合。BEV特征图经过检测头生成3D目标检测框,而处理后的融合点数据经过点的头处理网络完成辅助任务。
3.3 两阶段点体素检测
两阶段点体素检测器会针对不同检测阶段采用不同的数据表示。在第一阶段采用基于体素的检测框架生成一组3D目标的建议;在第二阶段,首先从输入点云数据中采样关键点,通过新的点算子从关键点进一步细化这些3D的建议。PV-RCNN就是一项开创性工作,其采用SECOND算法中稀疏嵌入式卷积网络检测作为第一阶段的检测器,并提出了Rol-grid pooling算子进行第二阶段的细化。
在第一阶段,体素化的点云经过单阶段的3D目标检测器生成3D目标的建议框以及关键点,即通过这一步进行关键点的采样。
在第二阶段,对关键点建议进行增强,采用RoI-Grid池化对生成的边界框进行改进。
3.4 潜力和挑战
基于点体素的方法可以从点获得的细粒度3D形状以及结构信息和体素带来的计算效率中获益。但对于混合点体素的主干网络,点和体素的特征融合通常比较依赖体素到点的和点到体素的转换机制,这种机制会带来不可忽视的时间成本。特别是对于两阶段点体素的检测框架来说,有效聚合3D建议框的点特征是非常重要的挑战,现有的模块和操作符大多都是非常耗时的。总而言之,基于点体素的方法相较于纯体素的方法在检测精度方面获得提升,但同时也具有推理时间增加的代价。
4、基于范围的3D目标检测
4.1 整体架构
范围图像(range-image)是一种密集且紧凑的2D表示,其中的每个像素都包含了3D距离的信息而不是RGB值信息。基于范围的检测方法主要从两个方面解决检测问题:设计针对距离图像的心模型和算子,并选择合适的图像进行检测。其方法分类如下:
4.2 基于范围的检测模型
由于范围图像是类似RGB图像一样的2D表示,基于范围的3D目标检测器就可以很自然地借用2D目标检测的模型处理范围图像。LaserNet开创性地利用深层聚合网络(DLA-Net)获取多尺度特征,并从范围图像中检测3D目标。其他也有很多作者采用2D目标检测架构,例如U-Net、RPN和R-CNN。
4.3 基于范围的算子
由于范围图像的像素中包含了3D的距离信息而非颜色值(RGB),所以在传统2D网络架构中标准卷积算子对于基于距离的检测并不是最优的方法,滑动窗口中的像素可能在3D空间中彼此相距较远。现在也有部分工作采用全新的算子有效从范围像素中提取特征,包括范围扩张卷积、图算子以及元内核卷积。
4.4 基于范围的检测视图
范围图像是从范围视图(RV)从获取的,在理想情况下,范围视图是点云数据的球面投影。所以直接从范围视图中检测3D目标就成为了基于范围方法的一个很好的解决方案。然而,从范围视图检测将不可避免地受到球面投影带来的遮挡和尺度变化问题的影响。不过,目前也有很多方法和工作用来避免这样的问题,如使用圆柱形视图(CYV)、范围视图、鸟瞰图(BEV)或点视图(PV)的组合。
4.5 潜力和挑战
虽然传统的2D卷积适配基于范围的方法,且特征提取过程也非常高效,但与鸟瞰图检测相比,范围视图检测容易受到遮挡和尺度变化的影响。从鸟瞰图中提取范围视图和目标检测成为基于范围的3D目标检测最实用的解决方法。
二、3D目标检测学习目标
3D目标相对于整个检测范围而言比较小,在3D检测中需要增强对小物体定位的特殊机制。另一方面,考虑到点云是稀疏的,物体通常具有不完整的形状,准确估计三维物体的中心和大小是一个长期存在的挑战。
1、基于锚点的3D目标检测
锚点(anchors)是能够置于3D空间中具有固定形状的预定义长方体,一般用于生成预测框和检测框这些。3D目标就是基于这些与地面实况具有高交并集(IoU)的正锚点(positive anchors)来进行预测的。本节主要介绍锚点配置和损失函数。
1.1 基于锚点学习目标说明
在左边这张图中可以看到在方格中红色虚线的部分是预定义好的锚点,蓝色方框是地面实况的边界框(即真实世界的目标范围),其中蓝色填充的两个方格是正样本,其余空白方格是负样本。正样本位于真实边界框和预定义锚点的中心区域,我们的预测框也是从这里开始进行预测的。方法分类如下图所示:
1.2 预备知识
地面实况目标可以表示为[,,,,,,]以及分类。锚点[,,,,,,]可以用于生成预测的3D目标[x,y,z,l,w,h,θ],预测类概率为p。
1.3 锚点配置
基于锚点的3D目标检测方法通常从鸟瞰图视角检测3D目标,在这种视角下,3D锚点框放置于BEV特征图的每一个网格单元中。3D锚点针对每种种类的目标都是固定大小的,因为每种种类的物体通常形状大小相似,不会有太大差别。比如说,人的高度从1~2米不等,但不可能达到十几米或更大,所以一般种类人的锚点框取1-2米之间的一个值即可。
1.4 损失函数
基于锚点的方法采用的是分类损失来学习正负锚点,回归损失用于学习基于正锚点物体的尺寸和位置。另外,用于学习目标航向角,损失函数就是这几项损失之和:
在各种方法中,损失函数的选择多种。分类如下:
1.5 潜力和挑战
基于锚点的方法受益于相同种类的3D目标拥有类似形状这样的先验知识,所以它在3D锚点的帮助下可以生成精确的目标预测。但由于3D目标在检测范围方面相对较小,确保完全覆盖整个检测范围需要大量的锚点,例如在kitti数据集中使用了七万个锚点。另外,对于一些极小的目标如行人和骑行者而言,使用这种基于锚点的方法是非常困难的。考虑到锚点通常放置于每个网格单元的中心,如果网格单元过大并且单元格中的目标较小。该单元格中锚点的交并集比例(IoU)较小,这也将阻碍到训练的过程。
2、无锚点的3D目标检测
无锚方法消除了复杂的锚设计,可以灵活地应用于各种视图,例如鸟瞰图、点视图和距离视图。无锚学习目标示意图如下图所示,基于锚点的方法和无锚点方法的主要区别在于正样本和负样本的选择。下面将从正分配的角度介绍无锚点的方法,包括基于网格、基于点的、基于距离的和集合到集合分配。
在无锚点的方法中,网格单元中不会实现画出预定义的锚点。
无锚点分类方法如下图:
2.1 基于网格的分配
与基于锚点方法依赖锚点的IoUs来决定正负样本不同的是,无锚点方法采用不同的基于网格的分配策略为BEV网格单元、柱子和体素决定样本。
2.2 基于点的分配
基于点的分配示意图如上,大多数基于点的检测方法都采用无锚点和基于点的分配策略,这中策略首先分割所有点并选择在3D目标内部或附近的前景点作为正样本。最终从这些前景点中学习3D边界框。这种前景点分割策略也被应用于大部分基于点的算子中,也实现了如中心度分数的提升。
2.3 基于范围的分配
无锚分配也可以用于范围图像。一种常见的解决方案是选择 3D 目标内的距离像素作为正样本。与其他回归目标基于全局 3D 坐标系的方法不同,基于距离的方法采用以对象为中心的坐标系进行回归。
2.4 Set-to-set 分配
这种分配方法由DETR(Carion等人实现)提出,这是一种影响力较大的2D检测方法。Set-to-set策略能够通过Hungarian算法自动为预测分配各自的基本事实。
2.5 潜力和挑战
无锚点的检测方法放弃了复杂的锚点设计,在分配策略中也表现出了更强的灵活性。通过无锚点的分配方式,可以直接在各种表示上预测3D目标,包括点、距离像素、体素、柱子和BEV网格单元。由于没有引进额外的先验形状,学习过程也在很大程度上简化了。在所有的无锚点方法中,基于中心的方法在检测小目标中展现了巨大的潜力并且在常用的测试基准上相比其他基于锚点的方法表现突出。
尽管有这些优点,这种无锚点的方法也面临一项常见的挑战:正确地选择生成3D目标预测的正样本。相比只选择具有高IoU的基于锚点的方法,无锚点方法也有可能会选择那些产生不准确的目标预测的部分不好的正样本。因此设计一种能够过滤这些不好的正样本的方法对无锚点方法来说很重要。
3、辅助任务的3D目标检测
许多方法采用辅助任务来增强空间特征且为准确的3D目标检测提供隐式指导。常用辅助任务包括语义分割、交并集预测、目标形状完善以及目标部分评估。辅助任务3D目标检测方法分类如下:
3.1 语义分割
语义分割在三个方面有助于3D目标检测:前景分割能够提供目标位置的隐式信息,逐点前景分割广泛应用于大部分基于点的3D目标检测器的建议框生成;空间特征可以通过分割得到增强;语义分割可以视作一个过滤背景样本和使3D目标检测更高效的预处理步骤。
3.2 交并集比(IoU)预测
交并集比可以视作一个有效修正目标置信度得分的信号。Zheng等人提出了一种辅助分支预测每个检测到的3D目标的IoU分数,在推理的过程中,来自传统分类分支的初始可信度得分被进一步修改:,其中超参数β控制抑制低交并集比预测和增强高交并集比预测的程度。随着交并集比的修正,高质量的3D目标也更容易被选为最后的预测。相似的设计也同样应用于Zheng的文章中。
3.3 目标形状完善
由于激光雷达传感器的性质,远处目标通常只能在表面上收到很少的几个点,所以3D目标通常稀疏且不完整。一个最直接增强检测性能的方法就是从稀疏点云中完善目标形状。完整的形状能够为精确和健壮的检测提供更加有用的信息。在3D检测中也提出了许多形状完善的技术,比如形状编码器(Najibi等人提出)、形状姿态(Zhu等人提出)和概率占用网络(Xu等人提出)。
3.4 3D目标检测多任务学习未来展望
3D目标检测天然地与许多其他3D感知和生成任务相关联,3D检测和分割的多任务学习相比于独立训练3D目标检测器更加有益,并且形状完善也能够帮助3D目标检测。也有许多其他能够提升3D目标检测器性能的任务,比如场景流评估能够识别静态和动态目标、在同一点云情况下追踪相同3D目标能够产生该目标更加准确的苹果。因此,未来也有望将更多感知任务集成现存的3D目标检测管道中去。
标签:基于,综述,检测,网格,驾驶,目标,体素,3D From: https://blog.csdn.net/qq_52889317/article/details/143681833