【点云处理之论文狂读前沿版1】——Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP

本文主要是介绍【点云处理之论文狂读前沿版1】——Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

重新审视点云处理中的网络设计和局部几何结构——一个简单的残差MLP框架

  • 1.摘要
  • 2.引言
  • 2.相关工作
  • 3.方法
    • 3.1 Revisiting point-based methods
    • 3.2 PointMLP的框架结构
    • 3.3 Geometric Affine Module
    • 3.4 计算复杂度和Elite版
  • 4.实验
    • 4.1 Shape classification on ModelNet
    • 4.2 Shape classification on ScanObjectNN
    • 4.3 消融实验
    • 4.4 Part segmentation
    • 5.结论
  • 6. 附录
    • 6.1 PointMLP detail
    • 6.2 Experiment setting detail
    • 6.3 More detialed ablation studies
    • 6.4 PointMLP depth
  • 论文写作亮点

1.摘要

  1. 点云的局部几何结构可能并不是点云处理的关键。
  2. 提出了一个基于纯残差的MLP网络——PointMLP。
  3. 网络不考虑点云的局部信息,结构简单,推理速度更快,性能更好。
  4. 搭配一个轻量版的几何放射模块(geometric affine module),效果更佳。
  5. 代码地址:https://github.com/ma-xu/pointMLP-pytorch

2.引言

  1. 点云的特性:无序性、不规则性、稀疏性、敏感性
  2. 点云的应用:分类、语义分割、目标检测
  3. 之前对于点云的局部几何结构提取已经做的够好了,我们应该反过头来看看局部几何结构到底有没有必要考虑,网络上有没有什么可以改变的?
  4. 本文只用基于残差的MLP网络,其他啥也不用。
  5. 如果再加上local geometric affine module,自适应地对特征进行变换,那就更好啦。
  6. 我们提出的PointMLP又简单,效果又好,不信你看下图。

2.相关工作

点云分析

  1. Voxels & image
  2. Original point cloud

局部几何结构

  1. convolution-based methods (PointConv/2019, PAConv/2021)
  2. graph-based methods (DGCNN/2019, 3D-GCN/2021)
  3. attention-based methods(PCT, Point Transformer)

适用于点云的深度网络框架

就在最近,由于简洁MLP结构的高效和可扩展性,受到了很多地关注,因此,我们不再盲目跟风。

3.方法

feed-forward residual MLP network + geometric affine module

3.1 Revisiting point-based methods

给定一组点云 P = { p i ∣ i = 1 , ⋯ , N } ∈ R N × 3 \mathcal{P}=\left\{p_{i} \mid i=1, \cdots, N\right\} \in \mathbb{R}^{N \times 3} P={pii=1,,N}RN×3 N N N 表示点云的数量, ( x , y , z ) (x, y, z) (x,y,z)表示笛卡尔坐标系下的坐标。

简单介绍下PointNet++

简单介绍下RSCNN

简单介绍下Point Transformer

3.2 PointMLP的框架结构

PointML一个阶段的整体架构 给定一组点云, PointMLP使用residual point MLP blocks逐步地抽取局部信息。在每个阶段中,首先使用geometric affine module,然后分别在聚合操作之前和之后提取它们。通过连续使用多个阶段,PointMLP不断地增大感受野并对完整的点云几何结构信息进行建模。

整个结构用数学语言表示为:

g i = Φ pos  ( A ( Φ pre  ( f i , j ) , ∣ j = 1 , ⋯ , K ) ) g_{i}=\Phi_{\text {pos }}\left(\mathcal{A}\left(\Phi_{\text {pre }}\left(f_{i, j}\right), \mid j=1, \cdots, K\right)\right) gi=Φpos (A(Φpre (fi,j),j=1,,K))

其中 Φ pre  ( ⋅ ) \Phi_{\text {pre }}(\cdot) Φpre () Φ pos  ( ⋅ ) \Phi_{\text {pos }}(\cdot) Φpos ()是residual point MLP blocks:

  • Φ pre  ( ⋅ ) \Phi_{\text {pre }}(\cdot) Φpre ()用于从局部区域学习共享权值
  • Φ pos  ( ⋅ ) \Phi_{\text {pos }}(\cdot) Φpos ()用于提取深度聚合特征

