当前位置: 首页 > article >正文

PointNet++改进策略 :模块改进 | Residual MLP | PointMLP,简化原本复杂的局部几何特征提取器,减少计算同时提高效率

Pasted image 20240917093209

  • 论文题目:RETHINKING NETWORK DESIGN AND LOCAL GEOMETRY IN POINT CLOUD: A SIMPLE RESIDUAL MLP FRAMEWORK
  • 发布期刊:ICLR
  • 作者地址:1美国马萨诸塞州波士顿东北大学 2美国纽约州纽约哥伦比亚大学
  • 代码地址:https://github.com/ma-xu/pointMLP-pytorch
    Pasted image 20240917093156

介绍

这篇论文题为《Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP Framework》,发表于ICLR 2022。论文的主要内容是提出了一种名为PointMLP的新方法,用于处理点云数据,旨在通过简单的残差多层感知器(Residual MLP)网络替代复杂的几何特征提取器。

  1. 背景与挑战:点云分析由于数据的不规则性和无序性,一直是计算机视觉中的难题。现有的大多数方法依赖于卷积、图网络或注意力机制来捕捉局部几何特征,但这些方法在推理过程中会带来高延迟,并且近年的性能提升逐渐趋于饱和。
  2. PointMLP的核心思想:作者认为精细的局部几何特征提取可能并不是点云分析的关键。他们设计了一种仅使用残差MLP网络的框架(即PointMLP),无需复杂的局部几何特征提取器,但仍然在多个数据集上表现出色。特别是通过引入轻量级的几何仿射模块(Geometric Affine Module),PointMLP在真实世界的ScanObjectNN数据集上超越了当前最好的方法,精度提升了3.3%。
  3. 性能与效率:与CurveNet等复杂方法相比,PointMLP不仅训练速度快(训练时间快2倍,测试速度快7倍),还在ModelNet40基准上取得了更高的准确性。此外,PointMLP表现出了优异的推理速度和精度之间的平衡。
  4. 实验与结果
    • 分类任务:在ModelNet40和ScanObjectNN数据集上的实验显示,PointMLP在无需投票策略的情况下达到了94.1%的准确率,使用投票策略后更是达到94.5%,超过了之前最好的方法。
    • 消融实验:为了验证各个组件的有效性,论文进行了多次消融实验,展示了几何仿射模块和MLP残差块对模型性能的提升作用。
    • 形状分割任务:PointMLP也在ShapeNetPart数据集上的形状分割任务中表现优异,尽管其结构简单,但仍能与其他复杂方法竞争。

Pasted image 20240917093050
图 ModelNet40 上的精度与速度权衡。PointMLP 表现最好。

核心思想及其实现

PointMLP的核心思想是通过一个简单的残差多层感知器(MLP)网络,跳过复杂的局部几何特征提取步骤来进行点云分析。传统的方法,如卷积神经网络(CNNs)、图卷积网络(GCNs)和注意力机制,往往依赖于对点云的局部几何特征的详细提取,但这些方法计算开销大且性能提升有限。PointMLP提出,局部几何信息的复杂提取未必是点云分析的关键,简化的MLP网络可以在保持高效推理的同时实现高精度性能。
Pasted image 20240917093446
图 :PointMLP 中一个阶段的概述。给定输入点云,PointMLP 使用残余点 MLP 块逐步提取局部特征。在每个阶段,我们首先使用几何仿射模块变换局部点,然后分别在聚合操作之前和之后提取它们。 PointMLP 通过重复多个阶段逐步扩大感受野并建模完整的点云几何信息。

PointMLP核心思想的实现步骤

  1. Residual MLP(残差MLP)结构

    • PointMLP网络采用的是纯MLP的残差结构,而不是复杂的几何特征提取器。每一个点的局部邻居通过MLP块提取特征,特征表示通过残差连接进行增强。残差连接可以帮助网络更好地训练深层结构。
    • PointMLP通过逐层叠加MLP块,使得网络可以深入学习点云数据的层次化特征,并通过残差结构避免梯度消失问题。
  2. Geometric Affine Module(几何仿射模块)

    • 尽管PointMLP不使用复杂的局部几何特征提取器,它通过一个轻量级的几何仿射模块来增强模型的表达能力。几何仿射模块用于局部区域的点特征转换,通过对局部几何特征进行归一化,使得网络可以适应不同几何结构的输入。
    • 仿射模块的操作类似于归一化操作,它根据点的局部几何关系调整特征,使得网络可以更稳定地训练并获得更高的准确性。
  3. 点云特征的逐层聚合

    • 点云分析需要从局部的几何关系中提取全局的几何信息。PointMLP通过多层MLP块来逐步扩大感受野,逐步聚合局部特征,并最终形成全局的点云表示。
    • 通过MLP块的层次化结构,PointMLP逐步提取每个点及其邻居之间的特征,并通过全局池化(如最大池化)操作汇聚全局信息。
  4. 高效推理和训练

    • PointMLP的一个显著优势在于其高效的推理速度。由于MLP网络的操作可以通过现有的深度学习框架高度优化,PointMLP在推理速度上比传统的卷积或图网络方法要快得多,同时保持了高精度。

PointMLP的核心网络结构

