Aitrainee | 公众号:AI进修生
🌟Point Cloud Mamba(PCM)是一种新型点云学习模型,通过引入 Mamba 到点云分析中,实现了在保持线性计算复杂度的同时执行全局建模。该模型在多个数据集上表现优于现有方法。
https://github.com/SkyworkAI/PointCloudMamba
Hi,这里是Aitrainee,欢迎阅读本期新文章。
点云是一种数据结构,用于表示三维空间中的物体或场景。它由许多分布在三维空间中的点组成,每个点都有其三维坐标(x, y, z),有时还包括其他属性(如颜色、密度等)。
点云应用
机器人导航和避障:机器人可以使用点云数据来感知环境,进行路径规划和障碍物检测。
计算机视觉:用于三维重建和物体识别。
自动驾驶:激光雷达(LiDAR)生成的点云数据帮助车辆感知周围环境。
虚拟现实和增强现实:用于创建逼真的三维环境。
建筑和工程:用于三维测绘和结构分析。
医疗成像:用于三维扫描和诊断
局部建模方法将点云划分为若干小区域,每个区域独立建模。这种方法计算复杂度低(O(N)),但只能处理局部信息,缺乏全局视角。
全局建模方法考虑点云中所有点之间的关系,通过复杂的交互实现全局建模。这种方法能够更全面地理解三维物体,但计算复杂度高(O(N^2)),不适用于大规模点云数据。
PCM 是一种新型点云学习模型,通过引入状态空间模型Mamba ( 图表中的状态空间建模方法(c)),实现了在保持线性计算复杂度的同时进行全局建模。该模型在多个数据集上表现优于现有方法。
这张图展示了三种不同的点云建模方法的对比。
PCM 模型可以理解为一种聪明的“侦察员”系统,能够在不增加额外计算负担的情况下,从整体上理解和处理点云数据。这种方法不仅能快速处理大量点云,还能保持高精度的全局建模效果。
通过这些技术创新,PCM 模型在多个数据集上的表现均优于现有的点云分析方法,展示了其在实际应用中的巨大潜力。
描述:这张图片展示了 PCM 模型在 ShapeNetPart 数据集上的一些点云分割结果。ShapeNetPart 是一个常用于点云分割任务的数据集,包含了多个类别的对象,每个对象由不同部分组成。
内容分析:
意义:通过这张图,我们可以看到 PCM 模型在点云分割任务中的强大能力。不同颜色的点云部分展示了模型能够准确地将不同部分区分开来,证明了 PCM 模型在处理复杂对象时的高效性和准确性。
下面是各个点云分类模型在 ScanObjectNN 和 ModelNet40 数据集上的性能表现对比。
PCM 项目通过引入状态空间模型(Mamba),实现了高效的点云处理。与传统方法和基于 Transformer 的方法相比,PCM 在多个数据集上表现优异,既能保持高准确率,又能控制计算复杂度,是点云分类领域的一项重要技术创新。
PCM 项目通过引入状态空间模型(Mamba),实现了高效的点云分割。与传统方法和其他基于 Transformer 的方法相比,PCM 在实例和类别级别的分割精度上都表现优异,既能保持高分割精度,又能控制计算复杂度,是点云分割领域的一项重要技术创新。
下面提供官方的文档介绍、相关资源、部署教程等,进一步支撑你的行动,以提升本文的帮助力(按顺序)。
# 以下 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 .
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
mkdir -p data/ModelNet40Ply2048
cd data/ModelNet40Ply2048
wget https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip
将数据集整理如下:
data
|--- ModelNet40Ply2048
|--- modelnet40_ply_hdf5_2048
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
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的使用方法。
预训练的权重可以在 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 | - | - |
# 训练
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
# 训练
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
# 训练
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
# 训练
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
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')
以上示例展示了如何加载点云数据、应用体素网格滤波器进行降采样,并保存处理后的点云。通过这些处理步骤,可以更高效地处理和分析点云数据。
参考链接: [1]https://github.com/SkyworkAI/PointCloudMamba/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有