PointNet++改进策略 :模块改进 | Residual MLP | PointMLP,简化原本复杂的局部几何特征提取器,减少计算同时提高效率
- 论文题目:RETHINKING NETWORK DESIGN AND LOCAL GEOMETRY IN POINT CLOUD: A SIMPLE RESIDUAL MLP FRAMEWORK
- 发布期刊:ICLR
- 作者地址:1美国马萨诸塞州波士顿东北大学 2美国纽约州纽约哥伦比亚大学
- 代码地址:https://github.com/ma-xu/pointMLP-pytorch
介绍
这篇论文题为《Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP Framework》,发表于ICLR 2022。论文的主要内容是提出了一种名为PointMLP的新方法,用于处理点云数据,旨在通过简单的残差多层感知器(Residual MLP)网络替代复杂的几何特征提取器。
- 背景与挑战:点云分析由于数据的不规则性和无序性,一直是计算机视觉中的难题。现有的大多数方法依赖于卷积、图网络或注意力机制来捕捉局部几何特征,但这些方法在推理过程中会带来高延迟,并且近年的性能提升逐渐趋于饱和。
- PointMLP的核心思想:作者认为精细的局部几何特征提取可能并不是点云分析的关键。他们设计了一种仅使用残差MLP网络的框架(即PointMLP),无需复杂的局部几何特征提取器,但仍然在多个数据集上表现出色。特别是通过引入轻量级的几何仿射模块(Geometric Affine Module),PointMLP在真实世界的ScanObjectNN数据集上超越了当前最好的方法,精度提升了3.3%。
- 性能与效率:与CurveNet等复杂方法相比,PointMLP不仅训练速度快(训练时间快2倍,测试速度快7倍),还在ModelNet40基准上取得了更高的准确性。此外,PointMLP表现出了优异的推理速度和精度之间的平衡。
- 实验与结果:
- 分类任务:在ModelNet40和ScanObjectNN数据集上的实验显示,PointMLP在无需投票策略的情况下达到了94.1%的准确率,使用投票策略后更是达到94.5%,超过了之前最好的方法。
- 消融实验:为了验证各个组件的有效性,论文进行了多次消融实验,展示了几何仿射模块和MLP残差块对模型性能的提升作用。
- 形状分割任务:PointMLP也在ShapeNetPart数据集上的形状分割任务中表现优异,尽管其结构简单,但仍能与其他复杂方法竞争。
图 ModelNet40 上的精度与速度权衡。PointMLP 表现最好。
核心思想及其实现
PointMLP的核心思想是通过一个简单的残差多层感知器(MLP)网络,跳过复杂的局部几何特征提取步骤来进行点云分析。传统的方法,如卷积神经网络(CNNs)、图卷积网络(GCNs)和注意力机制,往往依赖于对点云的局部几何特征的详细提取,但这些方法计算开销大且性能提升有限。PointMLP提出,局部几何信息的复杂提取未必是点云分析的关键,简化的MLP网络可以在保持高效推理的同时实现高精度性能。
图 :PointMLP 中一个阶段的概述。给定输入点云,PointMLP 使用残余点 MLP 块逐步提取局部特征。在每个阶段,我们首先使用几何仿射模块变换局部点,然后分别在聚合操作之前和之后提取它们。 PointMLP 通过重复多个阶段逐步扩大感受野并建模完整的点云几何信息。
PointMLP核心思想的实现步骤
-
Residual MLP(残差MLP)结构:
- PointMLP网络采用的是纯MLP的残差结构,而不是复杂的几何特征提取器。每一个点的局部邻居通过MLP块提取特征,特征表示通过残差连接进行增强。残差连接可以帮助网络更好地训练深层结构。
- PointMLP通过逐层叠加MLP块,使得网络可以深入学习点云数据的层次化特征,并通过残差结构避免梯度消失问题。
-
Geometric Affine Module(几何仿射模块):
- 尽管PointMLP不使用复杂的局部几何特征提取器,它通过一个轻量级的几何仿射模块来增强模型的表达能力。几何仿射模块用于局部区域的点特征转换,通过对局部几何特征进行归一化,使得网络可以适应不同几何结构的输入。
- 仿射模块的操作类似于归一化操作,它根据点的局部几何关系调整特征,使得网络可以更稳定地训练并获得更高的准确性。
-
点云特征的逐层聚合:
- 点云分析需要从局部的几何关系中提取全局的几何信息。PointMLP通过多层MLP块来逐步扩大感受野,逐步聚合局部特征,并最终形成全局的点云表示。
- 通过MLP块的层次化结构,PointMLP逐步提取每个点及其邻居之间的特征,并通过全局池化(如最大池化)操作汇聚全局信息。
-
高效推理和训练:
- PointMLP的一个显著优势在于其高效的推理速度。由于MLP网络的操作可以通过现有的深度学习框架高度优化,PointMLP在推理速度上比传统的卷积或图网络方法要快得多,同时保持了高精度。
PointMLP的核心网络结构
PointMLP的网络结构基于残差多层感知器(Residual MLP)和轻量化几何仿射模块(Geometric Affine Module),其设计旨在简化点云的局部几何特征提取过程,并通过逐层的MLP块实现特征聚合和学习。以下是PointMLP的具体网络结构细节:
-
输入模块:
- 输入点云数据:假设输入的点云为 P ∈ R N × 3 P \in \mathbb{R}^{N \times 3} P∈RN×3,其中 N N N是点的数量,每个点有三维坐标 (x, y, z)。
- 使用k-近邻算法 (kNN) 为每个点找到其局部邻域,这样可以为每个点建立一个局部区域(局部特征提取的基础)。
-
残差MLP模块(Residual MLP Blocks):
- 每个局部邻域的特征通过一系列的MLP块提取。每个MLP块包括全连接层(FC),批量归一化(Batch Normalization, BN)和ReLU激活函数。
- 残差连接:残差连接的形式为 MLP ( x ) + x \text{MLP}(x) + x MLP(x)+x,用于确保即使在网络深度增加时,模型也能保持较好的梯度传递,避免梯度消失问题。
- 每个MLP块分为两部分:前MLP模块(Pre-MLP Block) 和后MLP模块(Post-MLP Block),分别用于局部区域特征提取前后的不同阶段。
具体的MLP结构如下:
- Φ pre \Phi_{\text{pre}} Φpre:预处理部分,使用多个MLP层对局部点云特征进行初步提取。
- Φ pos \Phi_{\text{pos}} Φpos:后处理部分,进一步处理已经聚合的局部特征。
整个过程可以表示为: g i = Φ pos ( A ( Φ pre ( f i , j ) ) ) g_i = \Phi_{\text{pos}} \left( A \left( \Phi_{\text{pre}} \left( f_{i,j} \right) \right) \right) gi=Φpos(A(Φpre(fi,j)))
其中, A ( ⋅ ) A(\cdot) A(⋅)表示聚合操作(如最大池化), f i , j f_{i,j} fi,j表示点 i i i的第 j j j个邻居点特征。 -
几何仿射模块(Geometric Affine Module):
- 用于对每个局部区域的点特征进行归一化,增强模型的稳定性和对局部几何变化的鲁棒性。
- 仿射变换的公式为:
{
f
i
,
j
}
=
α
⊙
{
f
i
,
j
}
−
f
i
σ
+
ϵ
+
β
\{f_{i,j}\} = \alpha \odot \frac{\{f_{i,j}\} - f_i}{\sigma + \epsilon} + \beta
{fi,j}=α⊙σ+ϵ{fi,j}−fi+β
其中, α \alpha α和 β \beta β是可学习参数, ⊙ \odot ⊙是Hadamard积, σ \sigma σ是局部区域特征的标准差, ϵ \epsilon ϵ是防止除零的一个小值。 - 通过这个模块,局部特征的分布被标准化,同时保留了几何信息。
-
层次化特征聚合(Hierarchical Feature Aggregation):
- 在每一层中,点云的特征通过最大池化(Max Pooling) 或 平均池化(Average Pooling) 进行聚合,这有助于逐步扩大每个点的感受野,从局部特征最终汇聚为全局特征。
- 每个MLP块提取局部特征后,采用池化操作将特征聚合为全局表示。
-
全连接分类器(Fully-Connected Classifier):
- 对全局特征使用若干层全连接层进行处理,用于最终的任务(如分类或分割)。
- 典型的分类器由两层全连接层组成,每层后跟随激活函数ReLU和dropout层,用于防止过拟合。
- 最后一层是softmax输出,用于分类任务。
PointMLP的层次结构示意图
- 输入层:点云数据 N × 3 N \times 3 N×3。
- 特征提取阶段:
- 第1阶段:局部特征提取(使用前MLP和后MLP),输出特征 N × 64 N \times 64 N×64。
- 第2阶段:局部特征提取和聚合,输出特征 N / 2 × 128 N/2 \times 128 N/2×128。
- 第3阶段:更高层次的特征聚合,输出 N / 4 × 256 N/4 \times 256 N/4×256。
- 第4阶段:最终的全局特征提取,输出 N / 8 × 512 N/8 \times 512 N/8×512。
- 全局池化:将所有点的特征聚合为一个全局特征向量(大小为 1 × 1024 1 \times 1024 1×1024)。
- 分类头:全连接分类层,用于输出类别或分割标签。
如何改进PointNet++
要利用PointMLP的思想改进PointNet++,可以通过简化PointNet++的局部几何特征提取部分,借鉴PointMLP的残差MLP结构和几何仿射模块,从而在保留模型精度的同时提高效率。具体的实现步骤包括:
- 替换复杂的局部几何特征提取器,使用残差MLP块。
- 在特征聚合过程中引入几何仿射模块,增强模型对几何结构变化的鲁棒性。
- 通过深度和宽度的调整,进一步提升模型性能并保持计算效率。
1. 用残差MLP代替复杂的局部特征提取
PointNet++中引入了层次化的特征学习(Hierarchical Feature Learning),通过在局部区域内提取几何信息来捕获点云的局部结构。然而,这种局部几何特征提取通常涉及复杂的操作(如卷积或图结构),增加了模型的计算复杂度。可以参考PointMLP的做法,用残差MLP结构替换PointNet++中复杂的局部特征提取操作。
-
改进方法:在PointNet++的每个局部区域(即每次采样后的邻居点)上,不使用复杂的局部几何特征提取,而是通过残差MLP块提取局部特征。残差MLP块不仅计算简单,而且能够有效提取特征,同时具有更好的深度扩展能力。
- 实现步骤:在PointNet++中,将每一层的局部特征提取部分替换为PointMLP中的残差MLP块(Residual MLP Blocks),每个MLP块包含两层MLP,并通过残差连接实现特征增强。
2. 引入几何仿射模块(Geometric Affine Module)
PointMLP的几何仿射模块(Geometric Affine Module)用于对点云局部区域的特征进行归一化,使得模型能够更好地处理不规则的几何分布。PointNet++依赖于点云的局部几何结构进行特征提取,但未明确处理局部几何的不规则性问题,因此可以将几何仿射模块引入到PointNet++中。
-
改进方法:在每次局部特征聚合(例如通过最大池化或平均池化)之前,添加几何仿射模块。这可以帮助特征提取过程适应局部几何结构的变化,提高模型的鲁棒性和泛化能力。
- 实现步骤:
- 在每一层的局部邻域特征聚合之前,计算局部区域内各点相对于中心点的几何特征(如点之间的距离)。
- 使用几何仿射模块将这些几何信息进行归一化,并调整局部区域内各点的特征,使它们符合更稳定的分布。
- 将归一化后的特征传递给MLP进行特征提取和聚合。
- 实现步骤:
3. 简化层次结构,提高推理速度
PointNet++的层次化结构通过逐层聚合点云特征,在较深的网络中,这会导致较高的计算开销。PointMLP通过仅使用MLP和池化操作来简化点云处理,可以大大提高推理速度。因此,可以通过简化PointNet++的层次结构,减少每一层复杂的计算操作,参考PointMLP的架构来提高模型效率。
- 改进方法:减少每层特征提取的复杂度,使用MLP块替代复杂的卷积或图操作,同时通过减少层数和池化次数来加速推理过程。
4. 调整网络深度与宽度的平衡
PointNet++在局部区域进行特征提取时通常会使用较浅的网络,PointMLP通过深度残差MLP块实现更深层次的特征提取。如果希望进一步提升模型性能,可以参考PointMLP的设计思路,增加网络的深度,但同时通过瓶颈结构控制网络的宽度,避免模型过大带来的计算成本。
- 改进方法:通过增加每层的MLP块数量来加深网络,同时使用PointMLP中的瓶颈结构(在MLP块内部减少特征维度再恢复)来降低模型的参数量。