【点云处理之论文狂读前沿版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

相关文章

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件