前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PCM:一种新型点云学习模型、引入状态空间模型Mamba高效全局建模(天工AI开源)

PCM:一种新型点云学习模型、引入状态空间模型Mamba高效全局建模(天工AI开源)

作者头像
AI进修生
发布于 2024-12-02 10:55:57
发布于 2024-12-02 10:55:57
59400
代码可运行
举报
文章被收录于专栏:AI进修生AI进修生
运行总次数:0
代码可运行

Aitrainee | 公众号:AI进修生

🌟Point Cloud Mamba(PCM)是一种新型点云学习模型,通过引入 Mamba 到点云分析中,实现了在保持线性计算复杂度的同时执行全局建模。该模型在多个数据集上表现优于现有方法。

https://github.com/SkyworkAI/PointCloudMamba

Hi,这里是Aitrainee,欢迎阅读本期新文章。

点云是一种数据结构,用于表示三维空间中的物体或场景。它由许多分布在三维空间中的点组成,每个点都有其三维坐标(x, y, z),有时还包括其他属性(如颜色、密度等)。

点云应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
机器人导航和避障:机器人可以使用点云数据来感知环境,进行路径规划和障碍物检测。
计算机视觉:用于三维重建和物体识别。
自动驾驶:激光雷达(LiDAR)生成的点云数据帮助车辆感知周围环境。
虚拟现实和增强现实:用于创建逼真的三维环境。
建筑和工程:用于三维测绘和结构分析。
医疗成像:用于三维扫描和诊断

传统的点云分析方法

局部建模

局部建模方法将点云划分为若干小区域,每个区域独立建模。这种方法计算复杂度低(O(N)),但只能处理局部信息,缺乏全局视角。

全局建模

全局建模方法考虑点云中所有点之间的关系,通过复杂的交互实现全局建模。这种方法能够更全面地理解三维物体,但计算复杂度高(O(N^2)),不适用于大规模点云数据。

技术创新:Point Cloud Mamba(PCM)模型简介

PCM 是一种新型点云学习模型,通过引入状态空间模型Mamba ( 图表中的状态空间建模方法(c)),实现了在保持线性计算复杂度的同时进行全局建模。该模型在多个数据集上表现优于现有方法。

  1. 1. 引入 Mamba 模型:将 Mamba 模型应用于点云分析,通过状态空间建模来进行高效的点云处理。
  2. 2. 全局建模与线性复杂度:PCM 通过创新的结构设计,实现了在保持 O(N) 线性计算复杂度的同时进行全局建模。

这张图展示了三种不同的点云建模方法的对比。

  1. 1. 局部建模 (a) Local Modeling
    • 描述:点云被划分为若干局部区域,每个区域独立建模。
    • 复杂度:O(N)
    • 感知范围:局部感知
    • 图示:图中虚线圆圈表示局部区域,每个区域内的点独立建模。
  2. 2. 全局建模 (b) Global Modeling
    • 描述:所有点之间都有联系,通过复杂的交互来实现全局建模。
    • 复杂度:O(N^2)
    • 感知范围:全局感知
    • 图示:图中箭头表示不同点之间的复杂交互,所有点都互相连接。
  3. 3. 状态空间建模 (c) State Space Modeling
    • 描述:通过状态空间模型实现全局感知,同时保持计算复杂度为线性。
    • 复杂度:O(N)
    • 感知范围:全局感知
    • 图示:图中垂直箭头表示状态空间模型中的全局建模,同时仅需线性计算复杂度。

通俗解释

PCM 模型可以理解为一种聪明的“侦察员”系统,能够在不增加额外计算负担的情况下,从整体上理解和处理点云数据。这种方法不仅能快速处理大量点云,还能保持高精度的全局建模效果。

