一种基于注意力机制的三维点云物体识别方法
2020-04-30周浩杰韦海亮
钟 诚,周浩杰,韦海亮
(数学工程与先进计算国家重点实验室,江苏 无锡 214000)
1 概 述
三维点云是指一个三维坐标系统中一组向量的集合。这些向量通常以X,Y,Z三维坐标的形式表示,一般用于描述物体的外貌形状。深度学习方法已经被广泛应用于图像识别、文本处理等领域。但目前而言,使用深度学习方法提取三维点云数据的特征仍然存在诸多障碍。其中最主要的原因在于点云的排列不变性。用于表示同一物体的n个点云数据点有n!种排列方式,而点云的高层语义特征不能因为点云排列顺序的变化而改变。这意味着过去应用在网格状数据(如图像、文本)上的卷积方法难以应用在三维点云数据上。Charles R. Qi等人提出的PointNet[1]为三维点云数据的处理打开了一扇新的大门。PointNet将对称函数应用到三维点云的处理过程中,凭借最大池化的方法提取三维点云的高层特征,借此刷新了多项基准数据集的记录。最大池化的方法虽然在高层语义特征的提取上有很大优势,但是采用这种方法会造成三维点云局部几何特征的缺失,给局部信息的提取造成困难。自然语言处理问题同样需要妥善解决局部信息与全局信息的关系。自然语言处理中,解决这一问题的常用方法有:卷积网络、循环卷积网络[2]以及注意力机制[3]。其中注意力机制可以不依赖卷积的堆叠,实现局部与全局信息的整合。这一特点满足三维点云数据处理过程的需求,所以利用注意力机制提取点云信息是一种可行的技术路线。
文中的主要贡献分为两点:在点云特征提取中引入注意力机制,为点云局部与全局信息的整合提供一种可行方法;使用稀疏卷积层替代最大池化层,减少池化过程的信息损失。
2 相关工作
三维点云的特征提取技术在与点云相关的应用中发挥着重要作用。与深度学习特征有关的主流的点云特征提取方法主要可以分为三类:体素化方法[4]、多视图方法、最大池化方法。
体素化方法可以视作二维卷积在三维空间上的拓展与应用。体素化方法结构简单,但是在三维空间构造网格对内存资源消耗大,并且点云在空间中的分布往往是稀疏的,直接对空网格进行卷积会造成不必要的计算资源浪费。所以单纯的体素化方法一般难以完成高分辨率点云解析任务以及大规模点云处理任务[5]。多视图方法通过将三维点云投影到二维空间使用二维卷积方法完成三维数据的特征提取。多视图方法在三维目标检测方面有着独到的优势,但是在如三维目标分割等应用场景中效果不佳[6]。因为投影的过程造成了深度信息的损失。近年来,直接使用三维点云数据作为输入利用最大池化方法处理三维点云逐渐成为了研究热点。如PointNet[1]等可以利用最大池化方法完成三维点云特征的高层语义信息提取,然而使用最大池化操作的缺陷在于模型会丧失感知局部信息的能力。针对上述问题,研究者设计出了能够描述局部特征的三维点云特征提取网络如PointNet++[7],基于Octree的方法[8]、PointCNN[9]等。这些方法大都按照:分层、局部特征的提取、全局特征的提取、特征聚合等步骤处理点云信息。其中,为了构建全局关系往往需要对点云进行分层,分层的过程又可能会引入新的信息损失。比如文献[10]中的分层网络会将三维点云切割的过细,产生难以利用的点云碎片。在一些应用中,直接结合三维点云的局部与全局信息可能起到更好的特征处理效果。
自然语言中处理上下文关系的一些方法可以为三维点云的处理提供参考。自然语言处理通常利用循环卷积网络对上下文的信息进行抽取,解决局部与全局信息的整合问题。但是循环卷积网络的基本结构是一个递归模型。递归模型一般难以实现并行化并且循环卷积网络对全局信息的感知相对较弱,要逐步递归才能获得全局信息,一般要使用双向循环卷积网络。卷积网络只能获取局部信息,需要通过层叠来增大感受野。文献[11]提出了仅依赖注意力机制即可提取文本的全局信息的方法。笔者认为利用注意力机制同样能够在三维点云上获取全局信息。不同于直接构造特征提取层的方法,文中基本的思路是构建如下编码方案:
yt=f(xt,A,B)
其中,xt∈X表示原始点云数据,yt表示编码后的点云数据,A,B表示两个序列矩阵。若取A=B=X,则得到结果yt=f(xt,X,X)。yt为xt与全局X点云数据交互后的编码结果,这个结果既包含本地信息又包含全局信息,提取特征的问题转化成为确定编码函数f的问题。
3 方 法
本节结合注意力机制的基本概念介绍在点云中应用注意力机制的方法。针对最大池化层的缺陷,本节从理论上分析了池化层与卷积层的异同,给出了一种替换池化层的解决方案。
3.1 注意力机制
注意力机制的一般化定义如式(1)所示。
(1)
其中,Q∈Rn×dk,K∈Rm×dk,V∈Rm×dv。
不妨取qt∈Q,则对单个输入向量qt求得的编码结果可以表示为:
(2)
在Attention机制基础之上,谷歌提出的Multi-Head Attention机制用于进一步提升模型的编码能力[11]。文中使用的注意力机制模型主要基于Multi-Head Attention。相比基础的模型,Multi-Head Attention机制有两点不同。一是将Q,K,V经矩阵参数进行映射,再送入Attention模型;二是将原始输入进行多次不共享参数的Attention操作,输出结果拼接。这两点改进能提升模型的描述能力。具体的模型如下所示:
headi=Attention(QWiQ,KWiK,VWiV)
(3)
最终输出的特征表示为:
MultiHead(Q,K,V)=Concat(head1,…,headh)
3.2 在点云中使用注意力机制
注意力机制在点云数据与文本数据方面的应用密切相关又存在不同。应用于自然语言领域的注意力机制模型通常由一组编码器与解码器构成。编码器负责构建上下文关系,对词句进行映射,形成特征;解码器负责解释特征,对语义信息进行还原。文中应用注意力机制的主要目的是通过编码功能实现局部信息与全局信息的聚合,避免使用卷积堆叠逐层增加感受野的方法,进而绕过点云层次划分问题。所以文中主要利用注意力机制的编码部分,通过编码即可得到可用于点云分类的特征向量。
文中基于Multi-Head Attention机制对点云进行编码,需要在序列内部应用Attention,寻找序列内部的联系综合局部与全局信息。为实现这一目的,文中利用自注意力机制(Self Attention)[3]实现模型。所谓的自注意力机制就是将式(1)中的输入Q,K,V设为同一矩阵X。具体的模型如下所示:
Y=MultiHead(X,X,X)
(4)
其中,X为三维点云集合,Y为对点云的编码结果。
对某一点云xt∈X而言,其编码过程如式(5)所示:
(5)
容易观察到每次对xt进行编码的过程中,其他的点云也作为变量,影响到xt的输入结果,得到的编码结果既蕴含本地信息又包括全局信息。直接使用点云作为输入提取到的信息仅包含点特征,而点特征的描述能力较弱,难以囊括邻近的几何信息。为了更好地获取局部几何信息,文中参照边缘卷积[12]的概念对点云输入重新进行构造。记原始的点云集合为X,xt∈X,记xt的最近邻为xtn。xt的最近邻向量为(xt,xtn)。输入向量qt记为qt=(xt,xtn)。这样做是为注意力机制提供了一个直观的可解释的作用机制。qt的编码结果可以视作其余向量在输入空间中的线性组合。按上述方法构造出的最近邻向量qt完全可以用于重新生成原始的点云数据xt。这意味着输入向量构造方案不会破坏原始三维点云的信息。
三维点云难以应用卷积的一个主要原因在于点云的排列不变性。观察注意力机制公式(3),在该式中如果将K,V按行打乱顺序,那么经过Attention模块编码得到的结果还是一样的。这在自然语言处理中会造成词序混乱的问题,所以在用注意力机制处理自然语言时通常还需要增加一个标注位置信息的模块。然而这个问题在三维点云的处理中反而成为一个优点,因为三维点云的输入本身是无序的,若K,V的顺序对编码结果不造成影响,那么说明这种编码方案可以适应三维点云的序列无关性,Attention模块起到类似对称函数的作用。
3.3 对最大池化方法的替换
PointNet中最关键的点是最大池化方法能够描述三维点云的分布,并且池化层大小与模型的性能密切相关。然而最大池化操作的缺点在于局部信息的损失较大。虽然增加池化层的宽度可以逼近三维点云的空间分布,但是真实的应用场景中不可能无限制增加池化层宽度。局部信息的损失同样会为感知三维点云的精细结构造成困难。注意到最大池化操作是对点云空间的一种降采样。使用其他的采样方法有可能也能够达成相同的效果。
文献[13]指出池化层可以用卷积的形式进行表示,这表明在处理点云数据时同样可能用卷积方法对池化层进行替换。
为了阐明两者的区别与联系,下面对二者进行对比。设f是原始数据经过一系列网络处理后得到的特征表示(feature map)。f可以用一个三维矩阵W×H×N表示。其中W、H、N分别为feature map的宽度、高度以及特征的通道数。在这个三维结构下,池化操作可以看成是一个用p-norm当作激活函数的卷积操作。当p趋向于正无穷时,就是最大池化操作。卷积式的池化层的公式表示如下:
(6)
其中,k为池化层大小,r为步长,g(h,w,i,j,u) = (r·i+h,r·j+w,u)为f到池化层的映射函数。
卷积层的公式定义如下:
其中,θ为卷积权重,σ为激活函数,o∈[1,M]为输出通道。
通过观察上式不难发现,池化层可以视作一个特征级别的卷积。在式(7)中,当卷积步长取值非常大时,局部信息对卷积结果的影响相对较小[13]。此时卷积层对全局特征的提取性能较好。在目标分类的实验中同样证明了这一点:当取较大卷积核的步长时分类结果更好。
4 实 验
4.1 数据集
文中在ModelNet40数据集[14]上评估模型的三维形状分类性能。所有的点云数据来自对40个类别,共计12 311个CAD模型的采样。实验取其中9 843个模型用于训练,使用2 468个进行测试。对每个训练/测试模型实例抽取2 048个采样点。
4.2 AttentionPointNet结构
图1所示为AttentionPointNet的基本结构。
图1 AttentionPointNet模型
其中最基本的结构为Attention Block。文中的Attention Block模块(见图2)可以分为三个部分。
第一部分主要完成输入向量Q,K,V的线性映射。实际的模型采用自注意力机制,所以Q,K,V的取值均设置为三维点云的最近邻向量矩阵X。实验中采用长度为64的全连接层实现映射工作。为避免混淆,方便概念解释,下文仍使用Q,K,V代指Attention Block中的三部分输入(query,key,value)。模型中的第二部分为Multi-Head Attention模块。这一模块主要完成特征的融合工作。Q构成原始输入,K构成特征向量空间,V作为欲表征的结果,训练head=Attention(QWQ,KWK,VWV)中的WQ、WK、WV等参数矩阵。第三部分为一个残差模块。该模块将输入与V的值连接可以提升模型的分类性能,提高模型的分类准确率。
图2 Attention Block结构
4.3 AttentionPointNet实现
AttentionPointNet采用Tensorflow[15]构建。整体的结构包括一层卷积层、五个Attention Block模块、一层最大池化层和多个三层连接层。第一层的卷积层卷积核大小为(1,1,64)。五个Attention Block的通道维度大小分别为64、64、64、128、1 024。最大池化层宽度为1 024。使用Adam(adaptive moment estimation)算法作为优化算法,初始学习率为0.001。每20轮学习率减半。学习轮数300轮。表1为不同模型在ModelNet40数据集上的分类结果。
表1 ModelNet40数据集分类结果
4.4 去除最大池化层的AttentionPointNet
现有的大多数基于PointNet的模型依赖于最大池化层对空间分布的拟合。文中提出的Attention PointNet对每个三维点云进行编码,编码的信息中包含了其他点的空间分布信息。对于三维点云的分类这一问题,除了使用最大池化的方法,其他的降采样方法理应能取得类似的结果,比如经过特殊设计的卷积方法。在ModelNet40数据集上,文中分别改变卷积的步长,测试实验性能用于寻找最大池化层的替换品。
实验中取采样点个数为256,batchsize设为128,训练轮数设为300,对Attention Block5的输出结果(N×1 024)进行卷积。输出的通道维度为128。表2为用不同步长时替代最大池化层时,在ModelNet40数据集上的结果。
表2 不同卷积核在ModelNet40数据集上的分类结果
实验的结果同样证明在三维点云数据处理中,池化层可以由卷积层进行代替,使用较大的步长能更好地提取点云的全局特征,取得更优的分类效果。并且当步长的取值超过一定阈值,泛化性能基本保持不变。
5 结束语
针对三维点云的全局与局部信息整合问题,提出了利用注意力机制对三维信息进行整合的方法。目前利用深度学习技术处理三维点云的主流方法大都依赖最大池化层的表征能力。结合注意力机制,使用大步长的卷积方法对点云的高层次信息进行抽取,取得了与使用最大池化方法类似的结果。这表明除了池化方法,卷积方法也具备三维点云的高层信息提取的潜力。使用注意力机制的好处是能够一步到位捕捉到三维点云局部与全局的联系。但是相比长程的、全局性的依赖,在三维点云处理中有部分问题比如点云的分割问题,更加依赖于局部结构。在这种情况下,文中使用的最近邻向量构造方法就不太合适。而使用K近邻描述局部特征可能是更为合理的方案。