Supplementary
A 概述
这份补充材料提供了更多的实验细节,包括更多的实验来验证和分析我们提出的方法。
在第二节中,我们提供了主要论文中用于实验的特定网络架构,并且还描述了数据准备和训练的细节。在Sec C中,我们展示了更多的实验结果,包括部分分割和邻域查询分析的基准性能,对采样随机性和时空复杂度的敏感性。
B 实验中的细节
架构协议 我们使用以下符号来描述我们的网络架构。
SA
?
(
K
,
r
,
[
l
1
,
…
,
l
d
]
)
\operatorname{SA}\left(K, r,\left[l_{1}, \ldots, l_{d}\right]\right)
SA(K,r,[l1?,…,ld?])是具有球半径
r
r
r的
K
K
K个局部区域的集合抽象
S
A
SA
SA级,使用宽度为
l
i
(
i
=
1
,
…
,
d
)
l_{i}(i=1, \ldots, d)
li?(i=1,…,d)。
S
A
(
[
l
1
,
…
l
d
]
)
\mathrm{SA}\left(\left[l_{1}, \ldots l_{d}\right]\right)
SA([l1?,…ld?])是一个全局集合抽象层,它将集合转换成一个单独的向量。在多尺度设置中(如MSG中),我们使用
S
A
(
K
,
[
r
(
1
)
,
…
,
r
(
m
)
]
,
[
[
l
1
(
1
)
,
…
,
l
d
(
1
)
]
,
…
,
[
l
1
(
m
)
,
…
,
l
d
(
m
)
]
]
)
\mathbf{S A}\left(K,\left[r^{(1)}, \ldots, r^{(m)}\right]\right.,\left.\left[\left[l_{1}^{(1)}, \ldots, l_{d}^{(1)}\right], \ldots,\left[l_{1}^{(m)}, \ldots, l_{d}^{(m)}\right]\right]\right)
SA(K,[r(1),…,r(m)],[[l1(1)?,…,ld(1)?],…,[l1(m)?,…,ld(m)?]])来用
m
m
m个刻度表示MSG。
F
C
(
l
,
d
p
)
\mathrm{FC}(l, d p)
FC(l,dp)表示全连接层,宽度为
l
l
l,下降(dropout)率为
d
p
dp
dp。
FP
?
(
l
1
,
…
,
l
d
)
\operatorname{FP}\left(l_{1}, \ldots, l_{d}\right)
FP(l1?,…,ld?)是具有
d
d
d个全连接层的特征传播
(
F
P
)
(FP)
(FP)层。它用于更新从插值和跳过链接(skip link)连接而来的特征。除了最后一个分数预测层外,所有全连接层之后都是批量归一化和ReLU。
B.1 网络架构
对于所有分类实验,我们使用以下具有不同
K
K
K(类别数)的架构(我们的SSG):
S
A
(
512
,
0.2
,
[
64
,
64
,
128
]
)
→
S
A
(
128
,
0.4
,
[
128
,
128
,
256
]
)
→
S
A
(
[
256
,
512
,
1024
]
)
→
F
C
(
512
,
0.5
)
→
F
C
(
256
,
0.5
)
→
F
C
(
K
)
\begin{aligned} &S A(512,0.2,[64,64,128]) \rightarrow S A(128,0.4,[128,128,256]) \rightarrow S A([256,512,1024]) \rightarrow \\ &F C(512,0.5) \rightarrow F C(256,0.5) \rightarrow F C(K) \end{aligned}
?SA(512,0.2,[64,64,128])→SA(128,0.4,[128,128,256])→SA([256,512,1024])→FC(512,0.5)→FC(256,0.5)→FC(K)? 多尺度分组(MSG)网络(PointNet++)架构如下:
S
A
(
512
,
[
0.1
,
0.2
,
0.4
]
,
[
[
32
,
32
,
64
]
,
[
64
,
64
,
128
]
,
[
64
,
96
,
128
]
]
)
→
S A(512,[0.1,0.2,0.4],[[32,32,64],[64,64,128],[64,96,128]]) \rightarrow
SA(512,[0.1,0.2,0.4],[[32,32,64],[64,64,128],[64,96,128]])→
S
A
(
128
,
[
0.2
,
0.4
,
0.8
]
,
[
[
64
,
64
,
128
]
,
[
128
,
128
,
256
]
,
[
128
,
128
,
256
]
]
)
→
S A(128,[0.2,0.4,0.8],[[64,64,128],[128,128,256],[128,128,256]]) \rightarrow
SA(128,[0.2,0.4,0.8],[[64,64,128],[128,128,256],[128,128,256]])→
S
A
(
[
256
,
512
,
1024
]
)
→
F
C
(
512
,
0.5
)
→
F
C
(
256
,
0.5
)
→
F
C
(
K
)
S A([256,512,1024]) \rightarrow F C(512,0.5) \rightarrow F C(256,0.5) \rightarrow F C(K)
SA([256,512,1024])→FC(512,0.5)→FC(256,0.5)→FC(K)
跨级多分辨率分组(MRG)网络的架构使用三个分支:
分支1:
S
A
(
512
,
0.2
,
[
64
,
64
,
128
]
)
→
S
A
(
64
,
0.4
,
[
128
,
128
,
256
]
)
S A(512,0.2,[64,64,128]) \rightarrow S A(64,0.4,[128,128,256])
SA(512,0.2,[64,64,128])→SA(64,0.4,[128,128,256])
分支2:
S
A
(
512
,
0.4
,
[
64
,
128
,
256
]
)
S A(512,0.4,[64,128,256])
SA(512,0.4,[64,128,256])使用原始点的
r
=
0.4
r = 0.4
r=0.4个区域
分支3:
S
A
(
64
,
128
,
256
,
512
)
S A(64,128,256,512)
SA(64,128,256,512)使用所有原始点。
分支4:
S
A
(
256
,
512
,
1024
)
S A(256,512,1024)
SA(256,512,1024)
分支1和分支2被连接并被输入到分支4。分支3和分支4的输出然后被连接并输入到
F
C
(
512
,
0.5
)
→
F
C
(
256
,
0.5
)
→
F
C
(
K
)
F C(512,0.5) \rightarrow F C(256,0.5) \rightarrow F C(K)
FC(512,0.5)→FC(256,0.5)→FC(K)用于分类。
用于语义场景标记的网络(FP中最后两个完全连接的层之后是丢弃(drop)率为0.5的dropout层):
S
A
(
1024
,
0.1
,
[
32
,
32
,
64
]
)
→
S
A
(
256
,
0.2
,
[
64
,
64
,
128
]
)
→
S
A
(
64
,
0.4
,
[
128
,
128
,
256
]
)
→
S
A
(
16
,
0.8
,
[
256
,
256
,
512
]
)
→
F
P
(
256
,
256
)
→
F
P
(
256
,
256
)
→
F
P
(
256
,
128
)
→
F
P
(
128
,
128
,
128
,
128
,
K
)
\begin{aligned} &S A(1024,0.1,[32,32,64]) \rightarrow S A(256,0.2,[64,64,128]) \rightarrow \\ &S A(64,0.4,[128,128,256]) \rightarrow S A(16,0.8,[256,256,512]) \rightarrow \\ &F P(256,256) \rightarrow F P(256,256) \rightarrow F P(256,128) \rightarrow F P(128,128,128,128, K) \end{aligned}
?SA(1024,0.1,[32,32,64])→SA(256,0.2,[64,64,128])→SA(64,0.4,[128,128,256])→SA(16,0.8,[256,256,512])→FP(256,256)→FP(256,256)→FP(256,128)→FP(128,128,128,128,K)?
用于语义和部分分割的网络(FP中最后两个完全连接的层之后是丢弃率为0.5的丢弃(dropout)层):
S
A
(
512
,
0.2
,
[
64
,
64
,
128
]
)
→
S
A
(
128
,
0.4
,
[
128
,
128
,
256
]
)
→
S
A
(
[
256
,
512
,
1024
]
)
→
F
P
(
256
,
256
)
→
F
P
(
256
,
128
)
→
F
P
(
128
,
128
,
128
,
128
,
K
)
\begin{aligned} &S A(512,0.2,[64,64,128]) \rightarrow S A(128,0.4,[128,128,256]) \rightarrow S A([256,512,1024]) \rightarrow \\ &F P(256,256) \rightarrow F P(256,128) \rightarrow F P(128,128,128,128, K) \end{aligned}
?SA(512,0.2,[64,64,128])→SA(128,0.4,[128,128,256])→SA([256,512,1024])→FP(256,256)→FP(256,128)→FP(128,128,128,128,K)?
B.2 虚拟扫描生成
在本节中,我们将描述如何从ScanNet场景中生成具有非均匀采样密度的标记虚拟扫描。对于ScanNet中的每个场景,我们将相机位置设置在地板平面的质心上方1.5m处,并在水平面上以8个方向均匀地旋转相机方向。在每个方向上,我们使用一个大小为100像素乘75像素的图像平面,并将来自相机的光线通过每个像素投射到场景中。这提供了一种选择场景中可见点的方法。然后,我们可以为每个类似的测试场景生成8次虚拟扫描,图9中显示了一个示例。请注意,点样本在靠近相机的区域更密集。
图9:从ScanNet生成的虚拟扫描
B.3 MNIST和ModelNet40实验细节
对于MNIST图像,我们首先将所有像素强度归一化到范围
[
0
,
1
]
[0,1]
[0,1],然后选择强度大于0.5的所有像素作为有效数字像素。然后,我们将图像中的数字像素转换为坐标在
[
1
,
1
]
[1,1]
[1,1]范围内的2D点云,其中图像中心为原点。创建扩充点是为了将点集增加到一个固定的基数(在我们的例子中是512)。我们抖动初始点云(随机平移高斯分布
N
(
0
,
0.01
)
\mathcal{N}(0,0.01)
N(0,0.01)并裁剪为0.03)以生成增强点。对于ModelNet40,我们基于表面(face)面积从CAD模型表面均匀采样N个点。
对于所有实验,我们使用学习率为0.001的Adam [9]优化器进行训练。对于数据扩充,我们随机缩放目标,扰动目标位置以及点样本位置。我们还遵循[21]随机旋转目标,用于ModelNet40数据扩充。我们使用TensorFlow和GTX 1080,Titan X进行训练。所有层都在CUDA中实现运行GPU。训练我们的模型收敛大约需要20个小时。
B.4 ScanNet实验细节
为了从ScanNet场景中生成训练数据,我们从初始场景中采样1.5m×1.5m×3m的立方体,然后保留这些立方体,其中≥2%的体素被占据,并且≥70%的表面体素具有有效注释(这与[5]中的设置相同)。我们对这样的训练立方体进行动态采样,并沿着垂直轴随机旋转它。增加的点被添加到点集以形成固定的基数(在我们的例子中是8192)。在测试期间,我们类似地将测试场景分成更小的立方体,首先获得立方体中每个点的标签预测,然后合并来自同一场景的所有立方体中的标签预测。如果一个点从不同的立方体中得到不同的标签,我们将进行多数投票来得到最终的点标签预测。
B.5 SHREC15实验细节
我们在每个形状上随机抽取1024个点进行训练和测试。为了生成输入的内在特征,我们提取100维WKS,HKS和多尺度高斯曲率,导致每个点的300维特征向量。然后我们进行PCA将特征维度降低到64。我们使用[23]之后的8维嵌入来模拟测地距离,用于在选择点邻域时描述我们的非欧式度量空间。
C 更多实验
在本节中,我们提供了更多的实验结果来验证和分析我们提出的网络架构。
C.1 语义部分分割
按照[32]中的设置,我们评估我们在部分分割任务上的方法,假设每个形状的类别标签是已知的。以点云表示的形状作为输入,任务是预测每个点的部分标签。该数据集包含来自16个类的16881个形状,总共标注了50个部分。我们使用[4]之后的官方训练测试拆分。
我们用每个点的法线方向来更好地描绘底层(underlying)形状。这样,我们可以摆脱手工制作的几何特征,如[32,33]中所使用的。我们将我们的框架与传统的基于学习的技术[32]以及表4中最先进的深度学习方法[20,33]进行了比较。并集上的点相交(IoU)用作评估标准,在所有部分类别中取平均值。交叉熵损失在训练期间被最小化。总的来说,我们的方法实现了最佳性能。与[20]相比,我们的方法在大多数类别上表现更好,这证明了分层特征学习对于详细语义理解的重要性。请注意,我们的方法可以被视为隐式地构建不同尺度的邻近图并在这些图上进行操作,因此与图CNN方法有关,例如[33]。由于我们的多尺度邻域选择的灵活性以及集合操作单元的能力,我们可以获得比[33]更好的性能。请注意,与图卷积核相比,我们的集合操作单元要简单得多,并且与[33]相比,我们不需要进行昂贵的特征分解。这些使我们的方法更适合大规模点云分析。
表4:ShapeNet part数据集的分割结果。
C.2 邻域查询:kNN v.s. Ball Query
这里我们比较两个选项来选择一个局部邻域。我们在论文中使用了基于半径的ball query。在这里,我们还试验了基于kNN的邻域搜索,并尝试了不同的搜索半径和k。在该实验中,所有训练和测试都是在具有均匀采样密度的ModelNet40形状上进行的。使用了1024个点。如表5所示,基于半径的ball query略好于基于 kNN 的方法。但是,我们推测在非常不均匀的点集中,基于kNN的查询会导致泛化能力变差。我们还观察到,稍大的半径可能有助于提高性能,可能是因为它捕获了更丰富的局部模式。
表5:邻里选择的影响。评估指标是ModelNet 40测试集上的分类准确率(%)。
C.3 最远点采样中随机性的影响
对于集合抽象层中的采样(Sampling)层,我们使用最远点采样(FPS)进行点集子采样。然而,FPS算法是随机的,并且子采样取决于首先选择哪个点。在这里,我们评估我们的模型对这种随机性的敏感性。在表6中,我们测试了在ModelNet40上训练的模型的特征稳定性和分类稳定性。
为了评估特征稳定性,我们用不同的随机种子提取所有测试样本的全局特征10次。然后,我们计算10次采样中每个形状的平均特征。然后,我们计算特征差的范数与平均特征的标准差。最后,我们对表中报告的所有特征尺寸的所有标准偏差进行平均。由于特征在处理之前被归一化为0到1,0.021的差异意味着特征范数的2.1%的偏差。
对于分类,我们在所有ModelNet40测试形状上仅观察到0.17%的测试精度标准偏差,这对于采样随机性是稳健的。
表6:FPS中随机性的影响(使用ModelNet40)。
C.4 时间和空间复杂性
表7总结了基于几个点集的深度学习方法之间的时间和空间成本比较。我们使用带有单个GTX 1080的TensorFlow 1.1以批量大小8记录前向时间。第一批被忽略,因为有一些GPU准备。虽然PointNet(vanilla)[20]具有最好的时间效率,但是我们没有密度自适应层的模型以相当快的速度实现了最小的模型大小。值得注意的是,我们的MSG,虽然在非均匀采样数据中具有良好的性能,但由于多尺度区域特征提取,它的成本是SSG版本的2倍。与MSG相比,MRG更有效,因为它使用跨层的区域。
表7:几个网络的模型大小和推理时间(正向传播)。
|