PointConv解读

PointConv:Deep Convolutional Networks on 3D Point Clouds

摘要

传统的卷积是作用在二维图像数据上,图像数据通常可以表示成密集的网格形式。在CNN中,每个滤波器被限制在一个小的局部区域内,例如3×3;5×5等。在每个局部区域内,不同像素之间的相对位置总是固定的,如图(a)所示。

三维数据通常是以点云的形式表示,就是一组无序的三维点,一组点云集合可以表示为一组3D点的集合{p_i|i=1,…,n},其中每个点包含一组位置向量(x,y,z)或其它信息如颜色、表面切线等。不同于图像,点云的表示形式更灵活。在坐标系p=(x,y,z)∈R^3中,一个点的坐标不会限制在一个固定网格里,而是有可能取任意的连续值(如图(b)和(c)所示)。因此,一个点云在不同的局部区域内的顺序和相对位置都是不同的。栅格化的图像上的传统离散卷积滤波器不能直接应用于点云,因此,在点云数据上使用卷积是困难的。

PointConv解读

相关工作

3D CNN网络上的大多数工作都将3D点云转换为2D图像或3D体积网格,然后应用2D、3D卷积网络进行处理。最新的有将点云直接作为输入处理的工作,例如:

(1) PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation

首先独立地处理每个点进行一定程度的特征提取,然后利用最大池化得到一个全局特征,但是使用最大池化可能会丢失一些有用的细节信息并且PointNet没有利用数据局部的相关性。

(2) PointNet++:Deep Hierarchical Feature Learning on Point Sets in a Metric Space

在PointNet基础上添加了分层抽取特征的想法,每个图层都有三个子阶段:采样层,组合层和特征提取层,不同尺度提取局部特征,通过多层网络结构得到深层特征。解决了点云密度不同的问题,但是计算量过大并且使用最大池化可能会丢失一些有用的细节信息。

(3) PointCNN:Convolution On X -Transformed Points

提出了根据输入点学习一种X变换,然后将其用它来同时对点关联的输入特征进行加权和置换。但是无法实现排列不变性。

本文使用点云作为输入,通过学习一个MLP来估计权重函数,然后通过在权重上应用反转密度缩放来补偿非均匀采样造成的影响。由于PointConv是卷积的完全近似,因此由PointConv可以很方便的得到PointDeconv,使用它可以提高点云分割任务的性能。

PointConv

在3D空间中,可以把连续卷积算子的权重看作是关于一个3D参考点的局部坐标的连续函数:

PointConv解读
其中W和F均为连续函数,F是以点p(x,y,z)为中心的局部区域G中点的特征。一组点云可以视为从一个连续空间R^3进行非均匀采样的结果。在每个局部区域中,(δx, δy, δz)可能是局部区域的任何可能的位置,上式可以离散化到一个离散的3D点云上:
PointConv解读
S(δx, δy, δz) 是点(δx, δy, δz)处的逆密度估计,然后使用逆密度估计对学到的权重进行加权,补偿不均匀采样。

PointConv

原始的PointConv:

PointConv解读
(a)显示了一个局部区域,其点的坐标已从全局坐标转换为局部坐标,p是点的坐标,f是相应的特征.
(b)显示了在以一个点(p_0,f_0)为中心的一个局部区域上执行PointConv的过程。

红框部分:估计权重函数W。
篮框部分:估计反密度函数S。

原生PointConv运算步骤:
① 给定输入点p,通过K近邻得到局部区域中的k个点,输入为3D局部位置坐标信息,记为P_local ∈ R(K×3),P_local通过减去局部区域的质心的坐标来计算。
②通过核密度估计(KDE)计算反密度,然后通过MLP2进行映射等到S,对S进行复制平铺,最后得到大小为K × C_in 的反密度张量。
③把②和输入特征F_in(K × C_in)进行点乘运算,输出大小为K × C_in,再经过复制平铺,最后得到大小为K × (C_in × C_out)的中间张量(F_in)~
④把P_local的k个点坐标输入MLP1,输出大小为K × (C_in × C_out)的权重张量。
⑤把③和④进行点乘运算,输出大小为K × (C_in × C_out)的张量,最后求和得到下式F_out。

