PointCNN:Convolution On X-Transformed Points 论文阅读

原创:本科生黄尚锋

论文地址:

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在实践中被证明是有效的,但是对于它的严格理解,特别是当它被组合成一个深层神经网络时,仍然是一个有待于未来研究的问题。

微信编辑:肖斯凯

责任编辑:林梦雅

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117G0K5CW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券