摘要
在本文中,我们提出了一个图神经网络来从激光雷达点云检测目标。对这个目标,我们将点云有效地编码到一个固定半径的近邻图中。我们设计了一个图神经网络,称为点Point GNN,来预测类别和图中每个顶点所属的对象的形状。在PointGNN里,我们提出了一个自动配准的机制来保证平移不变性(reduce translation variance),并设计一个框合并和打分操作,以精确结合多个顶点的检测结果。我们在KITTI数据集上做的实验结果表明,该方法(仅使点云)达到了领先水平,精确度甚至可以超过基于融合的算法。我们的结果证明了利用图神经网络作为一种新的三维目标检测方法的潜力。代码在这里https://github.com/WeijingShi/Point-GNN
1. 简介
理解3D环境对机器人感知至关重要。的点云是一种广泛应用于三维传感器(如激光雷达)的格式。准确地从点云中检测目标对于自动驾驶等应用来说是至关重要的。
卷积神经网络用来检测图像中的目标依赖于卷积运算。虽然卷积运算是有效的,但它需要一个规则的网格输入。与图像不同,点云通常是稀疏的且在规则网格上间隔不均匀。把点云放在规则网格会导致每个cell中点的数目不均匀。对这些网格进行相同的卷积操作,可能会导致拥挤网格中的信息丢失或者空网格浪费计算。
最近在神经网络[3][22]方面的突破允许以无序的点集作为输入。此类研究利用这种类型的神经网络来提取点云特征,而不需要将点云映射到网格。但是,它们通常需要迭代的对点进行取样和分组(sample&group),以得到点集表示。在大型点云上的重复分组和采样计算代价非常昂贵。最近的三维检测方法[10][21][16]通常采用混合方法在不同的阶段使用网格和点集表示。虽然它们展现一些较好的结果,但这种混合策略可能会受到两种表现的缺点的影响。
在本文中,我们提出使用图作为一个点云的紧凑表示,并设计一个称为PointGNN的图神经网络来检测对象。我们把点作为图顶点来编码点云。图的边将位于固定半径内的邻域点连接起来,使得特征信息可以在邻域之间流动。这样的图表示可以直接适应点云的结构,而不需要使它具有规则性。图神经网络在每一层都重复使用图的边,避免了对点的重复分组和采样。
研究[15][9][2][17]探讨了利用图神经网络对点云进行分类和语义分割。然而,利用图神经网络在点云中进行三维目标检测的研究很少。我们的工作证明了在点云中使用GNN进行高精度目标检测的可行性。
我们提出的图神经网络PointGNN以点图作为输入。它输出每个顶点所属的对象的类别和边界框。Point-GNN是一种1-stage检测方法,可以在一个场景中检测多个目标。为了保证图神经网络中的平移不变性,我们引入了一种自动配准机制,该机制允许点根据其特征对坐标进行配准。我们进一步设计了一个框合并和打分操作,以精确的从多个定点结合得到检测结果。
我们在KITTI的benchmark上对所提出的方法进行了评估。在KITTI测试中,Point GNN单独使用点云实现了最先进的精度,甚至超过了传感器融合方法。我们的Point GNN显示了一种利用图神经网络的新型三维目标检测方法的潜力,可以作为未来研究的有力基础。我们对点GNN中各组成部分的有效性进行了广泛的消融研究(ablation study,去掉该结构的网络与加上该结构的网络所得到的结果进行对比)。
总结而言,本文的贡献:
- 提出了新的点云目标检测方法,利用图神经网络。
- 设计了PointGNN,一个有自动配准机制的在单帧检测多个目标的图神经网络。
- 在KITTI benchmark的3D目标检测模块sota(现在不是了),深入分析了各部分的有效性。
2. 相关工作
此前该领域的工作可分为这三类,如图所示。
点云数据规则化处理
最近的许多研究将点云转换为规则网格,以利用卷积神经网络。[20]将点云投射到2D鸟瞰(BEV)图像上,并使用2D CNN进行对象检测。[4]将点云投射到BEV图像和FV图像上。由于图像分辨率的限制,这种投影会产生量化误差。有些方法把点云保留在三维坐标。[23]把点用3d体素表示并用3d卷积来目标检测。当体素的分辨率增大时,3D CNN的计算量也随之增大,但由于点的稀疏性,许多体素是空的。稀疏卷积[19]等优化降低了计算成本。将点云转换为2D/3D网格会遇到点的规则分布与网格的规则结构不匹配的问题。
点云直接处理
在PointNet[3]和DeepSet[22]等点集上的深度学习技术表明,神经网络可以直接从无序的集合中提取特征。在这种方法中,每一个点都经过多层感知器(MLP)处理以获得点特征向量。通过平均或最大池化函数将这些功能聚合起来,形成此点集一个全局的特征向量。[14]进一步提出了点特征的层次聚合,并通过对某些点的采样来生成点的局部子集。然后将这些子集的特征再次group到集合中,以进行进一步的特征提取。许多三维目标检测方法利用这种神经网络来处理点云,而不需要将点云映射到网格。然而,在大尺度上对点的采样和分组会增加额外的计算成本。大多数的目标检测研究只使用这个网络作为框架的一部分。
[13]通过图片生成提案,并使用[14]来从背景中分割属于目标的点,来预测3d bbox。[16]用[14]作为backbone生成框提案,然后用第二阶段来优化框。混合方法如[23 19 10 21]使用[3]从局部点集提取特征,并将特征放在规则网格中进行卷积操作。尽管它们将点云的不规则性降低了一定程度,它们仍然受到规则网格和整体点云结构之间匹配的影响。
图处理点云
图论神经网络的研究[18]试图将神经网络推广到图的表示。GNN迭代的更新顶点特征,通过聚合边沿特征。尽管集合模式有时类似于基于点集的深度学习,GNN允许沿边缘确定更复杂的特性。它通常不需要重复采样和分组顶点。在计算机视觉领域,有几种方法将点云表示为图。[15]使用递归GNN对RGBD数据进行语义分割。[9]将点云划分为简单的几何形状,并将它们链接到图中进行语义分割。[2 17]研究使用GNN对点云进行分类。迄今为止,很少有研究探讨设计一个图神经网络用于目标检测,这需要对目标形状进行显式预测。我们的工作与以前的工作不同,我们设计了一个用于对象检测的GNN。与将点云转换为规则网格(如图像或体素)不同,我们使用图表示来保留点云的不规则性。与重复采样并将点分组的技术不同,我们只构建一次图。该算法通过迭代更新同一图上的顶点特征来提取点云的特征。我们的工作是一种1-stage检测方法,不需要第二阶段的优化如[4 16 21 11 13]。
3. Point GNN在点云数据目标检测
在这一部分中,我们描述了从点云中检测三维物体的方法。如图2所示,我们方法的整体架构包含三个组件:(a)图形构建,(b)T迭代的GNN,(c) 边界框合并和打分。
3.1 图的构建
形式上,我们将N个点组成的点云定义为一个集合P = {p1,…,pN},其中pi = (xi,si)是三维坐标xi∈R3的点,状态值si∈Rk是表示点属性的k维向量。状态值si可以是反射的激光强度,也可以是对周围物体进行编码的特征。给定一个点云P,我们通过使用P作为顶点,并将一个点与其在一个固定半径r内的相邻点(即P,E)相连接来构造一个图G = (P,E)。
这样一个图的构造就是固定半径近邻搜索问题。通过使用单元列表查找给定截止距离内的点对,我们可以有效地解决O(cN)的无限复杂性问题,其中c是半径内的最大邻居数[1]。
在实践中,一个点云通常包含成千上万个点。用所有点作为顶点构造一个图会增加大量的计算负担。因此,我们使用体素下采样点云P来构建图。需要注意的是,这里的体素只是用来降低点云的密度,而不是作为点云的表示(怎么还有点傲娇的感觉哈哈哈)。我们仍使用图来表示降采样的点云。
为了保留原始点云中的信息,我们将稠密点云编码为顶点的初始状态值si。更具体地说,我们搜索每个顶点的r0半径内的原始点,并使用集合上的神经网络来提取它们的特征。我们延续[10][23],使用MLP加入激光雷达反射强度和相对坐标,然后通过Max函数聚合它们。我们使用结果特征作为顶点的初始状态值。图构造完成后,我们使用GNN对图进行处理,如图2b所示。
3.2 自动配准的图神经网络(Auto-Registration)
典型的图神经网络通过沿边缘聚集特征来提炼顶点特征。在(t+1)次迭代,更新表格中的每个顶点特征:
其中,et和vt第t次迭代的边和顶点特征。ft函数计算两个顶点间的边特征。ρ(.)是一组函数集合,来聚集每个顶点的边特征们。gt函数利用聚合的边特征来更新顶点特征。然后图神经网络输出顶点特征或者进行下一次迭代。
在目标检测的任务中,我们设计GNN来细化顶点的状态,以包含顶点所属的目标的信息。为了达到这个目标,我们重写了公式(2),用邻居点的状态来改善一个顶点的状态:
注意,我们使用了邻居点的相对坐标作为ft(.)的输入进行边缘特征提取。相对坐标的好处是其平移不变性可对抗点云的全局变换。但是,它对邻近区域内的变化仍然很敏感。当一个顶点发生了小量的位移,它邻居点的局部结构依然相似。但是所有邻居点的相对坐标都改变了,这增加了输入ft(.)的变换幅度。为了减小变化幅度,我们提议调整邻居点的坐标,通过其结构特征而不是中心顶点坐标。因为中心顶点从之前的迭代中已经包含了一些结构特征,我们可以使用它来预测对齐偏移量,并提出一种自动配准机制:
∆xti是顶点要配准坐标的偏移量。ht(:)使用前一次迭代的中心顶点状态值计算偏移量。通过设置使ht(:)输出为0,GNN可以在必要时禁用偏移量。在这种情况下,GNN返回到式(3)。我们在第四节分析了这种自动配准机制的有效性。
如图2b所示,我们使用多层感知器(MLP)建模了ft(),gt(),ht(),并添加一个残差连接在gt ()。我们把ρ()设为Max来提高鲁棒性[3]。该图网络的单次迭代:
其中第二行的逗号是concat操作。
每个迭代t使用不同的MLP,即每次迭代不是共享的。T次迭代后的图神经网络中,我们使用顶点状态值来预测对象的类别和顶点所属目标的边界框。分类分支MLPcls计算一个多类概率。最后,一个定位分支(localization branch)MLPloc为每个类计算一个边界框。
3.3 Loss
对于目标类别,分类分支给每个点计算一个多类概率分布{pc1,……,pcM}。M是对象类的总数,包括背景类。如果一个顶点在一个对象的包围框中,我们将对象类赋值给这个顶点。如果一个顶点位于任何边界框之外,则它属于背景类。我们用平均交叉熵损失作为分类损失。
其中pci是第i个顶点的预测概率,yci是其one-hot编码标签。
对于目标边界框,我们预测7自由度b = (x,y,z,l,h,w,θ),分别表示包围框的中心位置,框长度、高度和宽度分别和偏航角。我们用顶点坐标(xv,yv,zv)来编码bbox:
其中,lm,hm,wm,θ0,θm是尺度不变因子(?)。
定位分支为每个类预测编码的边界框δb = (δx,δy,δz,δl,δh,δw,δθ)。如果一个顶点在一个边界框中,我们计算gt与我们预测值的Huber损失[7]。如果一个顶点不在框里或者我们不感兴趣的类,,我们将其localization损失置为零。然后对所有顶点的localization损失进行平均:
为了防止过拟合,我们在每个MLP加入了L1正则化。总的损失为:
其中,α,β 和 γ 是用来平衡每个loss的固定权重。
3.4 框合并与打分
由于同一目标里上有多个顶点,所以神经网络可以输出多个相同的边界框对象。有必要将这些边界框合并到一个,并打出其置信度分数。非极大抑制(NMS)已被广泛用于这一任务。通常的做法是选择分类分数最高的框,并抑制其他重叠的框。然而,分类分数并不总是反映定位的质量。值得注意的是,一个部分被遮挡的物体可以很好的来指示该物体的类别,但缺乏足够的形状信息。标准的NMS只根据分类得分可能会选择一个不精确的bbox。
为了提高定位精度,我们提议通过考虑所有重叠的box来计算合并框。更具体地说,我们考虑了重叠边界框的中位数位置和大小。我们也计算置信分数,其为分类分数的加权和,权重为IoU因子和遮挡因子。遮挡因子表示所占体积比。给定一个框bi,令li,wi,hi为它的长宽高,vli,vwi,vhi分别表示朝向的单位向量。xj为点pj的坐标。遮挡因子oi为:
我们用如下算法修改了标准NMS,其返回了合并框M和置信度分数Z。我们在第四部分会研究其可行性。
4. 实验(略)
可以看到还是很牛笔的,虽然很快被少帅大佬的PVRCNN压了一头。
最后,翻译不当的地方还请多多指正。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【文章翻译】Point GNN:使用图神经网络的3d目标检测方法 - Python技术站