原创:本科生黄尚锋
论文地址:
https://arxiv.org/abs/1801.07791
开源代码:
https://github.com/yangyanli/PointCNN
引言
卷积神经网络(Conv)能够很好利用原始数据的在空间上的局部相关性(Spatially-local correlation),这也正是卷积神经网络在各种分割或者分类任务中取得成功的关键。正是如此,作者设想是否能效仿卷积神经网络来很好的利用点云(Point Cloud)的空间上的局部相关性,这将在点云分割和分类上取得很大的成功。所以这篇文章的重点就在于怎么利用这种相关性。
论文着重从以下几方面开始阐述
1.Using Conv in Points Cloud directly
2.Hierarchical Convolution
3.X-Conv Operator
4.PointCNN Architectures
5.Experiments
一、Using Conv in Points Cloud directly
图1-1
图1-1是代表卷积的输入,图(i)是来自规则的网格,例如图像输入。图(ii-iv)是来自同一局部的点云输入
使用X-transformation对相对位置进行点的矩阵进行操作,可以减少输入顺序对最终结果的影响。
二、Hierarchical Convolution
作者看到卷积算子的分成应用对于CNN学习表征而言至关重要,同时也时卷积神经网络取得巨大成就关键之一,故作者也在PointCNN中也使用了分层卷积。
图2-1
以图2-1的虚线为分割线
虚线以上为在二维图片上应用的分层卷积:
图2-2
加深通道来提取特征,并将信息聚合,使得最终得到的每个点的感受野扩大。
虚线以下在点云上运用分成卷积:
图2-3
选取k个邻近点,并将k个邻近点的信息聚合到代表点上,减少了样本的数量。
三、X-Conv Operator
图3-1
X-Conv的具体步骤解析
Step 1:
1.通过随机采样(分类任务)或者最远点采样(分割任务)选取代表点(representative point),如图3-2
图3-2
2. 将邻近点的坐标转换为以代表点为原点的局部坐标系。组成矩阵。如图3-3
图3-4
Step 2:
图3-5
图3-5是的大致流程图,它主要由两个全连接层组成,每个全连接层的输出通过ELU激活函数去线性化,在紧跟一个BN层,进行数据归一化处理。
步骤2将点的坐标转化与特征点相关的局部特征信息。
Step 3:
图3-6
Step 4:
图3-7
Step 5:
Step 6:
X-Conv大题流程图:
四、PointCNN Architectures
定义:接受域(the receptive filed of each representative)为K/n。
K为邻近点的数量,n为前一层点的数量。当接受域越大,代表点的感受野也越大
1.PointCNN Architecture in classification task:
图4-1
N: 输出代表点的数量 C: 特征信息的维度 K: 选取邻近点的数量
图4-1中第一次X-Conv使得样本的数量减少为4个点,第二次X-Conv后样本的
数量就减少为1个点,X-Conv层的训练样本数量迅速下降,使得彻底训练顶层X-Conv层的效率很差。所以作者再次提出了一些改进。
2.PointCNN Architecture in classification task(improvement):
图4-2
N: 输出代表点的数量 C: 特征信息的维度 K: 选取邻近点的数量
D:扩张域
图4-2中第一次X-Conv时,从代表点的旁边选出邻近的四个点进行X-Conv,使得样本的数量减少为7个,此时的扩张域为4/10。第二次X-Conv时,从代表点的邻近的4*2=8个点中随机选取四个点进行X-Conv,最终样本减少为4个,扩张域为(4*2)/7。此时每个代表点的感受野为全局,相对于图4-1,它并没有样本的数量过度的减少,这样可使得最终分类的结果更好。
3.PointCNN Architecture in segmentation task:
图4-3
N: 输出代表点的数量 C: 特征信息的维度
K: 选取邻近点的数量D:扩张域
“Conv”和 “DeConv”都是相同的X-Conv算子。对于 “DeConv” 图层,与“Conv”图层唯一的区别在于,输出中的点数比输入点中的点数多,但特征通道少。
接受域变化为:4/10->(4*2)/7->3/4->3/7
图像分割任务的PointCNN框架将点云的信息聚合在代表点上,再通过反卷积将样本点的数量增加,将代表点的信息扩散到那些点,使得每个能反映局部的信息。
五、Experiments
1.PointCNN在ModelNet40 和ScanNet 上的表现—分类任务:
图5-1
mA: (Comparisons of mean per-class accuracy)每一类的平均准确率
OA: (overall accuracy)总体的准确率
Pre-aligned: 预先对齐的数据
Unaligned: 没有对齐的数据
ModelNet40中的大部分3D模型都是预先对齐到公共向上方向和水平面向方向的。如果没有在训练集或测试集上进行随机水平旋转,而利用相对一致的水平面向方向,并且基于该设置的指标不能与随机水平旋转的指标直接比较。因此,我们运行PointCNN并报告了这两种设置下的性能
从图5-1中可以得出,PointCNN在ModelNet40的预先对齐和没有对齐的数据上总体准确率都有达到92左右,在ScanNet上的数据集表现则相对较差。
2.PointCNN在Sketch classififcation 结果
图5-2
Sketch是二维空间中的一维曲线,因此可以更有效地用点云表示,而不是用二维图像。我们在TU-Berlin上对PointCNN进行了评估,并快速绘制草图,我们将其性能与具有竞争力的PointNet++以及基于图像CNN的方法进行了比较。
PointCNN在这两个数据集上的表现都优于PointNet++,在快速绘制(2500万数据样本)方面具有更突出的优势,这明显大于TU-Berlin(0.02万数据样本)。在两种数据集的表现生PointCNN的优势明显优于Point。
3.在二维图像上的Image classification task:
图5-3
因为X-Conv可以看做是Conv的泛化,理想情况下,如果底层数据相同,
但只是表示不同,那么PointCNN应该与CNNs执行相同的操作。所以作者
想在二维图像上进行测试
从图5-3中,可以看出PointCNN在MNIST手写体上的数据的准确率和PointNet++在MNIST上的表现不分伯仲。而在CIFAR10上则显得有些不足。
1.PointCNN in Segmentation task:
PointCNN结构的分割任务在ShapeNet Parts 、S3DIS、 ScanNet上的表现如下图;
图5-4
Plou: (Part-averaged IoU)在部分分割的准确率
Mplou: 每一类上的准确率
从图5-4中可以看出,在各种分类任务中的表现相对去其他方法均比较好。
六、可视化实验
为了检验X变化的有效性,我们去除了算法一的第四步进行测试:而且由于算法1第4行中MLP的去除,基线更“浅”。为了公平比较,我们进一步提出了PointCNN w/o X-W/D,它更宽/更深,参数量与PointCNN大致相同。PointCNN w/o X (deep)的模型深度也可以补偿。使他们的参数数量保持一致。
图6-1
总结
PointCNN是CNN从点云中表示的数据中利用空间-局部相关性的一种推广。PointCNN的核心是X-Conv算子,它对输入点和特征进行加权和置换,然后再进行典型的卷积处理。虽然X-Conv在实践中被证明是有效的,但是对于它的严格理解,特别是当它被组合成一个深层神经网络时,仍然是一个有待于未来研究的问题。
微信编辑:肖斯凯
责任编辑:林梦雅
领取专属 10元无门槛券
私享最新 技术干货