【论文笔记】PointMamba: A Simple State Space Model for Point Cloud Analysis

原文链接:https://arxiv.org/abs/2402.10739

1. 引言

基于Transformer的点云分析方法有二次时空复杂度,一些方法通过限制感受野降低计算。这引出了一个问题:如何设计方法实现线性复杂度并有全局感受野。

状态空间模型(SSM)作为序列建模方法,Mamba在结构状态空间模型(S4)的基础上使用时变SSM参数和硬件感知算法,实现了线性复杂度和全局感受野。但目前的Mamba较少用于视觉任务。

本文探索SSM在点云分析任务中的潜力。直接使用Mamba的性能不佳,这是因为SSM的单向建模能力(相反,自注意力是输入顺序不变的)。本文提出点状态空间模型(PointMamba),首先生成点的token序列,然后使用重排序策略以特定顺序扫描数据,使模型捕捉点云结构。最后将重排序后点的token输入Mamba编码器,进行全局建模。

实验表明,本文方法可以超过基于Transformer方法的性能,且有更少的参数和计算量。

3. 方法

3.1 准备知识

状态空间模型:状态空间模型建模了时不变(LTI)系统,使用一阶微分方程捕捉系统动态:
h ˙ ( t ) = A h ( t ) + B x ( t ) , y ( t ) = C h ( t ) + D x ( t ) . \dot h(t)=Ah(t)+Bx(t),\\y(t)=Ch(t)+Dx(t). h˙(t)=Ah(t)+Bx(t),y(t)=Ch(t)+Dx(t).

为处理离散token序列输入,需要进行离散化:
h k = A ˉ h k − 1 + B ˉ x k , y k = C ˉ h k + D ˉ x k . h_k=\bar Ah_{k-1}+\bar Bx_k,\\y_k=\bar Ch_k+\bar Dx_k. hk=Aˉhk1+Bˉxk,yk=Cˉhk+Dˉxk.

其中 A ˉ ∈ R N × N , B ˉ ∈ R N × 1 , C ˉ ∈ R 1 × N , D ˉ ∈ R \bar A\in\mathbb R^{N\times N},\bar B\in\mathbb R^{N\times 1},\bar C\in\mathbb R^{1\times N},\bar D\in\mathbb R AˉRN×N,BˉRN×1,CˉR1×N,DˉR为参数矩阵。 D ˉ \bar D Dˉ为残差连接,通常可简化或忽略。离散化需要使用时间步长 Δ \Delta Δ,在连续信号 x ( t ) x(t) x(t)进行采样,得到 x k = x ( k Δ ) x_k=x(k\Delta) xk=x(kΔ)。这使得:
A ˉ = ( I − Δ / 2 ⋅ A ) − 1 ( I + Δ / 2 ⋅ A ) , B ˉ = ( I − Δ / 2 ⋅ A ) − 1 Δ B , C ˉ = C \bar A=(I-\Delta/2\cdot A)^{-1}(I+\Delta/2\cdot A),\\\bar B=(I-\Delta/2\cdot A)^{-1}\Delta B,\\\bar C=C Aˉ=(IΔ/2A)1(I+Δ/2A),Bˉ=(IΔ/2A)1ΔB,Cˉ=C

选择性SSM B ˉ , C ˉ \bar B,\bar C Bˉ,Cˉ Δ \Delta Δ为动态、输入相关的参数,从而使得SSM为时变模型。这样能够过滤和捕捉时间相关的特征和关系,从而更精确地表达输入序列。

3.2 PointMamba

3.2.1 概述

如图所示,本文方法包括点tokenizer,重排序策略、Mamba和下游任务头。本文使用轻量化PointNet嵌入点的patch,得到点的token,然后根据几何坐标进行重排序,将序列长度变为3倍,输入Mamba。
在这里插入图片描述

3.2.2 点tokenizer

使用最远点采样(FPS)和K近邻(KNN)算法将点云分为不规则的点patch。具体来说,给定含 M M M个点的点云 I ∈ R M × 3 I\in\mathbb R^{M\times3} IRM×3,使用FPS采样 n n n个关键点,然后为每个关键点,使用KNN算法选择 k k k个最近点,得到 n n n个patch P ∈ R n × k × 3 P\in\mathbb R^{n\times k\times3} PRn×k×3。然后,求取patch中各点相对关键点的相对坐标,并使用轻量化PointNet映射到特征空间,得到点token E 0 ∈ R n × C E_0\in\mathbb R^{n\times C} E0Rn×C

3.2.3 重排序策略

由于Mamba是单向处理数据,适合1D数据;但难以处理点云这类无序数据。

本文通过特定顺序扫描点云,以捕捉点云结构。如图所示,本文分别基于点token簇中心的几何 x , y , z x,y,z x,y,z坐标进行排序并拼接,得到 E 0 ′ ∈ R 3 n × C E'_0\in\mathbb R^{3n\times C} E0R3n×C。该方法通过提供更有逻辑的几何扫描顺序,提高了Mamba的几何建模能力。
在这里插入图片描述