对比说明

  • 传统方法:局部建模方法虽然计算复杂度低,但只能处理局部信息,缺乏全局视角;全局建模方法虽然效果好,但计算复杂度高,不适用于大规模点云数据。
  • PCM 模型:通过状态空间建模,PCM 实现了全局建模的效果,同时保持了与局部建模相同的线性计算复杂度,使其在性能和效率上都有显著提升。

通过这些技术创新,PCM 模型在多个数据集上的表现均优于现有的点云分析方法,展示了其在实际应用中的巨大潜力。

在ShapeNetPart点云分割任务中效果

描述:这张图片展示了 PCM 模型在 ShapeNetPart 数据集上的一些点云分割结果。ShapeNetPart 是一个常用于点云分割任务的数据集,包含了多个类别的对象,每个对象由不同部分组成。

内容分析

  • • 图中的每个对象都由不同颜色的点表示,不同颜色代表了该对象的不同部分。
  • • 从左到右依次是:
    • • 一辆车:车身、车窗、轮子等部分被不同颜色区分开来。
    • • 两把椅子:椅子的座位、靠背和支架等部分被不同颜色区分开来。
    • • 一把刀:刀刃和刀柄被不同颜色区分开来。
    • • 一把吉他:吉他的琴身和琴颈被不同颜色区分开来。
    • • 一辆摩托车:摩托车的车轮、车架、座椅等部分被不同颜色区分开来。

意义:通过这张图,我们可以看到 PCM 模型在点云分割任务中的强大能力。不同颜色的点云部分展示了模型能够准确地将不同部分区分开来,证明了 PCM 模型在处理复杂对象时的高效性和准确性。

点云分类性能对比

下面是各个点云分类模型在 ScanObjectNN 和 ModelNet40 数据集上的性能表现对比。

指标解释
  • OA (%):Overall Accuracy,总体准确率,表示模型在所有测试样本上的分类准确率。
  • mAcc (%):Mean Accuracy,平均准确率,表示模型在每一类上的分类准确率的平均值。
  • Params (M):Parameters,模型参数的数量,以百万(M)为单位,表示模型的复杂程度和计算资源需求。
模型分类
  1. 1. 传统方法
    • PointNet:一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分类。
    • PointCNN:利用卷积神经网络(CNN)处理点云数据,提升分类性能。
    • DGCNN:基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
    • DeepGCN:一种深度图卷积网络,增强了点云特征提取能力。
    • KPConv:利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
    • ASSANet-L:基于自注意力机制的点云处理模型。
    • SimpleView:一种简单但有效的点云处理方法,通过多视图投影实现。
    • CurveNet:利用曲线卷积网络处理点云数据。
    • PointMLP:基于多层感知器(MLP)的点云处理模型。
    • PointNet++:PointNet 的增强版本,通过多尺度特征提取提升性能。
    • PointNeXt:PointNet 的进一步改进版本,增强了点云特征提取能力。
  2. 2. 基于 Transformer 的方法
    • Point Cloud Transformer:基于 Transformer 的点云处理模型,通过自注意力机制实现高效的点云特征提取。
    • Point-BERT:利用 BERT 模型进行点云数据处理。
    • Point-MAE:基于 MAE 的点云处理模型。
  3. 3. 基于 Mamba 的方法:
    • PointMamba:一种基于 Mamba 模型的点云处理方法。
    • PCM-Tiny:我们提出的 PCM 模型的小型版本,计算复杂度低,性能优异。
    • PCM:我们提出的完整 PCM 模型,通过引入状态空间模型,实现高效的点云处理。
