Introduction

PointCNN 论文学习
PointCNN 论文学习
论文在Introduction部分花费了大量的篇幅来解释卷积无法直接用在点云数据上的原因,大致主要是因为点云数据的无序性,难以用结构化的数据进行存储。如上图中,图中ii与iii虽然各个点的排序是相同的,但形状却不同,iii与iv虽然点的排序不同,但他们却是相同的点集。为了解决这一问题,作者提出使用空间变换网络(STN),从前一层的数据中取KK个点,预测一个K×KK\times K大小的转置矩阵 (X\mathcal{X}-transformation),用转置矩阵对前一层的特征做变换,然后对变换后的特征用卷积。此外,同样也在提取出k近邻后,将各个点转换到局部坐标系。
X\mathcal{X}-transform有效性的可视化:
PointCNN 论文学习
这里的想法与PointNet很相似,但PointCNN作者认为,PointNet等方法中所使用的对称操作造成了数据信息的损失,因此PointCNN中并没有使用。但实验结果好像不是特别的理想,变换矩阵确识带来了一些效果的提升,可与预想情况相差还蛮多的。
PointCNN的参数数量与训练耗时方面相较于此前的一些方法确实更优秀。

PointCNN结构

PointCNN 论文学习
与CNN非常类似,仅在局部区域提取和特征学习上有所不同:在进行局部区域的选取时,CNN每次选取K×KK\times K大小的区域,而PointCNN则选择中心点周围的KK个近邻点;在进行特征学习时,CNN使用Conv操作,而PointCNN使用X\mathcal{X}-Conv(具体操作细节在下文中)。
上图中,a、b为分类网络,c为分割网络。
在分类任务中,如a,使用两层X\mathcal{X}-Conv层,每个点的感受野为KN\frac{K}{N},其中KK为相邻点的数目,NN为前一层点的个数,最后一层因为可以看到所有点的信息,因此具有感受野1.0,具有整个形状的全局视图,可以在最后一层后加一个全连接层来实现分类。但由于最后一层X\mathcal{X}-Conv层的训练样本数量急剧下降,最后一层X\mathcal{X}-Conv层难以训练,为了解决这一问题,作者提出了b中的结构,为了保持网络深度,同时又保持感受野的增长率,引入CNN中空洞卷积的思想,定义了膨胀率DD,也就是说,不总是以KK个近邻点作为输入,而实从K×DK\times D个近邻点对KK个输入点进行均匀采样,这样感受野就从KN\frac{K}{N}增大到了K×DN\frac{K\times D}{N}
在分割任务中,模仿Conv-DeConv的结构来实现PointCNN,Conv层与DeConv层唯一的不同在于输出的点数和特征通道数,与Conv层相比DeConv层的输出点数和特征通道数更少。此外,在最后的全连接层之前使用了Dropout和Subvolume supervision来防止过拟合。

分层卷积(Hierarchical Convolution)

作者与CNN的卷积操作进行了类比,对于输入点集F1=(p1,i,f1,i):i=1,2,...,N1F_1={(p_{1,i},f_{1,i}):i=1,2,...,N_1},通过X\mathcal{X}-Conv(带有转换矩阵的卷积层)可得到输出点集F2=(p2,i,f2,i):i=1,2,...,N2F_2={(p_{2,i},f_{2,i}):i=1,2,...,N_2},其中{p1,i:p1,iRD}\{p_{1,i}:p_{1,i}\in R^D\}是点的D维坐标,{f1,i:f1,iRC1}\{f_{1,i}:f_{1,i}\in R^{C_1}\}是点集对应的特征,F2F_2符号含义同上。同CNN一致的是,随着逐层卷积,得到的点越来越少,但特征越来越丰富,即N2<N1,C2>C1N_2<N_1, C_2>C_1,需要注意的是,{p2i}\{p_{2,i}\}不一定是{p1,i}\{p_{1,i}\}的真子集。
在选取点集F1F_1F2F_2时,对于分类问题p2p_2p1p_1的随机下采样,对于分割问题p2p_2p1p_1的最远点采样。

X\mathcal{X}卷积(X\mathcal{X}-Conv Operator)

与CNN的卷积操作类似,X\mathcal{X}-Conv只作用在局部区域,算法流程如下图:
PointCNN 论文学习

  • PPpP'←P−p 将点集PP变换到以pp点为中心的局部坐标系
  • FδMLPδ(P)F_δ←MLP_δ(P')逐点应用MLPδMLP_δ,将PP'R3R^3坐标空间映射到RCδR^{C_δ}特征空间
  • F[Fδ,F]F_∗←[F_δ,F]FδF_δFF拼接起来,FF_∗ 是一个 K×(Cδ+C1)K×(C_δ+C_1) 矩阵
  • XMLP(P)\mathcal{X}←MLP(P')MLPMLP学习PP'获得K×KK×KX\mathcal{X}变换矩阵
  • FXX×FF_\mathcal{X}←\mathcal{X}×F_∗ 应用X\mathcal{X}变换矩阵加权置换 FF_∗
  • FpConv(K,FX)F_p←Conv(K,F_\mathcal{X})​ 做卷积
    上述算法流程总结为公式为:
    Fp=XConv(K,p,P,F)=Conv(K,MLP(Pp)×[MLPδ(Pp),F])F_p =\mathcal{X}-Conv(K, p, P, F) = Conv(K, MLP(P-p)\times[MLP_\delta(P-p), F])
    F2F_2中的点为ppppF1F_1中的KK近邻为NNX\mathcal{X}-Conv的输入为S=(pi,fi):piNS={(p_i,f_i):p_i\in N}(该集合是无序的),SS可以表示为K×DimK\times Dim的矩阵。因为P=(p1,p2,...pk)TP=(p_1,p_2,...p_k)^T,F=(f1,f2,...fK)TF=(f_1,f_2,...f_K)^T,故X\mathcal{X}-Conv的参数个数为K×(C1+Cδ)×C2K\times (C_1+C_δ)\times C_2

相关文章:

  • 2021-11-19
  • 2021-06-15
  • 2021-12-29
  • 2021-09-03
  • 2021-06-30
  • 2021-09-10
猜你喜欢
  • 2021-04-13
  • 2021-10-12
  • 2021-09-19
  • 2022-01-11
  • 2021-12-27
  • 2021-08-14
  • 2021-06-10
相关资源
相似解决方案