具体而言,残差块里包含了许多一样的MLP组合(MLP ( x ) + x (x)+x (x)+x):MLP(FC)+normalization+ activation layers(重复两次)

A ( ⋅ ) \mathcal{A}(\cdot) A() 表示max-pooling

上式只表示一个阶段,可以重复 s s s次。

PointMLP有着如下优点:

  1. MLP结构使得处理点云时具有序列不变性。
  2. 残差的引入可以使得网络构造的更深。
  3. 没有复杂的特征提取器,主要的就是feed-forward MLP

在没有提前声明的情况下, s = 4 s=4 s=4,2个 Φ pre  ( ⋅ ) \Phi_{\text {pre }}(\cdot) Φpre (),2个 Φ pos  ( ⋅ ) \Phi_{\text {pos }}(\cdot) Φpos ()。选择k-nearest neighbors算法提取邻居, K = 24 K=24 K=24

3.3 Geometric Affine Module

由于点云的局部区域就具有稀疏和不规则性,只使用间的MLP网络的性能并不好。不同局部区域的多个几何结构可能需要不同的提取设备,但共享的残留MLP难以实现这一点。

{ f i , j } j = 1 , ⋯ , k ∈ \left\{f_{i, j}\right\}_{j=1, \cdots, k} \in {fi,j}j=1,,k R k × d \mathbb{R}^{k \times d} Rk×d表示 f i ∈ R d f_{i} \in \mathbb{R}^{d} fiRd 的邻居,有 k k k个点,每个邻居点 f i , j f_{i, j} fi,j 是一个 d d d维向量。将局部相邻的点变换为:

{ f i , j } = α ⊙ { f i , j } − f i σ + ϵ + β , σ = 1 k × n × d ∑ i = 1 n ∑ j = 1 k ( f i , j − f i ) 2 , \left\{f_{i, j}\right\}=\alpha \odot \frac{\left\{f_{i, j}\right\}-f_{i}}{\sigma+\epsilon}+\beta, \quad \sigma=\sqrt{\frac{1}{k \times n \times d} \sum_{i=1}^{n} \sum_{j=1}^{k}\left(f_{i, j}-f_{i}\right)^{2}}, {fi,j}=ασ+ϵ{fi,j}fi+β,σ=k×n×d1i=1nj=1k(fi,jfi)2 ,

其中 α ∈ R d \alpha \in \mathbb{R}^{d} αRd β ∈ R d \beta \in \mathbb{R}^{d} βRd是可学习的参数, ⊙ \odot 表示两个矩阵元素间相乘, ϵ = \epsilon= ϵ= 1 e − 5 1 e^{-5} 1e5是一个为了数值稳定性的数。 σ \sigma σ 是系数,描述了所有局部和通道的特征差异,并保留了原始的几何特征。

3.4 计算复杂度和Elite版

全连接层参数很多,复杂度也很高,提出了bottleneck结构。我们选择将中间FC层的通道数减少 r r r倍,并增加通道数作为原始特征映射。

在PointMLP-elite中, r = 4 r=4 r=4

4.实验

4.1 Shape classification on ModelNet

ModelNet40:40个类别,9843个训练模型,2468个测试模型。
Metric:class-average accuracy (mAcc)和overall accuracy (OA)

训练了300个epochs

模型的复杂度不能直接反应效能。

4.2 Shape classification on ScanObjectNN

ScanObjectNN:真实世界中的重建模型,它包含15000个对象,这些对象分为15个类,在现实世界中有2902个唯一的对象实例。数据集中存在噪声、遮挡,选择最难的PB_T50_RS。

e p o c h s = 200 , b a t c h = 32 epochs=200, batch=32 epochs=200,batch=32,训练了四次,并将标准差记录在下表中。

