Recurrent Slice Networks for 3D Segmentation of Point Clouds(CVPR2018,Spotlight)
Qiangui Huang, Weiyue Wang, Ulrich Neumann
University of Southern California
一、背景
- 由于点云数据是无序的和非结构化的,传统的CNN、RNN方法难以被拓展使用;
- 在经典的PointNet(2016)中,首先独立地处理每个点进行一定程度的特征提取,然后利用最大池化得到一个全局特征,max-pooling的操作克服了数据的无序性问题。但是PointNet没有利用数据局部的相关性;
- PointNet++(2017)在其基础之上,采用了farthest point sample 和 query KNN 来提取局部信息,缺点是计算负担很大。
二、主要贡献
- 设计了一个Recurrent Slice Network (RSNet) 来实现对点云数据的3D语义分割(semantic segmentation)任务。网络的输入是原始的点云数据,输出是每个点的语义标签;
- 网络由三部分组成:slice pooling layer, RNN layers, and a slice unpooling layer。slice pooling layer 将无序的点云特征映射为有序的特征向量序列,以便可以应用传统的端到端学习算法(RNN);
- 提取局部相关性特征的计算复杂度相对较小;
三、网络结构
整体框架如下图所示:
1. Input Feature Extraction:
输入是点云数据,经过3个核为1X1的卷积层(输出通道数均为64),为每个点生成特征。
2. Slice Pooling Layer:
输入的是无序的点云数据的特征,输出的是有序的特征向量序列。
首先要将数据点切分成一片一片的(slices),切分数据时,共有x,y,z三个切分方向。以z方向为例,如下图所示,根据z轴上的坐标值,数据点被均匀地划分为N个部分,切片的厚度(分辨率)由超参数r控制。然后将对每个切片上的特征数据(共N个切片),通过max-pooling的操作提取出global feature(和PointNet类似),从而多个点的特征被聚合为一个关于该slice的全局信息的特征向量。最终得到N个有序的特征向量
f
s
1
{f^{s1}}
fs1,
f
s
2
{f^{s2}}
fs2…,
f
s
N
{f^{sN}}
fsN。以上操作的意义在于,得到的特征向量是有序和结构化的(
f
s
1
{f^{s1}}
fs1到
f
s
N
{f^{sN}}
fsN表示z坐标从小到大,
f
s
i
{f^{si}}
fsi和
f
s
(
i
−
1
)
{f^{s(i-1)}}
fs(i−1)在空间中是相邻的关系), 从而可以在后续的结构中提取局部相关信息。
3. RNN Layers:
RNN可以被用来处理序列数据,时间序列和空间序列均可以。因此在这里采用了双向RNN(bidirectional RNN)来更新特征(即考虑了相邻的slice的特征),从而达到了提取局部相关性特征的目的。这里在每个slice的分支中使用了6层RNN layers,通道数依次为256,128,64,64,128,256。
4. Slice Unpooling Layer:
在slice pooling layer中,将一个slice中多个点的特征映射成了一个全局的特征向量,因此这里需要完成映射的逆过程,如下图所示,每个点的特征由其所在slice的全局特征向量表示:
5. Output Feature Extraction:
输入是上一层传来的各点的特征,输出是为每个点预测的语义标签。依次经过3个核为1X1卷积层,通道数分别为512,256,K,这里K是标签类别的数目。
四、实验结果
实验采用的数据集: Stanford 3D dataset (S3DIS), ScanNet
dataset , ShapeNet dataset。在S3DIS Dataset,论文提出的RSNet(mAcc=51.93)性能超过了PointNet,但是没有和PointNet++比较;在ScanNet dataset,RSNet(mAcc=48.37)超过了PointNet和PointNet++(mAcc=43.77);在ShapeNet Dataset,RSNet(mAcc=84.9)略低于PointNet++(mAcc=85.1)。
文章链接:http://openaccess.thecvf.com/content_cvpr_2018/papers/Huang_Recurrent_Slice_Networks_CVPR_2018_paper.pdf
代码链接: https://github.com/qianguih/RSNet