性能分析
  • ScanObjectNN 数据集
    • • PCM 模型(88.1% OA,86.6% mAcc)在总体准确率和平均准确率上都表现优异,超过了其他大多数模型。
    • • PCM-Tiny 模型也有不错的表现(86.9% OA,85.0% mAcc),在保持较低参数量的情况下,性能表现良好。
  • ModelNet40 数据集
    • • PCM 模型(93.4% OA,90.7% mAcc)在总体准确率和平均准确率上表现优异,尤其在平均准确率上超过了大多数其他模型。
    • • PCM-Tiny 模型(93.1% OA,90.6% mAcc)同样表现出色,证明了其在点云分类任务中的有效性。
  • 参数量对比
    • • PCM 模型(34.2 M 参数)在保持较高准确率的同时,参数量适中,适合应用于计算资源较丰富的场景。
    • • PCM-Tiny 模型(6.9 M 参数)在参数量较低的情况下,仍能保持较高的分类准确率,适合计算资源有限的场景。

总结

PCM 项目通过引入状态空间模型(Mamba),实现了高效的点云处理。与传统方法和基于 Transformer 的方法相比,PCM 在多个数据集上表现优异,既能保持高准确率,又能控制计算复杂度,是点云分类领域的一项重要技术创新。

3-D 点云分割性能对比

指标解释
  • ins. mIoU:Instance Mean Intersection over Union,实例平均交并比,表示模型在实例级别上的分割精度。
  • cls. mIoU:Class Mean Intersection over Union,类别平均交并比,表示模型在类别级别上的分割精度。
  • Params:Parameters,模型参数的数量,以百万(M)为单位,表示模型的复杂程度和计算资源需求。
模型分类
  1. 1. 传统方法
    • PointNet:一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分割。
    • DGCNN:基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
    • KPConv:利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
    • CurveNet:利用曲线卷积网络处理点云数据。
    • ASSANet-L:基于自注意力机制的点云处理模型。
    • Point Transformer:基于 Transformer 的点云处理模型,通过自注意力机制实现高效的点云特征提取。
    • PointMLP:基于多层感知器(MLP)的点云处理模型。
    • Stratifiedformer:一种分层结构的点云处理方法。
    • PointNet++:PointNet 的增强版本,通过多尺度特征提取提升性能。
    • PointNeXt:PointNet 的进一步改进版本,增强了点云特征提取能力。
  2. 2. 基于 Mamba 的方法:
    • PointMamba:一种基于 Mamba 模型的点云处理方法。
    • PCM-Tiny:我们提出的 PCM 模型的小型版本,计算复杂度低,性能优异。
    • PCM:我们提出的完整 PCM 模型,通过引入状态空间模型,实现高效的点云处理。
性能分析
  • 实例级别分割性能(ins. mIoU)
    • • PCM 模型(87.0% ± 0.2)在实例平均交并比上表现优异,超过了大多数其他模型。
    • • PCM-Tiny 模型(86.9%)也有不错的表现,特别是在参数量较低的情况下,仍能保持较高的分割精度。
  • 类别级别分割性能(cls. mIoU)
    • • PCM 模型(85.3% ± 0.1)在类别平均交并比上表现出色,尤其在准确性上超过了大多数其他模型。
    • • PCM-Tiny 模型(85.0%)同样表现优异,证明了其在点云分割任务中的有效性。
  • 参数量对比
    • • PCM 模型(40.6 M 参数)在保持较高分割精度的同时,参数量较大,适合应用于计算资源较丰富的场景。
    • • PCM-Tiny 模型(8.8 M 参数)在参数量较低的情况下,仍能保持较高的分割精度,适合计算资源有限的场景。

总结

PCM 项目通过引入状态空间模型(Mamba),实现了高效的点云分割。与传统方法和其他基于 Transformer 的方法相比,PCM 在实例和类别级别的分割精度上都表现优异,既能保持高分割精度,又能控制计算复杂度,是点云分割领域的一项重要技术创新。

下面提供官方的文档介绍、相关资源、部署教程等,进一步支撑你的行动,以提升本文的帮助力(按顺序)。

1. 安装指南

系统需求

  • Python 3.10
  • • PyTorch
  • • CUDA 11.x

