基于SA-PointNetVLAD的点云分类网络
2022-05-30李肖南程海霞张志勇
李肖南,王 蕾,2,程海霞,张志勇
(1.东华理工大学 信息工学院,江西 南昌 330013;2.江西省核地学数据科学与系统工程技术研究中心,江西 南昌 330013)
0 引 言
点云作为一种表示三维模型的基本格式,可以通过激光扫描仪很轻易地获取,但由于其点数不确定性和排列的无序性,不适合输入到深度神经网络中处理。近年来,一些研究人员致力于开发3D点云的分类方法。2017年,Qi等人提出了用于直接处理不规则点云的PointNet[1]框架,它通过对每个点独立执行特征学习,然后应用最大池来累积特征,从而实现点云的排列不变性。虽然PointNet[1]比以前的方法更加精确和健壮,但是它忽略了局部特征,这限制了它对复杂场景的细粒度模式识别和感知。作为增强版,PointNet++[2]引入了分层特征学习来学习尺度不断增大的局部特征,但在学习过程中仍然只对每个点进行独立操作,忽略了点与点之间的关系。为了解决这个问题,一些学者通过考虑每个点的邻域来充分提取局部特征,尽管在公共数据集上已经取得了有效的结果,但是仍然存在一些未解决的问题。首先,每个点都有自己的坐标信息和额外的属性值,即颜色、法线、反射率等。这种表示只表达点本身的物理意义,而不考虑其邻近的和上下文的意义。第二,每个点的标注不仅取决于它自己的表示,还与其他点有关,点云中复杂的全局关系还没有被明确地开发和描述。第三,不同位置的点对几何知觉的重要性是不相等的。具体来说,角点和边缘比平坦区域的视觉敏感,强调这些关键点对于提高特征的质量是至关重要的。
为了解决上述问题,该文提出了一种新的三维点云分类模型,包括低级局部几何特征和高级全局语义特征,并引入了self-attention机制,更灵活地捕捉局部和全局信息,可以充分挖掘三维点云的深层隐含特征。这项工作提供了以下三个主要内容:
(1)构建了一个端到端的三维点云分类模型,网络采用逐点特征提取和汇集操作来解决无序的点云问题。
(2)以Self-Attention机制的方式作为网络输入,而不是仅考虑每个孤立点的位置,可以灵活地捕捉全局和局部的联系,可以充分挖掘三维点云的深层隐含特征。
(3)采用KNN和VLAD模块分别提取低级几何特征和高级语义特征,并引入关键点来表示每个不同点的权重,达到对点云特征的有效提取。
1 相关工作
随着深度学习技术的发展和更多的数据集开始向公众开放,点云处理已经成为计算机视觉领域的一项重要任务。深度神经网络已经在各种视觉任务中取得了显著的成功,然而,将CNN应用于不规则结构的物体里(如3D点云)仍然具有挑战性。
PointNet[1]是将原始点云作为深度学习输入的开创性工作,并且它是首次对点云进行直接处理,因此为很多学者对点云的研究提供了新思路。其主要思想是利用点向卷积将原始三维坐标映射到高维特征空间,然后进行max pooling或average pooling操作来消除点排列的影响。但是由于PointNet在提取点云特征的时候忽略了局部特征,从而限制了其分类性能。为了解决这一问题,PointNet++[2]提出了点云的分层特征学习方法,将整个点集划分为多个子集,并对每个子集重复应用一个简化的PointNet[1],这些局部特征被分组组成一个全局表示。PointNet++[2]由于分组的复杂过程和反复的前向传播,使得调优变得非常耗时,导致结果并不能达到特别理想。这两种方法的提出使得很多学者都开始相继研究直接对点云处理的方法。
最近,已经有很多学者引入k-d树、图等结构来捕获非结构化点之间的局部关系[3-8],例如,KCNet[8]和FoldingNet[7]使用基于图的max-pooling对图进行下采样,该图使用构建的k-NN图对每个节点的邻域取最大特征。但是这些方法不能保证将最重要的点(临界点)传递给下层网络,使得具有不太相关的特征的点可能被选择,而重要的点可能被删除。一些学者还提出了新的卷积策略,尝试引入各种局部特征,如到邻近点的距离和局部表面法线的夹角,并用它们来表示点云。随后的PointCNN[9]、PointConv[10]等文献也聚焦于点云的局部结构,进一步提高了捕获特征的质量。根据局部特性和全局特性之间的关系,引入了self-attention机制、KNN模块以及VLAD层来提高点云的分类精度,此外,还引入了一个有效的关键点描述符来帮助识别整体几何图形。经过大量实验,该模型在ModelNet40数据集上获得了90.9%的分类精度。
2 点云深度学习网络框架
该文提出的网络框架引入了self-attention层来计算每个点与其他所有点之间的关联,从而挖掘点云的局部区域细粒度特征以及全局信息,并采用KNN算法感知点云的局部形状结构。在点云识别中,通常可以通过一些边角上的点来判别物体形状,因此在点云分类中,一些关键点信息也不可忽略。在网络中引入了一个有效的关键点描述符,对一些点通过计算其法向量来获取不同的点权重,这是整个网络的关键之处。
文献[11]中提出了一种新的VLAD方法,首次提出高层几何信息是可以通过每个点的低层几何描述子和几个视觉单词之间的关系来间接描述的,这种关系使网络能够推断出三维点云的高层语义信息。因此,该文在网络框架中加入了这个模块,用于提取点云中包含的高层几何信息。总体网络框架如图1所示。
2.1 SA-TNet(self-attention层)
点之间的依赖关系可以改善分类结果。在实验中,受到自然语言处理(序列对序列)任务研究的启发,该文引入了一种self-attention机制,可以提取点之间的上下文特征。它是一种自我注意模块,可以简单地描述为查询到键值对的映射,通常包含查询、键、值和输出。通过对键值对的查询,得到对应键下查询的权值,将权重添加到相应的查询中以得到输出。同一个查询在不同的键下有不同的输出,即不同的关注,并且self-attention对于输入顺序也是不变的。该文利用self-attention机制来获得每一个点的得到了新的考虑了上下文信息的表征。self-attention模型如图2所示。
图1 SA-PointNetVLAD网络框架
图2 self-attention 模型
与传统的基于注意的序列对序列模型不同,在一个自注意块中,查询向量Q∈RDQ,key向量K∈RDK(通常DQ=Dk),Value向量V∈RDV,它们都是从同一个输入学习的,也可以认为Q,K和V只是三个独立的MLP层学习的三个特征向量。注意权值通过Q和K的点积计算,然后与V相乘得到变换后的表示。
(1)
此时,得出的attention value是一个向量值,代表了某一点的编码向量。该向量中包含了该点的上下文关系,既包含了全局联系同时也拥有了局部联系,这也是attention的强大优势之一,它可以同时一次性获得全局联系又可以获得局部联系。
2.2 KNN搜索
Un,k=Pn⊕(Pn,k-Pn)n∈[1,k]Un,k∈R6
(2)
上面部分的输出形成一个N×K×6的张量,其中N表示3D点集的点数,K表示每个点的邻域数,最后6维是点p的坐标和第k个最近邻点的统一坐标。为了获得足够的表达能力来将每个点特征转换成更高维度的特征,后面加了全连接层,3D点集表示为N×K×64的张量。因此KNN模块可以被视为学习从输入3D点集提取逐点低级几何特征的组件,如图3所示。此外,KNN模块以逐点方式提取低层几何特征,解决了点云无序的问题,有效提高了分类任务的准确性。
图3 KNN模块
2.3 关键点检测
一般情况下,关键点表示位于目标对象边缘或角上的点。现有的方法[12]使用注意力模块来突出有利于识别的区域。在这种数据驱动的方法中,每个点的重要程度是自动学习的,然而由于缺乏真实感的关键点进行监督,使得难以区分哪个点更重要。笔者认为,利用点云的内在属性可以获得更准确的信息。众所周知,点的法线可以反映形状特征,所以通过考虑相邻区域法线的变化来为每个点分配一个响应。
(3)
n表示点的法线。在进行全局最大池化操作之前,将计算得到的响应集成到点云的全局表示中。
2.4 VLAD层
在本节中,主要描述了利用VLAD机制[11]从3D点集中提取高级语义特征,如图4所示。VLAD是一种流行的描述符池方法,用于实例级检索和图像分类。受PointNetVLAD[13]和NetVLAD[14]的启发,通过每个点的低级几何描述符和几个视觉单词之间的关系来间接描述高级语义特征。如图4所示,VLAD模块主要包括以下两个步骤:(1)top- K VLAD特征选择;(2)特征变换和融合。
图4 VLAD框架
2.4.1 top-K VLAD特征选择
取n个低级几何特征描述符{v1,v2,…,vn|vn∈RD}作为VLAD模块的输入,其中D=128。同时,初始化M个视觉单词(“聚类中心”),表示为{c1,c2,…,cm|cm∈RD}。每个点的低级几何特征描述符vn被分配给每个视觉单词cm,由残差向量vn-cm表示,该向量记录低级几何特征描述符和视觉单词之间的差异。第n个低级几何特征描述符vn与M个视觉单词的关系表示为r,r的(n,d)关系计算如下:
(4)
an(cm)表示注意系数,cm,d和vn,d分别表示在m的局部特征上的第d个维度和第n个低层几何特征描述子,an(cm)是影响cm,d的权重。用低层几何特征描述子的soft-assignment来表示an(cm),an(cm)通过下面公式来计算:
(5)
(6)
其中,k∈[1,top-K]和d∈[1,D]。一方面,top-K值控制剩余向量的数量,另一方面,它表示不同视觉单词之间的重叠。此外,为了改善网络的非线性变换,使用了共享的FC层。
2.4.2 特征转换和融合
top-kVLAD module输出一个N×3×128张量,其中N表示3D点集中的点数,3表示top-K视觉单词的数量,每个点被表示为一个3×128矩阵。在VLAD模块中添加了一个FC layer层,经过FC Layer之后每个点都表示为3×256的矩阵,因此3D的数据集表示为N×3×256。然后将其输入到逐点的全局池化层,池化层为每个点生成高级语义特征。这里VLAD模块可以看作是学习从输入的3D点集中提取(n×256)维高层几何特征的模块。VLAD模块不仅解决了点云的无序问题,而且还有效提高了点云分类的准确性。
3 实验结果与评估
3.1 实验设置
该文提出的网络框架主要是在ModelNet40[15]数据集上进行实验,数据集由来自40个类别的12 311个CAD模型组成,其中9 843个用于训练,2 468个用于测试。由于设备限制,如果输入的点数过多将会延长运行时间,也会导致后期硬件散热问题无法长时间运行,实验中统一以512个点作为网络输入。设置初始学习率为0.001,总的训练轮数为250,在Adam优化器下(momentum=0.9),Batch Size=32参数下进行训练,实验配置如表1所示。
表1 实验设置
3.2 K值分析
本节主要分析了KNN模块中的K值对模型性能的影响。在ModelNet40上进行了大量实验,在其他条件不变的情况下,通过设置不同的K值以获取最佳的分类效果。K的大小和分类精度之间的关系如图5所示,由图可以看出当epoch=250,K=8时,分类精度最佳。
图5 不同K值的效果对比
由图5可以看出,当K值偏小时(如K=4),在构建局部邻域时所搜索的邻近点数较少,“学习”的估计误差也会随之增大,从而会降低点云分类精度。然而,随着K值的增大,所包含的不相关点数也会增加,由图可以看出,K=16时其分类精度比起K=8时有所下降。因此,在构建局部邻域时,K值的选取至关重要。将K值设为8,其搜索的局部邻域包含了一定数量的点或特征,不仅避免了局部信息不足对点云分类结果产生的影响,还避免了不相关点数导致的较大学习近似误差。
3.3 模块消融分析
图1显示了SA-PointNetVLAD的网络架构,本节为了研究SA-TNet模块和VLAD模块的功效,在ModelNet40上进行了消融分析。
表2中第一行显示了只使用简单的共享层以及基础KNN模块,可以看出其性能很差, VLAD模块的性能很差;第二行是基础模块KNN和SA-TNet模块的集成结果;第三行是基础模块KNN和VLAD模块的集成结果,第四行是基础模块KNN、SA-TNet和VLAD模块的集成结果。结果表明,在KNN模块的基础上单独引入SA-TNet和VLAD模块效果分别提升了1.79个百分点和22.28个百分点。当SA-TNet和VLAD模块全部整合在一起时,如最后一行所示,SA-PointNetVLAD的分类精度达到90.91%。
表2 SA-TNet模块、KNN模块和VLAD模块
实验结果分析如下:(1)虽然不同的模块对分类精度的贡献不同,但通过增加更多的模块可以进一步提高最终的分类精度;(2)在三维对象分类任务中,高层语义特征比低层几何特征更重要,充分说明VLAD模块有效提取了高层语义特征。
3.4 与其他方法的比较
本节主要展示了SA-PointNetVLAD从三维点云中提取特征时的效率。主要在ModelNet40数据集上设置了几组实验,分类模型的网络配置与3.1节中描述的相同。由于实验设备限制,主要将numpoint设置为512,观察到实验结果与pointNet的对比效果(如图6所示),SA-PointNetVLAD比PointNet在ModelNet40数据集上的分类精度明显要高。
为了进一步评估SA-PointNetVLAD模型的分类效果,基于ModelNet40数据集与几种先进的方法(包括3DshapeNets[16],OctNet[17],VoxNet[18], O-CNN[6],ECC[19],So-Net[20],A-SCN[21],PointNet++[2],PointNet[1]和Kd-Net[22])进行了比较。结果如表3所示。
图6 与pointNet的总分类精度对比
表3 ModelNet40数据集分类精度 %
从表3中可以看出,由于该文在提取特征时考虑了点与点之间的几何关系,增强了描述局部信息和全局信息的能力,SA-PointNetVLAD的性能优于其他所有只使用点作为ModelNet40数据集输入数据的方法。SA-PointNetVLAD比ECC[19]的分类精度高了3.5个百分点,SA-PointNetVLAD比So-Net[20]使用了相当小的输入数据大小,但它的效果却是差不多的。与基于体积的方法相比,SA-PointNetVLAD获得了更好的性能,与基于点的方法相比,结果优于所有单模型结果,对于同时运用了self-attention机制的A-SCN[21],分类精度高了1.1个百分点,而且SA-PointNetVLAD所需的输入数据大小仅为512×3。从平衡性能和网络复杂性的角度来看,SA-PointNetVLAD具有更多的优势。
4 结束语
针对三维点云模型中缺乏对各个点的局部信息和全局信息的有效利用,提出了一种新的点云分类框架SA-PointNetVLAD,不仅在PointNet原始的框架上做出了改进,还对整个网络框架进行了改进,最后点云分类精度达到了90.9%。在实验过程中,发现KNN模块、SA-TNet模块以及VLAD模块这三个模块都大大提升了网络框架的分类精度,并具有一定的实用性。在今后的工作中,将针对点云的实用性做进一步的提升,在考虑点云的法向量的同时,也可以考虑一些其他的影响因素。在检测出关键点后,没有做进一步的提取特征操作,而是简单的将结果输入到了VLAD模块中,后期可以考虑将这些部分进行进一步的处理以获得更好的效果。