近些年涌现了很多不同的 3D 点云网络和算子,它们在常见基准评测集上的性能逐步提升,但是由于各种网络采用不同的局部算子、整体网络结构和实现细节,人们对该领域的实质进步一直缺乏准确地评估。
最近,中科大 - 微软亚洲研究院的研究员在 ECCV 2020 上发表文章,尝试进行更准确、公平地评估。他们的研究指出:
1)无需更复杂的 3D 网络,经典的深度残差网络就能在各种规模和各种场景的数据集上表现优异。结合几种典型局部算子后,它们均能在 PartNet 上超过 SOTA 7 个点以上。
2)几种典型的 3D 局部算子在相同的整体网络下的表现令人惊奇的一致,一种极简无参的位置池化算子 PosPool 即能比肩各种更复杂的 3D 局部算子。
论文作者还表示,他们的方法没有引入各种复杂的设计,希望这一基准方法可以让今后 3D 点云识别的研究受益。
近年来,随着 3D 扫描设备的普及,针对 3D 点云的分析和感知在诸如自动驾驶、机器人、形状匹配和识别等任务中得到了越来越广泛地关注和应用。与在网格上定义的图像和视频不同,点云数据是无序的且非网格化排列,这使得为网格化数据设计的功能强大的卷积神经网络(CNN)等深度神经网络难以得到应用。为了解决这一问题,自 PointNet++ 起,学者们提出了各种各样的网络,DGCN、Continuous Conv、DeepGCN、KPConv 等等,它们依赖于不同的网络结构和不同的 3D 局部算子。
然而,由于不同工作在整体网络架构、实现细节和局部算子上有所不同,这些 3D 网络和算子的实质进步一直缺乏准确地评估,这严重阻碍了对 3D 网络和算子的进一步理解和创新。另一方面,大部分 3D 算子仅在浅层网络中进行了应用和验证,它们在更深层的深度残差网络下的表现仍属未知。
最近,微软亚洲研究院的研究员发表在 ECCV 2020 上的工作尝试对现有的代表性 3D 网络和算子进行更公平的比较和评估。
该研究发现:尽管不同的 3D 算子设计各异,但在相同整体网络和实现细节下,所有这些算子的性能都惊人地相似,均在几个代表性的基准评测集上达到了目前最好的准确率。
基于这一发现,该研究作者重新思考了为 3D 点云处理设计各种复杂 3D 算子的必要性。为此,他们提出了一种简单的、无需可学参数的 3D 算子——「位置池化」(PosPool),并发现它与目前各种复杂的算子相比性能不差,甚至表现略优。
该算子结合最基本的深度残差网络,就可以在极具挑战性的 PartNet 数据集上超过之前的最佳方法高达 7.4 个点之多。
3D 局部算子通用数学表述和分类
该研究首先总结了不同的 3D 局部算子,并提出了一种通用数学表述,根据该通用数学表述对常见的 3D 算子做了总结和分类。
具体来说,针对每个 3D 点,点云局部算子都是将该邻域内的输入特征进行聚合的一个操作,在聚合过程中会考虑邻域点和中心点的相对位置关系:
其中,N(i) 表示邻域,△p_ij 为相对位置,f_j 为输入特征,G(·, ·) 是编码函数。根据编码函数 G(·, ·) 的不同,目前典型的 3D 局部算子大致分为三类:
基于逐点多层感知机 (Point-wise MLP) 的方法:
典型例子包括 PointNet++ 和 DGCNN 中的集合抽象 set abstract 层等。
基于伪网格特征(Pseudo Grid Feature)的方法:
一个典型例子是 KPConv。
基于自适应权重(Adaptive Weight)的方法:
典型例子包括 ContinuousConv 和 FlexConv 等。
一种简单的无参 3D 算子:位置池化(PosPool)
在总结已有 3D 算子的同时,该研究还提出了一种新型无参 3D 算子,这一新算子基于位置池化,没有需要学习的参数。在该算子中,G(·, ·) 是将相对位置和输入特征相乘的编码函数。
如图 1 所示,该算子将前 1/3 的输入特征通道与△x_ij 相乘,中间 1/3 的输入特征通道与△y_ij 相乘,后 1/3 的输入特征通道与△z_ij 相乘。
图 1:位置池化(PosPool)算子示意图
该研究还提出了一种位置池化的变体,在有些场景下可实现更优秀的性能。这一变体首先将 3 维的相对位置嵌入到和输入特征具备同样维度的向量中:
编码函数 G(·, ·) 是嵌入向量 ε 与输入特征 f_ij 的逐通道相乘:
该变体保持了无参的性质,并在某些情况下有着比前述基本位置池化方法更好的性能。
公平测试条件
统一的深度残差网络
该研究指出,已有的 3D 点云网络往往各不相同,而且大部分采用比较浅的网络,因此很难弄清各种 3D 算子在更深的网络中表现如何,以及它们在同样的整体网络结构中表现如何。
为了公平比较不同的 3D 算子,该研究提出使用统一的深度残差网络进行测试,如图 2 所示。类似于图像识别中的 ResNet,该研究采用了一个 5 阶段的深度残差网络,且每个阶段由多个瓶颈残差块(bottleneck residual block)叠加而成,每个瓶颈块依次由一个 1x1 变换层、一个 3D 算子和另一个 1x1 变换层组成。
针对形状分类和语义分割任务,该研究分别设计了基于 4 个全连接层以及类似 U-Net 解码器的两个头部网络。通过改变每个阶段瓶颈块的个数、通道数,以及瓶颈比例(bottleneck ratio),控制网络整体的复杂度。
图 2:该研究采用的深度残差网络
评测数据集
该研究选取了 3 种典型的数据集来进行评测,以覆盖不同的场景、不同的任务以及不同的数据量,包括:ModelNet40(CAD 模型、分类、小规模),S3DIS(实际场景、分割、中等规模),PartNet(CAD 模型、分割、中大规模)。
两个基线 3D 算子
为了检验局部算子的作用,该研究还在测试中引入了两个不考虑空间位置的基线算子:
其中前者是恒等函数,不编码邻域点;后者是一个平均 / 最大池化层,不考虑邻域点的相对位置。
实验结果及结论
表 1 展示了在上述一致的实验设置下,对于基准算子、各类典型 3D 算子(选取合适的设计)以及该研究提出的 PosPool 算子的公平比较,得出如下结论:
1. 在更大规模和更具挑战性的数据集(例如 PartNet)上,更深的深度残差网络可以带来显著的性能提升。在 ModelNet40 这样规模较小的数据集上,更深的深度残差网络也不会对性能造成损害。这说明,对于 3D 点云处理,经典的深度残差网络就是一个很好的选择,并无必要像之前的工作那样为不同的 3D 局部算子专门设计各种特殊的或深或浅的整体网络结构。
2. 三类典型的 3D 算子和该研究提出的 PosPool 算子都相较基准算子有较大提升。这表明,编码邻域信息的 3D 局部算子对于点云处理来说是很重要的。
3. 几种典型的 3D 算子和该研究提出的 PosPool 算子在 3 个具有代表性的数据集上均达到了最先进的性能,特别是在更具挑战性的 PartNet 上,相比以前最好的方法提升了超过 7 个点。考虑到该研究提出的方法并无多少特殊的设计,这表明该方法很适合作为将来 3D 点云识别研究的基准方法。
4. 最令人惊奇的是,这 3 类典型 3D 算子与 PosPool 算子的性能是极其接近的,简单且无参的 PosPool 在某些情况下甚至表现更好。这一结果表明,对于 3D 算子而言,我们也许不需要复杂或繁重的局部算子。这也为理解和设计 3D 算子提供了新的思路。
表 1:不同 3D 局部算子在基准数据集中的表现(其中 S 表示小一些的模型,PosPool * 表示前述变体)。