【文献笔记】PointMLP

写在前面,笔者在阅读该篇文献时,发现当时网络上没有很好的该文献的阅读笔记
故生此拙笔之作。。。

ICLR 2022 ;Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP Framework

论文地址:Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP Framework (arxiv.org)

代码地址:PointMLP-Pytorch


通篇作者在向外传达:我的方法 PointMLP纯纯的清新脱俗,化繁为简


1 当前的现状

作者总结:

  • 大家挤破头的在局部特征提取上做文章,导致提取器(local geometric extractors)越来越复杂,性能越来越拉跨(虽然精度有所提升)
  • 对局部几何特征提取的研究工作,将近饱和。(意思目前的提取器已经能很好的提取特征了)
  • 当前的3D point cloud applications(生产应用)中,更倾向于使用PointNet++等(简洁轻量),很少使用复杂的提取器
  • 且作者认为点云的深度任务活在图像的阴影下。(意思是只会照搬隔壁图像的新方法,如transformer)

作者认为,

  • 研究更为详细的局部几何信息可能不是点云分析的关键,要重新审视点云分析中的简洁设计理念;
  • 本文的 PointMLP 遵循 PointNet++ 的设计理念,但探索了更简单但更深入的网络架构;
  • 本文没有精心设计的局部几何提取操作,纯深度分层 MLP 架构也能够表现出令人满意的性能甚至更好的结果;
  • 本文没有刻意追随视觉社区的趋势,而是追求一种本质上简单且经验强大的点云分析架构;

show 秀

在这里插入图片描述

有一说一,确实在速度和精度上表现SOTA


2 网络结构

文章通过一个简单的前馈残差 MLP 网络(称为 PointMLP)来学习点云表示,该网络分层聚合 MLP 提取的局部特征,并放弃使用精细的局部几何提取器。

详细框架如下图所示:

在这里插入图片描述

图 :PointMLP 。给定输入点云,PointMLP 使用残差点 MLP 块 Residual Point Block 逐步提取局部特征。在每个阶段,作者首先使用几何仿射模块 Geometric Affine Module 变换局部点,然后分别在聚合操作之前和之后提取它们(几何特征)。 PointMLP 通过重复多个阶段逐步扩大感受野并模拟完整的点云几何信息。


2.1 简单回顾已有的网络

作者简要介绍了三个代表性的网络结构(不做重点展开)

  • PointNet++:作者认为最具开创性,其核算子可以表示为:

在这里插入图片描述

其中:A表示聚合过程(PointNet++中使用MaxPooling);$\Phi $ 表示特征计算过程(PointNet++中使用MLP);f_ij表示第i个采样点的第j个邻居点的特征

  • RSCNN

  • Point Transformer


2.2 本文使用的 MLP

在这里插入图片描述

PointMLP的关键模块(即ResP Block)可以用公式表示为:

在这里插入图片描述

式中:

  • Φpre (·)Φpos (·) 是残差点 MLP 块:共享的 Φpre (·) 旨在从局部区域学习共享权重,Φpos (·) 用于提取深度聚合特征。

其映射函数可以写成一系列同质的残差 MLP 块:MLP(x) + x,其中 MLP 由 FC、归一化和激活层组合而成(重复两次)。

  • A(·) 特征聚合使用最大池化操作。

在分层和深度网络中,需要将上述阶段重复执行(堆叠) s 次。尽管 PointMLP 的框架很简洁,但很有效:

  1. 由于PointMLP只利用了MLPs,自然对置换具有不变性,完美契合了点云的特性
  2. 通过结合残差连接,PointMLP 可以很容易地扩展到几十层,从而产生深度特征表示
  3. 由于没有包含复杂的提取器并且主要操作只是高度优化的前馈 MLP,即使引入更多层,PointMLP 仍然可以有效地执行

在实验中,重复执行4次(s=4)阶段,使用KNN(k=24)查找领域点


2.3 几何仿射模块

geometric affine module

在这里插入图片描述在这里插入图片描述

**该模块解决的问题:**由于点云的密度不均匀和几何结构不确定性,对于不同的局部区域,需要使用不同的提取器,用以提高性能(精度)

表示为:

在这里插入图片描述

式中:

  • α ∈ Rd 和 β ∈ Rd 是可学习的参数
  • ⊙表示哈达玛积(Hadamard product)
  • $\varepsilon $ = 1e−5 是数值稳定性的一个小数
  • σ 是一个标量,描述了所有本地组和通道的特征偏差

通过这样做,作者将局部点转换为正态分布,同时保持原始几何属性


3 轻量版本 PointMLP-elite

为进一步提高效率(速度更快,更轻量级),作者引入 elite 版本,大大提升了训练测试速度,降低了内存要求,虽然精度比PointMLP略微差一点,但也好过大多数