PointConv解读

高效的PointConv:

但是,由于原始的PointConv内存消耗巨大并且效率低下,本文作者提出了一种新的重构方法,这种方法通过将原始的PointConv减少到两个标准操作来实现:矩阵乘法和2d卷积。

因为反密度估计函数不存在内存问题,所以下面的讨论主要集中在权重函数上。

将训练阶段的mini-batch size记为B,点云中的点的个数记为N,每个点的邻域中点的个数记为K,C_in为输入点的通道数,C_out为点的输出通道通道数。对一个点云而言,每部*部区域都共享从MLP习得的相同的权重函数。但是对不同位置的不同点而言,运算得到的权重应当是不同的。由MLP生成的权重卷积核参数大小约为B × N × K × (C_in × C_out)。为此,本文提出高效版PointConv。

PointConv解读

即高效的PointConv是将卷积核分为两部分:中间结果M(权重函数的MLP中最后一层的输入)和卷积核H(同一MLP中最后一层的权重)。

权重表示为:
PointConv解读

代入之前的F_out得到最终的F_out为:
PointConv解读

内存大小变为:B×N×C_mid×C_in,内存开销为原始PointConv的C_mid/(K*C_out)倍。

PointDeconv

对于语义分割任务,需要逐点预测。为了获得所有输入点的特征,需要一种将特征从二次采样点云传播到更密集的点的方法。本文提出添加一个基于PointConv的PointDeconv层作为反卷积操作来解决这个问题,充分利用反卷积操作来捕获来自粗粒度级别的局部相关信息。

如图4所示,PointDeconv由两部分组成:插值和PointConv。首先,我们使用插值来传播前一层的粗粒度特征,通过从3个最近点来进行线性特征插值。然后,使用skip links将插值特征与来自卷积层的具有相同分辨率的特征连接起来。连接后,我们在连接的特征上应用PointConv以获得最终的反卷积输出。我们反复执行此过程,直到所有输入点的要素已传播回原始分辨率。

PointConv解读

实验结果
1、ModelNet40分类任务
PointConv解读
2、ShapeNet 零件分割
任务的输入是由点云表示的形状,目标是为点云中的每个点分配零件类别标签。 给出了每种形状的类别标签。 通常,通过使用已知的输入3D对象类别将可能的零件标签缩小到特定于给定对象类别的部分标签。 并且还将每个点的法线方向计算为输入特征,以更好地描述基础形状。
PointConv解读
3、CIFAR-10分类结果
作者使用CIFAR-10数据集验证PointConv和2D CNN有相同的学习能力,将CIFAR-10中的每个像素都视为具有xy坐标和RGB特征的2D点。 在训练和测试之前,将点云缩放到单位球上。
PointConv解读
4、场景语义标注
由于ModelNet40和ShapeNet数据集都是人为合成的数据集,大多数最先进的算法都能在此类数据集上取得不错的效果,故我们使用ScanNet数据集(包含大量噪声数据的真实点云)评估PointConv。任务是在给定由点云表示的室内场景的情况下,预测每个3D点上的语义对象标签。
PointConv解读
5、消融研究
作者在ScanNet数据集上对MLP结构和逆密度标度等进行消融研究,测试PointConv的性能。

结论
本文中,我们提出了一种新的方法来对3D点云进行卷积运算,称为PointConv。PointConv训练局部点坐标上的多层感知器,从而近似卷积核中的连续权重和密度函数,这种方法使得它自然地具备序列不变性和平移不变性。使用该卷积,可以直接在3D点云上构建深度卷积网络。并且提出了一种有效的实现方法,大大提高了它的可扩展性。

主要贡献:
(1)提出PointConv,一种密度函数重加权卷积,它能够在任何3D点集上完全逼近3D连续卷积。
(2)设计了一种内存高效的方法来实现PointConv,即通过求和顺序技术的变化提升性能。
(3)将PointConv扩展为反卷积(PointDeconv)版本以获得更好的分割结果。