提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
原文链接
原文链接:https://arxiv.org/pdf/1807.00652.pdf
题目
PointSIFT: 一种用于三维点云语义分割的类似SIFT的网络模块
摘要
近来,三维理解研究为直接从点云中提取特征提供了思路[22,24],这需要对点云进行有效的形状模式描述。灵感来自出色的二维形状描述模块SIFT[15],我们设计了一个名为PointSIFT的模块,该模块对不同方向的信息进行编码,并能适应形状的尺度。具体地,设计了一个方向编码单元来描述8个关键方向,并通过叠加多个方向编码单元来实现多尺度表示。PointSIFT模块可以集成到各种基于PointNet的架构中,提高表示能力。大量实验表明,我们的基于PointSIFT的框架在标准基准数据集上优于最先进的方法。代码和训练模型将随本文一起发布。
1.引言
三维点云的理解是一个长期存在的问题。典型任务包括三维物体分类[33],三维物体检测[11,21,27]和三维语义分割[22],[24],[25]。其中,对点进行语义标注的三维语义分割是一项比较有挑战性的任务。首先,三维空间中点云的稀疏性使得大多数空间算子效率低下。此外,由于点云的无序和非结构化特性,点之间的关系是隐式的,难以表示。回顾以往的工作,已经提出了好几种解决办法来解决这个问题。在[19]中手工制作的体素特征用于几何关系的建模,[20]中提取RGBD图像的二维卷积神经网络特征。此外,二维卷积和三维卷积之间存在一种困境:二维卷积无法捕捉法线、形状等三维几何信息,而三维卷积运算量大。
最近,PointNet架构[22]直接操作点云,而不是三维体素网格或网格。它不仅加快了计算速度,而且显著提高了分割性能。在本文中,我们还对原始点云进行了研究。我们从成功的特征检测算法——尺度不变特征变换(SIFT)[15]中得到启发,该算法涉及两个关键特性:尺度感知和方向编码。我们认为这两种特性也有利于三维形状描述,因此设计了一个新的模块PointSIFT,用于三维理解,该模块具有这两种特性。PointSIFT的主要思想如图1所示。与使用手工制作特征的SIFT算法不同,我们的PointSIFT是一个参数化深度学习模块,可以优化和适应点云分割。
图1.SIFT的结构和我们的PointSIFT模块。左边显示两者都能捕获多尺度模式,并能适应不同尺度。右边显示方向编码在每个关键点/像素。
我们的PointSIFT模块的基本组成部分是一个方向编码单元(OE),它卷积了8个方向中最近的点的特征。与PointNet++[24]中K个近邻可能落在一个方向的K近邻搜索相比,OE单元捕获了所有方向的信息。我们进一步叠加了几个PointSIFT模块中的OE单元用于表示不同的规模。为了使整个体系结构具有尺度感知能力,我们通过捷径将这些OE单元连接起来,共同进行自适应尺度优化。我们的PointSIFT模块接收带有每个点n特征的点云和输出具有更好表示能力的n个特征。PointSIFT是一个通用模块,可以集成到各种基于PointNet的架构中,以改善3D形状表示。
我们进一步构建了一个层次结构,递归地应用PointSIFT模块作为局部特征描述子。类似于传统的2D[26]和3D[24]的分割框架,我们的两阶段网络首先对点云进行下采样以有效计算,然后上采样以得到密集的预测。在整个框架的每一层都使用了PointSIFT模块,显著提高了网络的表示能力。
实验结果表明,我们基于PointSIFT模块的架构在S3DIS[1](相对提高12%)和ScanNet[6](相对平均提高8.4%)数据集上的性能优于最先进的方法。
2.相关工作
三维数据的深度学习是一个不断发展的研究领域。我们研究了几个重要的三维表示的分割方法。对点云分割进行了较为详细的讨论。之后,我们简要地考察SIFT描述模块,并从中获取灵感。
2.1.三维表示
体积表示 深度学习的第一次尝试是通过体积表示。许多工作[17,23,33]试图将3D点云或场景转化为规则体素网格。然而,体积表示的主要挑战是数据的稀疏性和三维卷积的计算量。体素网格分辨率的一种实用选择是32 × 32 × 32,这远远不足以如实地代表复杂的形状或场景。此外,基于点云等方便的数据格式构建体积网格需要进行转换,这种格式存在截断误差和信息丢失的问题。虽然最近的一些工作[14,25,30]提出了解决稀疏性问题的技术(例如,八叉树数据结构),但体积方法的性能仍然不能与基于点云[23]的方法相提并论。
多边形网格 一些文献[4,16,34]着重于使用图形拉普拉斯算子来处理网格。此外,功能映射和循环一致性[9,10]有助于建立形状之间的对应关系。然而,这种方法仅限于流形网格。
多视图表示 [23, 29, 28]努力利用二维卷积神经网络在三维识别中的强大能力。在这些工作中,为了使输入符合二维卷积神经网络,需要将3D形状投影到2D图像。的对物体(或场景)的三维层次的理解是通过结合从不同角度拍摄的2D图像来实现的。然而,这种投影会导致失去最关键和最具辨别性的几何细节。例如,法向量的计算变得复杂,空间距离不被保留,遮挡阻止了对局部和全局结构的整体理解。如果没有包含这些几何细节,在形状完成和语义分割等任务中,性能会受到很大的限制。
2.2.基于点云的深度学习
PointNet及后续工作 最近,一系列工作提出了几种直接处理点云的有效架构。其中,一个很大的工作分支应用PoinetNet[22]作为无序的全局或局部描述子。PointNet[22]是一项开创性的工作,它通过全局最大池的点编码和聚合,将深度学习应用于无序的点云。PointNet++[24]提出了一种分层神经网络来捕捉局部几何细节。PointCNN[13]使用X -Conv层而不是普通的mlp(多层感知器)层来利用点的某些规范排序。动态图CNN [32] (DGCNN)提出了PointNet++[24]中用于球查询的另一种分组方法:KNN 遵循特征向量之间的欧几里得距离。超级点图[12](SPG)首先将点云划分为超级点,并将每个超级点嵌入共享的PointNet。通过对当前超级点和空间相邻超级点的点网嵌入来预测超级点的语义标签。在取得领先结果的同时,我们认为分割算法在一定程度上可以从有序的操作中受益。
旋转等方差和不变性 工作重点的另一个分支是旋转等方差或不变性。G-CNN[18]设计滤波器,使滤波器集在一定的旋转(如90度旋转)下是闭合的,来实现固定旋转的旋转不变性。这种方法只对某些离散旋转实现精确的旋转不变性,但计算量大。时间复杂度与等价类的基数成正比,这使得考虑大和一般的群组的旋转等方差是不切实际的。球形CNN[5, 7]将三维形状投影到球体上,并用球形滤波器处理信号,用于旋转等变表示。将球体转换为单个值的全局最大池进一步实现旋转不变性。球形CNN对旋转具有完全不变性,但形状在球面上的投影误差较大,不适用于具有一定拓扑性质的物体或场景。此外,帮助实现旋转不变性的操作大大限制了模型的容量,阻碍了它在分割任务中的使用。
2.3.尺度不变特征变换(SIFT)
SIFT是一种局部图像模式描述子,被广泛应用于物体识别、三维建模、机器人技术和各种其他领域。SIFT及其变体[3]由两个实体组成:尺度不变检测器和旋转不变描述子。
我们在SIFT算法中借鉴了这两个实体。在关键点检测阶段,SIFT算法通过多尺度表示实现了尺度不变性,并用于对不同尺度的目标进行鲁棒处理。在特征描述阶段,SIFT通过检测主导方向的旋转不变性,综合感知不同方向的图像模式。鉴于像SIFT的描述或CNN的核这样的有序描述符对二维图像产生了令人印象深刻的结果,我们希望拥有这样的描述符也可以有利于点云的表示。基于以上两个SIFT算法的观察结果,我们设计了一个尺度感知的描述符,该描述符通过有序操作对来自不同方向的信息进行编码。
3.问题说明
首先提出了点云语义分割的任务。给定的点云记为P, P是包含n个点的点集p1, p2,…, pn∈Rd,具有d维特征。每个点pi的特征向量可以是三维空间的坐标(xi,yi,zi)(或加上可选的特征通道,如RGB值、法线、中间级的表示向量等)。将语义标签集合表示为L。点云的语义切分是一个Ψ函数,该函数将语义标签分配给点云中的每个点。也就是说,
分割算法的目标是找到最优的函数,给出准确的语义标签。
点集P的几个性质在以前的工作中已经被强调[22,24]。P的密度可能不是处处均匀的,P可能非常稀疏。此外,P作为一个无序和非结构化的集合,它将点云与图像或视频等常见的顺序或结构化数据区分开来。
4.我们的方法
我们的网络遵循一种编码-解码(downsample-upsample)框架,类似于用于点云分割的一般语义分割网络[2](如图2所示)。在下采样阶段,我们递归地应用我们提出的PointSIFT模块结合[24]中引入的集合抽象层(SA)模块进行分层特征嵌入。对于上采样阶段,通过将特征传播(FP)模块[24]与PointSIFT模块有效交叉实现密集特征。我们的分割网络的一个主要贡献和核心组件是PointSIFT模块,它被赋予了所需的方向编码和尺度感知特性。
图2.说明我们的二级网络架构。该网络由下采样(集合抽象层)和上采样组成(功能传播)程序。PointSIFT模块(红色标记)与下采样(蓝色标记)和上采样交织在一起(用绿色标记)层。[24]中同时引入了SA和FP模块。为了更清晰,图中没有显示FP快捷方式。PointSIFT(·)指定了每个方向编码单元(OE)的特征维度,例如,PointSIFT(64,64)表示两个叠加的OE单元,都有64个输出特征通道。层数为对应层的输出点集形状,例如8192 × 64表示8192个点,每个点有64个特征通道。
4.1.PointSIFT模块
给定一个n × d矩阵作为输入,它描述了大小为n、每个点特征为d维的点集,PointSIFT模块输出一个n × d矩阵,给每个点分配一个新的d维特征。
受到广泛使用的SIFT描述符的启发,我们试图将PointSIFT模块设计为一种局部特征描述方法,该方法可以模拟各种方向,且对尺度不变。
4.1.1方向编码
在以往的方法中,局部描述符通常采用无序操作(如max pooling[24,32]),这是基于观察到点云是无序和非结构化的。然而,使用有序操作符可以提供更多信息(max pooling丢弃除最大值之外的所有输入),同时仍然保持输入点顺序的不变性。点云的一种自然排序是由三个坐标的排序引起的。这就引出了方向编码单元(OE),它是一个逐点的局部特征描述符,对八个方向的信息进行编码。
OE单元的输入是点p0的d维特征向量f0∈Rd。采用两阶段方案集成来自8个方位的信息,得到一个方位感知特征f'0。OE单元如图3所示。
图3.方位编码(OE)单元的说明。(a):三维空间中的点云,输入点在原点。(b) 8个八分区的最近邻搜索。(c)沿X Y Z轴的卷积。
OE嵌入的第一个阶段是堆叠8-邻域搜索(S8N),它在三个坐标排序划分的8个方向中寻找最近邻。由于远点对局部模式的描述提供的信息很少,所以当某个八分区内搜索半径为r的点不存在时,我们复制p0作为其最近的邻居。
我们进一步处理了位于2 × 2 × 2立方体中的邻域特征,用于以p0为中心的局部模式描述。以往的许多研究都忽略了数据的结构,而是沿着d维对特征向量进行最大池化来获得新的特征。然而,我们认为,像卷积这样的有序算子可以更好地利用数据的结构。因此,我们提出了方向编码卷积,它是一种三阶算子2 × 2 × 2立方体,沿X、Y、Z轴依次排列。形式上,相邻点的特征是形状为2 × 2 × 2 × d的向量V,其中前三个维度对应三个轴。向量M的切片是特征向量,例如M1,1,1表示上-前-右八分区的特征。三阶段卷积的表达式为:
这里 Wx∈R2×1×1×d, Wy∈R1×2×1×d, Wz∈R1×1×2×d是卷积算子的权值(为了清晰起见,省略了偏差)。本文设g(·)= ReLU(·)。最后,OE卷积通过重构Vxyz∈R1×1×1×d输出一个d维特征。方向编码卷积(OEC)集成了来自8个空间方向的信息,得到了一种编码方向信息的表示。
4.1.2尺度感知
为了让我们的PointSIFT模块具有尺度感知能力,我们遵循长期存在的多尺度表示方法,将几个方向编码(OE)单元叠加在PointSIFT模块,如图4所示。更高级OE单位的感受野比低能级OE的感受野大。通过构造OE单元的层次结构,我们得到了点云中局部区域的多尺度表示。然后,不同尺度的特征通过几个标识快捷方式连接起来,并通过另一个点卷积进行转换,输出一个d维多尺度特征。在联合优化特征提取和融合多尺度特征的逐点卷积过程中,神经网络将学会选择或关注合适的尺度,使我们的网络具有尺度感知能力。
我们PointSIFT模块的的输入和输出向量形状相同,便于我们的模块集成到其他现有的点云分割架构中。我们期待PointSIFT模块未来的应用,可能不局限于点云分割领域。
图4.PointSIFT模块。输入特征首先经过一系列的方向编码层,然后将方向编码单元的输出进行再一次点卷积,得到多尺度特征。
4.2总体结构
我们首先回顾了PointNet++中集合抽象层(SA)和特征传播(FP)模块,从而介绍了如何利用集合抽象、特征传播和PointSIFT模块构建我们的模型。
4.2.1回顾PointNet++中的SA和FP模块
在PointNet++[24]中提出集合抽象(SA)和特征传播(FP)模块,分别对应点云的下采样和上采样。我们在这里对SA和FP模块做了一个非常简单的介绍。
集合抽象模块以N × d的输入表示一个由N个点组成的点云,每个点具有d维特征。输出为N' × d'对应于N'个下采样点,每个点对应d'维特性。下采样是通过最远点采样找到N'个质心,将点分配给质心,然后通过共享点网输入分配点的特征来计算质心的嵌入。
特征传播模块采用距离加权的线性插值对点云进行上采样。它接收大小为N的输入点集,并输出一个大小为N'的上采样集合,且特征维度保持不变。上采样过程选取下采样过程中被丢弃的点,根据未被丢弃的k个最近点的特征在三维空间中的欧氏距离加权,为其分配特征。
4.2.2结构细节
我们结构的输入是8192个点的三维坐标(或与RGB值连接)。下采样阶段[24],多层感知器(MLP)将输入的3D(或6D)向量转换为64维特征。连续三次降采样(集合抽象层,SA)操作分别将点集的大小缩小到1024、256和64。对于上采样部分,我们按照用于致密特征和预测提出的方法使用特征传播(FP)模块。点集被三个FP层分别提升到256,1024,8192点,这些FP层在降采样阶段与对应层对齐。我们的PointSIFT模块插入到所有相邻的SA和FP层之间。最后,上采样层的点特征通过全连接层进行语义标签预测。
此外,我们不仅在下采样层之间插入FP模块,而且在编码阶段从下采样层插入到对应层。我们称这些链接为FP-shortcuts,因为它们类似于快捷方式,连接了相应的下采样和上采样层,补充了下采样过程中可能丢失的底层信息。FP-shortcuts会带来更快的收敛速度,这一点在之前的许多研究[13,24]中都得到了证明,这些研究都使用了这种快捷方式的连接。预测精度也有相当大的提高,这在许多著作中也有报道,例如残差网络[8]。
5.实验
我们的实验包括两个部分:验证OE单元和PointSIFT模块的有效性(章节5.1),并介绍语义分割基准数据集的结果(章节5.2)。在下文中SA和FP分别指代集合抽象模块和特征传播模块,这是由[24]提出的。
5.1.PointSIFT模块的有效性
方向-编码卷积(OEC) 我们在OE单元中采用了堆叠的8邻域搜索,这与PointNet++[24]中提出的球查询搜索有本质区别。主要的区别在于S8N(堆叠8邻域)搜索在每个8个八分位中查找邻近,而球查询搜索全局最近点。如图7所示,全局最近邻搜索可以得到一个同类点的邻近集合,其信息量比8个方向搜索要少。
图7.在这种情况下,使用K个最近的邻域,所有选择的点都来自一个方向(红色点)。如果我们选择不同方向的点(绿色点),表示能力会更好。
为了验证我们的S8N搜索,我们将球查询替换为S8N,在PointNet++[24]的轻量级搜索版本中比较性能。网络的详细架构如表3所示。为了公平起见,我们将两个邻近搜索方法找到的邻近数量设置为相同。结果如图6所示,证明了我们的S8N分组加上OE卷积的有效性。
表3. 用于比较不同抽样方法的架构。球查询采样之后,逐点卷积提取特征需要32 × 1个核。
图6.不同搜索方法的准确度。我们使用SavitzkyGolay滤波器平滑所有的线
另一个证明PointSIFT模块正确的观察是,来自单个输入点云的更多点有助于PointSIFT的最终表示。在PointNet++[24]中,分组层无法将点云中的一些点分配给任何质心,从而丢失了未分配点的信息。我们认为PointSIFT模块几乎可以避免下采样过程中的信息丢失,有利于语义分割。为了证明这一点,我们在ScanNet[6]数据集和PointNet++[24]上进行了一个实验。给定大小为8192的输入,第一步是向下采样从8192个点到1024个点。[24]方法选择1024个质心,将搜索半径内的32个最近点分组。
我们的结果显示,在pointnet++[24]中,8192个点中平均有1622个点没有被分组。也就是说,约20%的点信息没有整合到下采样表示中。相反,我们的PointSIFT模块通过在OE单元中执行多方向编码(OE)卷积,使计算中包含更多的点。通过在每个下采样层之前插入PointSIFT模块,我们的结果表明,所有的点都可以被处理,并对最终的预测做出贡献。结果见表1。
表1. PointSIFT模块的有效性
下采样步骤 | 第一 | 第二 | 第三 | 第四 |
点云大小 | 8192 | 1024 | 256 | 64 |
捕获PointNet++的点云大小 | 6570 | 1010 | 255 | 64 |
捕获PointSIFT框架的点云大小 | 8192 | 1024 | 256 | 64 |
5.1.1尺度感知器的有效性
我们在框架中设计了一个玩具实验来验证尺度感知器的有效性。实验设置是我们生成10000个不同尺度的简单形状(例如,球体,长方体),在生成的数据上训练我们的框架。然后我们测试了PointSIFT模块对于指定形状的不同层的激活级是否和形状的尺度一致。如前面提到的,PointSIFT模块的不同层与不同尺度相对应。因此如果这种一致情况存在,我们就能得出网络能感知尺度的结论。结果表明,在89%的情况下,层次结构中激活率最高的PointSIFT模块的位置与输入形状关于最大和最小尺度的相对尺度相一致。这个玩具实验证明了所提出的PointSIFT框架在某种意义上是可以感知尺度的。
5.2.在语义分割基准数据集上的结果
ScanNet ScanNet是一个场景语义标注任务,共有1513个扫描场景。我们跟随[24,13],使用
1201个场景用于训练,312个场景用于测试没有RGB信息。结果如图4所示。与其他方法比较,我们提出的PointSIFT方法就每个体素的准确率而言达到了更好的效果。此外,我们的方法做的比PointNet++更好,即使我们不在SA模块中使用有助于解决采样密度不均匀的问题的方法——多尺度分组(MSG)。结果表明了我们的PointSIFT模块在点搜素与分组方面的优势。
表4.ScanNet[6]标签准确率及均交并比
方法 | 准确率% | 平均交并比% |
3DCNN[6] | 73.0 | - |
PointNet[22] | 73.9 | - |
PointNet++[24] | 84.5 | 38.28 |
PointCNN[13] | 85.1 | - |
Ours | 86.2 | 41.5 |
Stanford Large-Scale 3D Indoor Spaces S3DIS数据集[1]从三个不同的建筑(包括271个房间)获取6个文件夹的RGB-D点云数据。每个点被来自13个类的标签标注。我们准备训练数据集如下[22]:我们按房间和样品房间划分为1m × 1m的街区。已经被用于[1, 22],我们使用k折策略进行训练和测试。整体准确度和平均交并比见表5。
表5. S3DIS[1]数据集联合度量的总体精度和平均交并比
方法 | 总准确率% | 平均交并比% |
PointNet[22] | 78.62 | 47.71 |
SegCloud[31] | - | 48.92 |
SPGraph[12] | 85.5 | 62.1 |
PointCNN[13] | - | 67.74 |
Ours | 88.72 | 70.23 |
我们的PointSIFT架构优于其他方法。每个类别的iou如表2所示,我们的方法对该数据集的语义分割任务的结果有了显著的提高,并在大多数类别中获胜。我们的方法可以在一些其他方法表现不佳的硬分类中取得很好的结果,例如在沙发上约有11 mIoU点,在车上约有42 mIoU点。图5中显示了一些结果。
表2. S3DIS[1]数据集所有类的交并比
方法 | 天花板 | 地板 | 墙壁 | 梁 | 柱 | 窗户 | 门 | 椅子 | 桌子 | 书柜 | 沙发 | 板 | 杂乱 |
PointNet[22] | 88.0 | 88.7 | 69.3 | 42.2 | 23.1 | 47.5 | 51.6 | 42.0 | 54.1 | 38.2 | 9.6 | 29.4 | 35.2 |
SegCloud[31] | 90.06 | 96.05 | 69.86 | 0.00 | 18.37 | 38.35 | 23.12 | 75.89 | 70.40 | 58.42 | 40.88 | 12.96 | 41.60 |
SPGraph[12] | 89.9 | 95.1 | 76.4 | 62.8 | 47.1 | 55.3 | 68.4 | 73.5 | 69.2 | 63.2 | 45.9 | 8.7 | 52.9 |
Ours | 93.7 | 97.9 | 87.5 | 59.3 | 31.0 | 73.7 | 80.7 | 75.1 | 78.7 | 40.8 | 66.3 | 72.2 | 65.1 |
图5. S3DIS[1]数据集的可视化结果
6.结论
我们提出了一种新的PointSIFT模块,并证明了其在标准数据集上的语义分割任务方面的显著改进。该模块具有两个关键属性:第一,方向编码单元捕获不同方向的信息;其次,PointSIFT模块的多尺度表示使处理具有不同尺度的对象成为可能。在此基础上,提出了一种基于PointSIFT模块的有效的点云语义分割端到端架构。我们还进行了全面的实验,以证明所提出的PointSIFT模块的有效性。