SO-Net: Self-Organizing Network for Point Cloud Analysis
参考链接
论文翻译链接
SO-Net视频讲解
论文地址
代码地址
论文目的: 点云分类、分割任务核心在于点云特征提取,本文旨在设计一种较好的点云特征提取结构
点云特征提取方法有很多,有以下几种:
- 转为体素,利用3D卷积 —>受限于分辨率,并且计算资源消耗大
- 转为多视图,分别应用2D CNN —> 会造成信息缺失,效果很一般
- 利用索引结构(data indexing-based),比如八叉树、kd树,消除了点云的无序性,然后再处理,代表性网络KD-Net(建模输入点云的空间分布,但是感受野重叠控制不灵活)
- 因为点云的无序性,很少有直接输入点云的模型的研究,直到pointnet出现,随后pointnet++、pointCNN、KPConv、DGCNN
论文核心: 提出了SO-Net,属于data indexing-based方法,用自组织网络SOM建模输入点云的空间分布,然后聚合成一个全局向量,进行分类和分割任务
SOM网络解析:
输入:N个点云(N,3),输出:M个节点(M,K)
为了体现点云的置换不变性,采用:每次训练都初始化同样的节点分布、采用整体更新不逐点更新节点(所有输入点都KNN之后,统一进行更新,体现置换不变性)
首先初始化M个节点信息,论文中采用球形空间分布
通过以下算法,更新节点特征,达到M个节点特征可以代表输入点云的效果
- 对于输入点云的每个点Pi,对节点空间做KNN(point to node KNN),得到K个Sik
- 对Sik做归一化处理,得到k个归一化向量Pik
- Pik经过MLP,升维处理
- 输入点云的每个点都处理完成后,得到KN个特征,对于每个节点,对其连接的所有特征做max pooling,节点得到更新,最终M个节点更新完毕,得到M个节点特征(M个节点向输入点云‘靠近’,学到了输入点云的空间分布)
原理示意图如下所示: 其实就是节点特征域向输入点云特征域靠拢的自监督学习过程
本质上是无监督学习:利用无标签数据,自己学习数据内在规律,更新M个nodes
这里的K是可调参数,代表着感受野重叠性,K越大代表重叠性越大,特征的交互性紧密程度越大,学习到的特征信息越丰富,但是过大的K会造成信息冗余、增大计算量
网络整体的结构:
作者还设计了很有意思的一件事,设计了自编码器Autoencoder,验证经过SOM学习得到的全局向量可代表整个输入点云;并且还可以利用数据集(不用标签)对autoencoder训练,训练得到的encoder(SOM)可作为分类任务或分割任务的预训练权重
其中的损失函数采用Chamfer loss:表征预测点云和原始点云的相似程度
其中Ps是原始点云,Pt是重建点云
对于所有的x∈Ps,求与Pt所有点距离最小的距离的总和,反过来也一样,最后相加
可以看到,重建效果还不错
实验情况 & 鲁棒性消融实验
总结:
核心是设计一个自组织网络SOM,来近似输入点云的空间分布,最后得到一个全句向量进行分类分割等任务,并且还可以通过改变K来控制感受野重叠程度,同时设计一个Autoencoder结构,可验证SOM效果并且可作为分类分割任务的预训练环节
缺点:网络中的层级特征提取部分全是MLP,感觉比较粗糙,后续可用CNN、GNN等实现