编者按:近年来,由于图结构的强大表现力,用机器学习方法分析图的研究越来越受到重视。图神经网络(GNN)是一类基于深度学习的处理图域信息的方法。由于其较好的性能和可解释性,GNN最近已成为一种广泛应用的图分析方法。在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,本篇文章则研究了图卷积在3D检测的中的用法。其提出的Point-GNN的检测精度表现在KITTI上有着领先的排名。
《Point-GNN: Graph Neural Network for 3D ObjectDetection in a Point Cloud》
文章来源:2020 IEEE/CVF Conference onComputer Vision and Pattern Recognition
作者:Weijing Shi, Raj Rajkumar
原文链接:https://ieeexplore.ieee.org/document/9156733
摘要:本文提出了一种基于图神经网络的激光雷达点云目标检测方法。为此,我们在固定半径的近邻图中对点云进行了有效的编码。我们设计了一个名为Point-GNN的图神经网络来预测图中每个顶点所属的对象的类别和形状。在Point-GNN中,我们提出了一种自动配准机制来降低平移方差,并设计了一种框合并和评分操作,以精确地组合来自多个顶点的检测。我们在KITTI基准上的实验表明,该方法仅使用点云就能达到领先的精度,甚至可以超过基于融合的算法。我们的结果证明了图神经网络作为一种新的三维目标检测方法的潜力。
关键词:图神经网络,自动配准,框合并和评分,目标检测
理解3D环境对机器人感知至关重要。构成空间点集的点云是激光雷达等3D传感器的一种广泛使用的格式。在自动驾驶等应用中,准确地从点云中检测对象是至关重要的。
从图像中检测目标的卷积神经网络依赖于卷积运算。虽然卷积运算是高效的,但它需要规则的网格作为输入。与图像不同,点云通常是稀疏的,并且在规则网格上不是均匀分布的。将点云放置在规则网格上会在网格单元中生成不均匀数量的点。在这样的网格上应用相同的卷积运算会导致拥挤单元中的潜在信息丢失或空单元中的计算浪费。
最近在使用神经网络方面的突破[3][22]允许一组无序的点作为输入。一些研究利用这种类型的神经网络来提取点云特征,而不需要将点云映射到网格。但是,它们通常需要迭代地对点进行采样和分组,以创建一个点集表示。在大型点云上重复分组和采样的计算成本可能会很高。最近的3D检测方法[10][21][16]通常采用混合方法,在不同阶段使用网格和集合表示。虽然它们显示了一些有希望的结果,但这种混合策略可能会受到这两种表示的缺点的影响。
在本文中,我们提出使用图形作为点云的紧凑表示,并设计一个名为Point-GNN的图神经网络来检测目标。我们使用点作为图的顶点,在图中对点云进行自然编码。图的边连接位于固定半径内的邻域点,这允许特征信息在邻域之间流动。这种图形表示直接适应点云的结构,而无需使其规则化。图神经网络重用每一层的图边,避免了对点的重复分组和采样。
研究[15][9][2][17]研究了使用图神经网络对点云进行分类和语义分割。然而,很少有研究考虑使用图形神经网络来检测点云中的3D对象。我们的工作证明了在点云中使用GNN进行高精度目标检测的可行性。
我们提出的图神经网络Point-GNN以点图为输入。它输出每个顶点所属对象的类别和边界框。Point-GNN是一种在单次拍摄中检测多个目标的一阶段检测方法。为了减少图神经网络中的平移方差,我们引入了一种自动配准机制,允许点根据它们的特征对齐它们的坐标。在此基础上,设计了一种框合并和评分操作,对多个顶点的检测结果进行了准确的组合。
我们在KITTI基准上对提出的方法进行评估。在KITTI基准测试中,Point-GNN仅使用点云就达到了最先进的精度,甚至超过了传感器融合方法。我们的Point-GNN展示了一种新型的基于图神经网络的三维目标检测方法的潜力,它可以作为未来研究的一个很好的基础。我们对Point-GNN中组件的有效性进行了广泛的消融研究。
设计了Point-GNN,一个具有自动配准机制的图神经网络,可以在一次拍摄中检测多个目标;
在KITTI基准测试中实现了最先进的3D目标检测准确率,并深入分析了每个组件的有效性。
网格中的点云。许多最近的研究将点云转换成规则的网格,以利用卷积神经网络。[20]将点云投影到2D鸟瞰(BEV)图像上,并使用2D CNN进行目标检测。[4]在应用2D CNN之前,将点云投影到BEV图像和前视(FV)图像上。由于图像分辨率有限,这种投影会产生量化误差。一些方法将点云保持在三维坐标中。[23]提出3D体素中的点,并应用3D卷积进行对象检测。当体素的分辨率增加时,3D CNN的计算成本呈立方增长,但由于点的稀疏性,很多体素是空的。像稀疏卷积[19]这样的优化则降低了计算成本。将点云转换为2D/3D网格的方法存在点的不规则分布和网格的规则结构不匹配的问题。
集合中的点云。在集合上的深度学习技术,如PointNet[3]和DeepSet[22]表明,神经网络可以直接从无序的点集合中提取特征。在这种方法中,每个点由多层感知器(MLP)处理以获得点特征向量。这些特征通过平均或最大池化函数聚合,形成整个集合的全局特征向量。[14]在此基础上,提出了点特征的层次聚合,并通过在关键点周围采样来生成点的局部子集。然后,这些子集的特征被再次分组到集合中,用于进一步的特征提取。许多3D对象检测方法利用这种神经网络来处理点云,而无需将其映射到网格。然而,大规模的点采样和分组会导致额外的计算开销。大多数目标检测研究只使用集合上的神经网络作为解决方案的一部分。[13]从相机图像中生成object proposals,并使用[14]将属于目标的点从背景中分离出来,预测一个边界框。[16]使用[14]作为主干网络,直接从点云生成边界框方案。然后,使用第二阶段的点网络来细化边界框。混合方法如[23][19][10][21]使用[3]从局部点集提取特征,并将特征放置在规则网格上进行卷积运算。虽然它们在一定程度上减少了点云的局部不规则性,但仍然存在规则网格和整体点云结构之间的不匹配问题。
图中的点云。图神经网络[18]的研究旨在将卷积神经网络推广为一种图表示。GNN通过沿着边缘聚合特征来迭代更新其顶点特征。虽然聚合方案有时与集合上的深度学习类似,但GNN允许沿边缘确定更复杂的特征。它通常不需要重复对顶点进行采样和分组。在计算机视觉领域,有几种方法将点云表示为图形。[15]使用递归GNN对RGBD数据进行语义分割。[9]将点云分割为简单的几何形状,并将它们链接到图形中以进行语义分割。[2][17]研究使用GNN对点云进行分类。到目前为止,很少有研究着眼于设计一种用于目标检测的图神经网络,来对目标形状进行明确的预测。
与以往的工作不同,我们设计了一个用于目标检测的GNN。我们不是将点云转换为规则网格(如图像或体素),而是使用图形表示来保留点云的不规则性。与重复对点进行采样和分组为集合的技术不同,我们只需构建一次图形。提出的Point-GNN算法通过迭代更新同一图上的顶点特征来提取点云特征。我们的工作是一种单级检测方法,不需要开发像[4][16][21][11][13]中那样的二级精化神经网络。
在本节中,我们将介绍所提出的从点云中检测3D对象的方法。如图2所示,方法的总体架构包含三个部分:(a)图形构造,(b)T次迭代的GNN,(c)边界框合并和评分。
图2 所提出方法的体系结构。它有三个主要组成部分:(a)从点云构建图形,(b)用于目标检测的图神经网络,(c)边界框合并和评分。
在形式上,我们将N个点的点云定义为一个集合P = { p1,…, pN },其中pi = (xi,si)为一个带有三维坐标xi∈ℝ3和状态值si∈ℝk(长度为k的矢量代表点属性)的点。状态值si可以是反射的激光强度,也可以是编码周围物体的特征。在给定一个点云P的情况下,我们以P为顶点,将一个点与其在固定半径r内的相邻点连接起来,从而构造一个图G = (P, E),例如:
这种图的构造就是众所周知的固定半径近邻搜索问题。通过使用单元列表查找在给定截止距离内的点对,我们可以在运行时间复杂度为O(cN)的情况下有效地解决这个问题,其中c为半径内的最大邻居数[1]。实际上,一个点云通常由数万个点组成。构造一个以所有点为顶点的图会带来很大的计算负担。因此,我们使用体素下采样点云
来构建图形。必须注意的是,这里的体素仅用于降低点云的密度,并不用作点云的表示。我们仍然使用图来呈现下采样的点云。为了保留原始点云中的信息,我们在顶点的初始状态值si中对密集的点云进行编码。更具体地说,我们搜索每个顶点r0半径内的原始点,并使用集合上的神经网络来提取它们的特征。我们遵循[10][23],使用MLP嵌入激光雷达反射强度和相对坐标,然后用Max函数对它们进行聚合。我们使用生成的特征作为顶点的初始状态值。在图形构建之后,我们使用GNN处理图形,如图2b所示。
典型的图神经网络通过沿边聚合特征来细化顶点特征。在第(t+1)次迭代中,它以下列形式更新每个顶点要素:
其中,e和v是来自第t次迭代的边和顶点特征。函数f(.)计算两个顶点之间的边特征。ρ(.)是集合每个顶点的边特征的集合函数。g(.)利用聚集的边缘特征更新顶点特征。然后,图神经网络输出顶点特征或在下一次迭代中重复该过程。
在目标检测的情况下,我们设计GNN来优化顶点的状态,以包括关于该顶点所属的对象的信息。为了实现这一目标,我们重写公式(2),以使用其邻居的状态来优化顶点的状态:
注意,我们使用邻居的相对坐标作为f(.)的输入,用于边缘特征提取。相对坐标对点云的全局位移产生平移不变性。然而,它仍然对附近区域的平移敏感。当向顶点添加小平移时,其相邻顶点的局部结构保持相似。但是邻居的相对坐标都会改变,这会增加ft(.)的输入方差。为了减小平移方差,我们提出根据邻居的结构特征而不是中心顶点坐标来对齐邻居坐标。因为中心顶点已经包含了上一次迭代的一些结构特征,所以我们可以使用它来预测对齐偏移,并提出一种自动配准机制:
Δxi是顶点配准其坐标的坐标偏移。h(.)使用上一次迭代的中心顶点状态值计算偏移。通过将h(.)设置为输出零,GNN可以在必要时禁用偏移量。在这种情况下,GNN回到公式(3)。第四节分析了该自动配准机制的有效性。
如图2b所示,我们使用多层感知器(MLP)对f(.),g(.)和h(.)进行建模,并在g(.)中添加残余连接。因其鲁棒性我们选择ρ(.)作为Max[3]。然后给出所提出的图网络中的单次迭代:
每个迭代t使用一组不同的MLP,在迭代之间不共享。图神经网络经过T次迭代后,我们利用顶点状态值来预测顶点所在的对象的类别和边界框。分类分支MLPcls计算多类概率。最后,一个定位分支MLPloc为每个类计算一个边界框。
对于目标类别,分类分支为每个顶点计算一个多类概率分布{pc1, …, pcM}。M是对象类的总数,包括背景类。如果一个顶点在一个对象的边界框内,我们将对象类赋值给这个顶点。如果一个顶点在任何边界框之外,我们就为它分配为背景类。我们用平均交叉熵损失作为分类损失。
其中lm, hm, wm,θ0,θm是恒定比例因子。
定位分支预测每个类的编码边界框δb = (δx,δy,δz,δl,δh,δw,δθ)。如果顶点在边界框内,我们将计算真值和我们的预测之间的Huber损失[7]。如果顶点在任何边界框之外,或者它属于我们不需要定位的类,则将其定位损失设置为零。然后,我们平均所有顶点的定位损失:
为了防止过拟合,我们给每个MLP添加了L1正则化。总损失为:
由于多个顶点可以位于同一对象上,因此神经网络可以输出同一对象的多个边界框。有必要将这些边界框合并为一个,并指定置信度分数。非最大抑制(NMS)已被广泛应用于此目的。通常的做法是选择分类分数最高的框,而不显示其他重叠框。然而,分类分数并不总能反映定位质量。值得注意的是,部分遮挡的对象可能具有指示对象类型的强线索,但缺乏足够的形状信息。而标准NMS可以仅基于分类分数来挑选不准确的边界框。
为了提高定位精度,我们提出了考虑整个重叠框簇来计算边界框的方法。更具体地说,我们考虑了重叠边界框的中值位置和大小。我们还将置信度分数计算为由交并比(IoU)系数和遮挡系数加权的分类分数之和。遮挡系数表示占用体积比。给定一个框bi,使li, wi, hi分别为长宽高,vi, vi, vi分别表示其方向的单位向量。xj为点pj的坐标。遮挡系数为:
我们按照算法1所示修改了标准NMS。它返回合并的边界框M和它们的置信度分数Z。我们将在第四节研究它的有效性。
我们使用广泛使用的KITTI目标检测基准[6]来评估我们的设计。KITTI数据集包含7481个训练样本和7518个测试样本。每个样例都提供点云和相机图像。在我们的方法中,我们仅使用点云。由于数据集仅注释图像中可见的对象,因此我们仅在图像的视场内处理点云。KITTI基准测试评估了三种对象的平均精度(AP):汽车、行人和骑自行车的人。由于规模不同,我们遵循惯例[10][23][19][21],为汽车训练一个网络,为行人和骑自行车的人训练另一个网络。为了进行训练,我们删除了不包含感兴趣对象的样本。
我们在我们的图神经网络中使用了三次迭代(T=3)。在训练过程中,我们将每个顶点的最大输入边数限制为256。在推理过程中,我们使用所有的输入边。所有GNN层使用单元(64, 3)的双层MLPh执行自动配准。MLPcls大小为(64,#(classes))。对于每一个类,MLPloc大小为(64,64,7)。
汽车:我们将(lm,hm,wm)设置为汽车边界框大小的中位数(3.88m,1.5m,1.63m)。我们把θ∈[−π/4,π/4]的侧视汽车和θ∈[π/4,3π/4]的前视汽车视为两个不同的类别。因此,我们分别设置θ0=0和θ0=π/2。范围θm设为π/2。连同Background类和DoNotCare类一起,预测了4个类。我们构造了r=4m和r0=1m的图。我们将
设置为下采样点云,体素大小在训练时为0.8m,在推理中为0.4m。MLPf和MLPg大小均为(300, 300)。对于初始顶点状态,我们使用(32, 64, 128, 300)的MLP嵌入原始点,在Max聚合之后使用(300, 300)的MLP。我们在NMS中设置Th = 0.01。
行人和骑自行车的人:同样,我们将(lm,hm,wm)设置为中间边界框大小。我们为行人设置了(0.88m,1.77m,0.65m),为骑自行车的人设置了(1.76m,1.75m,0.6m)。与对汽车类所做的类似,我们将前视图和侧视图对象视为两个不同的类。连同Background类和DoNotCare类一起,预测了6个类。我们使用r = 1.6m构建图形,并在训练中对点云进行0.4m的体素大小下采样,在推理中对点云进行0.2m的下采样。MLPf和MLPg大小均为(256, 256)。对于顶点状态初始化,我们设置r0= 0.4m。我们使用(32, 64, 128, 256,512)的MLP进行嵌入,使用(256, 256)的MLP处理聚合特征。我们在NMS中设置Th = 0.2。
我们对提出的GNN进行端到端的训练,批大小为4。损失权重α=0.1,β=10,γ=5e-7。我们使用随机梯度下降(SGD)和阶梯情况下的学习率衰减。对于汽车,我们使用的初始学习率为0.125,衰减率为每400K步0.1。我们对这个网络进行了1400K步的训练。对于行人和骑自行车的人,我们使用的学习率为0.32,衰减率为每400K步0.25。我们训练了1000K步。
为了防止过度拟合,我们对训练数据进行数据增强。与许多使用复杂技术创建新的真值框的方法[19][10][16][21]不同,我们选择了全局旋转、全局翻转、框平移和顶点抖动的简单方案。在训练过程中,我们在Δθ∼N(0,π/8)范围内随机旋转点云,然后以0.5的概率翻转x轴。之后,每个框和框110%大小内的点随机移位(Δx∼N(0,3),Δy=0,Δz∼N(0,3))。我们使用一个扩大10%的框来选择点,以防止切割对象。在平移过程中,我们检查并避免了框之间、背景点与框之间的碰撞。在图的构建过程中,我们使用随机的体素下采样来诱导顶点抖动。
我们已经将我们的结果提交给了KITTI 3D目标检测基准和鸟瞰图(BEV)目标检测基准。在表1和表2中,我们将我们的结果与现有文献进行了比较。KITTI数据集评估三个难度级别的平均精度(AP):简单、中等和困难。我们的方法在简单和中等级别的汽车检测和中等、困难级别的骑车人检测上都取得了领先的结果。值得注意的是,在简单的BEV汽车检测方面,我们超过了之前最先进的方法3.45。此外,除了行人检测之外,我们在所有类别上都优于基于融合的算法。在图3中,我们提供了所有类别的定性检测结果。相机图像和点云上的结果都可以可视化。必须注意的是,我们的方法只使用点云数据。因为测试数据集不提供真值标签,相机图像纯粹用于视觉检查。如图3所示,尽管没有达到最高分,我们的方法仍然能够很好地检测行人。行人检测不如汽车和骑自行车的人检测好的一个可能原因是顶点不够密集,无法实现更准确的边界框。
表1 在KITTI测试数据集上进行3D目标检测的平均精度(AP)比较。
表2 在KITTI测试数据集上进行鸟瞰图(BEV)目标检测的平均精度(AP)比较。
图3 使用Point-GNN对KITTI测试数据集的定性结果。我们在图像和点云上都显示了预测的汽车(绿色)、行人(红色)和骑自行车者(蓝色)的3D边界框。
对于消融研究,我们遵循标准实践[10][21][5],将训练样本分为3712个样本的训练拆分和3769个样本的验证拆分。我们使用训练拆分来训练网络,并评估其在验证拆分上的准确性。我们遵循相同的协议,并通过AP评估其准确性。除非针对受控实验进行明确修改,否则网络配置和训练参数与上一节中的相同。由于汽车在数据集中占主导地位,我们将重点放在汽车的检测上。
框合并和评分。在表3中,我们比较了有和没有框合并和评分的目标检测准确率。对于没有框合并的测试,我们修改算法1中的第11行。我们不取中间边界框,而是直接取标准NMS中分类评分最高的边界框。对于没有框评分的测试,我们修改了算法1中的第12行和第13行,将最高的分类评分设置为框评分。对于没有框合并和评分的测试,我们修改了第11、12和13行,这实际上变成了标准NMS。表3的第2行显示了使用带有自动配准机制的标准NMS的基准实现。如表3的第3行和第4行所示,框合并和框评分操作都优于基准操作。如表中第6行所示,当结合使用时,它们在每个类别中都进一步优于单个操作的精度。同样,在不使用自动配准的情况下,框合并和框评分(第5行)的准确率也高于标准NMS(第1行)。这些结果证明了框评分和框合并的有效性。
自动配准机制。表3还显示了自动配准机制带来的准确性改进。如第2行所示,通过单独使用自动配准,我们在所有3D检测类别和中等、困难BEV检测类别上也都超过了未自动配准的基准(第1行)。简易BEV检测类别的性能略有下降,但仍较为接近。将自动配准机制与框合并和评分相结合(第6行),我们获得了比单独使用自动配准(第2行)更高的准确率。然而,所有三个模块的组合(第6行)并不比框合并和评分(第5行)更好。我们猜测在添加自动配准分支之后可能需要调整正则化。
我们通过可视化公式4中的偏移量Δx进一步研究了自动配准机制。我们从不同的GNN迭代中提取Δx,并将它们添加到顶点位置。图4显示了输出检测结果的顶点及其添加了偏移量的位置。我们观察到,带有附加偏移量的顶点位置向车辆的中心移动。无论原始顶点位置如何,我们都可以看到这样的行为。换言之,当GNN越深,相邻顶点的相对坐标对中心顶点位置的依赖程度越小,而更多地依赖于点云的属性。偏移Δx取消了中心顶点的平移,从而降低对顶点平移的敏感度。这些定性结果表明,方程4有助于降低顶点位置的平移方差。有关更多示例,请参见补充材料。
图4 验证拆分中的一个示例显示了添加了偏移的顶点位置。蓝点表示顶点的原始位置。橙色、紫色和红色圆点表示添加了从第一次、第二次和第三次图神经网络迭代中提取的偏移量的原始位置。
Point-GNN迭代。我们的Point-GNN迭代地细化顶点状态。在表4中,我们研究了迭代次数对检测精度的影响。我们用T=1、T=2训练Point-GNNs,并将其与第4.3.1节中的配置T=3进行比较。此外,我们直接使用初始顶点状态训练检测器,无需任何Point-GNN迭代。如表4所示,仅有初始顶点状态的精确度最低,因为它在顶点周围只有一个小的感受野。如果没有Point-GNN迭代,局部信息就不能沿着图的边缘流动,因此它的感受野就不能扩展。即使在单次Point-GNN迭代(T=1)的情况下,精度也有显著提高。T=2比T=3具有更高的精度,这可能是由于神经网络深入时的训练困难。
运行时间分析。检测算法的速度对于自动驾驶等实时应用非常重要。然而,影响运行时间的因素很多,包括算法体系结构、代码优化和硬件资源。此外,优化实现并不是这项工作的重点。但是,当前推理时间的细分有助于未来的优化。我们的实例使用Python编写,并使用Tensorflow进行GPU计算。我们在配备Xeon E5-1630 CPU 和 GTX 1070 GPU 的台式机上测量了推理时间。验证拆分中一个样本的平均处理时间为643ms。读取数据集并运行校准需要11.0%的时间(70ms),创建图形表示将消耗18.9%的时间(121ms),GNN的推理需要56.4%的时间(363ms),框合并和评分花费13.1%的时间(84ms)。有关实例细节,请参见我们的代码。
对激光雷达稀疏性的鲁棒性。KITTI数据集使用64线激光雷达采集点云数据。如此高密度的激光雷达通常会导致较高的成本。因此,研究密度较小的点云环境下的目标检测性能是很有意义的。为了模拟扫描线较少的激光雷达系统,我们对KITTI验证数据集中的扫描线进行了下采样。因为KITTI给出的点云没有扫描线信息,所以我们使用k-means将点的仰角聚类成64个簇,每个簇代表一条激光雷达扫描线。然后,我们通过跳过中间的扫描线,将点云向下采样到32、16、8条扫描线。我们对下采样的KITTI验证拆分的测试结果如表5所示。对于中等和困难检测级别的精度随着下采样数据的下降而迅速下降,而对于简单级别数据的检测保持合理的精度,直到它被下采样到8个扫描线。这是因为简单级别的对象大多靠近激光雷达,因此即使扫描线的数量减少,也会有密集的点云。
我们提出了一种称为Point-GNN的图神经网络,用于从点云的图形表示中检测3D对象。通过使用图形表示法,我们对点云进行了紧凑的编码,而不需要映射到网格,也不需要重复采样和分组。我们的Point-GNN在KITTI基准的3D和鸟瞰图目标检测中都达到了领先的精度。实验结果表明,本文提出的自动配准机制降低了平移方差,并通过框合并和评分操作提高了检测精度。在未来,我们计划优化推理速度,并对来自其他传感器的输入进行融合。