这篇论文介绍了 PointNet++,一种改进的基于层次结构的点云特征学习方法,解决了原始 PointNet 方法在处理非均匀采样点云时的局限性。以下是关于方法部分的详细总结,特别是关键模块和公式。
1. PointNet++ 方法概述
PointNet++ 是 PointNet 的扩展,通过递归应用 PointNet 于输入点集的嵌套分区,逐步提取多尺度的局部特征,从而能更好地捕捉点云的局部结构。
1.1 点云分区与局部特征学习
PointNet++ 利用距离度量对点集进行分区,类似于卷积神经网络(CNN)通过多层感知网络(MLP)在不同尺度上提取局部特征。其基本过程如下:
- 分区:通过 FPS(最远点采样) 算法选取分区的中心点,基于距离度量进行邻域构建。
- 局部特征提取:每个局部区域通过一个小型的 PointNet 网络进行特征提取。
公式(1)表示了 PointNet 的基本原理,通过最大池化聚合所有点的特征,生成全局特征:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
γ
(
max
i
=
1
,
.
.
.
,
n
{
h
(
x
i
)
}
)
f(x_1, x_2, ..., x_n) = \gamma \left( \max_{i=1,...,n} \{h(x_i)\} \right)
f(x1,x2,...,xn)=γ(i=1,...,nmax{h(xi)})
其中,
h
(
x
i
)
h(x_i)
h(xi) 是每个点的特征表示,
γ
\gamma
γ 是全局特征提取函数。
1.2 分层特征学习(Set Abstraction)
PointNet++ 引入了 Set Abstraction 层次结构,每一层包括以下三个关键模块:
- 采样层(Sampling Layer):使用 FPS 从输入点集中选取子集,定义局部区域的质心。
- 分组层(Grouping Layer):根据每个质心的坐标,通过球查询(Ball Query)或 kNN(最近邻查询) 方法构建局部区域。
- PointNet 层(PointNet Layer):对每个局部区域应用一个小型 PointNet,提取局部特征。
公式(2)表示了点特征传播的计算过程,使用距离加权平均进行插值:
f
(
j
)
(
x
)
=
∑
i
=
1
k
w
i
(
x
)
f
i
(
j
)
∑
i
=
1
k
w
i
(
x
)
f^{(j)}(x) = \frac{\sum_{i=1}^k w_i(x) f^{(j)}_i}{\sum_{i=1}^k w_i(x)}
f(j)(x)=∑i=1kwi(x)∑i=1kwi(x)fi(j)
其中,
w
i
(
x
)
=
1
d
(
x
,
x
i
)
p
w_i(x) = \frac{1}{d(x, x_i)^p}
wi(x)=d(x,xi)p1,
d
(
x
,
x
i
)
d(x, x_i)
d(x,xi) 是点
x
x
x 和点
x
i
x_i
xi 之间的距离,
p
p
p 是权重指数。
1.3 多尺度学习与密度自适应
-
多尺度分组(MSG):通过不同尺度的分组,提取多尺度的局部特征。特征在每个尺度上通过不同的 PointNet 提取,并进行拼接。
-
多分辨率分组(MRG):为了提高计算效率,PointNet++ 提出了 MRG 层,通过跨层信息聚合,使得模型能够根据局部点密度自动选择适当的尺度来提取特征。
1.4 特征传播(Feature Propagation)
为了在分割任务中保持每个点的特征,PointNet++ 使用 特征传播(Feature Propagation) 技术,将从采样点提取的特征传播到原始点集。通过加权平均方法,插值计算每个点的特征。
2. 关键贡献
- 分层结构:PointNet++ 通过递归应用 PointNet 进行分层特征学习,能够逐步提取点云的多尺度特征,从而改善了 PointNet 在处理复杂场景时的性能。
- 密度自适应:提出了多尺度分组(MSG)和多分辨率分组(MRG)方法,能够根据点云的密度变化自适应调整局部区域的尺度,从而提升了在非均匀采样点云上的鲁棒性。
3. 总结
PointNet++ 在 PointNet 的基础上增加了层次化的局部特征学习结构,并通过多尺度和多分辨率的特征聚合,解决了原始方法在处理非均匀采样点云时的不足,显著提高了性能。