文章正文部分参考博客:
https://blog.csdn.net/batflo_wsh/article/details/89330195
论文地址:
https://arxiv.org/pdf/1612.00593.pdf
Supplementary
A.Overview
该文件为主要论文提供了额外的定量结果,技术细节和更多定性的测试示例。 在Sec B中,我们扩展了健壮性测试,以比较不完整输入上的PointNet和VoxNet。 在Sec C中,我们提供了有关神经网络架构,训练参数的更多详细信息,在Sec D中,我们描述了场景中的检测流程。 然后,Sec E显示了PointNet的更多应用,而Sec F显示了更多的分析实验。Sec G为我们在PointNet上的理论提供了证明。 最后,我们在Sec H中显示了更多的可视化结果。
B. Comparison between PointNet and VoxNet (Sec 5.2)
我们扩展了第5.2节“鲁棒性测试”中的实验,以比较PointNet和VoxNet [17](代表体积的代表性体系结构)输入点云中丢失的数据的鲁棒性。两个网络都在相同的训练测试段上进行训练,输入的点数为1024。对于VoxNet,我们将点云体素化为32×32×32的占用栅格,并通过围绕上轴的随机旋转和抖动来增强训练数据。
在测试时,输入点以一定比例随机丢失。由于VoxNet对旋转敏感,因此其预测使用了点云的12个视点的平均得分。如图8所示,我们发现PointNet对于丢失的点更加鲁棒。当缺少一半输入点时,VoxNet的准确性会急剧下降,从86.3%下降到46.0%,相差40.3%,而我们的PointNet的性能下降仅为3.7%。这可以通过我们的PointNet的理论分析和解析来解释-它学习使用一组关键点来汇总形状,因此对于丢失数据非常鲁棒。
图8-PointNet v.s. VoxNet [17] 输入不完整的数据。 度量标准是对ModelNet40测试集的总体分类准确性。 请注意,VoxNet使用平均12个视点,而PointNet仅使用点云的一个视图。 显然,PointNet对缺少的点具有更强的鲁棒性。
C. Network Architecture and Training Details (Sec 5.1)
PointNet Classification Network
由于主要论文中已经说明了基本体系结构,因此我们在此处提供有关联合对齐/转换网络和训练参数的更多详细信息。
第一个转换网络是一个mini-PointNet,它将原始点云作为输入并回归到3×3矩阵。 它由每个点上的共享MLP(64、128、1024)网络(层输出大小为64、128、1024),跨点最大池化和两个全连接层(输出大小为512、256)组成。输出矩阵被初始化为一个单位矩阵。 除最后一层外,所有层均包括ReLU和批处理规范化。第二个转换网络与第一个转换网络具有相同的体系结构,除了输出是64×64矩阵。 矩阵也被初始化为单位矩阵。 将正则化损失(权重为0.001)添加到softmax分类损失中,以使矩阵接近正交。
我们在类分数预测之前,在最后一个全连接层(输出维度为256)上使用保留比为0.7的dropout。 批量归一化的衰减率从0.5开始,逐渐增加到0.99。 我们使用adam优化器,其初始学习率为0.001,动量为0.9,批量大小为32。学习率每20个epoch除以2。 使用ModelNet进行训练,在TensorFlow和GTX1080 GPU上需要3到6个小时收敛。
PointNet Segmentation Network
分割网络是对PointNet分类网络的扩展。 对于每个点,将局部点特征(第二个转换网络之后的输出)和全局特征(最大池的输出)连接在一起。 分割网络不使用任何dropout。 训练参数与分类网络相同。
关于形状部分分割的任务,我们对基本分割网络体系结构进行了一些修改(主论文中的图2),以实现最佳性能,如图9所示。我们添加了一个one-hot向量来显示输入类别并与最大池化层的输出连接。 我们还在某些层中增加了神经元,并添加了跳过链接以收集不同层中的局部点特征,并将它们连接起来以形成点特征输入到分割网络中。
尽管[27]和[29]独立地处理每个对象类别,但由于缺少某些类别的训练数据(第一行显示了数据集中所有类别的形状总数),我们训练了跨类别的PointNet(但是使用one-hot矢量来指示类别)。为了进行公平的比较,在测试这两个模型时,我们仅预测给定特定对象类别的零件标签。
关于语义分割任务,我们使用了主要论文中图2所示的体系结构。
在ShapeNet零件数据集上训练模型大约需要6到12个小时,而在Stanford语义解析数据集上训练大约需要半天。
图9-用于零件分割的网络架构。 T1和T2是输入点和特征的对齐/转换网络。 FC是在每个点上运行的完全连接层。 MLP是每个点上的多层感知器。 one-hot是大小为16的向量,指示输入形状的类别。
Baseline 3D CNN Segmentation Network
在ShapeNet零件分割实验中,我们将建议的分割版本PointNet与两种传统方法以及3D体积CNN网络基线进行了比较。 在图10中,我们显示了我们使用的基线3D体积CNN网络。 我们将众所周知的3D CNN架构(例如VoxNet [17]和3DShapeNets [28])推广到完全卷积的3D CNN分割网络。
图10-基线3D CNN 分割网络。网络为全卷积并且预测每个体素的部分分数。
对于给定的点云,我们首先将其转换为具有32×32×32分辨率的占用网格的体积表示形式。然后,依次应用五个具有32个输出通道和跨度为1的3D卷积运算来提取特征。 每个体素的感受野为19。 最后,将内核大小为1×1×1的3D卷积层序列附加到计算的特征图上,以预测每个体素的分割标签。
除最后一层外,所有层均使用ReLU和批量归一化。 该网络是跨类别训练的,但是,为了与给出对象类别的其他基线方法进行比较,我们仅考虑给定对象类别中的输出得分。
D. Details on Detection Pipeline (Sec 5.1)
我们基于语义分割结果和对象分类PointNet,构建了一个简单的3D对象检测系统。
我们使用具有分割分数的连接组件来获取场景中的对象提议。 从场景中的随机点开始,我们找到它的预测标签,并使用BFS搜索具有相同标签的附近点,搜索半径为0.2米。 如果生成的群集具有200个以上的点(假设在1m x 1m的区域中有4096个点的样本),则群集的边界框将标记为一个对象建议。 对于每个提议的对象,其检测得分将计算为该类别的平均得分。 在评估之前,删除面积/体积极小的提议。 对于桌子,椅子和沙发,如果支腿与座椅/表面分开,则边界框延伸至地板。
我们观察到在礼堂等一些房间中,许多物体(例如椅子)彼此靠近,在这种情况下,连接的组件将无法正确地分割出单个对象。 因此,我们利用我们的分类网络并使用滑动形状方法来减轻椅子类的问题。 我们为每个类别训练一个二进制分类网络,并使用分类器进行滑动窗口检测。 通过非最大抑制来修改结果框。 连接的零件和滑动形状中的建议框被组合起来以进行最终评估。
在图11中,我们显示了用于对象检测的精确调用曲线。 我们训练了六个模型,其中每个模型都在五个区域进行了训练,并在左侧区域进行了测试。 在测试阶段,每个模型都在从未见过的区域进行测试。 汇总所有六个区域的测试结果以生成PR曲线。
图11-3D点云物体检测的精确调用曲线。我们在六个区域上评估四种类别:桌子,椅子,沙发和木板。IoU阈值为0.5。
E. More Applications (Sec 5.1)
Model Retrieval from Point Cloud 点云中的模型检测
我们的PointNet为每个给定的输入点云学习全局形状签名。 我们希望几何上相似的形状具有相似的全局特征。 在本节中,我们测试对形状检索应用程序的猜想。 更具体地说,对于来自ModelNet测试分割的每个给定的查询形状,我们计算其分类PointNet给出的全局签名(分数预测层之前的层的输出),并通过最近邻搜索在训练分割中检索相似的形状。 结果如图12所示。
图12-点云模型检索。对于每个给定的点云,我们从ModelNet测试拆分中检索前5个相似的形状。 从上至下,我们显示了椅子,植物,床头柜和浴缸查询的示例。 检索类别错误的结果用红色框标记。
Shape Correspondence 形状对应
在本节中,我们展示了PointNet所学习的点特征可以潜在地用于计算形状对应。 给定两个形状,我们通过匹配激活全局特征中相同维度的点对来计算其关键点集CS之间的对应关系。 图13和图14示出了两个相似的椅子和桌子之间的检测形状对应。
图13-两个椅子间的形状对应。为了使可视化清晰,我们仅显示20个随机选择的对应对。
图14-两只桌子的形状对应。为了使可视化清晰,我们仅显示20个随机选择的对应对。
F. More Architecture Analysis (Sec 5.2)
Effects of Bottleneck Dimension and Number of Input Points 瓶颈维度和输入点数的影响
在这里,我们展示了模型在第一最大图层输出的大小以及输入点数方面的性能变化。 在图15中,我们可以看到,随着点数的增加,性能也随之提高,但在大约1K点处达到饱和。最大层大小起着重要作用,将层大小从64增加到1024可导致2-4%的性能提升。 这表明我们需要足够的点特征函数来覆盖3D空间,以区分不同的形状。
值得注意的是,即使输入64个点(从网格上的最远点采样获得),我们的网络也可以达到不错的性能。
图15-度量标准是ModelNet40测试集的总体分类准确性。
MNIST Digit Classification
当我们专注于3D点云学习时,健全性检查实验是将我们的网络应用于2D点云-像素集。
为了将MNIST图像转换为2D点集,我们对像素值进行阈值处理,并且添加值大于128的像素(在图像中表示为具有(x,y)坐标的点)。 我们使用大小为256的集合。如果在点集中超过256个像素,我们将对其进行随机子采样; 如果更少,我们用集合中的像素之一填充集合(由于我们的max操作,用于填充的点将不会影响结果)。
如表7所示,我们与一些基线进行了比较,包括将输入图像视为有序向量的多层感知器,将输入视为从像素(0,0)到像素(27,27)的序列的RNN,以及vanilla版CNN。 尽管MNIST上性能最好的模型仍是精心设计的CNN(错误率低于0.3%),但有趣的是,我们的PointNet模型可以通过将图像视为2D点集来实现合理的性能。
表7-我们将其与其他深度架构的原始版本进行比较,以表明基于点集输入的网络在此传统任务上实现了合理的性能。
Normal Estimation 法线估计
在PointNet的分割版本中,将局部点特征和全局特征连接在一起,以便为局部点提供上下文。 但是,尚不清楚是否通过此连接学习了上下文。 在此实验中,我们通过证明可以对分割网络进行训练来预测点法线(局部几何特性是由点的邻域确定的)来验证我们的设计。
我们以监督的方式训练分割PointNet的修改版本,以回归到ground-truth点法线。我们只是更改分割PointNet网络的最后一层,以预测每个点的法线向量。 我们使用余弦距离的绝对值作为损失loss。
图16将我们的PointNet法线预测结果(左列)与从网格计算出的ground-truth法线(右列)进行了比较。我们观察到合理的法线重建。 我们的预测比ground-truth更平滑和连续,ground-truth在某些区域中包括翻转的法线方向。
图16-在此图中,我们显示了一些采样点云中所有点的重构法线以及在网格上计算的ground-truth法线。
Segmentation Robustness
正如第5.2节和第B节中所讨论的那样,由于全局形状特征是从给定输入点云的关键点集合中提取的,因此我们的PointNet对分类任务的数据损坏和丢失点不太敏感。在本节中,我们展示了分割任务的鲁棒性。 基于每个点特征和学习到的整体形状特征的组合来预测每个点零件标签。在图17中,我们说明了给定输入点云S(最左侧的列),关键点集CS(中间的列)和上限形状NS的分割结果。
图17-分割结果的一致性。我们观察到CS和NS之间的形状族共享一致的分割结果。
Network Generalizability to Unseen Shape Categories 网络通用性到看不见的形状类别
在图18中,我们可视化了ModelNet或ShapeNet中不存在的,来自看不见的类别(面孔,房屋,兔子,茶壶)的新形状的关键点集和上限形状。 它表明学习的每点函数是可推广的。 但是,由于我们主要在具有许多平面结构的人造物体上进行训练,因此新类别中的重构上限形状也包含更多平面。
图18-关键点集和看不见对象的上限形状。 我们将茶壶,兔子,手和人体的关键点集和上限形状可视化,这些不在ModelNet或ShapeNet形状存储库中,以测试我们PointNet学习到的每个点函数在每个其他看不见的对象上的泛化性 。图像采用颜色编码以反映深度信息。
G. Proof of Theorem (Sec 4.3)
Theorem 1
Theorem 2
H. More Visualizations
Classification Visualization
我们使用t-SNE [15]将来自我们分类PointNet的点云全局签名(1024维)嵌入到2D空间中。 图20显示了ModelNet 40测试分割形状的嵌入空间。 根据它们的语义类别,将相似的形状聚集在一起。
Segmentation Visualization
我们在完整的CAD模型和模拟的Kinect部分扫描中均显示了更多分割结果。我们还可视化了错误分析的失败案例。 图21和图22显示了在完整的CAD模型及其模拟的Kinect扫描中生成的更多分割结果。 图23说明了一些失败案例。 请阅读标题以进行错误分析。
Scene Semantic Parsing Visualization 场景语义解析可视化
我们在图24中给出了语义解析的可视化,其中显示了两个办公室和一个会议室的语义分割和物体检测的输入点云、预测和ground-truth。 在训练集中看不到该区域和房间。
Point Function Visualization
我们的分类PointNet为每个点计算K(在此可视化中为K = 1024)维点特征,并通过最大池化层将所有每个点的局部特征聚合到单个K维向量中,从而形成全局形状描述符。
为了进一步了解所学习的每点函数h所检测到的内容,我们在图19中将给出高点函数值f(pi)的点pi可视化。该可视化清楚地表明,不同的点函数学会了如何检测散布在整个空间中的各种形状的不同区域中的点。
图19-点函数可视化。 对于每个每点函数h,我们计算位于原点处直径为2的立方体中所有点p的值h(p),该点空间上覆盖了我们训练PointNet时将输入形状归一化的单位球面。 在此图中,我们使用通过体素亮度进行颜色编码的函数值来可视化给出h(p)> 0.5的所有点p。 我们随机选择15个点函数,并可视化它们的激活区域。
图23-.PointNet分割失败案例。
在此图中,我们总结了分割应用中的六种常见错误。在第一和第二列中给出了预测和ground-truth分割,而在第三列中计算并显示了差异图。红点对应于给定点云中标记错误的点。 (a)说明了最常见的失败案例:边界上的点被错误地标记。在示例中,桌子/椅子腿和顶部之间的交点附近的点的标签预测不准确。但是,大多数分割算法都会遇到此错误。 (b)显示了奇异形状的误差。例如,图中所示的枝形吊灯和飞机在数据集中非常少见。 (c)表明小零件可以被附近的大零件覆盖。例如,用于飞机的喷气发动机(图中的黄色)被错误地分类为机身(绿色)或飞机机翼(紫色)。(d)显示了由形状零件的固有模糊引起的误差。例如,图中两张桌子的两个底部被分类为桌子腿和桌子底座(在[29]中为其他类别),而真相分割则相反。(e)说明了部分扫描不完整引起的错误。对于图中的两个帽子,几乎丢失了一半的点云。(f)显示了某些对象类别的训练数据太少而无法涵盖足够多的变化的失败案例。此处显示的两个类别的整个数据集中只有54个袋子和39个帽子。
图24-语义分割和物体检测的示例。 第一行是输入点云,其中为清晰起见隐藏了墙壁和天花板。 第二和第三行是对点的语义分割的预测和ground-truth,其中属于不同语义区域的点的颜色是不同的(红色的椅子,紫色的桌子,橙色的沙发,灰色的板子,绿色的书柜,蓝色的地板,紫罗兰色的窗户,黄色的光束,洋红色的圆柱,卡其色的门和黑色的杂物)。最后两行是带有边界框的物体检测,其中预测框来自基于语义分割预测的连接组件。
来源:CSDN
作者:DJames23
链接:https://blog.csdn.net/DJames23/article/details/103603650