示例 conda 环境配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 以下 4 行仅适用于使用 slurm 的机器。如有需要,请取消注释。
export TORCH_CUDA_ARCH_LIST="6.1;6.2;7.0;7.5;8.0"# a100: 8.0; v100: 7.0; 2080ti: 7.5; titan xp: 6.1
conda create --name pcm python=3.10-y
conda activate pcm

# 安装 PyTorch
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1--index-url https://download.pytorch.org/whl/cu118
pip install torch-scatter -f https://data.pyg.org/whl/torch-2.1.1%2Bcu118.html
pip install -r requirements.txt

# 安装 cpp 扩展和 pointnet++ 库
cd openpoints/cpp/pointnet2_batch
python setup.py install
cd../

# 安装 grid_subsampling 库,仅在对 S3DIS_sphere 感兴趣时需要
cd subsampling
python setup.py build_ext --inplace
cd..

# 安装 point transformer 库,仅在对 Point Transformer 和 Stratified Transformer 感兴趣时需要
cd pointops/
python setup.py install
cd..

# 以下步骤为可选操作,仅在对重建任务如 completion 感兴趣时需要
cd chamfer_dist
python setup.py install --user
cd../emd
python setup.py install --user
cd../../../

# 安装 mamba
cd openpoints/models/PCM/causal-conv1d/
pip install -e .

cd../mamba
pip install -e .

2. 准备PCM数据集

ScanObjectNN

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p data/ScanObjectNN
cd data/ScanObjectNN
wget http://hkust-vgd.ust.hk/scanobjectnn/h5_files.zip

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p data/ScanObjectNN
cd data/ScanObjectNN
gdown https://drive.google.com/uc?id=1iM3mhMJ_N0x5pytcP831l3ZFwbLmbwzi
tar -xvf ScanObjectNN.tar

结构

将数据集整理如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data
 |--- ScanObjectNN
            |--- h5_files
                    |--- main_split
                            |--- training_objectdataset_augmentedrot_scale75.h5
                            |--- test_objectdataset_augmentedrot_scale75.h5

ModelNet40

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p data/ModelNet40Ply2048
cd data/ModelNet40Ply2048
wget https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip

结构

将数据集整理如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data
 |--- ModelNet40Ply2048
            |--- modelnet40_ply_hdf5_2048

ShapeNetPart

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd data && mkdir ShapeNetPart && cd ShapeNetPart
gdown https://drive.google.com/uc?id=1W3SEE-dY1sxvlECcOwWSDYemwHEUbJIS
tar -xvf shapenetcore_partanno_segmentation_benchmark_v0_normal.tar

结构

将数据集整理如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data
 |---ShapeNetPart
|--- shapenetcore_partanno_segmentation_benchmark_v0_normal
|--- train_test_split
|--- shuffled_train_file_list.json
|---...
|---02691156
|---1a04e3eab45ca15dd86060f189eb133.txt
|---...
|---02773838
|--- synsetoffset2category.txt
|--- processed
|--- trainval_2048_fps.pkl
|--- test_2048_fps.pkl

S3DIS

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p data/S3DIS/
cd data/S3DIS
gdown https://drive.google.com/uc?id=1MX3ZCnwqyRztG1vFRiHkKTz68ZJeHS4Y
tar -xvf s3disfull.tar

结构

将数据集整理如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data
 |--- S3DIS
|--- s3disfull
|--- raw
|---Area_6_pantry_1.npy
|---...
|--- processed
|--- s3dis_val_area5_0.040.pkl 

3. 入门指南:PCM

本文档简要介绍了PCM的使用方法。

预训练权重

预训练的权重可以在 Hugging Face 和 百度网盘 上获取。

模型

OA (ScanObjectNN)

mAcc (ScanObjectNN)

OA (ModelNet40)

mAcc (ModelNet40)

Ins. mIoU (ShapeNetPart)

Cls. mIoU (ShapeNetPart)

mIou (S3DIS)

OA (S3DIS)

PCM

88.0

86.4