是如何是实现的?

  • 将中间 FC 层的通道数减少 r 倍。该方法将残差MLP的参数从2d2减少至(2d2)/r,默认设置r = 4
  • 略微调整了网络架构
    • 减少MLP 块
    • 减少嵌入维数

此外,作者还尝试了分组FC操作,但是实验发现并没有提高性能,就放弃了。


4 实验分析

  1. 在多个基准数据集上进行对比试验
  • 物体分类实验表现不俗,达到SOTA😀,论文中列出了详细对比数据
  • 部件分割文章中只给了效果图,没有详细列出对比数据,估计一般😥
  • 语义分割文章压根没提😭
  1. 消融实验
  • 网络深度(24、40、56层)
  • 几何仿射模块
  • 组件(Φpre、Φpos、Affine)
  • Res.,残差块

该实验部分细节建议直接看文章中的原图。


5 总结

在本文中,作者提出了一种简单而强大的架构,名为 PointMLP,用于点云分析。 PointMLP 背后的关键见解是复杂的局部几何提取器可能对性能并不重要。

作者首先用简单的残差 MLP 表示局部点,因为它们是置换不变且简单的。然后作者引入了一个轻量级的几何仿射模块来提高性能。

为了进一步提高效率,作者还引入了一个轻量级网络 PointMLP-elite。

实验结果表明,PointMLP 在简单性和效率方面优于不同基准上的相关工作。

作者希望这个新颖的想法能够激发社区重新思考点云中的网络设计和局部几何。


>>> 完 <<<
### PointMLP 的简介 PointMLP 是一种基于简单残差多层感知机 (Residual MLP) 框架设计的点云处理网络结构。它重新思考了点云中的网络设计和局部几何特性,旨在通过更简单的架构实现高效的点云特征提取[^1]。 其官方 PyTorch 实现可以在以下链接找到: [PointMLP-PyTorch](https://gitcode.com/gh_mirrors/po/pointMLP-pytorch) --- ### PointMLP 的使用方法 #### 安装依赖项 为了运行 PointMLP 项目,需要安装必要的 Python 库以及 CUDA 和 cuDNN 支持。以下是常见的依赖列表: ```bash pip install torch torchvision torchaudio pip install numpy tqdm tensorboard opencv-python-headless ``` 如果遇到兼容性问题,可以参考相关文档调整特定版本号[^4]。 #### 数据准备 PointMLP 主要用于点云数据集上的分类任务。常用的公开数据集包括 ModelNet40、ShapeNet 等。下载并解压这些数据集到指定目录后,可以通过修改配置文件来加载它们。 例如,在 `data` 文件夹下放置已预处理好的点云数据,并设置路径参数如下所示: ```python # 配置数据路径 DATA_PATH = './data/modelnet40_normal_resampled/' BATCH_SIZE = 32 NUM_WORKERS = 8 ``` #### 训练过程 启动训练脚本前,请确认 GPU 是否可用并通过命令行传递超参选项。典型调用方式如下: ```bash CUDA_VISIBLE_DEVICES=0 python train.py --model pointmlp_partseg_ssg --batch_size 16 --epoch 250 --lr 0.001 --gpu 0 ``` 上述指令指定了使用的模型变体 (`pointmlp_partseg_ssg`) 及其他关键参数如批次大小、最大轮次数与初始学习率等。 #### 测试评估 当完成一轮完整的训练周期之后,可利用保存下来的权重文件执行推理操作并对结果进行验证分析。 ```bash python test.py --checkpoint_path ./checkpoints/best_model.pth --test_area Area_5 ``` 这里假设我们希望针对某个具体区域(如 S3DIS 中的第五区)开展性能评测工作,则需提供对应的检查点位置作为输入之一。 --- ### PointMLP 的 GitHub 资源汇总 - **官方仓库**: 提供核心算法实现及其配套工具链支持。地址位于 [GitCode Mirror](https://gitcode.com/gh_mirrors/po/pointMLP-pytorch)。 - **扩展资源**: 如果你还想探索更多关于三维点云编码器的内容,不妨查看由 Jina AI 维护的一个轻量级插件集合——Executor 3D Encoder[@GitHub](https://github.com/jina-ai/executor-3d-encoder),其中可能包含部分相似功能模块[^3]。 - **综合框架推荐**: 对于新手来说,另一个值得尝试的选择是由 Yan Xiang 开发维护的一套全面解决方案——Pointnet_Pointnet2_pytorch[@GitHub](https://github.com/yanx27/Pointnet_Pointnet2_pytorch),涵盖了从基础入门到高级应用的各种场景需求[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值