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)模型简介
PCM 是一种新型点云学习模型,通过引入状态空间模型Mamba ( 图表中的状态空间建模方法(c)),实现了在保持线性计算复杂度的同时进行全局建模。该模型在多个数据集上表现优于现有方法。
-
- 引入 Mamba 模型 :将 Mamba 模型应用于点云分析,通过状态空间建模来进行高效的点云处理。
-
- 全局建模与线性复杂度 :PCM 通过创新的结构设计,实现了在保持 O(N) 线性计算复杂度的同时进行全局建模。
这张图展示了三种不同的点云建模方法的对比。
-
- 局部建模 (a) Local Modeling :
- • 描述 :点云被划分为若干局部区域,每个区域独立建模。
- • 复杂度 :O(N)
- • 感知范围 :局部感知
- • 图示 :图中虚线圆圈表示局部区域,每个区域内的点独立建模。
-
- 全局建模 (b) Global Modeling :
- • 描述 :所有点之间都有联系,通过复杂的交互来实现全局建模。
- • 复杂度 :O(N^2)
- • 感知范围 :全局感知
- • 图示 :图中箭头表示不同点之间的复杂交互,所有点都互相连接。
-
- 状态空间建模 (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)为单位,表示模型的复杂程度和计算资源需求。
模型分类
-
- 传统方法 :
- • PointNet :一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分类。
- • PointCNN :利用卷积神经网络(CNN)处理点云数据,提升分类性能。
- • DGCNN :基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
- • DeepGCN :一种深度图卷积网络,增强了点云特征提取能力。
- • KPConv :利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
- • ASSANet-L :基于自注意力机制的点云处理模型。
- • SimpleView :一种简单但有效的点云处理方法,通过多视图投影实现。
- • CurveNet :利用曲线卷积网络处理点云数据。
- • PointMLP :基于多层感知器(MLP)的点云处理模型。
- • PointNet++ :PointNet 的增强版本,通过多尺度特征提取提升性能。
- • PointNeXt :PointNet 的进一步改进版本,增强了点云特征提取能力。
-
- 基于 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 点云分割性能对比
指标解释
- • ins. mIoU :Instance Mean Intersection over Union,实例平均交并比,表示模型在实例级别上的分割精度。
- • cls. mIoU :Class Mean Intersection over Union,类别平均交并比,表示模型在类别级别上的分割精度。
- • Params :Parameters,模型参数的数量,以百万(M)为单位,表示模型的复杂程度和计算资源需求。
模型分类
-
- 传统方法 :
- • PointNet :一种基于点云的深度学习模型,通过直接处理点云的每个点来进行分割。
- • DGCNN :基于动态图卷积神经网络,通过动态构建图来建模点云数据之间的关系。
- • KPConv :利用核点卷积(KPConv)进行点云数据处理,提升模型表现。
- • CurveNet :利用曲线卷积网络处理点云数据。
- • ASSANet-L :基于自注意力机制的点云处理模型。
- • Point Transformer :基于 Transformer 的点云处理模型,通过自注意力机制实现高效的点云特征提取。
- • PointMLP :基于多层感知器(MLP)的点云处理模型。
- • Stratifiedformer :一种分层结构的点云处理方法。
- • PointNet++ :PointNet 的增强版本,通过多尺度特征提取提升性能。
- • PointNeXt :PointNet 的进一步改进版本,增强了点云特征提取能力。
-
- 基于 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 在实例和类别级别的分割精度上都表现优异,既能保持高分割精度,又能控制计算复杂度,是点云分割领域的一项重要技术创新。
下面提供官方的 文档介绍、相关资源、部署教程 等,进一步支撑你的行动,以提升本文的帮助力( 按顺序 )。
- 安装指南
系统需求
- • 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 .
- 准备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
- 入门指南: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
# 训练
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
| | |
附加:点处理的常见任务
-
- 过滤和降噪 :由于传感器误差和外部干扰,点云数据通常包含噪声,需要进行预处理。
-
- 配准 :将多个点云数据对齐,以生成完整的三维模型。
-
- 分割 :将点云数据划分为不同的部分,例如识别并提取出感兴趣的对象。
-
- 特征提取和匹配 :从点云中提取特征,用于物体识别和定位。
示例代码
这里是一个使用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'
)
以上示例展示了如何加载点云数据、应用体素网格滤波器进行降采样,并保存处理后的点云。通过这些处理步骤,可以更高效地处理和分析点云数据。
往期推荐
微调LLMs:概述、方法和最佳实践(附天工Skywork-13B微调)
六位一线AI工程师总结Agent构建经验,天工SkyAgents的Agent构建实战。
1.1k Star!天工Skywork-13B:性能全面超越LLaMA2、0门槛商用、消费级显卡进行部署和推理!
参考链接:
[1]https://github.com/SkyworkAI/PointCloudMamba/
知音难求,自我修炼亦艰
抓住前沿技术的机遇,与我们一起成为创新的超级个体
(把握AIGC时代的个人力量)
点这里👇关注我,记得标星哦~
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见 ~