【点云处理之论文狂读前沿版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实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路