[论文阅读]PointRCNN——基于点云的3维目标提议生成和检测

PointRCNN

3D Object Proposal Generation and Detection from Point Cloud
基于点云的3维目标提议生成和检测
论文网址:PointRCNN

前向传播过程:

1.输入原始点云,经过采样得到N个点。
2.进入第一阶段网络,将点云输入到PointNet++提取点特征。
3.将点特征输入到两个分支:
(1) 前景分割分支:预测每个点的前景 probs
(2) 框回归分支:仅对前景点预测目标框
4.根据回归结果,进行NMS获得M个高质量的3D候选框。
5.对每个候选框,第二阶段网络进行:
(1) 点云区域池化,获取框内局部点及特征
(2) 坐标转换到规范空间
(3) 结合全局和局部特征,学习残差回归
(4) 精炼框坐标,计算置信度
6.NMS后输出最终检测结果框及置信度。

PointRCNN

摘要

本文中,提出了PointRCNN用于从原始点云中检测三维目标。整个框架由两个阶段组成,第一个阶段为自底向上的生成三维提议,第二个阶段为在规范坐标下细化提议,以获得最终的检测结果。stage1子网络通过将整个场景的点云分割成前景点和背景点,以自下向上的方式直接从点云中生成少量且高质量的提议框,以往的方法都是从RGB图像中生成建议或将点云投影到鸟瞰视图或体素中。stage2子网络将每个方案的集合点转换到标准坐标系,学习更好的局部特征,并与stage1中学习到的每个点的全局语义特征相结合,进行精确的框重构和预测。

引言

深度学习在2D计算机视觉任务上取得了显著进展,包括目标检测和实例分割等,在2D场景理解之外,3D对象检测对于许多现实世界的应用至关重要,不可或缺,如自动驾驶和家用机器人。 近年来发展起来的二维检测算法能够处理图像中视点的大变化(由于视角和光照等因素的影响,同一目标在不同图像中的表现可能有很大变化large variations of viewpoints)和背景杂波(2D图像中的背景区域通常比较复杂,包含许多其他物体或者视觉模式,这些无关的背景区域称为背景杂波background clutters),但三维点云目标的检测仍然面临着不规则的数据格式和6自由度的大搜索空间的挑战(3D目标检测时需要在三维空间中搜索目标的所有可能位置和姿态组合,这构成了一个高维的搜索空间。
在3D场景中,一个目标的状态可以由6个参数表示,对应物体在3D空间的位移和旋转自由度。这6个自由度包括:
x,y,z:目标在3D场景中的空间坐标
θ_x, θ_y, θ_z: 目标在3个轴向上的旋转角度
所以一个目标可能出现在场景中的任意位置和任意姿态,形成一个6维的状态搜索空间。)。
在自动驾驶中,最常用的三维传感器是激光雷达传感器,它通过生成三维点云来捕捉场景的三维结构。 基于点云的三维目标检测的难点主要在于点云的不规则性。 最先进的三维检测方法要么利用成熟的二维检测框架,将点云投影到鸟瞰视图[Joint 3d proposal generation and object detection from view aggregation, Pixor, Deep continuous fusion for multi-sensor 3d object detection](见下图(a))、正面视图[Multi-view 3d object detection network for autonomous
driving., Multi-level fusion based 3d object detection from monocular images]或常规的三维体素[Deep sliding shapes for amodal 3d object detection in rgb-d images, Voxelnet],这些体素不是最优的,在量化过程中遭受信息损失(

  • 空间量化误差。将不规则的点云量化到统一尺寸的体素格网中,会产生一定的量化误差。相邻的点可能被量化到不同的体素中,导致空间细节的损失。
  • 采样不均匀。由于雷达的距离衰减效应,远处的物体对应的点更加稀疏。这会导致远处物体包含的体素数量更少,特征学习效果较差。近处更密集的点如果量化到同样大小的体素中,也会降低特征的区分性。
    )。
    鸟瞰视图
    PointNet直接从点云数据中学习3D表示,用于点云分类和分割,而不是将点云转换为体素或其他常规数据结构进行特征学习。如下图(b)所示,他们的后续工作[Frustum pointnets for 3d object detection from RGB-D data. ]将PointNet应用于三维物体检测中,根据2D RGB检测结果裁剪出的截锥点云估计出三维包围盒。然而,该方法的性能严重依赖于二维检测性能,无法利用三维信息的优势生成鲁棒的包围盒建议。
    Frustum PointNets
    与从2D图像中检测物体不同,自动驾驶场景中的3D物体通过带注释的3D边界框进行自然、良好的分离。 也就是说,用于三维目标检测的训练数据直接为三维目标分割提供语义掩码。 这是三维检测和二维检测训练数据的一个关键区别。 在二维目标检测中,边界框只能为语义分割提供微弱的监督。
    基于此观测,本文提出了一种新型的两阶段三维目标检测框架PointRCNN,该框架直接运行于三维点云上,实现了鲁棒、准确的三维检测性能(如下图©所示)。该框架分为两个阶段,第一阶段是自下而上生成三维边界框方案;利用三维边界框生成ground-truth分割蒙版,第一阶段分割前景点,同时从分割点生成少量的边界框提案。该策略避免了以往方法[VoxelNet]在整个三维空间中使用大量的三维锚框,节省了大量的计算量。
    PointRCNN
    PointRCNN的第二阶段进行规范的3D框细化。生成3D提案后,采用点云区域池化操作,将第一阶段学习到的点表示进行池化。与现有的直接估计全局框坐标的3D方法不同,融合后的3D点被转换为正则坐标,并结合融合后的点特征以及stage-1的分割掩码学习相对坐标细化。这一策略充分利用了本文第一阶段分割和提议子网络提供的所有信息。为了学习更有效的坐标优化方法,本文还提出了基于全箱的三维框回归损耗算法来生成和优化方案,消融实验表明,该算法比其他三维框回归损耗算法收敛更快,召回率更高。

