赞
踩
论文下载地址:https://arxiv.org/pdf/1706.02413.pdf
代码开源地址:https://github.com/charlesq34/pointnet2
作者以及论文信息如下:
论文作者的公开课链接:https://www.shenlanxueyuan.com/channel/8hQkB6hqr2/detail(大佬的课必须去感受下啊~~)
这一篇文章和 PointNet 论文是一个系列,并且是同一个作者的研究成果,但是两篇论文却有较大的区别。这篇论文在后续的点云处理上,被引用次数非常多,常作为3D点云特征提取的基础模块,类似于2D图像领域的 ResNet 算法。
以前很少有工作研究【直接】处理3D点集的深度学习算法。 PointNet 是该方向的开创者。但是,该算法并不能很好的提取由局部点集构成的局部结构(caputure local sructures),也就限制了提取精细特征的能力,进而失去了对复杂场景的普适性。在本文的工作中,我们提出分层次的神经网络,将 PointNet 递归的应用在经过不同半径划分的输入点集上。通过探究不同的度量空间距离,并不断提高的上下文尺度(其实就是改变采样半径),我们的网络可以学习到局部特征。通过进一步观察点云可以发现,采样点随着点云的密度变化而变化,直接导致了训练在均匀密度下的网络效果骤降。为此,我们提出新的点集学习层,可以适应性的联合不同尺度的特征。实验表明,我们的网络(PointNet++)可以高效且稳定地学习点集特征。特别地,实验结果显示,我们的网络明显超过其它经典的算法。
摘要的主要内容:
- PointNet 的不足:无法很好的提取局部点集特征。
- 如何划分输入的3D点集,进而应用分层次的网络?
- 如何连接不同尺度的特征,来应对点云密度的变化?
- 本文提出新的网络架构,PointNet++.
我们非常有兴趣分析一个欧式空间内采集的几何点集。一个特别重要的几何点集类型是由三维扫描仪捕获的点云,比如来自自动驾驶汽车的3D扫描仪。作为点集,那么必然对点集成员的顺序具有不变性(也就是:随便打乱文本中点集的顺序,物体保持不变)。此外,不同距离大小的邻域内,可能展示不同的特性。比如,不同的点云位置,密度或者其它的点特性可能是不均匀的。在3D扫描过程中,密度变化可能由透视影响,径向密度变化,运动等因素造成。
PointNet 的基本思想:独立地学习每一个3D点的空间编码,然后将这些独立的点特征聚集为全局点云特征。那么,基于这种思想设计的网络,PointNet 无法学习一定度量距离内的局部结构。但是,卷积的强大之处在于提取局部结构。CNN 以定义在规律网格上的数据作为输入,随着尺度的逐渐增大,可以在不同分辨率层次下提取特征。浅层的神经元具有较小的感受野,而深层网络具有较大的感受野。能够在不同层次的输入中提取局部特征,进而保证能够对没有训练过的场景具有一定的泛化能力。
我们提出分一个分层次的神经网络,PointNet++,可以在不同的层次内(也即是不同半径内)直接处理点集。PointNet++ 的基本思想很简单。我们首先将输入点云划分为具有重叠的局部小区域。类似于 CNNs,我们从小的邻域内提取更为精细的特征,然后将局部的特征进一步聚合为大的区域,进而处理得到更高层次的特征。这个处理是重复的,直到我们获取了全部点集的特征。
PointNet++ 需要处理2个问题:如何将输入点集划分为小的邻域?如何学习局部邻域点集的特征?这两个问题是相关的,因为点集的划分会产生一系列一般的局部结构(common structure),那么局部特征学习器可以权重共享(正如卷积的设定一样)。我们选择 PointNet 作为局部特征学习器,它在处理无序点云上是非常有效的。此外,该网络对点云的波动具有稳定性。作为一个基础模块,PointNet 将局部点或特征集抽象成更高级层次的表示。这样,PointNet++ 可以递归的将 PointNet 应用于被网状划分的输入点集。
那么应该如何解决另外一个问题呢,如何生成重叠的划分。每一个划分被定义为一个邻域球,参数包括中心位置和半径。为了均匀地覆盖整个点集,首先通过最远点采样(FPS)从输入点集中获得中心点。与 3DCNN 需要以固定的距离划分整个数据空间不同(也即是点云空间体素化),我们的局部感受区域依赖输入数据和度量距离,因此更加高效。
由于特征尺度的纠缠和输入点集的不均匀性,确定一个合适的局部邻域球半径是很有挑战并且有趣的问题。如 Fig1 中的扫描点云一样,不同的区域密度也是不一样的(近处稠密,远处稀疏),这是个很常见的现象。CNN 网络需要输入更加规律的网格,且数据密度均匀,而我们的输入是不均匀的,无规律的。在 CNN 卷积网络中,局部划分的度量就是卷积核的大小。论文【25】研究表明,使用更小的卷积核有助于提升 CNN 的特征提取能力。我们在3D点集上的实验与此结论相反。小的邻域可能包含更少的点,也就使得 PointNet 无法稳定的获取局部特征。
本文的一个重要的贡献:PointNet++ 利用不同尺度下的邻域点集,可以稳定的获取局部细节特征。在训练过程中,通过随机丢弃输入点集的一些点,网络可以在不同尺度下学习自适应的权重模式,并根据输入数据合并多尺度特征。实验表明,我们的网络可以高效、稳定处理点云。更为重要的是,我们的算法结果明显优于之前的算法。
假设
χ
=
(
M
,
d
)
\chi=(M,d)
χ=(M,d) 是继承欧式空间
R
n
R^n
Rn度量的离散空间,
M
⊆
R
n
M\subseteq R^n
M⊆Rn 是点集,
d
d
d 是距离度量。此外,集合
M
M
M 的密度并不是均匀的。我们希望学习函数
f
f
f ,输入为
χ
\chi
χ(也可以包含其它特征),得到关于该输入的语义信息。实际上,这样的函数
f
f
f 可以是分类函数,也可以是分割函数。
我们的工作可以看作是对 PointNet 的扩展,也即是添加了分层的结构。我们首先在 Sec3.1 回顾 PointNet 算法,然后再 Sec3.2 介绍如何引入层次结构。最后,我们在 Sec3.3 介绍网络如何稳定在非均匀的点集中学习局部特征。
给定一个无序的点集
{
x
1
,
x
2
,
.
.
.
,
x
n
}
,
x
i
∈
R
d
\lbrace{x_1,x_2,...,x_n\rbrace},x_i\in R^d
{x1,x2,...,xn},xi∈Rd,可以定义一个函数集合
f
:
→
R
f: \rightarrow R
f:→R,将点集映射为一个向量:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
γ
(
M
A
X
i
=
1
,
.
.
.
,
n
{
h
(
x
i
)
}
)
(1)
f(x_1,x_2,...,x_n)=\gamma(MAX_{i=1,...,n}\lbrace h(x_i) \rbrace) \tag1
f(x1,x2,...,xn)=γ(MAXi=1,...,n{h(xi)})(1)
这里,
γ
a
n
d
h
\gamma ~ and ~h
γ and h 通常是多层感知机网络(MLP).
集合函数 f f f 对输入点集的顺序具有不变性,并且可以拟合任何连续函数集(论文 PointNet 论述)。 h h h 被认为是单独一个点(a point)的空间编码。
PointNet 在一些公开数据集上取得不错的效果。但是,该算法无法抓取不同尺度下的局部特征。我们将在下一部分提出分层次的特征学习网络,进而解决 PointNet 的局限性。
PointNet 使用简单的最大池化层来聚合整个点集的特征。我们新的结构,可以对输入点集在不同的层次下进行分组,随着分层,网络提取越来越大的局部邻域特征。
我们的分层结构是由一系列点集抽象层(Set Abstraction Levels)组成,参考 Fig2。在每一个层次,一组点被处理和抽象,并产生一组新的点集(具有更少的点)。点集抽象层包含三个关键层:Sampling Layer,Grouping Layer and PointNet Layer. Sampling Layer 从输入点集中采样一部分点,这些点就是局部邻域的中心。Grouping Layer 根据邻域中心,选择局部的邻域点集。 PointNet Layer 使用一个迷你的网络(Mini-PointNet)编码局部邻域的特征。
一个点集抽象层(Set Abstraction Levels)的输入为
N
×
(
d
+
C
)
N\times(d+C)
N×(d+C) 矩阵,
N
N
N 是输入点集中点的数量,坐标维度为
d
d
d,特征维度为
C
C
C. 输出为
N
′
×
(
d
+
C
′
)
N'\times(d+C')
N′×(d+C′) 矩阵,
N
′
N'
N′ 是采样点的数量,坐标维度依然为
d
d
d,特征维度为
C
′
C'
C′,也就是每一个点的局部特征。下面分别介绍 Set Abstraction Levels 的三个关键层。
Sampling Layer. 给定输入点集 { x 1 , x 2 , . . . , x n } \lbrace x_1,x_2,...,x_n\rbrace {x1,x2,...,xn},我们使用最远点采样(FPS)从输入点集中选取子集, { x i 1 , x i 2 , . . . , x i n } \lbrace x_{i_1},x_{i_2},...,x_{i_n}\rbrace {xi1,xi2,...,xin},那么 x i j x_{i_j} xij 是距离剩余点集最远的点。与随机采样相比,在同样采样点的情况下,收敛更快。与卷积网络(CNNs)扫描未知数据分布的向量空间相比,我们的采样策略能够生成依赖数据的感受域。
Grouping Layer. 该层的输入点集的大小为
N
×
(
d
+
C
)
N \times(d+C)
N×(d+C) ,选取的中心点大小为
N
′
×
d
N'\times d
N′×d. 输出为一组点集,大小为
N
′
×
K
×
(
d
+
C
)
N'\times K\times (d+C)
N′×K×(d+C),每一个组表示一个局部邻域,
K
K
K 是中心点附近的点的数量。值得注意的是,不同组的
K
K
K 是不一样的,但是在接下来的 PointNet Layer 会将不同数量的点转换为固定长度的局部特征向量。
在卷积神经网络中,一个像素的局部邻域包含了由卷积核大小定义的区域内的像素数组的索引。在度量空间中采样的点集中,一个点的邻域是由度量距离定义的。
球查询(ball qeury)在一定半径范围内查找一定数量的点(上限为K)。当然也可以使用 KNN 查找固定数量的点。与 KNN 相比,球查询的局部邻域保证了固定的局部区域尺度,那么整个空间的局部特征更加具有一般性,这非常适合需要局部特征识别的任务(比如语义分割)。
PointNet Layer. 在这一层,输入为
N
′
N'
N′ 个局部邻域点集,大小为
N
′
×
K
×
(
d
+
C
)
N'\times K\times (d+C)
N′×K×(d+C). 每一个局部邻域的输出是被其中心和局部特征(编码了中心的局部邻域特征)抽象,输出大小为
N
′
×
(
d
+
C
′
)
N'\times(d+C')
N′×(d+C′).
局部邻域的点坐标首先被转换为相对于中心点的局部结构:
x
i
(
j
)
=
x
i
(
j
)
−
x
^
(
j
)
,
i
=
1
,
2
,
.
.
.
,
K
a
n
d
j
=
1
,
2
,
.
.
.
,
d
x^{(j)}_i=x^{(j)}_i-\hat x^{(j)},i=1,2,...,K ~ and~j=1,2,...,d
xi(j)=xi(j)−x^(j),i=1,2,...,K and j=1,2,...,d
这里,
x
^
\hat x
x^ 是中心的坐标。我们使用 PointNet 作为学习局部特征的基础模块。通过借助相对坐标以及点特征,我们可以提取局部区域点与点之间的关系。
正如我们之前讨论的,不同区域的点集密度变化是很常见的现象。这种密度不均匀性给特征学习带来很大的挑战。稠密数据学习的特征不一定能泛化到稀疏的点集区域。因此,训练在稀疏点云上的模型不一定能识别精细的局部结构。
理想上,我们希望尽可能近距离的检查(其实就是在尽量小的半径内处理局部区域点集,进而提取特征)点集来获取密集采样区域最精细的结构。但是,由于低密度区域的采样点会很少,这种近距离(由于稀疏,距离太小,可能局部区域的点非常稀少)检查可能被低密度区域妨碍。这种情况下,我们需要扩大局部点集的区域。为了达到这个目标,我们提出密度自适应 PointNet Layers ,如 Fig3 所示。当输入点集密度变化时,它可以联合学习不同尺度区域的特征。我们把具有密度自适应层 PointNet Layers 的分层次网络称为, PointNet++ .
在 Sec3.2 中,每一个特征提取层( Abstraction Level)包含单个尺度的区域分组和特征提取。在 PointNet++ 中,每一个特征提取层( Abstraction Level)提取多个尺度(3D点云,使用半径作为尺度衡量)的局部特征,并根据局部点密度智能合并特征。就局部区域分组而言,以及合并不同尺度的特征,我们提出两种不同类型的密度自适应层。
Mutil-Scale Grouping(MSG)如 Fig3(a) 所示,一个简单有效的方式是使用不同尺度的分组层(Grouping Layers)来处理不同尺度的的点集,然后使用 PointNets 提取每一个尺度的特征。最后,将不同尺度的特征连接,得到多尺度特征。
我们训练网络,学习一个最优的合并多尺度特征的策略。通过随机丢弃每一个输入点集的部分点,我们称之为 Random Input Dropout. 对于一个训练点集,我们随机选择丢弃比率 θ \theta θ,均匀地从 [ 0 , p ] , p < 1 [0,p],p<1 [0,p],p<1 采样该值。对于每一个点,被丢弃的概率为 θ \theta θ。 实际中,为了避免产生空的点集, p = 0.95 p=0.95 p=0.95。这种策略下,我们可以生成各种不同稀疏度( θ \theta θ 造成)和不同均匀性(因为 θ \theta θ是被均匀采样的)的训练点集。在测试过程中,我们保留所有的点。
Multi-Resolution Grouping(MRG) 上面的 MSG 方法计算量是很大的,因为需要在每一个中心点下的多个尺度运行 PointNet,特别是底层网络的中心点是很多的。
这里,我们提出另一种方法,在降低计算代价的同时,也能够根据点集的密度自适应的聚合信息。 Fig3(b) 中,层 L i L_i Li 的一个区域的特征是由两个向量构成:低层网络 L i − 1 L_{i-1} Li−1的子区域特征(图左);使用单个 PointNet 直接处理局部区域的所有点(图右)。
当局部区域密度低时,第一个向量可信度低于第二个向量。因为子区域包含更少的,更稀疏的点。这种情况下,第二个向量应该具有更高的权重。另一方面,当局部区域的密度高时,第一个向量可以提供更加精细的信息,因为它处于低层的高分辨率。
与 MSG 相比,这种方法计算量更高效。
在 Set Abstraction Layer,原始点集被持续降采样。但是,在点集分割任务中,我们需要得到原始点集中每一个点的标签。一种方法是所有网络层的输入点都是原始点集,但是计算代价太高。另一种方法是将特征从子采样点传播到原始点。我们采用基于距离插值和跨越连接的策略(Fig2)。在 Feature Progagation Level,我们将点特征从
N
l
×
(
d
+
C
)
N_l\times(d+C)
Nl×(d+C)个点传播到
N
l
−
1
N_{l-1}
Nl−1个点,
N
l
−
1
N_{l-1}
Nl−1 和
N
l
N_l
Nl分别是点集抽象层(Set Abstraction Level)
l
l
l 的输入和输出点集的个数。我们通过在
N
l
−
1
N_{l-1}
Nl−1 个点坐标上插值
N
l
N_l
Nl 个点的特征得到传播后的点特征。针对众多插值的选择,我们使用基于
k
k
k 个近邻点的反距离加权平均值,正如 Eq.2 ,默认
p
=
2
,
k
=
3
p=2,k=3
p=2,k=3. 经过插值得到的
N
l
−
1
N_{l-1}
Nl−1个点的特征与 Set Abstraction Layer 的特征跳跃连接。然后将连接的特征传给 “unit pointnet” ,类似于 CNNs的【1x1】 卷积。然后添加一些全连接层和ReLU层来更新点的特征向量。这个过程一直进行,直到恢复到原始的点集数量。
Datasets 我们评估数据集从2d目标(MNIST),3D目标(ModelNet40 刚性目标,SHREC15非刚性目标)到实际的3D场景(ScanNet)。目标分类使用准确度评估。语义场景使用平均体素分类精度(参考论文【5】)。我们列举了不同数据集的设置,如下:
我们在众多数据集上评估了算法的效果。根据数字像素位置,MNIST 图像被转换为2D点云。从 ModelNet40 采样点得到3D点云。默认情况下,我们使用 MNIST 的512个点, ModelNet40被采样1024个点。 Table2 中,我们使用面法线作为额外的点特征,并且为了提升效果,一个样本采样5000个点。所有的点被归一化到零均值的单位球内。我们使用三层分层网络和三层全连接层。
Results 在 Table1 和 Table2 中, 我们与之前经典的方法进行比较。值得注意的是, Table2 中的 PointNet(vanilla) 与论文【20】相比,没有使用变换网络,等同于一层的分层网络。
首先,我们的分层次学习网络效果明显比非分层的 PointNet[20] 更优。 在 MNIST 数据集,我们得到60.8%和34.6%的误差降低。在 ModelNet40 数据集上,使用同样的输入点集数量(1024个点)和特征(仅仅是坐标),我们的结果明显更好。其次,我们注意到,我们的方法可以得到更好或者接近成熟的图像卷积网络的效果。 在 MNIST 上,我们的算法得到与 Network in Network 卷积网络接近的效果。在 ModelNet40 上,我们的方法超越了经典方法 MVCNN .
Robustness to Sampling Density Variation 传感器数据直接从真实世界中采集而来,但是存在严重的采样不规律的问题(Fig1)。我们的方法选择多个尺度点邻域,并学习通过合理的权重平衡描述性和稳定性。
在测试中,为了验证网络对非均匀数据和稀疏数据的稳定性,我们随机丢弃一些点(Fig4 Left)。在 Fig4 Right,可以看到 MSG+DP(multi-scale grouping with input dropout) 和 MRG+DP(multi-resolution grouping with input dropout)
对采样点密度变化非常稳定。而且,当测试数据的点从1024降低到256时, MSG+DP(multi-scale grouping with input dropout) 精度降低很多。但是,在不同的采样密度下,它几乎是所有方法中效果最好的。 由于 PointNet vanilla 更关注全局特征提取,因此,在不同的密度采样下,依然能保持稳定。但是,丢失细节信息也使得它弱于我们的模型。 当采样点密度较低时,SSG(abalated PointNet++ with single scale grouping in each level) 效果不理想,但是SSG+DP 没有这个问题。
为了验证我们的方法适合大规模点云分析,我们需要在语义场景任务评估。目标是评估室内场景下点的语义信息。论文【5】提供了在体素化扫描数据上使用全卷积网络,仅仅使用坐标信息,而不是RGB图像,并且预测每一个体素的标签。为了公平的对比,我们同样不用RGB信息,并将点云转为体素形式表达。我们同样也与论文【20】对比,见 Fig5.
我们的算法明显优于其它方法。与论文【5】相比(只学习体素数据),我们可以直接学习点云,避免带来额外的量化误差,依赖数据的采样可以运行更加有效的学习。与论文【20】相比,我们的网络可以学习分层次的学习特征,并提取不同尺度的几何特征。这对于不同层次的场景理解是非常重要的,特别是场景目标的大小是不相同。我们在 Fig6可视化了一些结果。
Robustness to Sample Density Variation 为了测试我们的模型在非均匀采样密度下的表现,我们合成了类似于ScanNet场景的数据来评估网络。评估模型为(SSG,MSG+DP,MRG+DP),并与基准算法对比,也即是 PointNet 。
对比结果见 Fig5 黄色的柱状图。可以看到,我们看到,由于采样密度从均匀点云到虚拟扫描场景的转移(非均匀),SSG 性能大幅下降。另一方面,MRG 网络对采样密度的变化更具有鲁棒性,因为它能够在采样稀疏时自动切换到描述较粗粒度的特征。尽管训练数据(uniform points with random dropout and scanned data with non-uniform density)存在一定的差异,MSG 受影响较小,并且精度最高。实验证明了我们的密度自适应层的有效性。
这一部分与常规模型的评估略有差异,暂不作翻译,不影响对本论文的算法理解。
在 Fig8 中,我们可视化了第一层网络学习的点特征。我们在空间中创建了一个体素网格,并且聚合那些具有最高的100个激活值的局部点集。具有最高投票的网格单元被保留,然后反算到3D点云上,这就表示神经元识别的模式。因为网络训练在 ModelNet40 上,它包含很多的家具,可以化出很多的平面,线,角落等。
分层学习特征的思想非常成功。在所有的学习模型中,卷积神经网络是最成功的。但是卷积不能应用在使用距离度量的无序点集上,这正是我们工作的重点。
最近的一些工作都是研究如何将深度学习应用在无序点集。他们忽略了潜在的距离度量,尽管点集本身具有距离度量。因此,他们无法点集的局部特征,并且对全局点集平移和归一化很敏感。在本文工作中,我们聚焦于度量空间的点采样,并在设计网络时,通过考虑潜在的距离度量来解决这些问题。
在度量空间进行点采样通常是很有噪声的,并且采样不均匀。这影响了点特征的提取和网络学习的困难性。此前,在几何处理领域或摄影测量和遥感领域中,已经开发了几种关于[19,17,2,6,7,30]的方法。与这些工作相比,我们的方法学习提取点特征,并且以一种端到端的方式平衡多尺度特征。
在3D度量空间中,除了点集,有几种数据的表达形式,比如体积网格,几何图。但是,他们都没有很好的解决密度的非均匀性采样。
在本文工作中,我们提出 PointNet++,适合度量空间点集采样的神经网络架构。 PointNet++ 递归的应用在被分割的输入点集上,在学习分层次特征非常有效。为了处理非均匀的点集采样问题,我们提出2个新的点集抽象层( Set Abstaction Layers ),可以根据局部点密度自动合并不同尺度的信息。这些贡献,使得我们可以高效处理3D点云,并得到优秀的效果。
在未来,我们可以思考如何增加网络的推理速度,特别是 MSG and MRG 在每一个局部区域共享更多的计算。当然,在更高维的度量空间,我们的算法依然很有优势。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。