3D点云分割系列4:PointSIFT:SIFT算法在点云处理中的应用,从PointNet++的球查询扩展到8向查询

PointSIFT

《PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation》2018年发布在arXiv上。

1 引言

PointNet和PointNet++成功实现point-base的3D点云分割。基于此,更多point-base的方法提出,这些方法普遍是对PointNet和PointNet++的改进。本文介绍的PointSHIT即对PointNet++的改进。

首先,我们需要引入SIFT的概念。SIFT即尺度不变特征转换(Scale Invariant Feature Transform)是图像处理领域中的一种局部特征描述算法。SIFT特征对于旋转和尺度均具有不变性,并且对于噪声、视角变化和光照变化具有良好的鲁棒性。

SIFT算法可以简要分成以下三步:

  1. 事先寻找一些关键点。
  2. 然后基于局部图像的梯度方向,为每个关键点位置分配一个或多个方向,后续所有对图像数据的操作都是相对于关键点的方向、尺度和位置进行变换,这些变换提供了不变性。
  3. 在每个关键点周围的区域内以选定的比例计算局部图像梯度,这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

这三个步骤对应了上图中淡灰色框线的三部分。

2PointSIFT

2.1 PointSIFT module

SIFT算法两个关键点分别是尺度不变检测器和旋转不变描述符。在关键点检测剪短,SIFT算法通过多尺度表示来实现尺度不变性。在特征描述阶段,SIFT检测旋转不变性的主导方向,并综合感知不同方向的图像模式。

2.1.1 Orientation-encoding

PointNet和PointNet++中均使用对称函数MaxPool(属于无序的运算符),但作者认为最大池化会抛弃邻域内除最大值以外的值,会损失部分信息。而使用有序的运算符可以提供更多信息,同时仍然能够保留输入点云的顺序不变性。这里引入了方向编码单元(Orientation-encoding unit),这是一个逐点局部特征描述符,对八个方向的信息进行编码。

OE 嵌入的第一阶段是 Stacked 8-neighborhood (S8N) Search,它在按三个坐标排序划分的八个八分圆中的每一个中找到最近的邻居(图3b)。由于远距离点提供的局部模式描述信息很少,当在某个八分圆的搜索半径 r 内不存在任何点时,复制 p 0 p_0 p0 作为其自身的最近邻居。

为了更好的描述 p 0 p_0 p0点的特征,作者提出使用卷积来对2 × 2 × 2 立方体中的那些邻居的特征进行编码,作为以 p 0 p_0 p0为中心的局部模式描述。作者认为诸如卷积之类的有序运算符可以更好地利用数据的结构。因此,这里提出了方向编码卷积(OE convolution),它是一个三级运算符,依次沿 X、Y 和 Z 轴对 2 × 2 × 2 立方体进行卷积。形式上,相邻点的特征是一个形状为 2×2×2×d 的向量 V,其中前三个维度对应三个轴。向量M的切片是特征向量,例如 M ( 1 , 1 , 1 ) M_{(1,1,1)} M(1,1,1)表示来自右上角八分圆的特征。三级卷积公式为

V x = g ( Conv ⁡ ( W x , V ) ) ∈ R 1 × 2 × 2 × d V x y = g ( Conv ⁡ ( W y , V x ) ) ∈ R 1 × 1 × 2 × d V x y z = g ( Conv ⁡ ( W z , V x y ) ) ∈ R 1 × 1 × 1 × d \begin{aligned} V_{x} & =g\left(\operatorname{Conv}\left(W_{x}, V\right)\right) \in \mathbb{R}_{1 \times 2 \times 2 \times d} \\ V_{x y} & =g\left(\operatorname{Conv}\left(W_{y}, V_{x}\right)\right) \in \mathbb{R}_{1 \times 1 \times 2 \times d} \\ V_{x y z} & =g\left(\operatorname{Conv}\left(W_{z}, V_{x y}\right)\right) \in \mathbb{R}_{1 \times 1 \times 1 \times d}\end{aligned} VxVxyVxyz=g(Conv(Wx,V))R1×2×2×d=g(Conv(Wy,Vx))R1×1×2×d=g(Conv(Wz,Vxy))R1×1×1×d

这里 W x ∈ R 2 × 1 × 1 × d , W y ∈ R 1 × 2 × 1 × d , W z ∈ R 1 × 1 × 2 × d W_x\in {\mathbb{R}_{2 \times 1 \times 1 \times d}},W_y\in {\mathbb{R}_{1 \times 2 \times 1 \times d}},W_z\in {\mathbb{R}_{1 \times 1 \times 2 \times d}} WxR2×1×1×d,WyR1×2×1×d,WzR1×1×2×d为卷积模块的权重。 g g g函数则用 R e L U ReLU ReLU替代。OE卷积最后将输出重塑为 V x y z ∈ R 1 × 1 × 1 × d V_{xyz}\in {\mathbb{R}_{1 \times 1 \times 1 \times d}} VxyzR1×1×1×d。这个输出整合了来自八个方向空间的信息,是特征点 p 0 p_0 p0在八个空间方向上的方向编码信息。

2.1.2 尺度感知

为了能够提取多个尺度的特征,这里遵循了长期以来的多尺度表示方法,在PointSIFT模块中堆叠多个方向编码单元。

高层次的OE单元比低层次的OE单元获得更大的感受野,通过不同层次的OE单元的组合,PointSIFT模块能够获得点云局部区域的多尺度表示,通过多个identity连接这些特征,再通过一个逐点卷积(Pointwise Convolution)来输出d维的多尺度特征。在联合优化特征提取和集成多尺度特征的逐点卷积的过程中,神经网络将学会选择或关注适当的尺度,为模型添加不同尺度的感知。

2.2 PointSIFT模型

PointSIFT模型继承了PointNet和PointNet++的模型结构和一些模块,其中包括PointNet++中的set abstraction(SA)和feature propagation(FP),整体结构与PointNet++相同。

实验

作者设计实验证明球查询和s8N查询的效果差异,将s8N查询用于PointNet++。其余参数相同,结果证明s8N查询获得的效果最好。

结论

提出了一个新的PointSIFT模块。该模型两个关键在于:

  1. 方向编码单元捕获不同方向的信息。
  2. PointSIFT模块的多尺度表示能够处理各种尺度的对象。

猜你喜欢

转载自blog.csdn.net/yumaomi/article/details/129961741
今日推荐