《KPConv: Flexible and Deformable Convolution for Point Clouds》阅读笔记
Github代码:https://github.com/HuguesTHOMAS/KPConv
论文:https://arxiv.org/abs/1904.08889
一、主要贡献
这是PointNet的作者Charles R. Qi的一篇文章,在许多分割的任务上都达到了极好的效果,超过了当前的State of the art七八个点。这一篇的贡献点总结如下:
- 提出了一种基于Kernel Point的新型点云卷积。相当于将Kernel Point当成了每个点的参照物,去计算与这些Kernel Point的权重去更新每个点;
- 提出了两种不同类型的Kernel Point,一种是刚性的Rigid Kernel,相当于均匀分布在每个点的周围球面;一种是可变的Deformable Kernel ,通过在刚性的基础上通过网络去学习它的位置变化;
- 整个网络GPU占用少、速度快,可以在不定个数的点云上直接训练,因此效果也好。
二、模型
2.1 定义在点云上的核函数
首先定义一下点云上的某个点
以及其对应的特征
,通常由kenel
所定义的点云的卷积可以写成如下的形式:
其中
代表其某个局部邻域,可以看做是某个中心点以半径
画出的一个球形邻域,即
在不同的工作中,往往上面公式中的核函数 才是关键, 取以 为中心的相邻点作为输入。在这篇文章中,作者同其他工作一样将局部的区域中心化,即对于每一个点 ,可以通过中心化 将其转换成 ,因此, , 这样网络就拥有了平移不变性。与其他工作不同的是,作者定义了一组Kernel Points, 以及它们对应的权重 ,通过将每个点周围的Kernel Point作为其参照物,去进行特征的聚合。
最终,点云上的核函数可以定义为:
其中
代表
和
的相关性,当他们两个接近的时候其会比较高。
其中
是Kernel Points的影响距离,将根据输入密度进行选择。因此,每个点的特征
乘以所有的Kernel的权重矩阵,相关系数
取决于它相对于Kernel Points的位置。
2.2 Rigid or Deformable Kernel
Kernel Points 的选取相当于这篇文章的核心问题,它们需要研究出一个通用的方案,对于任意的Kernel Points数量 ,都可以在空间上面构建这些Kernel Points。论文提出了两种解决方案:
Rigid Kernel
作者在文章中说,Rigid Kernel 对于一些简单的任务表现得较好。作者首先选择通过求解一个优化问题来放置Kernel Points,其中每个点对其他点施加一个斥力。这些点被限制在具有吸引力的球面上,其中一个点被限制在中心。最终,周围的点被限制在平均半径1.5σ,确保每个Kernel Points之间的影响力有小幅度的重叠。
具体的数学推导其实是求解一个优化问题,即希望K个Kernel Points在球面上离得足够远,又离球心不要太远。目标方程的第一部分是希望Kernel Points之间彼此不要太近:
第二个部分是希望与中心点不要太远
所以最后的目标方程如下:
通过论文的实验结果可以看到选取不同的超参数K时所得到的Kernel Points的位置。
Deformable Kernel
作者首先考虑给予不同的层不同的初始化Kernel Points,但是他们认为这样并不能给予网络更多的表述能力,因此他们最后参考了Deformable Convolutional Networks的设计,对于每个Kernel Points学习一个位移 。所以最终卷积的形式如下:
其通过对一个Rigid Kernel的KPNet,将特征从
映射到
维度,并在训练的时候给予0.1倍的学习率去进行训练。
但是这里会出现一个问题,由于点云的稀疏性,会容易出现一个Kernel Points的影响范围内没有出现任何点。因此网络需要去学习一个位移去使得这些Kernel Points去拟合点云的空间形状。这里作者设计了两个Loss,fitting loss用来使得这些Kernel Points形状与点云相似,repulsive loss 使得她们彼此之间不会太近。
2.3 Kernel Point Network Layers
Subsampling to deal with varying densities
作者使用采样策略来控制每一层输入点的密度。为了保证采样点位置的空间一致性,他们采用网格采样(即通过空间划分网格,对每个网格内采取中心点)。因此每一个网格的重心,被作为采样点。
Pooling layer
为了使得网络感受野不断增大,网络需要在后面的层不断减少点的个数。文章中有两种下采样的方法:
- 逐点作为中心点的计算kernel point的权重,更新点的feature,最后再利用Max pooling减少点的个数;
- 采样一些点作为中心点,同上,但最后不做Max pooling。
KPConv layer
KPConv的输入是输入点云
以及它们对应的特征
。同时还需要计算一个邻居索引的矩阵
,其索引的值为1~N,N’个点各有
个邻居。如果是Deformable Kernel的话网络还会学习一个
的位移矩阵(如下图2)。
网络的超参数
对于网络的每一层 ,有网格的宽度cell size 。 Kernel Points的影响范围 。对于刚性的卷积核,卷积的半径为 ,其 Kernel Points的平均半径 。对于可形变的卷积核, , 和 为整个网络的比例系数。通过交叉验证作者得到了: , 和 。第一次下采样的cell size 取决于数据的大小,之后 。