相关工作

从二维图像中检测三维目标

Gs3d利用3D和2D边界框之间的几何约束来恢复3D物体的姿态。Deep manta等工作利用三维物体于CAD模型之间的相似性。Monocular 3d object detection for autonomous driving. 将物体的三维几何信息表述为能量函数,对预定义的三维方块进行打分。由于缺乏深度信息,这些工作只能产生粗略的三维检测结果,并且容易受到外观变化的影响。

基于点云的三维目标检测

三维目标检测有各种方法来从稀疏的三维点云学习鉴别特征。

  • 将点云投影到鸟瞰图上,利用2D CNN学习点云特征,生成3D边界框。
  • 将点分组成体素,利用3D CNN学习体素的特征生成3D box。然而,由于数据的量化(将原始的不规则点云转换成规则的数据结构的过程),导致鸟瞰投影和体素化的信息丢失,且三维CNN的存储和计算效率都很低。
  • 利用成熟的2D探测器从图像中生成2D提案,并在每个裁剪后的图像区域中减小3D点的尺寸。然后利用PointNet学习点云特征,进行三维边界框估计。但是,基于二维图像的提案生成在一些只有在三维空间才能很好地观察到的具有挑战性的情况下可能会失败。这些故障无法通过3D边界框估计步骤恢复。

相比之下,本文的自底向上的三维提案生成方法直接从点云生成鲁棒性的三维提案,既高效又不需要量化。

直接从点云学习

[Deep learning on point sets for 3d classification and segmentation]提出了从原始点云中直接学习点特征的点网结构,大大提高了点云分类和分割的速度和精度。 后续工作[PointNet++]通过考虑点云中的局部结构,进一步提高了提取的特征质量。 本文的工作将基于点的特征提取器扩展到基于点云的三维目标检测,提出了一种新的两阶段三维检测框架,该框架直接从原始点云生成三维框建议和检测结果。

