论文阅读PointSIFT

论文阅读:PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation

内容概述:

一、Introduction

二、Related Work

三、PointSIFT-basedArchitecture

四、Experiments

五、Conclusion

一、Introduction

论文作者:上海交通大学卢策吾团队

时间:2018年

论文地址:https://arxiv.org/abs/1807.00652

GitHub地址:https://github.com/MVIG-SJTU/pointSIFT

1)PointSIFT缘由:

​ 三维语义分割存在着很多的挑战:

(1)点云的稀疏性使得大部分训练算法效率低下

(2)点之间的关系不明显,难以表示

​ 近期出现了point系列,它直接采用点云作为输入,这样加速了计算,同时也提高了分割性能,但是point系列存在一个问题:每个点操作过于独立,而无法高效刻画相关区域的语义结构,因此需要有一个结构可以捕获点云的形状特征。SIFT是最成功的二维形状描述符之一,它考虑了形状表示的两个基本特征,即方向编码和尺度感知,借鉴了SIFT的思路,同时为了解决捕获点云形状特征这一问题,作者设计出了pointsift这一架构。

3)PointSIFT实现功能

​ (1)捕获所有方向的信息

​ (2)具有尺度感知能力

​ (3)具有很强的可移植性

总结:PointSIFT直接以点云作为输入,是一个点云形状特征的提取模块,它是受SIFT启发而来。实验表明,基于PointSIFT的框架在测试数据集上的性能优于现有方法

二、Related Work

1)三维点云表示方法

​ (1)体素化:用一个三维包围盒对点云进行包围,将三维包围盒分割为固定分辨率,有点云为1,无点云为0

​ 问题:存在空间稀疏性和计算复杂性,空间稀疏性通过八叉树可以在一定程度上解决,但是点云转化为

​ 体素耗时很长

​ (2)多边形网格

​ 问题:目前算法只可以解决流形网格(流形网格:一条网格边为一个或两个网格面共享,一个网格

​ 顶点的领域三角片构成一个闭合或者开放的扇面)

​ (3)多视图:对点云进行多视角拍照,把三维点云转化为几个不同视角的二维图片

​ 问题:忽略了大量的几何细节

2)点云分割算法

​ (1)PointNet:使用最大池化层来提取特征,解决点云的无序性,在提取特征前用一个名叫T-net的微型网

​ 络对点云进行转化,解决点云的刚性变化问题。

​ (2)PointNet++:是pointnet的分层版本,pointnet++加入了捕获局部结构的功能。每个图层都有三个子阶

​ 段:采样,分组和PointNeting,并过堆叠多个图层来适应不同尺度。

​ (3)超体素:将大型的点云进行分割,分成几个小的点云,每个小点云为一个超体,每个超体将被一个点网(pointnet等方法)嵌入。

三、PointSIFT-based Architecture

PointSIFT块:

pointsift块是嵌在网络中的一个模块,其输入是n个特征,每个特征d维,其输入与输出保持一致,因此非常容易嵌入任何网络。

方向编码卷积

方向编码卷积是pointsift块中的基本单元,它可以捕获周围的点,具体步骤如下:

步骤一:以特征点f为中心,将空间分割为八个方向,每个方向中离f最近的点代表该方向,若在半径r内未找到特征点,则用f表示。步骤一结束后,每个特征带有周围八个方向的信息,即从n×d变为n×8×d

步骤二:对每个特征点进行一次x轴的卷积,即每个点的八个特征进行两两结合,结束后每个特征点带有4个维度的特征,即从n×8×d变为n×4×d。公式如下:
M 1 = g [ C o n v x ( A x , M ) ] R 2 × 2 × d M_1 = g[Conv_x(A_x,M)] \in R^{2\times2\times d}
步骤三:对每个特征点再进行一次y轴的卷积,即每个点的四个特征两两结合,结束后每个特征点带有2个维度的特征,即从n×4×d变为n×2×d。公式如下:
M 2 = g [ C o n v y ( A y , M 1 ) ] R 2 × d M_2 = g[Conv_y(A_y,M_1)] \in R^{2\times d}
步骤四:对每个特征点再次进行一次z轴的卷积,即每个点的两个特征结合,结束后每个特征点带有1个维度的特征,即从n×2×d变为n×d。公式如下:
M 3 = g [ C o n v z ( A z , M 2 ) ] R 1 × d M_3 = g[Conv_z(A_z,M_2)] \in R^{1\times d}
公式结束: A x A_x A y A_y A z A_z 是优化所需要的卷积权重,Convy(Convy,Convz)是沿着X(Y,Z)方向的卷积,卷积:卷积核大小:[1,2],步幅:[1,2]。g[ * ]= ReLU(Batch _ norm(*)),激活函数使用relu,并进行批归一化。

比较:

与k近邻选择相比:

(1)八邻域搜索的复杂度低,该方法只需搜索一个邻域,而k近邻需要搜索周围所有区域

(2)k近邻选择在某些场景,取点过于片面,八邻域搜索可以捕获所有方向的信息,如上图所示,绿色代表八邻域搜索,红色代表k近邻搜索。

