Revisiting Point Cloud Shape Classificationwith a Simple and Effective Baseline
使用简单有效的基线重新审视点云形状分类
摘要
处理点云数据是许多现实系统的重要组成部分。因此,人们提出了各种各样的基于点的方法,并报告了随着时间的推移稳定的基准改进。我们研究了这一进展的关键因素并发现了两个关键结果。首先,我们发现独立于模型架构的辅助因素,如不同的评估方案、数据增强策略和损失函数,会在性能上产生很大的差异。这些差异足够大,以至于掩盖了建筑的效果。当这些因素得到控制时,相对较旧的网络 PointNet++ 的性能可与最新方法相媲美。其次,一个非常简单的基于投影的方法,我们称之为 SimpleView,表现得非常好。它在 ModelNet40 上取得了与最先进的复杂方法相当或更好的结果,同时大小只有 PointNet++ 的一半。它还优于 ScanObjectNN(现实世界点云基准)上最先进的方法,并展示了更好的跨数据集泛化能力。代码可在 https://github.com/princeton-vl/SimpleView 获取。
1. 简介
准确处理 3D 点云数据在许多应用中至关重要,包括自动驾驶 (NavarroSerment et al, 2010; Kidono et al, 2011)、机器人 (Rusu et al, 2009; Correll et al, 2016; Mousavian et al, 2019) )和场景理解(Aldoma 等人,2012)。在这些设置中,激光雷达等传感器会生成与物体表面相对应的无序点集。从这些数据中正确分类对象对于 3D 场景理解非常重要(Uy 等人,2019)。虽然解决这个问题的经典方法依赖于手工制作的特征(Arras 等人,2007),最近的努力集中在深度神经网络(DNN)的设计上,以直接从原始点云数据中学习特征(Qi 等人,2017a)。与图像分类类似(Yalniz et al, 2019; Dosovitskiy et al, 2020; Szegedy et al, 2016),基于深度学习的方法已被证明在点云分类方面是有效的。
用于比较点云分类方法的最广泛采用的基准是 ModelNet40(Wu 等人,2015b)。 ModelNet40 的准确率在过去几年中稳步提高,从 PointNet(Qi 等人,2017a)的 89.2% 提高到 RSCNN(Liu 等人,2019c)的 93.6%(图 1)。人们普遍认为这一进步是更好的网络架构设计的结果。然而,在对最近的作品进行仔细分析后,我们发现了两个令人惊讶的结果。首先,我们发现包括不同评估方案、数据增强策略和损失函数在内的辅助因素对性能的影响程度达到了这样的程度,以至于很难摆脱网络架构带来的改进。其次,我们发现一个非常简单的基于投影的架构可以工作出奇地好,优于最先进的基于点的架构。
在深度学习中,随着结果在基准上的改进,人们的注意力通常集中在用于实现这些结果的新颖架构上。然而,除了架构设计之外,还有许多因素会影响性能,包括数据增强和评估过程。我们将这些附加因素称为方法的协议。协议定义了与网络架构正交的所有细节,可以控制这些细节来比较不同的架构。请注意,某些特定形式的丢失或数据增强可能与特定架构相关联,并且不适用于其他架构。在这些情况下,将它们视为协议的一部分是不合适的。
然而,对于我们在本文中考虑的所有方法,它们的损失和增强方案彼此完全兼容,并且可以独立考虑。我们通过实验来研究协议的影响,并发现它导致了性能上的巨大差异,以至于掩盖了新颖架构的贡献。例如,当从原始协议切换到 RSCNN 协议时(Liu 等人,2019c),PointNet++ 架构(Qi 等人,2017b)的性能从 90:00:3 跃升至 93:30:3 。我们进一步发现,导致最强性能的协议依赖于测试集的反馈,这与传统的评估设置不同。我们使用最佳的增强和损失函数重新评估先前的架构,而不使用测试集的任何反馈。我们发现,通过考虑协议,PointNet++ 架构在各种设置中的性能与最新架构相比具有竞争力。
除了协议的惊人重要性之外,在回顾过去的方法时,另一个令人惊讶的发现是基于非常简单的投影的基线效果非常好。人们只需将点沿着正交视图投影到深度图,将它们传递给轻量级 CNN 并融合特征。我们将此基线称为 SimpleView。
与之前基于投影的点云分类方法(Roveri et al, 2018; Sarkar et al, 2018)相比,SimpleView 非常简单。先前的方法已经开发了用于视图选择、渲染和特征合并的特殊模块,并使用在 ImageNet 上预训练的更大的 CNN 主干(更多详细信息请参阅第 2 节)。相比之下,SimpleView 没有这样的特殊操作,只需要简单的点投影、更小的 CNN 主干网,并且不需要 ImageNet 预训练。
SimpleView 的发现令人惊讶,因为最近最先进的结果都是通过日益复杂的基于点的架构实现的。在最近的文献中,通常认为基于点的方法是点云处理的最佳选择,因为它们“不会引入显式信息丢失”(Guo et al, 2020)。先前的工作指出,“这些方法的卷积运算缺乏捕获非局部几何特征的能力”(Yan 等人,2020),基于投影的方法“通常需要大量视图才能获得良好的性能”(Liu 等人) ,2019c),并且基于投影的方法通常“微调基于图像的预训练架构以实现准确识别”(Liu 等人,2019c)。因此,令人惊讶的是,基于投影的方法可以通过简单的架构、仅几个视图且无需预训练来实现最先进的结果。
在 ModelNet40 上,SimpleView 的性能与跨各种协议的更复杂的最先进网络相当或更好,其中包括先前方法(表 2)以及我们的协议(表 4)使用的协议。同时,SimpleView 在 ScanObjectNN(Uy 等人,2019)上的性能优于最先进的架构,这是一个现实世界的数据集,其中点云有噪声(背景点、遮挡、对象中的孔)并且不是轴。对齐。 SimpleView 还展示了比之前的作品更好的跨数据集泛化能力。此外,SimpleView 使用的参数比最先进的网络更少(表 4)。请注意,我们并不是提出一种新的架构或方法,而是简单地评估一个简单而强大的基于投影的点云分类基线,这在文献中很大程度上被忽略了。我们并不声称 SimpleView 的设计有任何新颖性,因为它的所有组件都已出现在文献中。我们的贡献表明,这样一个简单的基线效果出奇地好,这是现有文献中所没有的结果。
值得注意的是,人们可能认为基于投影的方法不能与基于点的方法直接比较,因为基于投影的方法可能具有完整的方法网格作为输入,而不仅仅是点云。虽然文献中的现有结果确实如此,但 SimpleView 的情况并非如此,它的输入与基于点的方法给出的点云完全相同。换句话说,SimpleView 可以直接与基于点的方法进行比较,因为它们解决完全相同的任务。
总之,我们的贡献是:
• 我们表明,独立于网络架构的训练和评估因素对点云分类性能有很大影响。控制这些因素后,PointNet++ 的性能与更新的架构一样好。
• 我们演示了SimpleView(一种非常简单的基于投影的基线)如何在点云分类上表现得异常出色。它在使用较少参数的情况下,在 ModelNet40 上的性能与之前的网络相当或更好。它还在现实世界点云分类方面优于最先进的方法,并实现了更好的跨数据集泛化。
2. 相关工作
基于点的点云分析方法:已经出现了一类广泛的 DNN 来直接处理 3D 点(Simonovsky & Komodakis, 2017; Zaheer et al, 2017; Klokov & Lempitsky, 2017; Xu et al, 2018) ;Atzmon 等人,2018;Wang 等人,2018a;Li 等人,2018a;Groh 等人,2018;Ben-Shabat 等人,2018;Xie 等人,2018;Li 等人,2018b;Liu 等人,2019a ;Thomas 等人,2019;Komarichev 等人,2019;Liu 等人,2019b;Yan 等人,2020;Su 等人,2018;Zhang 等人,2019;Liu 等人,2019a;Atzmon 等人,2018)。 PointNet(Qi 等人,2017a)提出了最早的策略之一,其中使用 MLP 层更新每个点的特征,并使用全局最大池进行聚合。然而,PointNet 中没有进行局部比较,这激发了 PointNet++(Qi 等人,2017b)。 PointNet++ 将点的子集分解为首先处理的局部区域。使用更新的方法对点之间的空间关系进行更明确的建模(Li et al, 2018b; Liu et al, 2019c; Wu et al, 2019)。例如,PointConv 学习定义连续 3D 卷积的函数,这些卷积可以应用于邻域中的任意点集(Wu 等人,2019)。 RSCNN 使用以两点空间关系为条件的 MLP 来更新和聚合单个采样点周围的特征(Liu 等人,2019c)。这些方法存在许多变化,但新出现的趋势是复杂性的提高。
基于投影的点云分类方法:文献中已经提出了基于投影的点云分类方法。值得注意的是,(Roveri et al, 2018)学习预测视角并以端到端可微分的方式对图像进行分类。他们使用在 ImageNet 上预训练的 ResNet50 模型作为骨干和深度图像生成管道。 (Sarkar et al, 2018) 提出了一种特殊的多高度渲染和特征合并方案,并使用在 ImageNet 上预训练的更大的主干网络。 (Ahmed 等人,2019)手动定义每个对象类别的重要视图,创建二进制边缘图,并训练 PointNet++ 和 CNN 的集成。然而,(Ahmed 等人,2019)中的数字不能直接与其他方法进行比较,因为测试集中的对象进行了手动对齐,这与标准 ModelNet40 测试集不同。这一点得到了作者的证实。值得注意的是,尽管先前的工作已经表明复杂的操作对于获得良好的结果很有用,但我们发现,在控制方法协议时,可以通过固定正交视图、更小的网络、没有 ImageNet 预训练和更简单的方法来实现强大的性能点的渲染。
用于其他点云分析任务的基于投影的方法:有丰富的文献介绍了如何在分割等各种点云分析问题上使用基于投影的方法(Ladicky 等人,2010 年;Tighe 和 Lazebnik,2010 年;Riemenschneider 等人,2014 年; Qing 等人,2018;Dai & Niener,2018;Kalogerakis 等人,2017;Tatarchenko 等人,2018)、重建(Pittaluga 等人,2019)和渲染(Aliev 等人,2019)。值得注意的是,(Boulch 等人,2017)使用点云密度来创建场景网格,然后将其放入网格渲染器中以生成不同比例的许多图像视图。 (Lawin 等人,2017)从 120 个视图中渲染不同模式(如颜色、深度和表面法线)的场景点云。然后融合来自多种模态的信服务器托管网息以生成逐点预测。对于不同点云处理任务的各种投影方法的详细调查,我们鼓励读者查看(Guo et al, 2020)最近的调查论文。在这项工作中,SimpleView 用作点云分类的基于精简投影的基线,它使用一些正交视图和简单的点投影。
使用渲染图像和体素进行 3D 形状分析:许多作品使用从对象网格渲染的图像进行 3D 形状分析(Maturana & Scherer,2015;Wu 等人,2015b;Yu 等人,2018;Guo 等人,2016;Shi 等人, 2015;Hackel 等,2017;Song 和Xiao,2016;2014;Huang 和You,2016;Tchapmi 等,2017)。 MVCNN 通过将共享 CNN 应用于许多渲染视图并使用最大池来聚合特征来举例说明该策略(Su et al, 2015)。随后的方法包括 RotationNet,它训练网络来预测每个图像的视点(Kanezaki et al, 2018),GVCNN,它在聚合成最终预测之前将视图子集的特征分组在一起(Feng et al, 2018),以及超图方法考虑训练样本之间的相关性(Zhang 等人,2018;Feng 等人,2019)。一个值得注意的例外是(Qi 等人,2016),他们使用 MVCNN 的多分辨率变体,但不是对象网格,而是使用 MVCNN 的体素化版本用于渲染的对象。与先前基于视图的方法相比,该方法使用具有点连接信息的对象网格,并使用基本着色和/或深度来渲染图像; SimpleView 将原始点云作为输入。
另一类方法是基于体素的方法,它将点转换为固定的 3D 网格,并使用 3D CNN(Qi 等人,2016;Wu 等人,2015a;Maturana 和 Scherer,2015)。考虑到增加的维度,此类方法通常仅限于较低的分辨率来表示对象。尽管八叉树等一些策略已用于解决这些限制(Wang 等人,2017),但以这种方式直接处理 3D 数据的优势似乎尚未超过引入的额外开销。
3. 方法概述
3.1.现有协议的变化
我们分析了点云分类进展的关键因素。我们研究的关键是控制独立于网络架构的因素。我们将这些因素称为方法的协议。一种方法使用的协议可以转移到另一种方法。在我们的研究中,我们分析了过去几年中性能最高的方法的子集。这一选择进一步基于官方源代码的可用性和可用性。具体来说,我们选择PointNet(Qi等人,2017a)、PointNet++(Qi等人,2017b)、DGCNN(Wang等人,2018b)和RSCNN(Liu等人,2019c)。请注意,我们还对除此处提到的网络之外的网络进行直接比较(表 8)。就我们的目的而言,我们不考虑输入的任何变化,即使用表面法线或超过 1024 个点。
文献表明,使用法线或更多点可以提高性能。我们的目标是研究那些通常不被视为绩效提升主要来源的因素。因此,我们将分析范围限定为最广泛采用的输入方案,该方案使用 1024 个点,仅包含 x,y,z 坐标。
数据增强:各种数据增强策略,例如抖动、沿 y 轴随机旋转、随机缩放和随机平移。不同的方法使用这些增强的不同组合。 PointNet 和 PointNet++使用以上所有增强功能。然而,由于 ModelNet40 中的对象是对齐的,沿 y 轴的随机旋转会对模型的性能产生不利影响。因此,最近的方法,包括 RSCNN 和 DGCNN,都不使用它。他们仅使用随机平移和随机缩放。包括 PointCNN 在内的一些方法会区分是否使用沿 y 轴的随机旋转,但这并不常见。
输入点:PointNet 和 PointNet++ 使用每个对象的固定 1024 个点集来训练网络。我们将其称为定点策略。 RSCNN 和 PointCNN 在每个 epoch 中随机采样点,在训练过程中有效地将模型暴露给每个对象超过 1024 个点。我们将此称为重采样点策略。
损失函数:大多数方法都使用交叉熵(CE)。然而,DGCNN 使用平滑损失,在计算交叉熵之前对真实标签进行平滑处理。我们观察到平滑损失提高了所有网络架构的性能。
选择测试模型:PointNet 和 PointNet++ 使用最终的收敛模型在测试集上进行评估。由于 epoch 的数量是一个超参数,取决于数据、模型、优化器和损失等因素,因此在我们的实验中,我们从训练集中创建一个验证集来调整 epoch 的数量。然后,我们使用完整的训练集重新训练模型到调整后的轮数。
我们将此策略称为最终模型选择。
我们发现包括 DGCNN 和 RSCNN 在内的一些方法在每个 epoch 后都会在测试集上评估模型,并使用最佳测试性能作为最终性能。我们将此策略称为最佳测试模型选择。
集成方案:一些方法使用集成来进一步提高性能。 PointNet 和 PointNet++ 将最终网络应用于点云的多个旋转和打乱版本,并对预测进行平均以做出最终预测。我们将此策略称为轮换投票。洗牌操作会导致 PointNet++ 和 RSCNN 预测的随机性,因为它们对于点的顺序并不严格不变(Qi 等人,2017b)中的第 3.3 节)。因此,在评估旋转时投票,我们对 PointNet++ 和 RSCNN 每次运行进行 10 次推理,并报告平均值和标准差。 SimpleView 和 PointNet 对于点的顺序是不变的,因此不受洗牌的影响。一些方法(包括 RSCNN 和 DensePoint)创建测试对象的多个随机缩放和随机采样版本。然后,他们评估对象的这些多个版本的最终网络并对预测进行平均。由于缩放是随机的,因此它也使测试集的性能变得随机。
RSCNN 和 DensePoint 在测试集上重复此过程 300 次,并报告最佳准确性。我们将其称为重复扩展投票。 DGCNN 不使用任何集成。
表 1 总结了 PointNet++、DGCNN 和 RSCNN 协议。除了这三个协议之外,我们还在表 2 和表 8 中包含这些协议的变体,例如 PointNet++ no Vote(即 PointNet++ 但没有旋转投票)、DGCNN CE(即DGCNN,但有 CE 损失而不是平滑损失),DGCNN CE Final(即 DGCNN CE,但有最终模型选择,而不是最佳测试模型选择)和 RSCNN 无投票(即 RSCNN,但没有旋转投票)。这些协议代表了原型设置,并在许多其他先前的作品中经过轻微修改后使用。
例如,DeepSets (Zaheer et al, 2017) 使用了 PointNet++ no Vote 协议,没有抖动和翻译; SO-Net (Li et al, 2018a) 使用带有抖动和随机缩放的 DGCNN CE 协议,而不是随机缩放和平移; 3DmFV(Ben-Shabat 等人,2018)使用带有额外抖动的 DGCNN CE 协议; PCNN(Atzmon 等人,2018)使用 DGCNN CE Final 协议1; PointCNN(Li et al,2018b)使用了 DGCNN CE 协议,具有随机采样点和小(10)旋转增强; DensePoint(Liu et al,2019b)使用RSCNN协议; PointASL(Yan 等人,2020)使用 DGCNN CE 协议,但具有额外的点抖动增强和投票。
我们的协议:根据我们的发现,我们定义了 SimpleView 协议,它使用最好的增强和损失函数,而不使用测试集中的任何信息。表 3 显示 DGCNN 的增强(即随机平移和缩放)和平滑损失提高了所有先前网络的性能,因此我们在 SimpleView 协议中使用它们。此外,与 PointNet、PointNet++ 和 DGCNN 类似,我们使用 1024 个点的固定数据集,而不是在每个 epoch 重新采样不同的点。每个时期的重新采样点都会改变(增加)训练数据集。因此,为了保持训练数据集与建立点云分类的初始工作(PointNet 和 PointNet++)相同,我们使用了 1024 个点的固定集。我们避免来自测试集的任何反馈,并使用最终的模型选择,我们首先调整验证集上的纪元数量,然后在整个训练集上重新训练模型。最后,与 DGCNN 类似,我们不使用集成,因为在机器学习中比较没有集成的模型更标准
3.2. SimpleView
给定一组点 SimpleView,将它们投影到六个正交平面上以创建稀疏深度图像。然后,它使用 CNN 和融合器从深度图像中提取特征,然后用于对点云进行分类,如图 2 所示。
图 2.SimpleView 架构。深度图像的颜色仅用于说明目的。 SimpleView 将单通道深度图像作为输入。
从点云生成深度图像:令 (x,y,z) 为点云中的点相对于相机的坐标。我们应用透视投影来获取 p 在深度 z 处的二维坐标
。我们还使用正交投影进行消融,发现透视投影效果稍好(表 6)。由于图像平面上的坐标必须是离散的,因此我们使用
作为p在图像平面上的最终坐标。多个点可以投影到图像平面上的相同离散位置。为了在图像位置产生深度值,我们对两种选择进行消融,一种是所有点的最小深度,另一种是对较近的点赋予更大权重 的加权平均深度(表 6)。根据经验,我们发现两者的表现相似,但后者的表现稍好一些。这可能是因为对表面上附近的像素进行平均而减少了噪声。深度图像的分辨率为 128 X 128。
SimpleView 架构:为了使参数数量与基于点的方法相当,我们使用带有四分之一滤波器 (ResNet18/4) 的 ResNet18 作为主服务器托管网干。为了融合特征,我们通过两种选择进行消融:池化和串联。根据经验,我们发现串联比池化效果更好(表 6)。这可能是因为池化功能会丢弃视图信息,例如哪些视图彼此相邻。一个问题可能是串联可能会使特征对视点敏感,因此网络可能会在旋转对象上失败。然而,根据经验,我们观察到这个问题在很大程度上通过旋转增强得到缓解,并且 SimpleView 能够在对象旋转的 ScanObjectNN 上实现最先进的性能。点云缩放至 [1; −1]3 ,我们将相机与中心保持 1:4 单位的距离,视场角为 90。我们还使用不同数量的视图进行消融,仅比较前视图、三个正交视图和六个正交视图。我们发现使用所有六个视图效果最佳(表 6)。我们不使用 ImageNet 预训练,因此与基于点的方法的比较严格公平,无需任何额外数据。
4. 实验 ModelNet40:ModelNet40 是最广泛采用的点云分类基准。它包含 40 个常见类别的对象。训练集中有 9840 个对象,测试集中有 2468 个对象。对象与共同的向上和前方方向对齐。
ScanObjectNN:ScanObjectNN 是最近的现实世界点云分类数据集。它由 15 个类组成,其中 11 个也在 ModelNet40 中。数据集中共有 15k 个对象。与 ModelNet40 不同,ScanObjectNN 中的对象是从现实世界的 3D 扫描中获得的。因此,点云是有噪声的(遮挡、背景点)并且具有几何扭曲,例如孔洞。此外,与 ModelNet40 不同的是,这些对象不是轴对齐的。
4.1. ModelNet40 实现细节实验:我们使用 PyTorch (Paszke et al, 2019) 来实现所有模型和协议,同时尽可能重用官方代码。我们使用官方版本的DGCNN和RSCNN。我们与作者确认,RSCNN-Multi(RSCNN 的另一个版本)的代码尚未发布。因此,我们使用表 8 中报告的 RSCNN-Multi 数量。PointNet 和 PointNet++ 在 TensorFlow 中正式发布(Abadi 等人,2015)。对于 PointNet,我们按照官方存储库中的建议调整了 PointNet.pytorch(Xia,2020 年 6 月访问)中的代码。对于 PointNet++,我们改编了 Pointnet2 PyTorch(Wijmans,2020 年 6 月访问)的模型代码。我们进一步确保第三方 PyTorch 代码与官方 TensorFlow 代码紧密匹配。我们使用 Adam (Kingma & Ba, 2014),初始学习率为 1e-3 和稳定衰减学习率调度器。
每个模型的批量大小和权重衰减与表 2 中的官方版本保持相同。我们使用 SimpleView 的批量大小为 18,并且没有权重衰减。为了让先前的模型在我们的协议上获得最佳机会(表 4),我们另外在验证集上调整了它们的超参数。我们发现官方的超参数已经接近最优。我们对每个模型进行 1000 个 epoch 训练。由于不同运行的最终性能存在微小差异,因此我们进行 4 次运行并报告平均值和标准差。
现有协议下的性能:表2显示了不同架构在各种协议下的性能。
当我们从 PointNet++ no Vote 切换到 RSCNN Vote 协议时,PointNet++ 的平均性能从 89.8% 提高到 93.3%。类似地,当我们从 PointNet++ no Vote 切换到 DGCNN Smooth 时,SimpleView 的性能从 90.7% 提高到 93.6%。由于不同运行之间的性能存在差异,因此我们不会对先前作品之间的绝对顺序做出任何声明。然而,我们确实观察到,就平均性能而言,SimpleView 在所有协议下的性能与其他方法相当或更好。请注意,在 RSCNN Vote 中,对测试集进行了 300 次投票,并使用重新洗牌和随机增强的点,从中选择最高准确度的点。因此,预测方差最大的模型(即 PointNet++ 和 RSCNN)从中获益最多,因为它们对于点的顺序并不严格不变(Qi 等人,2017b)中的第 3.3 节)。
SimpleView 协议下的性能:表 4 显示,在我们的受控协议上,SimpleView 在平均性能方面优于现有架构。 SimpleView 具有最少的参数数量和具有竞争力的推理速度。推理速度是在 NVIDIA 2080Ti 上测量 100 次运行的平均值。
图 3 显示了 SimpleView 和 PointNet++ 都失败的示例,以及其中一个失败而另一个成功的示例。定性地,我们发现SimpleView和PointNet++的故障模式是相似的。我们还发现 SimpleView 和PointNet++是“花盆”和“植物”类别之间的混淆(参见附录图1和图2)。这可能是因为缺乏颜色信息。在表 7 中,我们展示了模型如何使用不同数量的训练数据执行。我们发现 SimpleView 在不同的数据集大小上都优于最先进的方法。
与更多方法的比较:在表8中,我们对SimpleView和除PointNet、PointNet++、RSCNN和DGCNN之外的最新最先进方法进行了一对一的比较。我们从我们评估的协议中找出与论文中使用的协议最接近的协议。表 8 显示了 PointNet++ 和 SimpleView 与其他最新最先进方法的竞争力。
4.2. ScanObjectNN 实现细节的实验:ScanObjectNN 的官方存储库在同一协议下训练和评估最先进的模型。为了公平起见,我们在 TensorFlow 中实现了 SimpleView,并使用官方的 ScanObjectNN 协议。该协议与 SimpleView 协议不同,因为它标准化点云并随机采样点。我们与 Adam 一起优化我们的模型。我们使用批量大小为 20 且没有权重衰减的情况,以初始学习率为 0.001 训练 SimpleView 300 个 epoch,并使用最终模型进行测试。我们使用标准的基于图像的裁剪和缩放增强来防止过度拟合。用于裁剪和缩放的超参数可以在 ScanObjecNN 的训练集制成的验证集上找到。我们对 SimpleView 进行了 4 次运行。 ScanObjectNN 在测试期间不使用固定的点集。相反,它从点云中随机采样点,这增加了测试集性能的随机性。因此,我们对每次运行进行 10 次评估。我们将最终性能报告为 40 次评估的平均值和方差(4 次运行 每次运行 10 次评估)。
ScanObjectNN 上的性能:如表 5 所示,SimpleView 在 ScanObjectNN 上的性能优于现有网络。
这表明 SimpleView 在具有噪声和未对齐点云的现实环境中是有效的。作为未来参考,SimpleView 在使用最佳测试模型选择方案时获得了 80:5 0:3 的精度。我们还进行了迁移实验来测试 SimpleView 的通用性。
我们在 ScanObjectNN 上进行训练并在 ModelNet40 上进行测试,反之亦然。表 5 显示 SimpleView 在数据集之间的传输比以前的方法更好。
5.讨论在这项工作中,我们演示了与网络架构正交的辅助因素如何对点云分类的性能产生很大的影响。在控制这些因素时,我们发现相对较旧的方法 PointNet++(Qi 等人,2017b)的性能与较新的方法具有竞争力。此外,我们还表明,简单的基线性能与最先进的架构相当或更好。
我们的结果表明,为了未来的进步,我们应该在比较网络架构时控制协议。我们的代码库可以作为开发新模型并将其与以前的作品进行比较的有用资源。我们的结果表明,当辅助因素得到适当控制时,基于点的方法的证据不是很强,并且 SimpleView 是一个强有力的基线。但我们的结果并不意味着阻止未来对基于点的方法的研究。基于点的方法仍然完全有可能通过额外的创新而取得领先。我们相信只要以受控方式比较结果,探索竞争方法(包括在特定时间表现不佳的方法)是有益的。
我们在这项工作中的分析仅限于点云分类,这是 3D 场景理解中的一个重要问题,也是对象检测和检索系统的关键部分。一个令人兴奋的未来方向是将这种分析扩展到涉及点云数据的其他问题,例如场景和零件分割。
致谢:这项工作得到了海军研究办公室的部分支持,拨款 N00014-20-1-2634。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: Go语言中的init函数: 特点、用途和注意事项
1. 引言 在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。 在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项,希…