PointRCNN

基于点云分割的自底向上三维方案生成

自底向上的意思:不从全局空间中划分锚框,而是从底层点云开始。首先学习点云的低级语义表示。然后直接从中生成候选框,而不是基于提前定义的锚框。
现有的二维目标检测方法可分为一级法和两级法,其中一级法[SSD,YOLO]速度较快,但直接估计目标包围盒而不进行细化,而两级法[Mask RCNN,Faster RCNN,Fast RCNN]首先生成建议,然后在第二阶段进一步细化建议和可信度。 然而,由于三维搜索空间巨大,点云格式不规则,将两阶段方法从二维直接推广到三维是不容易的。 AVOD在三维空间中放置80-100K锚方块,并在多个视图中为每个锚方块设置池功能,以生成建议。 F-pointnet从2D图像生成2D建议,并基于从2D区域裁剪的3D点估计3D盒,这可能会漏掉只能从三维空间清楚观察到的困难对象。
本文了一种基于整体点云分割的三维提议生成算法,作为Stage-1子网络。 本文观察到3D场景中的物体是自然分离的,不会相互重叠。 所有三维物体的分割掩码都可以通过其三维包围盒注释直接得到,即将三维框内的三维点视为前景点。
因此,本文建议以自下而上的方式生成3D提议。 具体来说,本文学习逐点特征来分割原始点云,并同时从分割后的前景点生成三维建议。 基于这种自底向上的策略,本文的方法避免了在三维空间中使用大量预定义的三维锚框,并显著地限制了三维提议生成的搜索空间。 实验结果表明,本文提出的三维框建议方法比基于三维锚点的建议生成方法具有更高的查全率。
点云特征:为了学习描述原始点云的逐点特征,本文利用多尺度分组的PointNet++作为骨干网络。 还有其他几种可供选择的点云网络结构,如[PointNet,Pointsift]或具有稀疏卷积的[3d semantic segmentation with submanifold sparse convolutional networks]或VoxelNet,也可以作为本文的骨干网络。
前景点分割:前景点提供了丰富的信息来预测其相关对象的位置和方向。 通过学习分割前景点,迫使点云网络捕捉上下文信息进行精确的点预测,这也有利于三维边界框的生成。 设计了自底向上的三维方案生成方法,直接从前景点生成三维框方案,即前景分割和三维框方案生成同时进行。
在给定骨干点云网络编码的点状特征的基础上,增加了一个分割头用于估计前景掩码,并增加了一个边界框回归头用于生成三维建议。 对于点分割,地面真值分割掩码自然由三维地面真值框提供。 对于一个大规模的室外场景,前景点的数量通常比背景点的数量少得多。 因此,本文用focal loss来处理类不平衡问题。
loss
在训练点云分割时,本文保留原论文的默认设置αt=0.25和γ=2。
基于bin的三维边界框生成:如上所述,添加了一个边界框回归头,用于同时生成自底向上的三维建议和前景点分割。 在训练过程中,只需要边界框回归头从前景点回归三维边界框位置。 注意,尽管在框生成分支中只针对前景点进行了框回归,但是背景点由于点云网络的感受野,也为框生成提供了支持信息。
在LiDAR坐标系中,三维包围框表示为(x, y, z, h,w, l, θ),其中(x, y, z)为目标中心位置,(h,w, l)为目标大小,θ为从鸟瞰目标方向。为了约束生成的3D框建议,本文提出了基于bin的回归损失来估计对象的3D边界框。用于估计物体的中心位置,如下图所示,在X轴和Z轴上,将每个前景点的周围区域划分成一系列离散的空间。 具体来说,本文为当前每个前景点的X和Z轴设置一个搜索范围S,每个一维搜索范围被划分为均匀长度δ的bins来表示X-Z平面上不同的物体中心(X,Z)。 本文观察到,在X轴和Z轴基于bin分类使用的是交叉熵损失,而不是使用smooth L1损失的直接回归,结果更准确和鲁棒的中心定位。
1.搜索范围是对每个前景点设置的,表示在该点周围一定范围内搜索目标框的中心。
2.将这个搜索范围在X和Z轴上均匀划分为多个bins。
3.对于一个前景点p,通过回归预测目标中心相对于该点的偏移量在哪个bin内,就可以定位目标中心的大致区域。
4.然后再在该bin内回归一个残差offset,用于精炼中心的坐标,得到最终预测的目标中心坐标(x, z)。
5.一个物体确实对应的点cloud有多个前景点,每个前景点都进行以上操作。由于它们指向的是同一个物体,经过回归后的bin和offset会聚合到物体的中心附近。
6.最终目标中心通过这些前景点结果的累加获得。背景点不进行回归。