尺度感知

一个方向编码卷积只可以查看周围的八个点,如果堆叠多个方向编码卷积,那么视野会逐渐扩大,如上图所示,它堆叠了三个方向编码卷积,那么他的视野第一层是8,第二层是84,第三层是512。然后把三层的输出结合到一起,用一个卷积来选择,最后输出n个特征,每个特征d维,从而实现尺度感知。

方向编码卷积的堆叠方式作者在代码中用了两种方式,一种是我上面讲的,另一种是通过残差的方式,即两两结合在一起构成残差块,如上图所示。

整体架构:

作者把pointsift模块穿插如pointnet++的网络中,上图是整体架构,下面进行详细介绍。

网络的输入是8192个点维度为x、y、z三维或者加上RGB六维,经过mlp维度变成64。经过一个pointsift块,即两次方向编码卷积,用残差连接,输出维度不变。最后经过pointnet++的集合抽象层,8192个点先经采样层提取1024个点,使用fps算法;1024个点经过分组层,每个点分配32个点,采用k近邻搜索的方法。最后经过max pooling,输出1024个点。

重复上面的操作,先经过一个pointsift块,即两次方向编码卷积,同样用残差连接,后经过集合抽样层提取出256个点,最后输出256个点,每个点256维度。

重复上面的操作,先经过一个pointsift块,即四次次方向编码卷积,两两用残差连接,并把输出相结合后用卷积选择尺度,后经过集合抽样层提取出64个点,最后输出64个点,每个点512维度。

这一步是由64个点的特征逐渐反馈到256个点上。先计算插值,插值的计算方法是对于256个点中的每个点,计算64个点的位置中其最近的k个点,这k个点加权求和,得出一个512维特征,即为插值。把差值加入256原始的特征256维,经过mlp,输出256个点,每个点512为特征。最后经过一个pointsift块,三个方向编码卷积,输出结果相连接并用一个卷积选择。

插值公式:
f ( j ) ( x ) = i = 1 k w i ( x ) f i ( j ) i = 1 k w i ( x ) w h e r e w i ( x ) = 1 d ( x , x i ) p , j = 1 ,   , C f^{(j)}(x) = \frac{\sum_{i=1}^{k}{w_i(x)f_i^{(j)}}}{\sum_{i=1}^{k}{w_i(x)}} where w_i(x)=\frac{1}{d(x,x_i)^p},j=1,\cdots ,C
x:集合抽样层的输入 x i x_i :集合抽样层的输出 K取3,p取2 C:特征个数 d:距离

这一步骤重复上面的步骤,从256个点反馈到1024个点上面,最后同样经过一个pointsift块,两次方向编码卷积。

这一步骤重复上面的步骤,从1024个点反馈到8192个点上面,最后同样经过一个pointsift块,一次方向编码卷积。输出结果为8192个点,每个点128维,最后经过全连接层,输出每个点每个类别的比例。

四、Experiments

1)避免了下采样处理中的信息丢失

备注:第一行是每个下采样步骤中的点云大小

​ 第二行pointnet++框架平均进行的点卷积计算

​ 第三行是PointSIFT框架平均进行的点卷积计算

由该实验可以看出,在pointnet++的架构中第一步骤中的8192个点,只有6570个点被计算到了,也就是有1622个点被忽略了,从而可以得出该方法有20%的信息丢失了。二在pointsift架构中可以发现计算到了所有的点,因此没有信息的丢失。

2)八邻域搜索与球搜索

八邻域搜索与球搜索的区别:

​ (1)八邻域搜索通过空间坐标轴将空间划分为8个部分,而球查询搜索使用整个区域。

​ (2)八邻域搜索为每个子空间取最近点。球查询搜索在搜索半径内随机选择点。

作者写了一个小网络来比较这两种搜索方法的区别,网络架构如上图所示,作者把八邻域搜索换成球搜索,再用一个卷积来集合信息。实验结果如下图所示,实验表明作者的八邻域搜索策略比球搜索来的好。

3)S3DIS dataset

这是作者在S3DIS dataset数据集上测试的效果,实验表明,作者的pointsift总体优于现有方法。

这个是在S3DIS dataset数据集上各个类别的测试结果,结果表明大部分类别pointsift的效果比现有方法好,但是有部分类别效果不如现有方法,如梁、柱等。下图是在该数据集上测试的可视化效果。

4)ScanNet

这个是作者在另外一个数据集ScanNet上测试的结果,测试结果与上面相照应,同样可以看出pointsift架构优于这些方法。。

五、Conclusion

pointsift架构总体而言有三个特点,一是可以捕获所有方向的信息,这个是由方向编码卷积实现的;二是具有尺度感知能力,这个是由堆叠多个方向编码卷积,并用卷积来选择尺度,由网络自己训练而实现的;三是具有很强的可移植性,这个是因为作者的pointsift架构的输入与输出一致,因此非常容易嵌入任何网络。

猜你喜欢

转载自blog.csdn.net/JiangZuning/article/details/87904417
今日推荐