贡献
CNN 的成功来源于可以训练深度模型,从而能够大量提升。但是CNN不能处理非欧数据。
GCN可以处理非欧数据,借鉴了CNN的概念来训练模型。但是由于梯度消失(图1)因此局限于非常浅(3-4层)的模型.
本文展示了新的训练深度GCN的方式。借鉴CNN的 residual / dense connections 和 dilated conv 改进到 GCN
1. GCN网络结构
GCN网络可以总结为以下3个模块:
(1)Feature更新模块(论文中称为:GCN Backbone Block),完成点云中每个点的feature的反复更新。
(2)Feature融合模块(论文中称为:Fusion Block),该模块将点云中所有点的feature整合到一起,得出一个点云的整体的feature。
(3)预测模块(论文中称为:MLP Prediction Block),该模块使用之前得到的每个点feature,以及点云的整体feature,进行点云分类、分割等视觉任务。
2. Feature更新模块
从总体结构上看,论文提出了三种结构:
PlainGCN: 每层模块接收上一层的输出,作为输入,内部处理完后,产生输出。
ResGCN:每层模块接收上一层的输出,作为输入,内部处理完后,产生的输出,从输入加了一个Residual连接。
DenseGCN:每层模块接收之前所有层的输出,作为输入。
每层模块内部更新feature的过程,可以分为两个操作步骤:选邻居、计算feature:
选邻居。以点 为中心,用 选出 个最近的点。为了增加每个点的receptive field,论文在 的基础上,文提出了dilated knn选点方法。
选邻居。以点xi 为中心,用 KNN选出 K 个最近的点。为了增加每个点的receptive field,论文在KNN的基础上,文提出了dilated KNN选点方法。计算feature。选出 个点后,有多种方式来计算xi的feature。代码中实现了4种,每种方法的大概流程总结如下:
(1)用每个邻居点的feature与xi的feature做差,得到K个feature;max后,整合为一个feature,与xi 的feature拼接,再经过一个1x1的卷积层,计算出xi的新feature;
(2)用每个邻居点的feature与xi的feature做差,得到K个feature;将xi的feature分别拼接到K个feature中;经过一个1x1的卷积层处理;最后max,整合为一个feature,作为xi的新feature;
(3)用每个邻居点的feature与xi的feature做差,得到K个feature;经过一个1x1的卷积层处理;max后,整合为一个feature;将feature拼接到xi的feature中,作为xi的新feature;
(4)用每个邻居点的feature与xi的feature做差,得到K个feature;reduce_sum后,得到一个feature;这个feature与xi的feature加起来;经过一个1x1的卷积层处理,作为xi的新feature。
3. Feature融合模块
以segmentation为例,该模块使用一个卷积层处理后,用max_pool将点云中所有点的feature整合为一个点云的全局feature,再将该全局feature拼接到每个点的feature上。
此时,每个点既有局部信息,也有全局信息。
4. 预测模块
用多个卷积层对每个点的feautre进行处理、降维,计算出每个点属于每个类的概率。
实验
上文提出里 ResGCN 和 DenseGCN 解决 GCNs 梯度消失问题,和 膨胀图卷积增大视野域。下面以点云分割展示性能。
4.1 3D点云的图学习
用k-NN在每一层建立动态有向图G\mathcal GG。
4.2 实验设置
S3DIS数据集