这里还有一个疑问:为什么只在X轴和Z上设置搜索空间?在激光雷达的扫描模式下,X和Z轴上包含目标中心点的主要空间信息。Y轴上目标高度变化较小,区分性不强,所以直接回归Y轴坐标即可。在Y轴上,目标高度变化很小(主要 concentrated 在1米左右),不需要划分bin,直接回归残差即可获得足够的定位精度。所以综合点云分布特点、回归目标设定等因素,将搜索范围和bin划分只应用在对X和Z轴上,可以达到较好的效果。
bin
X或Z轴的定位损失由两个项组成,一个项用于沿X和Z轴的分类,另一个项用于分类后的残差回归。 对于垂直Y轴上的中心位置Y,由于大多数物体的Y值都在一个很小的范围内,本文直接利用smooth L1损失进行回归。 使用L1 loss就足以获得精确的y值。
因此,localization targets可以制定为
localization targets
其中(x§,y§,z§)是感兴趣的前景点的坐标,(xp,yp,zp)是其对应对象的中心坐标,bin§x和bin§z是沿x和z轴的地面真值bin分配,res§x和res§z是用于在所分配的bin内进一步进行位置细化的地面真值残差,c是用于归一化的bin长度。
方位θ和尺寸(h,w,l)估计的目标与[Frustum pointnets for 3d object detection from RGB-D data]相似。 本文将定向2π划分为N个分类目标bin§θ和残差回归目标res§θ的计算方法与X或Z预测相同。 通过计算残差(res§h,res§w,res§l)w.r.t,直接回归出对象大小(h,w,l)。 整个训练集中每个类的平均对象大小。
在推理阶段,对于基于bin的预测参数x、z、θ,本文首先选择预测置信度最高的bin中心,加上预测残差,得到精化的参数。 对于其他直接回归的参数,包括Y、H、W和L,本文将预测残差加到它们的初值中。
1.X和Z轴上的分类,是指对每个轴将搜索范围分为多个bin,预测目标中心在哪个bin内。
2.所以这里的分类是在bin之间进行,预测目标中心相对于点的粗略偏移落在了哪个bin内。
3.然后残差回归是指在对应的bin内,再预测一个精细的残差offset,用于调整最终的目标中心坐标。
4.举个例子,假设X轴搜索范围为3米,分10个bin,每个bin长度为0.3米。
5.分类任务是预测目标中心X轴坐标相对于点的偏移落在了哪个0.3米的bin内(共10类)。
6.残差回归是预测该bin内目标中心的细微偏移是0.05米还是0.1米等。
7.综合分类结果(第3个bin)和回归结果(0.1米),可以得到一个较精确的目标中心坐标。

对于训练,具有不同损失项的整体3D边界框回归损失Lreg可以被表述为
lreg
其中Npos是前景点的个数,Δbin§u和Δres§u是预测的bin分配和前景点p的残差,bin§u和res§u是如上计算的地面真值目标,Fcls表示交叉熵分类损失,Freg表示smooth L1损失。
为了去除冗馀的建议,本文从鸟瞰的角度对面向IOU进行非最大抑制(NMS),以产生少量高质量的建议。 在训练方面,本文使用0.85作为鸟瞰视图IOU阈值,并在NMS后保留前300个训练Stage-2子网络的建议。 对于推理,我们使用IOU阈值为0.8的面向网络管理系统,并且只保留前100个建议用于Stage-2子网络的精化。