类别整体精度和平均精度很相近,证明方法很鲁棒。

4.3 消融实验

网络深度

  1. 层数越多,效果不一定越好,但是标准差会变小
  2. 无论哪种深度,效果都比现在最优的效果好

Geometric Affine Module

  1. the geometric affine module将局部输入特征映射为normal分布,更容易训练
  2. the geometric affine module通过局部质心和方差的通道距离对局部几何信息进行隐式编码,弥补了几何信息的不足。
  3. 结果更鲁棒。

成份消融实验

Loss landscape

4.4 Part segmentation

ShapeNetPart:16个类别,16,881个形状,每个物体的部分为2-6个。

5.结论

  1. residual MLPs
  2. geometric affine module
  3. PointMLP-elite

6. 附录

6.1 PointMLP detail

PointMLP 和 PointMLP-elite有着以下的区别:

  1. 减少了residual point MLP blocks的数量
  2. Embedding的维度从64减少到32
  3. 通过引入bottleneck结构,参数减少了4倍

6.2 Experiment setting detail

ModelNet40

PyTorch + Tesla V100 GPU
epochs =300
batchsize = 32
synchronous SGD
Nesterov momentum = 0.9
weight decay = 0.0002
initial learning rate = 0.1
input point = 1024

ScanObjectNN

epochs =200
其他参数同上

ShapeNetPart
input point = 2048
range = [0.67, 1.5]
其他参数同PointNet一样

6.3 More detialed ablation studies

Skip connection

试着在PointNet++上加了两个skip connection,在ModelNet40上的分类精度变为92.7%。

Pre-MLP block vs. Pos-MLP block

去掉Pos-MLP block的话效果会变得不好,表明

  1. Pos-MLP block还是很重要的
  2. 增加Pre-MLP block的数量没有必要

Geometric Affine Module Applications

将Geometric Affine Module用到PointNet++上,在ModelNet40上的分类精度提高到了93.3%。

将Geometric Affine Module用到DGCNN上的效果反而变差了。

6.4 PointMLP depth

网络深度计算公式:

L = 1 + ∑ i = 1 4 ( 1 + 2 × Pre ⁡ i + 2 × Pos ⁡ i ) + 3 L=1+\sum_{i=1}^{4}\left(1+2 \times \operatorname{Pre}_{i}+2 \times \operatorname{Pos}_{i}\right)+3 L=1+i=14(1+2×Prei+2×Posi)+3

Pre ⁡ i \operatorname{Pre}_{i} Prei表示 Φ pre  \Phi_{\text {pre }} Φpre 的重复数量, Pos ⁡ i \operatorname{Pos}_{i} Posi表示 Φ pos  \Phi_{\text {pos }} Φpos 的重复数量,不算Batch Normalization和activation functions,每个块里有两个MLP层,最终的网络深度配置如下图所示。

论文写作亮点

  1. unfavorable latency 不利的因素
  2. Lately 最近
  3. endow 赋予… v.
  4. gratifying 令人满足的 adj.
  5. saturate 简单的、紧凑的 adj.
  6. eschew 避免 v.
  7. regime 体系 n.
  8. seamlessly 无限接近地 adv.
  9. flesh out 使…丰满,充实 v.
  10. Unless explicitly stated
  11. outbeat 胜过 v.

这篇关于【点云处理之论文狂读前沿版1】——Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204743

相关文章

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

Spring Cloud GateWay搭建全过程

《SpringCloudGateWay搭建全过程》:本文主要介绍SpringCloudGateWay搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Spring Cloud GateWay搭建1.搭建注册中心1.1添加依赖1.2 配置文件及启动类1.3 测

Python中CSV文件处理全攻略

《Python中CSV文件处理全攻略》在数据处理和存储领域,CSV格式凭借其简单高效的特性,成为了电子表格和数据库中常用的文件格式,Python的csv模块为操作CSV文件提供了强大的支持,本文将深入... 目录一、CSV 格式简介二、csv模块核心内容(一)模块函数(二)模块类(三)模块常量(四)模块异常

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B