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

技术

Aitrainee | 公众号:AI进修生

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

https://github.com/SkyworkAI/PointCloudMamba

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

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

点云 应用


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

传统的点云分析方法

局部建模

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

全局建模

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

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

picture.image

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

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

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

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

通俗解释

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

对比说明

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

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

在ShapeNetPart点云分割任务中效果

picture.image

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

内容分析

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

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

点云分类性能对比

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

picture.image

指标解释

  • OA (%): Overall Accuracy,总体准确率,表示模型在所有测试样本上的分类准确率。
  • mAcc (%): Mean Accuracy,平均准确率,表示模型在每一类上的分类准确率的平均值。
  • Params (M): Parameters,模型参数的数量,以百万(M)为单位,表示模型的复杂程度和计算资源需求。

模型分类

    1. 传统方法
  • PointNet :一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分类。
  • PointCNN :利用卷积神经网络(CNN)处理点云数据,提升分类性能。
  • DGCNN :基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
  • DeepGCN :一种深度图卷积网络,增强了点云特征提取能力。
  • KPConv :利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
  • ASSANet-L :基于自注意力机制的点云处理模型。
  • SimpleView :一种简单但有效的点云处理方法,通过多视图投影实现。
  • CurveNet :利用曲线卷积网络处理点云数据。
  • PointMLP :基于多层感知器(MLP)的点云处理模型。
  • PointNet++ :PointNet 的增强版本,通过多尺度特征提取提升性能。
  • PointNeXt :PointNet 的进一步改进版本,增强了点云特征提取能力。
    1. 基于 Transformer 的方法
  • Point Cloud Transformer :基于 Transformer 的点云处理模型,通过自注意力机制实现高效的点云特征提取。
  • Point-BERT :利用 BERT 模型进行点云数据处理。
  • Point-MAE :基于 MAE 的点云处理模型。

基于 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 点云分割性能对比

picture.image

指标解释

  • ins. mIoU :Instance Mean Intersection over Union,实例平均交并比,表示模型在实例级别上的分割精度。
  • cls. mIoU :Class Mean Intersection over Union,类别平均交并比,表示模型在类别级别上的分割精度。
  • Params :Parameters,模型参数的数量,以百万(M)为单位,表示模型的复杂程度和计算资源需求。

模型分类

    1. 传统方法
  • PointNet :一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分割。
  • DGCNN :基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
  • KPConv :利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
  • CurveNet :利用曲线卷积网络处理点云数据。
  • ASSANet-L :基于自注意力机制的点云处理模型。
  • Point Transformer :基于 Transformer 的点云处理模型,通过自注意力机制实现高效的点云特征提取。
  • PointMLP :基于多层感知器(MLP)的点云处理模型。
  • Stratifiedformer :一种分层结构的点云处理方法。
  • PointNet++ :PointNet 的增强版本,通过多尺度特征提取提升性能。
  • PointNeXt :PointNet 的进一步改进版本,增强了点云特征提取能力。
    1. 基于 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 在实例和类别级别的分割精度上都表现优异,既能保持高分割精度,又能控制计算复杂度,是点云分割领域的一项重要技术创新。

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

picture.image

  1. 安装指南

系统需求

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

示例 conda 环境配置


      
          

        # 以下 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 .
      
    
  1. 准备PCM数据集 ===========

ScanObjectNN

下载


      
          

        mkdir -p data/ScanObjectNN
          

        cd data/ScanObjectNN
          

        wget http://hkust-vgd.ust.hk/scanobjectnn/h5\_files.zip
      
    

或者


      
          

        mkdir -p data/ScanObjectNN
          

        cd data/ScanObjectNN
          

        gdown https://drive.google.com/uc?id=1iM3mhMJ\_N0x5pytcP831l3ZFwbLmbwzi
          

        tar -xvf ScanObjectNN.tar
      
    

结构

将数据集整理如下:


      
          

        data
          

         |--- ScanObjectNN
          

                    |--- h5\_files
          

                            |--- main\_split
          

                                    |--- training\_objectdataset\_augmentedrot\_scale75.h5
          

                                    |--- test\_objectdataset\_augmentedrot\_scale75.h5
      
    

ModelNet40

下载


      
          

        mkdir -p data/ModelNet40Ply2048
          

        cd data/ModelNet40Ply2048
          

        wget https://shapenet.cs.stanford.edu/media/modelnet40\_normal\_resampled.zip
      
    

结构

将数据集整理如下:


      
          

        data
          

         |--- ModelNet40Ply2048
          

                    |--- modelnet40\_ply\_hdf5\_2048
      
    

ShapeNetPart

下载


      
          

        cd data && mkdir ShapeNetPart && cd ShapeNetPart
          

        gdown https://drive.google.com/uc?id=1W3SEE-dY1sxvlECcOwWSDYemwHEUbJIS
          

        tar -xvf shapenetcore\_partanno\_segmentation\_benchmark\_v0\_normal.tar
      
    

结构

将数据集整理如下:


      
          

        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

下载


      
          

        mkdir -p data/S3DIS/
          

        cd data/S3DIS
          

        gdown https://drive.google.com/uc?id=1MX3ZCnwqyRztG1vFRiHkKTz68ZJeHS4Y
          

        tar -xvf s3disfull.tar
      
    

结构

将数据集整理如下:


      
          

        data
          

         |--- S3DIS
          

        |--- s3disfull
          

        |--- raw
          

        |---Area\_6\_pantry\_1.npy
          

        |---...
          

        |--- processed
          

        |--- s3dis\_val\_area5\_0.040.pkl 
      
    
  1. 入门指南:PCM ===========

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

预训练权重

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

模型OA (ScanObjectNN)mAcc (ScanObjectNN)OA (ModelNet40)mAcc (ModelNet40)Ins. mIoU (ShapeNetPart)Cls. mIoU (ShapeNetPart)mIou (S3DIS)OA (S3DIS)
PCM88.086.493.191.287.385.662.888.7
PCM-Tiny87.185.293.390.587.185.2--

训练和测试

ScanObjectNN


      
          

        # 训练
          

        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


      
          

        # 训练
          

        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


      
          

        # 训练
          

        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


      
          

        # 训练
          

        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和吞吐量


      
          

        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. 配准 :将多个点云数据对齐,以生成完整的三维模型。
    1. 分割 :将点云数据划分为不同的部分,例如识别并提取出感兴趣的对象。
    1. 特征提取和匹配 :从点云中提取特征,用于物体识别和定位。

示例代码

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


      
          

        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'
        )
      
    

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

picture.image

往期推荐

OpenAI封锁中国API?天工一键搬家API实操指南

微调LLMs:概述、方法和最佳实践(附天工Skywork-13B微调)

天工AI 全网最全使用说明书,看完震惊了

六位一线AI工程师总结Agent构建经验,天工SkyAgents的Agent构建实战。

1.1k Star!天工Skywork-13B:性能全面超越LLaMA2、0门槛商用、消费级显卡进行部署和推理!

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

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

picture.image

点这里👇关注我,记得标星哦~

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~

picture.image

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论