Point cloud region pooling

在得到三维边界框建议后,本文的目标是在先前生成的边界框建议的基础上细化边界框的位置和方向。 为了了解每个提议框的更具体的局部特征,本文建议根据每个提议的位置从Stage-1集合3D点及其对应的点特征。
对于每一个3D框建议bi=(xi,yi,zi,hi,wi,li,θi),本文将其稍微放大以创建一个新的3D框bei=(xi,yi,zi,hi+η,wi+η,li+η,θi),以编码来自其上下文的附加信息,其中η是用于放大框大小的常量。
对于每个点p=(x§,y§,z§),执行内/外测试以确定点p是否在扩大的边界框建议Be i内。 如果是这样,则该点及其特征将被保留,用于精化的Bi框。 与内点P相关的特征包括其三维点坐标(x§,y§,z§)∈R3,激光反射强度r§∈R,预测的分段掩码m§∈{0,1}(该点是否为前景的置信度或概率)和从阶段1学习的C维点特征表示f§∈RC。
本文包括分割掩码m§来区分放大框be i内的预测前景/背景点。 学习到的点特征f§通过学习编码有价值的信息,用于分割和建议生成,因此也包括在内。 本文在下一阶段消除没有内部要点的建议。

Canonical 3D bounding box refinemen

如下图(b)所示,每个方案的集合点及其相关特征被馈送到Stage-2子网络,用于细化3D框位置以及前景对象置信度
PointRCNN
正则变换:为了充分利用Stage-1中的high-recall box式方案,并且只估计方案的box参数的残差,本文将每个方案的集合点转换到相应的三维方案的标准坐标系中。 如下图所示 ,一个三维方案的正则坐标系表示:(1)原点位于box方案的中心; (2)局部X和Z轴近似平行于地平面,X指向建议的头部方向,另一个Z轴垂直于X; (3)Y轴与激光雷达坐标系的Y轴保持不变。 通过适当的旋转和平移,所有集合点的方框建议的坐标P应转换到正则坐标系为~P。 使用所提出的标准坐标系使框精化阶段能够为每个建议学习更好的局部空间特征。
坐标
Feature learning for box proposal refinement:细化子网络结合了变换后的局部空间点(特征)~ p以及它们的全局语义特征f§,从阶段1进行进一步的框和置信度细化。
虽然标准变换可以实现鲁棒的局部空间特征学习,但它不可避免地丢失了每个目标的深度信息。 例如,由于激光雷达传感器的固定角扫描分辨率,远距离物体的点通常比近距离物体的点少得多。 为了补偿丢失的深度信息,本文将到传感器的距离d§=(x§)2+(y§)2+(z§)2纳入点p的特征中。
对于每个方案,其相关点的局部空间特征~p和额外特征[R§、M§、D§]首先被级联并馈送到几个完全连接的层,以将它们的局部特征编码到全局特征F§的相同维度。 然后将局部特征和全局特征串联起来,按照[Pointnet++]的结构送入网络中,得到判别特征向量,用于后续的置信度分类和框细化。
Losses for box proposal refinement:本文采用类似的基于bin的回归损失来改进建议。如果ground-truth box的3D IoU大于0.55,则将其分配给3D box提案进行学习盒优化。将三维真值盒bi = (xi, yi, zi, hi, wi, li, θi)和三维真值盒bgt i = (xgt i, ygt i, zgt i, hgt i, wgt i, lgt i, θgt i)转化为正则坐标系
坐标系
第i个框方案中心位置的训练目标(bini∆x, bini∆z, resi∆x, resi∆z, resi∆y)的设置方式与式(2)相同,但本文使用较小的搜索范围S来细化3D方案的位置。仍然直接回归尺寸残差(resi∆h, resi∆w, resi∆l) w.r.t。由于集合的稀疏点通常不能提供足够的建议尺寸信息(hi, wi, li),所以训练集中每个类的平均目标尺寸。
为了细化方向,假设角差W.R.T。 根据提案与其基本真值方框之间的3D IOU至少为0.55的事实,基本真值方向θgt i-θi在[-π4,π4]范围内。 因此,将π/2划分为离散的bin,其大小为ω,并预测基于bin的定向目标为
bin
因此,第2阶段子网络的总loss可表述为
loss
其中,B是来自Stage-1的3D建议集合,Bpos存储用于回归的正建议,Probi是~BI的估计置信度,Labeli是相应的标签,Fcls是监督预测置信度的交叉熵损失,~L(i)bin和~L(i)res类似于EQ中的L§bin和L§res。 新目标按上述 ~ bi和~bgt i计算。 最后采用面向NMS的鸟瞰IOU阈值为0.01,去除重叠的包围盒,生成被检测物体的三维边界框。