93.1

91.2

87.3

85.6

62.8

88.7

PCM-Tiny

87.1

85.2

93.3

90.5

87.1

85.2

-

-

训练和测试

ScanObjectNN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 训练
CUDA_VISIBLE_DEVICES=0 python examples/classification/main.py --cfg cfgs/scanobjectnn/PCM.yaml
# 测试
CUDA_VISIBLE_DEVICES=0 python examples/classification/main.py --cfg cfgs/scanobjectnn/PCM.yaml  mode=test --pretrained_path /path/to/PCM.pth

ModelNet40

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 训练
CUDA_VISIBLE_DEVICES=0 python examples/classification/main.py --cfg cfgs/modelnet40ply2048/PCM.yaml
# 测试
CUDA_VISIBLE_DEVICES=0 python examples/classification/main.py --cfg cfgs/modelnet40ply2048/PCM.yaml mode=test --pretrained_path /path/to/PCM.pth

ShapeNetPart

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 训练
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/shapenetpart/main.py --cfg cfgs/shapenetpart/PCM.yaml
# 测试
CUDA_VISIBLE_DEVICES=0 python examples/shapenetpart/main.py --cfg cfgs/shapenetpart/PCM.yaml mode=test --pretrained_path /path/to/PCM.pth

S3DIS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 训练
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python examples/segmentation/main.py --cfg cfgs/s3dis/PCM.yaml
# 测试
CUDA_VISIBLE_DEVICES=0 bash script/main_segmentation.sh cfgs/s3dis/PCM.yaml wandb.use_wandb=False mode=test --pretrained_path /path/to/PCM.pth

参数、GFlops和吞吐量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CUDA_VISIBLE_DEVICES=0 python examples/profile.py --cfg cfgs/scanobjectnn/PCM.yaml batch_size=128 num_points=1024 timing=True flops=True

附加:点处理的常见任务

  1. 1. 过滤和降噪:由于传感器误差和外部干扰,点云数据通常包含噪声,需要进行预处理。
  2. 2. 配准:将多个点云数据对齐,以生成完整的三维模型。
  3. 3. 分割:将点云数据划分为不同的部分,例如识别并提取出感兴趣的对象。
  4. 4. 特征提取和匹配:从点云中提取特征,用于物体识别和定位。

示例代码

这里是一个使用Python和PCL(Point Cloud Library)来处理点云的简单示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pcl

# 加载点云数据
cloud = pcl.load('example.pcd')

# 创建滤波器对象
fil = cloud.make_voxel_grid_filter()
fil.set_leaf_size(0.01,0.01,0.01)

# 应用滤波器
cloud_filtered = fil.filter()

# 保存过滤后的点云
pcl.save(cloud_filtered,'filtered_example.pcd')

以上示例展示了如何加载点云数据、应用体素网格滤波器进行降采样,并保存处理后的点云。通过这些处理步骤,可以更高效地处理和分析点云数据。

参考链接: [1]https://github.com/SkyworkAI/PointCloudMamba/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI进修生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 传统的点云分析方法
  • 技术创新:Point Cloud Mamba(PCM)模型简介
  • 通俗解释
  • 对比说明
  • 点云分类性能对比
  • 总结
  • 3-D 点云分割性能对比
  • 总结
  • 1. 安装指南
    • 系统需求
    • 示例 conda 环境配置
  • 2. 准备PCM数据集
    • ScanObjectNN
      • 下载
      • 结构
    • ModelNet40
      • 下载
      • 结构
    • ShapeNetPart
      • 下载
      • 结构
    • S3DIS
      • 下载
      • 结构
  • 3. 入门指南:PCM
    • 预训练权重
    • 训练和测试
      • ScanObjectNN
      • ModelNet40
      • ShapeNetPart
      • S3DIS
    • 参数、GFlops和吞吐量
      • 附加:点处理的常见任务
      • 示例代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档