2 背景和基础知识


_2.1 目标检测_


        目标检测是物体识别和物体定位任务的融合。


        传统机器学习方法使用特征描述子提取有代表性的图像特征,如Viola-Jones方法、尺度不变特征变换(SIFT)或定向梯度直方图(HOG)。这些特征都是低级特征,是为某特定用途而手工设计的。SVM也可用于物体识别任务。但设计一个鲁棒的特征描述子是很困难的。


_2.2 3D视觉和3D目标检测_


        3D边界框通常是3D空间中的长方体。需要尺寸最小,且完全包含待检测目标。3D边界框通常参数化为(x,y,z,h,w,l,c),其中(x,y,z)是边界框中心;(h,w,l)是边界框的高、宽、长;c是物体类别。许多方法也增加了一个边界框朝向参数。


_2.3 感知技术_


        摄像机和激光雷达是3D传感器的代表。


_2.3.1 摄像机_


        (1)立体相机。利用两个记录同一场景但视角不同的图像的视差来估计深度。深度信息被附加到RGB图像的通道上,称为RGB-D图像。深度估计计算昂贵,但能生成密集的深度图。


        (2)ToF(Time-of-Flight相机。使用类似激光雷达的方法来测量目标到传感器的距离(发射光信号,测量接收反射信号的时间)。


        ToF和立体相机的图像均能转化为2.5D的RGB-D图像,或3D点云。


        相机集成成本低、算术复杂度低。但在不同天气和光照条件下存在质量波动。


_2.3.2 激光雷达_


        优点是远距离检测、相比于其余3D检测器有更高的分辨率、与光照条件无关。缺点是笨重而成本高。


_2.4 领域_


        3D目标检测可被粗略分为两个领域:室内和自动驾驶。


        室内物体的特点是堆叠,从而可以学习到基础物体和载体的物体间关系,即对内部场景的整体理解。挑战是室内场景通常很杂乱、物体相互遮挡。


        自动驾驶领域中物体通常距离远,且雨雪雾等天气使得检测困难。但由于物体一般不会发生堆叠,BEV投影可以减轻遮挡问题。


_2.5 数据集_


        分为室内场景数据集和自动驾驶数据集。


_2.5.1 自动驾驶数据集_


        (1)KITTI:包含立体图像、激光雷达点云和GPS坐标,均在时间上被同步。可用于立体匹配、视觉测程、3D跟踪和3D目标检测。缺点是有限的传感器设置和光照条件,且类间不平衡、多样性差。


        (2)nuScenes:包含不同视图的6个相机、360°视角的激光雷达和雷达。规模比KITTI大很多,且提供不同光照和天气的数据。缺点是激光雷达分辨率低、地理多样性差。


        (3)Waymo Open:包含5个前视和侧视的相机、以及360°视角的激光雷达。数据集规模大,且提供多样的光照、天气和场景。


_2.5.2 室内场景数据集_


        (1)NYUv2&SUN RGB-D:使用4个不同的RGB-D传感器来保证方法对传感器的泛化性。提供带精确朝向的3D边界框。


        (2)Objectron:提供视频和相应的稀疏点云表达。



4 3D目标检测的pipeline 




5 输入数据


        通常的输入数据为RGB图像、RGB-D图像(相应的方法称为2.5D方法)或点云(相应的方法称为3D方法)。


        RGB图像:提供密集的像素表达,包含纹理和形状信息。相关任务包括车道线检测、红绿灯识别和物体分类。优点是2D目标检测的实时性;缺点是缺少深度信息、存在物体遮挡问题。


        RGB-D图像:RGB图像和深度图像的像素是一一对应的,也称为range图像。同样可以使用2D目标检测的方法;但缺点是存在物体遮挡问题、物体尺寸与位置有关。


        点云:通常可以通过RGB-D图像转换或激光雷达产生。前者噪声更多且更稀疏。点云是不规则(不均匀)、无组织(不分布在网格上)、无序(具有排列不变性)的数据。



6 数据表达


        2D表达包括单目表达和RGB-D前视图表达;3D表达包括网格表达和点表达。


_6.1 单目表达_


        通常表达是前视图,该表达受限于相机视角。



  • 可以使用等矩形投影而不是传统摄像机图像的直线投影处理单目360°全景图像;通过2D卷积填充操作将左右边缘拼接在一起,将全景图像折叠成360°环。

        通常,单目表达不单独使用,而是用于融合:例如通过限制3D搜索空间提高效率、或者提供额外特征如色彩和纹理。


_6.2 RGB-D前视图_


        由于RGB-D数据可以转换为点云,所以分为RGB-D(2D)和RGB-D(3D)表达。RGB-D(2D)表达通常称为前视图。


        有时候将前视图与range视图等价。本文将RGB-D图像称为前视图,而将点云的前视投影称为range视图。


_6.3 网格单元_


        为了利用成熟的卷积操作,需要将点云网格化。可以将点云3D体素化或是将其多视图投影离散化。


        体素可以直接包含原始点,也可包含已被编码的特征;通常为正方体,但也可以为柱体。基于体素的特征提取方法更高效,因其不是对每个点提取,而是对每个体素(可能包含多个点)提取。


        投影视图通常包含range视图(RV)和鸟瞰图(BEV),此外还有结合两者的多视图表达。


_        RV_中点云被投影到360°柱状全景平面,然后离散化为小网格。由于RV的自然紧凑表达且信息损失小,在RV上的计算比其余投影视图上更加高效。但由于柱状图像特征,物体的大小和形状被扭曲了,且和图像一样存在遮挡以及物体大小随距离变化的问题。实验表明RV的性能不如BEV,但对小物体的检测更精确。


        _BEV_是点云向地面的投影。BEV可以保留物体大小(与距离无关),有利于生成锚框;且减轻了物体遮挡问题。但BEV在远距离时数据稀疏,导致不利于对小物体检测。


_6.4 点表达_


        网格化存在离散化和编码每个网格内的点时带来的信息损失。


        PointNet的提出使得用点表达提取特征成为可能,但在点数多的情况下非常耗时。



7 特征提取


        可大致分为手工特征提取(通常存储于SVM或随机森林中)和特征学习。后者根据输入数据表达可进一步分为单目、逐点、网格和融合的方法。


_7.2 单目特征学习_


        仅依赖于单目的特征提取姿态估计相对容易、但由于缺少深度信息,定位很困难。可以使用深度估计网络、几何约束或3D模板匹配来补偿缺失的深度信息。


        深度估计网络:缺点是存在误差和噪声。



  • Mono3D:使用额外的语义和实例分割以及进一步的特征来推理3D位置和姿态。
  • Mono Depth:使用立体相机的左右图像,利用左右深度一致性来训练深度估计网络,推断时仅使用单目图像。
  • 此外,还可以使用深度神经网络生成图像的BEV视图,或是根据视差预测网络生成点云;然后再在新的数据表达上进行目标检测。为了减小计算量,还可以仅将候选框内的图像转换为点云。

        几何约束:将单目3D目标检测看作2D到3D空间映射的几何问题。


        在自动驾驶领域,假设所有物体都位于路面上(地平面约束),进行路面估计可以将6自由度估计转化为3自由度估计。另一几何方法是建立2D和3D的一致性,该方法假设将3D边界框投影到2D边界框时,至少一侧应紧密贴合。


        在室内场景,物体不满足地平面约束,经常使用平面拟合来获得房间的方向。


        3D模板匹配:建立一个模板数据库,包含各种物体各角度的图像。将输入图像与这些模板比较获得物体姿态和位置。


        也可使用3D模板,但由于某些类别的模型较少,往往只能关注少量类别的物体。


_7.3 逐点特征学习_



  • PointNet包含保证排列不变性的最大池化操作、MLP结构的分类头、以及保证几何变换(平移、旋转)不变性的联合对齐网络(T-Net,通过姿态归一化将点/特征对齐到规范空间)。
  • PointNet++使用Set Abstraction Level解决了PointNet不能抓取局部特征的问题。Set Abstraction Level包含采样层(最远点采样)、分组层(ball query)和PointNet层(提取局部特征)。

_7.4 网格特征学习_


        网格特征学习即离散化点云为体素或投影视图后的特征学习。包含特征初始化、2D/3D卷积、稀疏卷积和投票方案。


        特征初始化:在每个离散化网格中可能包含多个点,需要进行编码。


        对于体素特征学习,将特征初始化分为手工编码和学习编码。



  • VoxelNet:提出VFE,即使用轻量PointNet(MLP+最大池化)来处理每个网格,然后使用3D卷积进行目标检测。

        对于投影视图特征学习,几乎均为手工编码。RV通常为三维特征,即高度、距离和强度;BEV类似,为高度、强度和密度。学习编码可以使用类似PointNet的方案;对于BEV编码也可以先提取体素特征或RV特征,再转换到BEV平面。


        稀疏卷积:由于体素化存在大量空体素,且3D卷积本身效率低下而提出。即仅在非空体素附近放置卷积核并计算。但随着层数加深,稀疏性下降,稀疏卷积效率降低,由此提出子流形稀疏卷积,即仅以非空体素为中心放置卷积核。


        投票方案:对于输入中每个非零单元格,在输出层中为其周围的单元格声明一个投票值(相应的核为卷积核按对角线对称)。同样地,随着层数加深,稀疏性下降,该方法效率降低。可引入非线性激活函数如ReLU,这样仅需处理大于0的值而非非零值。可以证明,特征中心投票方案与子流形稀疏卷积等价。



8 融合方法


        不同数据有不同的优缺点,可以相互补偿。主要的挑战是不同表达的同步以及在融合过程中保存相关信息,此外需要保持计算复杂度在合理范围内。目前的融合方法可以大致分为两类:级联融合和特征融合。


_8.1 级联融合_


        使用连续的单模态检测器,第一阶段的检测结果用于限制第二阶段检测器的检测范围。通常第一阶段使用单目检测器来定义点云可能包含目标的子集,然后使用3D检测器在这些子集上检测。



  • Frustum-PointNet:使用2D检测结果,在3D空间生成对应的棱台。然后使用PointNet进行实例分割,并根据棱台和提取的前景点来预测边界框。但此方法非端到端的学习。


  • 还可以先对图像使用2D语义分割,然后将前景点投影到点云中。然后这些点通过PointNet或卷积生成提案。

        级联融合受限于各阶段检测器的精度,且对仅在3D可观测的物体检测困难。


_8.2 特征融合_


        将不同模态的信息组合起来推理。可进一步分为早期融合、晚期融合和深度融合。




  • 例如可以通过将点云投影到图像平面与图像特征拼接实现融合,再通过卷积网络检测。
  • Complexer YOLO:首先对RGB图像语义分割,然后与激光雷达点云逐点融合,生成带语义的体素。

        通常的融合中,截断和遮挡等噪声也会被融合,不利于检测。注意力机制可以确定特征的相关性,从而只融合可以促进表达的特征。



  • 例如,使用空间注意力机制生成attention map,与特征图相乘后融合。

         由于图像像素和点云点之间的一对多关系,特征融合很困难。



9 检测模块


        早期3D目标检测方法依赖模板和关键点匹配算法或滑动窗口方法。深度学习检测方法可被分为基于锚的方法,无需锚的方法和混合方法。


        模板和关键点匹配算法使用CAD模型或合成物体作为模板,然后将模板或其关键点与检测结果匹配,得到物体类别、姿态与边界框。


        滑动窗口方法使用滑动窗口在特征图上滑动,然后对每个窗口位置进行分类。但3D窗口的滑动耗时,可以使用投票方案(仅在非空体素附近添加窗口)。


_9.3 深度学习检测网络_


        分为两阶段检测网络和单阶段检测网络。本节介绍2D检测网络。


        两阶段检测网络的第一阶段提出可能含有物体的子区域,称为区域提案,带有一个分数,表示含有物体的概率。概率高的区域被输入到第二阶段提取更细粒度的特征,送入检测头进行分类和边界框回归。



  • R-CNN:使用选择性搜索算法(selective search algorithm)提取候选区域,然后这些区域被裁剪为固定大小,输入到CNN中进行特征提取,从而分类和回归边界框。
  • Fast R-CNN:将R-CNN中独立训练的各网络整合为联合训练网络以提高速度和减小内存占用。整张图像由CNN进行特征提取,然后区域提案投影到图像特征图上,使用感兴趣区池化操作获得固定长度的特征向量,输入到检测头分类和回归边界框。

    这两种方法都使用选择性搜索算法生成区域提案,这个过程十分耗时。


  • Faster R-CNN:提出区域提案网络(RPN;本质上是CNN)作为提出感兴趣区的子网络,与Fast R-CNN连接并共享卷积层和最终的特征图。RPN初始化多个大小和长宽比不同的参考框(称为锚框),然后映射为低维向量,输入到全连接层进行是否包含物体的分类和边界框回归。之后输入到Fast R-CNN中进行边界框分类和微调。该方法可以端到端地训练。

        单阶段检测网络使用CNN直接估计边界框参数和类别,以可接受的性能下降为代价减小了计算量和推断时间。



  • YOLO:将原始输入图像分割为S\times S的网格,对每个网格进行物体分类和边界框预测;运行速度快,但检测质量较低,对小物体易产生定位误差。
  • SSD:使用锚框来决定边界框;结合多尺度特征图进行预测以检测不同大小的对象。

_9.4 基于锚框的检测_


        锚框作为边界框的初始猜测,以不同的大小和长宽比(根据训练集中的真实物体得到)密集地分布在图像上。然后网络预测每个锚框与实际边界框的偏差,结合IoU和分类分数来决定保留或丢弃锚框。


        两阶段检测中的2D锚框:通常用于BEV、RV或RGB-D表达,可直接使用2D方法生成。然后使用深度估计、几何限制或3D模板匹配等方法转换为3D提案并细化。


        基于2D锚框的检测速度较快,但相比于3D锚框检测精度较低。


        两阶段检测中的3D锚框:可用于体素或点表达。



  • 对于体素,可以类似Faster R-CNN的方法定义3D锚框,然后使用RPN处理;缺点是锚框数量巨大,计算复杂度高。
  • 对于点云,可以以每个点作为锚;为减小计算量,可以对点云进行语义分割,仅在前景点上定义锚。最后使用PointNet进一步处理提案。

        单阶段检测中的2D锚框



  • 如可以使用YOLO在BEV上检测2D边界框,然后预测3D边界框的高度和中心点的z坐标。

        单阶段检测中的3D锚框:最初专用于提取丰富的特征,因为该方法不如2D锚框方法成熟。由于没有微调阶段,需要有其余方法来补偿性能下降。



  • 例如可以使用VFE编码体素,然后使用CNN与修改的RPN组合进行单阶段检测。

_9.5 无需锚框的检测_


        分为基于全卷积网络(FCN)的检测和其他方法。


        基于FCN的方法



  • 可以使用FCN隐式地估计整张图像含有物体的概率,然后直接在可能含有物体的区域中确定边界框。
  • 可以基于边缘检测结果来确定提案,然后使用FCN处理感兴趣区。

        其他方法基于点表达,因其无需CNN处理。



  • VoteNet:集成了PointNet++的特征提取和Hough投票。首先使用PointNet++提取特征,生成子集(称为seeds),然后使用Hough投票在物体中心附近生成点(称为votes),用于定位。然后将votes分组,使用提案模块处理,得到细化的提案(称为vote簇)。最后vote簇被分类和回归边界框。该方法仅依赖于几何信息,但能提供精确的检测结果。


  • ImVoteNet:结合图像的2D votes和点云的3D Votes检测。
  • 还有方法使用PointNet++分割前景点,然后使用基于区间(bin)的3D框回归,并使用点云区域池化和规范转换细化。
  • 为获得更准确的定位,可以在分类分支和边界框回归分支中添加IoU感知分支。
  • 还可以使用实例分割(语义分割+聚类)结果生成边界框,进一步由PointNet++细化。

_9.6 混合检测_


        混合检测使用多种检测技术。



  • Frustum-PointNet:将基于2D锚框的提案投影到点云以定位,然后进行分类。
  • 还可以对体素化表达进行候选框生成,然后使用点表达和PointNet进行细化。
  • 此外,还有方法并行使用基于2D和3D锚框的检测方法,然后使用IoU敏感的方法融合候选框而无需非最大抑制(NMS)。

转载自:https://arxiv.org/pdf/2201.09354.pdf