PointMLP的网络结构基于残差多层感知器(Residual MLP)和轻量化几何仿射模块(Geometric Affine Module),其设计旨在简化点云的局部几何特征提取过程,并通过逐层的MLP块实现特征聚合和学习。以下是PointMLP的具体网络结构细节:

  1. 输入模块

    • 输入点云数据:假设输入的点云为 P ∈ R N × 3 P \in \mathbb{R}^{N \times 3} PRN×3,其中 N N N是点的数量,每个点有三维坐标 (x, y, z)。
    • 使用k-近邻算法 (kNN) 为每个点找到其局部邻域,这样可以为每个点建立一个局部区域(局部特征提取的基础)。
  2. 残差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个邻居点特征。

  3. 几何仿射模块(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 ϵ是防止除零的一个小值。
    • 通过这个模块,局部特征的分布被标准化,同时保留了几何信息。
  4. 层次化特征聚合(Hierarchical Feature Aggregation)

    • 在每一层中,点云的特征通过最大池化(Max Pooling)平均池化(Average Pooling) 进行聚合,这有助于逐步扩大每个点的感受野,从局部特征最终汇聚为全局特征。
    • 每个MLP块提取局部特征后,采用池化操作将特征聚合为全局表示。
  5. 全连接分类器(Fully-Connected Classifier)

    • 对全局特征使用若干层全连接层进行处理,用于最终的任务(如分类或分割)。
    • 典型的分类器由两层全连接层组成,每层后跟随激活函数ReLU和dropout层,用于防止过拟合。
    • 最后一层是softmax输出,用于分类任务。

PointMLP的层次结构示意图

  1. 输入层:点云数据 N × 3 N \times 3 N×3
  2. 特征提取阶段
    • 第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
  3. 全局池化:将所有点的特征聚合为一个全局特征向量(大小为 1 × 1024 1 \times 1024 1×1024)。
  4. 分类头:全连接分类层,用于输出类别或分割标签。

如何改进PointNet++

要利用PointMLP的思想改进PointNet++,可以通过简化PointNet++的局部几何特征提取部分,借鉴PointMLP的残差MLP结构和几何仿射模块,从而在保留模型精度的同时提高效率。具体的实现步骤包括:

  1. 替换复杂的局部几何特征提取器,使用残差MLP块。
  2. 在特征聚合过程中引入几何仿射模块,增强模型对几何结构变化的鲁棒性。
  3. 通过深度和宽度的调整,进一步提升模型性能并保持计算效率。

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++中。

  • 改进方法:在每次局部特征聚合(例如通过最大池化或平均池化)之前,添加几何仿射模块。这可以帮助特征提取过程适应局部几何结构的变化,提高模型的鲁棒性和泛化能力。

    • 实现步骤
      1. 在每一层的局部邻域特征聚合之前,计算局部区域内各点相对于中心点的几何特征(如点之间的距离)。
      2. 使用几何仿射模块将这些几何信息进行归一化,并调整局部区域内各点的特征,使它们符合更稳定的分布。
      3. 将归一化后的特征传递给MLP进行特征提取和聚合。

3. 简化层次结构,提高推理速度

PointNet++的层次化结构通过逐层聚合点云特征,在较深的网络中,这会导致较高的计算开销。PointMLP通过仅使用MLP和池化操作来简化点云处理,可以大大提高推理速度。因此,可以通过简化PointNet++的层次结构,减少每一层复杂的计算操作,参考PointMLP的架构来提高模型效率。

  • 改进方法:减少每层特征提取的复杂度,使用MLP块替代复杂的卷积或图操作,同时通过减少层数和池化次数来加速推理过程。

4. 调整网络深度与宽度的平衡

PointNet++在局部区域进行特征提取时通常会使用较浅的网络,PointMLP通过深度残差MLP块实现更深层次的特征提取。如果希望进一步提升模型性能,可以参考PointMLP的设计思路,增加网络的深度,但同时通过瓶颈结构控制网络的宽度,避免模型过大带来的计算成本。

  • 改进方法:通过增加每层的MLP块数量来加深网络,同时使用PointMLP中的瓶颈结构(在MLP块内部减少特征维度再恢复)来降低模型的参数量。

http://www.kler.cn/news/307957.html

相关文章:

  • 记录近期iOS开发几个报错及解决方案
  • 在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
  • Spring 的循环依赖
  • Git提交类型
  • 3D云渲染农场为何怎么贵?主要消耗成本介绍
  • Vue路由二(嵌套多级路由、路由query传参、路由命名、路由params传参、props配置、<router-link>的replace属性)
  • 【GIS开发小课堂】写一个高德地图巡航功能的小DEMO
  • 遗传算法及其MATLAB实现
  • Leetcode 字母异位词分组
  • Error: ENOENT: no such file or directory, uv_cwd
  • JVM-内存区域
  • 新装mysql8 并开启外网连接
  • 理解DataLoader
  • Redis——常用数据类型hash
  • 华为地图服务功能概览 -- HarmonyOS自学7
  • 【LeetCode Hot 100】169. 多数元素
  • Python快速入门 —— 第五节:接口开发
  • [项目][WebServer][ThreadPool]详细讲解
  • 猫狗识别大模型——基于python语言
  • C# WPF中实现深拷贝的五种方式
  • 商业银行零售业务数智运营探索与应用
  • BLE 协议之物理层
  • TCP核心机制
  • 数据结构(7.3_2)——平衡二叉树
  • iOS 18 适配 Xcode 16 问题
  • 线性代数(宋浩版)(4)
  • 基于Java、SpringBoot、Vue的加油站管理系统设计
  • 【Lua学习】Lua最最基础的
  • Hugging Face NLP课程学习记录 - 0. 安装transformers库 1. Transformer 模型
  • STM32+FATFS+SD卡+RTC(生成.CSV格式文件)