结论

本文提出了一种新的三维物体检测器PointRCNN,用于从原始点云中检测三维物体。所提出的阶段1网络直接从点云自底向上生成三维提案,比以往的提案生成方法具有更高的召回率。第二阶段网络通过结合语义特征和局部空间特征,在规范坐标中细化提案。此外,新提出的基于bin的损失模型也证明了其在三维包围盒回归中的有效性和有效性。实验表明,在KITTI数据集具有挑战性的三维检测基准上,PointRCNN的性能明显优于以往的最先进的方法。

### POINTRCNN 训练教程及资源 #### 1. 安装依赖库 为了顺利训练POINTRCNN模型,首先需要安装必要的Python包以及配置CUDA环境。通常推荐使用Anaconda创建虚拟环境来管理这些依赖。 ```bash conda create -n point_rcnn python=3.7 conda activate point_rcnn pip install numpy matplotlib tensorboardX easydict opencv-python mayavi nvidia-ml-py3 torch torchvision torchnet spconv numba plyfile pyyaml scikit-image scipy h5py pandas tqdm ``` 以上命令会设置好所需的软件栈[^2]。 #### 2. 数据集准备 对于KITTI数据集而言,需下载并解压至指定文件夹内。接着执行预处理脚本以生成适合POINTRCNN使用的格式: ```python from tools import prepare_data as prep prep.create_kitti_info_file(data_path='./data/kitti', save_path='./data') prep.create_groundtruth_database(data_path='./data/kitti', info_paths=['kitti_infos_train.pkl'], used_classes=['Car']) ``` 此过程将构建索引信息并建立ground truth数据库以便后续训练时快速加载实例样本。 #### 3. 配置参数调整 编辑`tools/cfgs/dataset_configs/KITTI_DATASET.yaml` `tools/cfgs/rcnn_training/point_rcnn_car.yaml` 文件中的超参设定,比如batch size, learning rate等,依据实际硬件条件个人需求作出适当修改。 #### 4. 开始训练流程 当一切准备工作完成后,可以通过简单的命令启动训练: ```bash cd /path/to/PointRCNN/tools/ ./train.py --cfg_file cfgs/rcnn_training/point_rcnn_car.yaml --ckpt_save_interval 5 --max_epochs 80 ``` 上述指令指定了具体实验配置文件路径,并设置了每五轮保存一次checkpoint权重文件的最大迭代次数为八十次。 #### 5. 测试评估性能 完成一轮完整的训练周期后,可以利用已学得的最佳模型对验证集合进行评测分析: ```bash ./eval.py --cfg_file cfgs/rcnn_training/point_rcnn_car.yaml --ckpt ./output/point_rcnn/default/ckpt/checkpoint_epoch_80.pth --eval_mode val ``` 这里选择了第80epoch结束后的checkpoint来进行最终效果衡量。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一朵小红花HH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值