摘要
近年来,三维理解研究为直接从点云中提取特征提供了新的思路[22,24],这需要对点云进行有效的形状模式描述。受二维形状描述符SIFT[15]的启发,我们设计了一个名为PointSIFT的模块,它编码不同方向的信息,并适应形状的比例。具体来说,设计了一个方向编码单元来描述八个关键方向,并通过多个方向编码单元的叠加实现多尺度表示。PointSIFT模块可以集成到各种基于pointnet的体系结构中,以提高表示能力。大量实验表明,我们的基于PointSIFT的框架在标准基准数据集上的表现优于最先进的方法。代码和训练模型将随本文一起发布。
问题描述
我们首先制定了点云语义分割的任务。给定的点云记为
P
P
P,
P
P
P 是一个包含
n
n
n 个具有
d
d
d 维特征的点
p
1
,
p
2
,
…
,
p
n
∈
R
d
p_1, p_2,…, p_n∈R^d
p1,p2,…,pn∈Rd 的点集。每个点
p
i
p_i
pi 的特征向量可以是它在三维空间中的坐标
(
x
i
,
y
i
,
z
i
)
(x_i, y_i, z_i)
(xi,yi,zi) (或者加上可选的特征通道,如RGB值、法线、中间步骤中的表示向量等)。语义标签的集合用
L
L
L 表示。点云的语义分割是一个函数
Ψ
\Psi
Ψ,它为点云中的每个点分配语义标签。也就是说,
Ψ
:
P
↦
L
n
\Psi : P \mapsto L^n
Ψ:P↦Ln.
分割算法的目标是找到能给出准确语义标签的最优函数。
点集
P
P
P 的几个性质在以前的工作 [22,24] 中已经得到了强调。
P
P
P 的密度可能不是处处均匀的,
P
P
P 可能非常稀疏。此外,
P
P
P 作为一个集合是无序的、非结构化的,它将点云与常见的顺序或结构化数据(如图像或视频)区分开来。
算法描述
我们的网络遵循一个编码解码(downsample-upsample)框架,类似于用于点云分割的一般语义分割网络。在降采样阶段,我们递归地应用我们提出的PointSIFT模块和[24]中引入的集合抽象(SA)模块来进行分层特征嵌入。在上采样阶段,通过有效地交错特征传播(FP)模块[24]和PointSIFT模块来得到密集特征。我们的主要贡献之一和我们的分割网络的核心组件是PointSIFT模块,该模块具有预期的方向编码和规模感知特性。
一、PointSIFT 模块
给定一个 n × d n×d n×d 矩阵作为输入,它描述了一个大小为 n n n 的点集,每个点都具有 d d d 维特征,PointSIFT模块输出一个 n × d n×d n×d 矩阵,为每个点分配一个新的 d d d 维特征。受到广泛使用的 SIFT 描述符的启发,我们试图将 PointSIFT 模块设计为局部特征描述方法,该方法建模各种方向,且不随比例变化。
1. 方向编码
以往方法中的局部描述符通常基于点云无序、非结构化的观察,采用无序操作(如最大池[24,32])。然而,使用有序操作符可以提供更多信息(最大池丢弃除了 maximum 之外的所有输入),同时仍然保持输入点顺序的不确定性。点云的一种自然顺序是由三个坐标的顺序所引起的。这个观察将我们引向了方向编码(OE)单元,它是一种编码八个方向信息的点方向局部特征描述符。
OE单元的输入是点
p
0
p_0
p0 的
d
d
d 维特征向量
f
0
∈
R
d
f_0∈R^d
f0∈Rd。来自八个方向的信息被一个两阶段方案集成,以产生一个方向感知特征
f
0
′
f_0'
f0′。OE单元如图2所示。
OE嵌入的第一阶段是堆叠8邻域搜索(Stacked 8 neighborhood, S8N),它根据三个坐标的排序在8个象限中寻找最近邻。由于远处的点对于描述局部模式提供的信息很少,当搜索半径
r
r
r 内不存在点时,我们复制
p
0
p_0
p0 作为其最近的邻居。
我们进一步处理那些位于
2
×
2
×
2
2×2×2
2×2×2 立方体中的邻居的特征,以
p
0
p_0
p0 为中心进行局部模式描述。以前的许多工作忽略了数据的结构,而是对特征向量沿着维度进行最大池化来获得新的特征。然而,我们相信像卷积这样的有序算子可以更好地利用数据的结构。因此,我们提出了方向编码卷积,它是一种沿X、Y和Z轴依次对
2
×
2
×
2
2×2×2
2×2×2 立方体进行卷积的三级算子。形式上,相邻点的特征是形状为
2
×
2
×
2
×
d
2×2×2×d
2×2×2×d 的向量
V
V
V,其中前三个维度对应于三个轴。向量
M
M
M 的切片为特征向量,例如
M
1
,
1
,
1
M_{1,1,1}
M1,1,1 代表 上-右-前 这个象限的特征。三阶段卷积公式为:
V
x
=
g
(
C
o
n
v
(
W
x
,
V
)
)
∈
R
1
×
2
×
2
×
d
V_x=g( Conv(W_x, V) ) \in R_{1 \times 2 \times 2 \times d}
Vx=g(Conv(Wx,V))∈R1×2×2×d
V
x
y
=
g
(
C
o
n
v
(
W
y
,
V
x
)
)
∈
R
1
×
1
×
2
×
d
V_{xy}=g( Conv(W_y, V_x) ) \in R_{1 \times 1 \times 2 \times d}
Vxy=g(Conv(Wy,Vx))∈R1×1×2×d
V
x
y
z
=
g
(
C
o
n
v
(
W
z
,
V
x
y
)
)
∈
R
1
×
1
×
1
×
d
V_{xyz}=g( Conv(W_z, V_{xy}) ) \in R_{1 \times 1 \times 1 \times d}
Vxyz=g(Conv(Wz,Vxy))∈R1×1×1×d
其中 W x ∈ R 2 × 1 × 1 × d W_x∈R_{2×1×1×d} Wx∈R2×1×1×d, W y ∈ R 1 × 2 × 1 × d W_y∈R_{1×2×1×d} Wy∈R1×2×1×d 和 W z ∈ R 1 × 1 × 2 × d W_z∈R_{1×1×2×d} Wz∈R1×1×2×d 为卷积算子的权值(为清晰起见,省略了偏置)。本文设 g ( ⋅ ) = R e L U ( ⋅ ) g(·)=ReLU(·) g(⋅)=ReLU(⋅)。最后,OE卷积通过重塑 V x y z ∈ R 1 × 1 × 1 × d V_{xyz}∈R_{1×1×1×d} Vxyz∈R1×1×1×d 输出一个 d d d 维特征。方向编码卷积(OEC)集成了八个空间方向的信息,得到了一种对方向信息进行编码的表示。
2. 尺度感知
为了让我们的 PointSIFT 模块能够感知尺度,我们遵循长期存在的多尺度表示方法,在 PointSIFT 模块中叠加几个方向编码(OE)单元,如图3所示。
高水平的OE单元比低水平的OE单元有更大的感受野。通过构建OE单元的层次结构,我们获得了点云局部区域的多尺度表示。