基于深度学习方法的点云算法5——PointConv(点云分类分割)
请点点赞,会持续更新!!!
基于深度学习方法的点云算法1——PointNetLK(点云配准)
基于深度学习方法的点云算法2——PointNet(点云分类分割)
基于深度学习方法的点云算法3——PointNet++(点云分类分割)
基于深度学习方法的点云算法4——PCT: Point Cloud Transformer(点云分类分割)
文章目录
摘要
与在规则密集网格中表示的图像不同,三维点云是不规则和无序的,因此很难对其应用卷积。本文将动态滤波器扩展到一种新的卷积运算,即PointConv。PointConv可以应用于点云以构建深度卷积网络。将卷积核视为由权重函数和密度函数组成的三维点的局部坐标的非线性函数。对于给定的点,通过多层感知器网络(multi-layer perceptron networks )和核密度估计(kernel density estimation)的密度函数(density functions)学习权重函数(weight functions)。这项工作最重要的贡献是提出了一种新的重新计算权重函数的方法,它使我们能够极大地扩展网络并显著提高其性能。所学习的卷积核可用于计算三维空间中任意点集上的平移不变( translation-invariant)和置换不变( permutation-invariant)卷积。此外,PointConv还可以用作反卷积算子,将特征从次采样点云传播回其原始分辨率。在ModelNet40、ShapeNet和ScanNet上的实验表明,构建在PointConv上的深度卷积神经网络能够在3D点云上挑战语义分割基准方面实现最新水平。此外,我们将CIFAR-10转换为点云的实验表明,在PointConv上构建的网络可以在类似结构的2D图像中与卷积网络的性能相匹配。
一、Introduction
3D传感器的发展、3D传感器的应用领域及3D数据的优点
在最近的机器人技术、自动驾驶和虚拟增强现实应用中,可以直接获取3D数据的传感器越来越普遍。这包括室内传感器(如激光扫描仪)、飞行时间传感器(如Kinect、RealSense或Google Tango)、结构光传感器(如iPhoneX上的传感器)以及室外传感器(如激光雷达和MEMS传感器)。在这些应用中,直接测量3D数据的能力是非常宝贵的,因为深度信息可以消除2D图像中的许多分割歧义,而曲面法线提供了场景几何体的重要线索。
介绍CNN,说明传统的CNN不适用于处理点云数据的原因
在二维图像中,卷积神经网络(CNN)极大地改善了几乎所有视觉任务的结果,从而从根本上改变了计算机视觉的格局。CNN成功地利用了平移不变性,因此相同的卷积滤波器集可以应用于图像中的所有位置,从而减少了参数数量,提高了泛化能力。我们希望这些成功能够转化为3D数据分析。然而,3D数据通常以点云的形式出现,点云是一组无序的3D点,每个点上都有或没有其他特征(例如RGB)。点云无序,不符合2D图像中的规则晶格栅格。对于这种无序的输入,很难应用传统的CNN。另一种方法是将三维空间视为体素栅格(volumetric grid),但在这种情况下,体素必须是稀疏的,因为CNN难以在高分辨率体素上进行计算(计算量太大)。
本文提出PointNet
在本文中,提出了一种对非均匀采样的三维点云进行卷积的新方法。注意到,卷积运算可以看作是连续卷积算子的离散近似。在3D空间中,可以将此卷积算子的权重视为局部3D点坐标相对于参考3D点的连续函数。连续函数可用多层感知器(MLP)近似。但这些算法没有考虑非均匀采样。我们建议使用逆密度标度(inverse density scale)对MLP学习的连续函数重新加权,这对应于连续卷积的蒙特卡罗近似。我们称这种操作为PointConv。PointConv包括将点云的位置作为输入,学习MLP以近似权重函数,以及对学习的权重应用反向密度标度以补偿非均匀采样。
新方法提高内存效率(重要创新点)
因为PointConv的朴素实现内存效率是低下的,所以当输出特性的通道大小非常大时,将难以训练和扩展到大型网络。为了减少PointConv的内存消耗,引入了一种方法,该方法能够通过改变求和顺序的重新计算大大提高内存效率。这种新结构能够在3D点云上构建多层深度卷积网络,其功能与光栅图像上的2D CNN类似。我们可以实现与二维卷积网络相同的平移不变性,以及点云中点的排序对置换的不变性。
反卷积PointDeconv
在分割任务中,将信息从粗层(coarse layer)逐渐传输到细层(finer layer)的能力非常重要。因此,能够充分利用从粗层到细层的特征的 反卷积(deconvolution) 操作对性能至关重要。大多数先进的算法无法执行反卷积,这限制了它们在分割任务上的性能。由于PointConv是卷积的完全近似,因此很自然地将PointConv扩展到PointDeconv,它可以完全解开粗层中的信息,并传播到更细的层。通过使用PointConv和PointDeconv,本文可以在语义分割任务上获得更好的性能。
本文主要贡献:
提出了一种密度重新加权卷积PointConv,它能够完全逼近任意一组3D点上的3D连续卷积。
设计了一种内存高效的方法来实现PointConv,使用求和顺序的改变技术,最重要的是,允许它扩展到现代CNN的层数。
将PointConv扩展到反卷积版本(PointDeconv),以获得更好的分割结果。
实验表明,基于PointConv构建的深度网络与其他点云深度网络相比具有很强的竞争力,并在部分分割和室内语义分割基准方面取得了最先进的结果。为了证明PointConv确实是一种真正的卷积运算,我们还通过将2D图像中的所有像素转换为具有2D坐标以及每个点上的RGB特征的点云来评估CIFAR-10上的PointConv。在CIFAR-10上的实验表明,我们的PointConv的分类精度与结构相似的图像CNN相当,远远优于以前由点云网络获得的最佳结果。作为三维数据CNN的一种基本方法,PointConv有许多潜在的应用价值。
二、Related Work
将点云转换为2D图像或者3D提速数据的工作
大多数关于3D CNN网络的工作将3D点云转换为2D图像或3D体积栅格。将3D点云或形状投影到多个2D图像中,然后应用2D卷积网络进行分类。虽然这些方法在形状分类和检索任务上取得了主导性的性能,但将其扩展到高分辨率场景分割任务是困难的(nontrivial)。另一种方法,通过量化将点云体素化为体积网格,然后应用3D卷积网络。这种方法受到其三维体积分辨率和三维卷积计算成本的限制。Gernot Riegler通过使用一组不平衡的八叉树,每个叶节点存储一个合并的特征表示,显著提高了分辨率。Kd networks在一定大小的Kd树上以前馈自底向上的方式计算表示。在Kd网络中,在训练和测试期间,点云中的输入点数需要相同,这不适用于许多任务。SSCN利用基于体积网格的卷积,通过仅在输入点上考虑CNN输出,实现了新的速度/内存改进。但是,如果点云采样稀疏,尤其是采样率不均匀时,对于上的稀疏采样区域,可能无法在体积卷积滤波器内找到任何邻域,这可能会导致重大问题。
直接使用点云的工作
一些最新的工作直接将原始点云作为输入,而不将其转换为其他格式。有研究建议使用共享多层感知器和最大池层来获取点云的特征。由于最大池图层应用于点云中的所有点,因此很难捕获局部特征。PointNet++通过添加层次结构改进了PointNet中的网络。该层次结构与图像CNN中使用的层次结构相似,它从较小的局部区域开始提取特征,然后逐渐扩展到较大的区域。PointNet和PointNet++中用于聚合不同点的功能的关键结构是最大池。然而,最大池层仅在局部或全局区域中保持对功能的最强激活,这可能会丢失一些用于分割任务的有用详细信息。SPLATNet提出了一种将点云的输入特征投影到高维晶格上,然后在高维晶格上应用双边卷积来聚合特征的方法,称为“SPLATNet”。SPLATNet能够给出与PointNet++类似的结果。切线卷积(tangent convolution)将局部曲面几何体投影到围绕每个点的切面上,从而生成一组可平面卷积的切线图像。逐点卷积(pointwise convolution)动态查询最近的邻域,并将点装箱到核单元中,然后在装箱单元上应用核权重以在点云上卷积。Flex卷积引入了传统卷积层的泛化以及高效的GPU实现,可应用于具有数百万个点的点云。FeaStNet建议通过添加软分配矩阵将传统卷积层推广到3D点云。PointCNN的要点是从输入点学习χ−转换,然后使用它同时对与点关联的输入特征进行加权和置换。与我们的方法相比,PointCNN无法实现点云所需的置换不变性。
连续滤波器执行卷积
有的研究建议学习连续滤波器来执行卷积。Dynamic filter networks提出二维卷积中的权值滤波器可以看作是一个连续函数,可以用MLPs近似。Dynamic edge-conditioned filters首先将该思想引入到3d图形结构中。Shenlong Wang将Dynamic edge-conditioned filters中的方法扩展到分割任务,并提出了一种有效的方法,但其有效的方法只能近似于深度方向的卷积,而不能近似于实卷积。Dynamic graph CNN 提出了一种可以动态更新图的方法。Yifan Xu提出了一系列特殊的过滤器,以近似权重函数,而不是使用MLP。Monte carlo convolution 提出了一种考虑密度的三维卷积Monta-Carlo近似方法。我们的工作在三个方面与之不同。最重要的是,在以前的研究工作中从未提出过真正卷积的有效版本。此外,我们使用的密度与Monte carlo convolution不同,我们提出了一种基于PointConv的反卷积算子来执行语义分割。
三、PointConv
我们提出了一种卷积运算,将传统的图像卷积扩展到点云中,称为PointConv。PointConv是对三维连续卷积算子蒙特卡罗近似的扩展。对于每个卷积滤波器,它使用MLP来近似权重函数,然后应用密度标度(density scale)来重新加权所学习的权重函数。第3.1节介绍了PointConv层的结构。第3.2节介绍了PointDeconv。
3.1 Convolution on 3D Point Clouds
卷积定义式:
图像可以解释为二维离散函数,通常表示为网格状矩阵。在CNN中,每个滤波器被限制在一个小的局部区域,如3×3、5×5等。在每个局部区域内,不同像素之间的相对位置总是固定的,如下图(a)所示。该滤波器可以很容易地离散为局部区域内每个位置的实值权重之和。
点云表示为一组3D点
{
p
i
∣
i
=
1
,
…
,
n
}
\{p_i | i=1,…,n\}
{pi∣i=1,…,n},其中每个点包含一个位置向量(x,y,z)及其特征,如颜色、曲面法线等。与图像不同,点云具有更灵活的形状。点云中点的坐标p=(x,y,z)不位于固定栅格上,但可以采用任意连续值。因此,在每个局部区域,不同点的相对位置是不同的。光栅图像上的传统离散卷积滤波器无法直接应用于点云。上图表示出了图像中的局部区域和点云之间的差异。
为了使卷积与点集兼容,提出了一种置换不变卷积运算,称为PointConv。我们的想法是首先回到3D卷积的连续版本,如下所示:
其中,F是点的特征。可以将点云视为连续空间中的非均匀采样样本。在每个局部区域中,(δx,δy,δz)可以是局部区域中的任何可能位置。我们将PointConv定义如下:
其中S(δx,δy,δz)是点(δx,δy,δz)处的逆密度估计(密度越大,逆密度估计越小)。需要S(δx,δy,δz),因为点云可以非常不均匀地采样。直观地说,局部区域中的点数量在整个点云中有所不同,如图2(b)和(c)所示。此外,在图2(c)中,点p3、p5、p6、p7、p8、p9、p10彼此非常接近,因此应该减小每个点的贡献,p1、p2点较为稀疏,因此应该增大每个点的贡献,防止特征丢失。
主要思想是通过多层感知器从三维坐标(δx,δy,δz)和通过核化密度估计和MLP实现的非线性变换得到的逆密度S(δx,δy,δz)近似权重函数W(δx,δy,δz)。由于权重函数高度依赖于输入点云的分布,因此我们将整个卷积运算称为PointConv。Dynamic filter networks和Dynamic edge-conditioned filters考虑了权函数的近似,但没有考虑密度标度的近似,因此不是连续卷积算子的完全近似。我们对密度的非线性变换也不同于Monte carlo convolution。
PointConv中MLP的权重在所有点之间共享,以保持置换不变性。为了计算逆密度尺度S(δx,δy,δz),首先使用核密度估计(kernel density estimation,KDE)离线估计点云中每个点的密度,然后将密度输入到MLP中进行一维非线性变换。使用非线性变换的原因是网络可以自适应地决定是否使用密度估计。
上图显示了K点局部区域上的PointConv操作。设
C
i
n
C_{in}
Cin,
C
o
u
t
C_{out}
Cout为输入特征和输出特征的通道数,k,
c
i
n
c_{in}
cin,
c
o
u
t
c_{out}
cout为第k个邻域的索引,输入特征的第
c
i
n
c_{in}
cin个通道,输出特征的第
c
o
u
t
c_{out}
cout个通道。输入是点Plocal的3D局部位置∈ RK×3,可通过减去局部区域质心和特征的坐标来计算3D局部区域内点的去中心化坐标。使用1×1卷积来实现MLP。权重函数的输出为W。卷积后,将具有K个相邻点的局部区域的特征
F
i
n
F_in
Fin编码到输出特征
F
o
u
t
F_out
Fout,如等式(4)所示:
PointConv学习网络以近似卷积的连续权重。对于每个输入点,我们可以使用MLP的相对坐标计算其权重。图2(a)显示了卷积的连续权重函数示例。将点云输入作为连续输入的离散化,可通过图2(b)计算离散卷积以提取局部特征,这将对不同的点云样本(图2(b-d))起作用(具有潜在的不同近似精度),包括规则网格(图2(d))。请注意,在光栅图像中,局部区域中的相对位置是固定的。然后,PointConv(仅将相对位置作为权重函数的输入)将在整个图像上输出相同的权重和密度,在这里它退化为传统的离散化卷积。
为了聚合整个点集中的特征,我们使用了一种层次结构,该结构能够将详细的小区域特征组合成覆盖更大空间范围的抽象特征。我们使用的层次结构由几个特征编码模块组成,这与PointNet++[28]中使用的模块类似。每个模块大致相当于卷积CNN中的一层。每个特征编码模块的关键层是采样层、分组层和PointConv。
这种方法的缺点是,每个核W都需要由网络近似,因此效率非常低。在第4节提出了一种实现PointConv的有效方法。
3.2 Feature Propagation Using Deconvolution
对于分割任务,我们需要逐点预测。为了获得所有输入点的特征,需要一种将特征从次采样点云传播到更密集点云的方法。PointNet++[28]建议使用基于距离的插值来传播特征,这是合理的,因为局部区域内存在局部相关性。然而,这并没有充分利用反卷积操作,反卷积操作从粗略级别捕获传播信息的局部相关性。我们建议在PointConv的基础上添加一个PointDeconv层,作为解决此问题的反卷积操作。
如下图所示,PointDeconv由两部分组成:插值和PointConv。首先,我们使用插值来传播前一层的粗糙特征。根据PointNet++,通过从最近的3个点对特征进行线性插值来进行插值。然后,使用跳过链接将插值特征与具有相同分辨率的卷积层的特征连接起来。在串联之后,我们对串联的特征应用PointConv,以获得最终的反卷积输出,类似于图像反卷积层。我们应用此过程,直到所有输入点的特征都传播回原始分辨率。
四、Efficient PointConv
PointConv的简单实现占用内存且效率低下。与Dynamic edge-conditioned filters不同的是,我们提出了一种新的重新格式来实现PointConv,将其简化为两种标准操作:矩阵乘法和2d卷积。这种新的技巧不仅利用了GPU的并行计算,而且可以使用主流的深度学习框架轻松实现。由于反向密度标度没有这种内存问题,下面的讨论主要集中在权重函数上。
PointConv的简单实现占用内存且效率低下,网络将难以训练。PointNet++使用了非常小的网络和很少的核,这大大降低了其性能。为了解决这个问题,我们基于以下引理提出了一个高效内存版本的PointConv:
证明:
因此,可以将原始PointConv等效为矩阵乘法和1×1卷积。下图显示了PointConv的高效版本。
在该方法中,我们不将生成的滤波器存储在内存中,而是将权重滤波器分为两部分:中间结果M和卷积核H。