该文发表于ICCV2019,二作是PointNet、PointNet++的作者Charles R. Qi。该文提出专门用于点云数据处理的卷积算法KPConv(Kernel Point Convolution),可用于点云分类和语义分割问题,在多个benchmark数据集上均能取得state of the art的效果,甚至在几个数据集上超过第二名7-8个百分点
KPConv: Flexible and Deformable Convolution for Point Clouds
1. Background
随着深度学习和卷积神经网络(CNN)在图像处理上取得巨大成功,很多研究人员希望将CNN的思想应用到点云处理上来。但与图像数据相比,点云数据具有以下几个特性,导致很难直接将CNN套用在点云上:
- 数据存储不规则
图像数据具有规整的矩阵形式,数据存储时保存的是一个像素矩阵,像素值可简单地通过索引的方式获取;而点云数据则散乱地分布在三维空间,点云数据存放的是坐标值(x,y,z)及其特征,很难直接通过(x,y,z)位置索引得到对应点的特征。因此图像处理中,更多地关注像素值,而点云处理则更多地关注其位置信息(x,y,z) - 无序性
对于一个点云(n个点),存储时有n!种排列方式。对于人类来说,不管采用哪一种排列,点云是不变的,而神经网络应保证对同一个点云,无论以哪一种排列方式做输入,都要有相同的输出 - 稀疏性
图像数据以矩阵的形式密集存储,而点云在空间中的分布则是稀疏的,且由于采集设备的原因,经常出现点云在各处密度不均匀的情况
因此,基于深度学习的点云处理经历的三个阶段:
- 阶段1
直接把CNN套用在点云处理上,处理的思路有两种:
(1)将点云数据转换为多个视角的二维图像,并送入CNN进行处理,得到的结果再反射回点云,但这种方法存在大量信息损失
(2)对点云进行三维栅格化,得到多个grid,并将其送入三维卷积神经网络进行处理,这种方法同样具有信息损失,且三维卷积计算复杂度很高 - 阶段2
直接以点云数据作为输入,处理的思路也有两种:
(1)利用对称函数处理无序性:如PointNet,PointNet++,PointSIFT等
(2)利用图神经网络:点云数据具有鲜明的图结构,可利用图神经网络进行处理,如SPGraph - 阶段3
针对点云数据的特性,提出适用于点云的卷积算法,直接对点云进行卷积操作,如PointCNN,KPConv等
2. Method
2.1 Kernel Function
使用xi表示三维点,fi表示对应的特征,则在点x上做KPConv的操作可用公式表示为:
其中,Nx为卷积范围,是以点x为中心以r为半径的球体内的所有点组成的点集,g为核函数也就是卷积核,g的输入为相对于中心点x的相对坐标xi-x=yi
下面重点来了:
图像由于其规整的数据排列,卷积可采用严格的1对1相乘求和,但点云则不可能采用这一方式。该文采用如下方式:
即对于卷积范围内的一点xi,首先求该点与卷积核内所有点的相关h,以h*Wk作为xi与卷积核第k个点的卷积结果,对K个卷积结果求和,即得到xi的卷积结果(上图式2)。求相关的函数h使用类似ReLU函数的形式(即上图式3)
2.2 Rigid or Deformable Kernel
有了卷积计算方式、卷积范围的确定方式,下面就需要确定卷积核的形式。对于点云卷积来说,实际上就是确定卷积核的范围,以及卷积核内点的数目和位置。对此该文提出两种方式:
- Rigid Kernel
确定好卷积核点数K后,就能够根据优化函数确定每一个点的位置,大概长这样:
- Deformable Kernel
首先基于Rigid核卷积进行操作,以3K为卷积的输出纬度,就能够给卷积核每一个点赋一个偏移(即K个(x,y,z)偏移),给卷积核偏移后,再次对输入进行卷积,得到卷积结果
2.3 Network Structure
有了上面的卷积KPConv,后面的网络结果其实都不重要了。。。
3. Experiments
有时间再填坑