3.2.4 Mamba块

每个Mamba块包含层归一化(LN)、SSM、逐深度卷积和残差连接,如图1右侧所示。公式表示为:
Z l ′ = D W ( M L P ( L N ( Z l − 1 ) ) ) , Z l = M L P ( L N ( S S M ( σ ( Z l ′ ) ) ) × σ ( L N ( Z l − 1 ) ) ) + Z l − 1 Z'_l=DW(MLP(LN(Z_{l-1}))),\\Z_l=MLP(LN(SSM(\sigma(Z_l')))\times\sigma(LN(Z_{l-1})))+Z_{l-1} Zl=DW(MLP(LN(Zl1))),Zl=MLP(LN(SSM(σ(Zl)))×σ(LN(Zl1)))+Zl1

其中 Z l ∈ R 3 n × C Z_l\in\mathbb R^{3n\times C} ZlR3n×C为第 l l l块的输出, Z 0 = E 0 ′ Z_0=E'_0 Z0=E0 σ \sigma σ为SiLU激活函数。

3.2.5 预训练

本文使用PointMAE的设置进行预训练,即随机掩蔽60%的点patch,使用自编码器提取点的特征并使用预测头重建点云。

自编码器可公式化为:
T v = F e ( T v + P E ) , H v , H m = F d ( C o n c a t ( T v , T m ) ) , P m = F h ( H m ) . T_v=F_e(T_v+PE),\\H_v,H_m=F_d(Concat(T_v,T_m)),\\P_m=F_h(H_m). Tv=Fe(Tv+PE),Hv,Hm=Fd(Concat(Tv,Tm)),Pm=Fh(Hm).

其中 F e F_e Fe为编码器,以未掩蔽的token T v T_v Tv为输入; F d F_d Fd为Mamba解码器,以 F e F_e Fe的输出和掩蔽的token T m T_m Tm为输入。本文仅在编码器和解码器的第一层加入位置编码 P E PE PE F h F_h Fh为线性层,将掩蔽token H m H_m Hm投影为与掩蔽输入点形状相同的向量。使用Chamfer距离作为重建损失,以恢复掩蔽点的坐标。

4. 实验

4.1 实施细节

与ViT不同,本文不使用类别token。分类时,本文将最后一层Mamba的所有输出平均值用于分类。分割任务则将中间多层的输出合并,进行最大和均值池化得到全局特征,然后与逐点特征拼接,输入线性层预测。

4.2 与基于Transformer的方法比较

实验表明,本文方法在无预训练情况下能达到与基于Transformer的方法相当的性能,且有更少的参数和计算量。预训练和使用重排序策略均能提高性能。

此外,随着序列长度的增加,基于Transformer的方法GPU内存占用显著增加,但本文的PointMamba仅线性增长。

4.3 消融研究

重排序策略:比较不进行重排序(1倍序列长度)、进行重排序(3倍序列长度)和双向重排序(即将重排序结果逆序后与重排序结果拼接,6倍序列长度)。实验表明,基于Transformer的方法在序列长度增加时,性能略微下降;重排序策略能提高单向建模Mamba在点云中的适应能力;进一步增加序列长度能进一步提高性能,但为平衡计算量与性能,本文选择3倍序列长度;尽管如此,由于本文方法的线性复杂度,计算量增长也远小于基于Transformer的方法。

分类token的分析:实验表明,不使用类别token能达到最好的分类性能。

4.4 局限性

预训练没有考虑Mamba的单向建模特点;重排序需要将序列长度变为3倍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/307378.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axios网络请求

Axios网络请求主要用于前后端请求,前后端分离时前端需要通过url请求后端的接口,并且处理后端传过来的数据。 Axios官网教程 安装 npm install axios在main.js导入 import axios from axios;//声明一个http变量!!&#xff01…

Vue 移动端(H5)项目怎么实现页面缓存(即列表页面进入详情返回后列表页面缓存且还原页面滚动条位置)keep-alive缓存及清除keep-alive缓存

一、需求 产品要求:Vue移动端项目进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要缓存并且还原页面滚动条位置 二、实现思路 1、使用Vue中的keep-alive组件,keep-alive提供了路由缓存功能 2、因为我项…

VS2022MSDN(离线帮助文档)的下载安装与使用

哈喽,你好啊,我是雷工! 现如今最重要的能力莫过于自学能力,在工控项目或编程中遇到问题,想快速解决的最快的方法莫过于查看手册。 MSDN是VS中的一个帮助手册,可以用来查找各种函数,查看各种API文档,对初学者来说是个不可缺少的手册,非常方便。 01在线查看 当我们在联…

针式打印机左边距偏离太多,通过边距无法调节

