ShellNet:Efficient Point Cloud Convolutional Neural Networks using Concentric Shells Statics
1.文章总体概述
这篇文章是最近Iccv2019接收的一篇文章,主要做的工作是提出了一种可以用于直接处理3D空间中的点云数据的卷积算子ShellConv并基于此设计了一个ShellNet,可以用于分类以及点云的语义分割。与以往的PointNet系列类似的是,作者提出的结构也是直接输入原始的点云坐标信息(,
为点的个数)。开篇作者简要介绍了一些相关的工作,分析了经典的PointNet系列存在的问题,比如网络结构的复杂度上升,训练速度变慢,也提到了PointCNN同样也有训练的收敛速度太慢的问题,进而提出需要设计一种轻量级的卷积网络结构能够在准确率和速度之间做一个很好的平衡。基于上述考虑,作者提出了一种新型的卷积算子结构,它可以像2D卷积操作一样直接作用在3D点云上以提取局部的领域信息。
2.卷积算子设计
根据上图所示,对于一个输入的点云(a),我们先随机选取一些代表点(representative points)如a中的红点所示,之后每个红点周围的邻域点就构成了以该邻域点为中心的一个局部点集(b中的一个个球体)。而对于b中的每一个球体来说其内部又根据每个邻域点到中心点距离的远近分成了一个个与球壳(Shell)类似的结构,如c所示(每个Shell根据其到中心点距离的远近划分成了不同的颜色),之后在C中对于每个Shell,我们使用最大值池化的方式(保证能够产生与输入顺序无关的输出,细节下面再讲)产生每个Shell的特征,在得到每个Shell的特征之后,我们使用1D卷积的方式整合所有Shell的特征得到该中心点的特征(图c上半部分所示),也就相当于该局部结构的特征,经过这样一次操作之后得到d,我们可以发现点的数目变少了,但是产生的特征维数变多了(d中的点变粗了),这就类似一张图片经过2Dcnn之后图片的大小变小了,但是特征的通道数增加了。
而如何进行局部点的卷积操作呢?作者首先指出,根据定义,在点p处的卷积操作应该有如下的形式(实际上是一个1D卷积的形式):
其中表示输入点集的feature的一个通道,
表示卷积的权重,
表示第n层,
则表示p的邻域。但是实际中作者认为给每个点
都指定一个卷积权重
是不现实的,因此作者提出将该层Shell内点的特征都整合在一起同时给处于同一层Shell的点的特征赋予相同的卷积权重,也就是说将上面的式子改成如下的形式:
类似PointNet,为了产生对输入顺序不敏感的输出[参考PointNet],将该层Shell内点的特征整合为的方式如下:
总结起来,上述算法可以写成如下的形式
3.ShellNet设计
相信理解了前面ShellConv算子的设计后,这里的网络结构图也就不难理解了。