如果如下已经设置正确的打印边距,还是打印异常,偏离太多的话 需要在打印机属性里面把纸张左边距设置为默认值,即0

Web前端-HTML

黑马程序员JavaWeb开发教程 一、初识web前端 1、 标准也称为网页标准,由一系列的标准组成,大部分由W3C负责指定 2、 三个部分组成 HTML:负责网页的结构(页面元素和内容)CSS:负责网页的表现(页…

jenkins+gitlab配置

汉化 1、安装Localization: Chinese (Simplified)插件 (此处我已安装) (安装完成后重启jenkins服务即可实现汉化) 新增用户权限配置 1、安装插件 Role-based Authorization Strategy 2、全局安全配置 3、配置角色权限 4、新建…

再谈C语言——理解指针(一)

内存和地址 内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩, 如果想找到你,就得挨个房…

C++11的更新介绍(新的类功能、可变参数模板)

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 新的类功能 默认成员函数&…

蓝桥杯嵌入式(G431)备赛笔记——PWM+LCD+按键

目录 题目要求(真题): cubeMX配置: 小试牛刀: Keil代码: 效果演示: 题目要求(真题): 使用第十一届第二场真题,练习PWM波部分的代码&#xff0c…

C++——StackQueue

目录 一Stack 1介绍 2接口 3模拟实现 4栈的oj题 二Queue 1介绍 2接口 3模拟实现 三容器适配器 1再谈栈和队列 四优先级队列 1接口 ​编辑 2仿函数 五dequeue的简单介绍 一Stack 1介绍 先来看看库中对栈的介绍: 1. stack是一种容器适配器&#x…

【数据结构与算法】:10道链表经典OJ

目录 1. 移除链表元素2. 反转链表2.1反转指针法2.2 头插法 3. 合并两个有序链表4. 分隔链表5. 环形链表6. 链表的中间节点7. 链表中倒数第K个节点8. 相交链表9. 环形链表的约瑟夫问题10. 链表的回文结构 1. 移除链表元素 思路1:遍历原链表,将 val 所在的…

JavaScript函数式编程

函数式编程 课程介绍 为什么要学习函数编程以及什么是函数式编程函数式编程的特性(纯函数、柯里化、函数组合等)函数式编程的应用场景函数式编程库Lodash 为什么要学习函数式编程 函数式编程是非常古老的一个概念,早于第一台计算机的诞生, 函数式编程…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念,特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习,模型可以更好地处理未知的情况和新任务,减少对大量标注数据的依赖,提高模型的…

心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发

心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发 支持SAAS、支持独立加密、支持独立开源、价格不同。 自带题库数据,后台一键初始,支持自己上传题目 心理测评 微信公众号微信小程序抖音小程序可打包APP 支持单题、跳跃题、计分题、因子题、…

OSPF数据报文格式

OSPF协议是跨层封装的协议,跨四层封装,直接将应用层的数据封装在网络层协议后面,IP协议包中协议号字段对应的数值为——89 OSPF的头部信息: ——所有数据包公有的信息 版本:OSPF版本 在IPV4中一般使用OSPFV2&#xf…

第十三届蓝桥杯真题:x进制减法,数组切分,gcd,青蛙过河

目录 x进制减法 数组切分 gcd 青蛙过河 x进制减法 其实就是一道观察规律的题。你发现如果a这个位置上的数x&#xff0c;b这个位置上的数是y&#xff0c;那么此位置至少是max(x,y)1进制。一定要把位置找对啊 #include <bits/stdc.h> using namespace std; typedef l…

easyui combobox下拉框组件输入检索全模糊查询

前引&#xff1a; easyui下拉组件&#xff08;combobox&#xff09;&#xff0c;输入检索下拉内容&#xff0c;是默认的右模糊匹配&#xff0c;而且不支持选择。因业务要求需要做成全模糊查询&#xff0c;目前网上搜索有两种方案&#xff1a; 1.修改easyui源码&#xff0c;这个…

K8S node节点配置

1.开始操作之前要先关闭防火墙&#xff0c;SELinux&#xff0c;swap分区 关闭防火墙 sudo systemctl stop firewalld关闭SELinux sudo setenforce 0 # 临时关闭 sudo sed -i s/^SELINUXenforcing$/SELINUXper…

java快速幂算法

快速幂算法 参考视频(参考五角七边up大佬&#xff09; 幂运算的介绍 幂运算是指将一个数自身乘以自身多次的运算&#xff0c;其表达式为 a n a^n an&#xff0c;其中 a a a 是底数&#xff0c; n n n 是指数。 快速幂解释 快速幂算法是一种用于快速计算幂运算的算法&…

可视化后台管理系统-空框架

1.下载element-plus npm install element-plus --save 注意&#xff1a;element-ui不适配vue3&#xff0c;官方已将vue3版本的更新为element-plus 2.main.js配置 // 全局样式 import ./assets/main.cssimport { createApp } from vue import { createPinia } from piniaimpo…