从零部署点云实例分割项目Mask3D

一、下载

论文地址:arxiv.org/pdf/2210.03105v2.pdf

Github地址:GitHub - JonasSchult/Mask3D: Mask3D predicts accurate 3D semantic instances achieving state-of-the-art on ScanNet, ScanNet200, S3DIS and STPLS3D.

二、环境配置

export TORCH_CUDA_ARCH_LIST="6.0 6.1 6.2 7.0 7.2 7.5 8.0 8.6"

conda create -n mask3d python=3.10.9
conda activate mask3d

pip3 install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip3 install torch-scatter -f https://data.pyg.org/whl/torch-1.12.1+cu113.html
pip3 install 'git+https://github.com/facebookresearch/detectron2.git@710e7795d0eeadf9def0e7ef957eea13532e34cf' --no-deps

pip install pytorch-lightning==1.7.2
pip install tensorboard
pip install loguru
pip install natsort
pip install fire
pip install scikit-learn
pip install scikit-image
pip install numpy==1.23.5            # 高于24会有np.int的不兼容
pip install hydra-core==1.0.5        # 安装了高版本的之后,训练的时候会报错
pip install pillow==9.5.0            # 如已有较高版本,需要降版本
pip install torchmetrics==0.11.4     # 如已有较高版本,需要降版本
pip install matplotlib
pip install pyviz3d
pip install python-dotenv
pip install plyfile
pip install trimesh
pip install wandb==0.15.0
pip install pyyaml==5.4.1
pip install fvcore
pip install cloudpickle
pip install pycocotools
pip install albumentations==1.2.1
pip install -U git+https://github.com/kumuji/volumentations
pip install volumentations --no-build-isolation
pip uninstall pip uninstall importlib-metadata        # 不卸载后面会一直报错…


# MinkowskiEngine
cd third_party
git clone --recursive "https://github.com/NVIDIA/MinkowskiEngine"
cd MinkowskiEngine
git checkout 02fc608bea4c0549b0a7b00ca1bf15dee4a0b228
python setup.py install --force_cuda --blas=openblas

# pointnet2
cd ..
cd pointnet2
python setup.py install
cd ../..



三、数据准备

下载 Stanford3dDataset_v1.2数据集,网盘可参考

S3DIS场景点云数据集_s3dis/stanford3ddataset_v1.2_aligned_version-CSDN博客

mkdir data

# 将下载的数据集放在data目录下

unzip Stanford3dDataset_v1.2

python -m datasets.preprocessing.s3dis_preprocessing preprocess \
--data_dir="./data/Stanford3dDataset_v1.2" \
--save_dir="./data/processed/s3dis"

预处理后数据解析】:

 processed/s3dis下

Area_1/conferenceRoom_1.npy文件:arr.shape为(N, 12),N为conferenceRoom_1这个房间的点总个数,12分别是points.coord三位,points.color三位,points.normal三位(且均为1),填充一位(代码中提到add segment id as addtional feature),points.semantic_label(语义标签)一位,points.instance_label(实例标签)一位,共12位。

instance_gt/Area_1/conferenceRoom_1.txt文件:arr.shape为(N, 1),N为conferenceRoom_1这个房间的点总个数,存放着这个房间所有点的标签值(计算方式=(语义标签+1)*1000 + 实例标签 +1,例如3001=(2+1)*1000 + 2 + 1)

Area_1_database.yaml文件:存放着Area_1区域下每一个场景房间的信息,例如该场景的颜色均值、颜色方差、点云个数、点云路径、场景名称等。

Area_1_color_mean_std.yaml文件 :存放着Area_1区域下颜色均值、颜色方差。

Area_1_database.yaml_color_mean_std.yaml文件:同上。

label_database.yaml文件:存放着所有语义标签的信息,包含标签号,颜色,名称,是否有效。

train_Area_1_database.yaml文件:存放着除了Area_1之外的几个区域下的每个场景房间的信息。(不太明白这样设计的意义何在…)

四、代码分析

Dataset——SemanticSegmentationDataset

Dataloader——torch.utils.data.DataLoader

Model——Mask3D

Optimizer——torch.optim.AdamW

Scheduler——torch.optim.lr_scheduler.OneCycleLR

Loss——SetCriterion

五、训练流程分析

1.命令

python main_instance_segmentation.py \
  general.project_name="s3dis" \
  general.experiment_name="area5_from_scratch" \
  data.batch_size=1 \
  data/datasets=s3dis \
  general.num_targets=14 \
  data.num_labels=13 \
  trainer.max_epochs=1001 \
  general.area=5 \
  trainer.check_val_every_n_epoch=10

2.流程剖析

 数据经由SemanticSegmentationDataset类的__getitem__之后,会经过train_dataloader的collate_fn——本项目为VoxelizeCollate类

注意:collate_fn参数用于指定如何将多个样本合并成一个批次数据。collate_fn是一个可调用对象,接受一个样本列表作为输入,并返回一个合并后的批次数据。

### 主流的图像或数据分割模型 #### 深度学习方法 在深度学习领域,点云分割任务逐渐转向利用图结构的方法,这类技术能够更好地捕捉点云数据的空间关系和局部特性[^2]。以下是几种主流的深度学习分割模型: 1. **U-Net** U-Net 是一种经典的卷积神经网络架构,最初用于生物医学图像分割。它通过编码器-解码器结构实现特征提取与上采样恢复细节的功能,在语义分割任务中表现优异[^3]。 2. **Mask R-CNN** Mask R-CNN 基于 Faster R-CNN 扩展而来,增加了针对像素级掩模预测的一个分支,从而实现了实例级别的精确分割效果。该模型适用于需要区分不同对象个体的应用场合[^1]。 3. **PointNet 和 PointNet++** 这些专门设计用来处理无序集合形式输入(比如点云)的网络模型,采用分层机制逐步聚合局部区域的信息直至全局描述符构建完成,非常适合解决诸如分类、部件检测以及语义/实例分割等问题。 4. **DeepLab 系列 (V1, V2, V3+, etc.)** DeepLab 利用了空洞卷积(也叫扩张卷积),可以在不增加计算量的情况下增大感受野范围;同时还引入了多尺度上下文融合策略来提升边界保持能力和整体性能指标得分情况良好。 5. **SegFormer** SegFormer 结合变压器 Transformer 技术优势提出了轻量化且高效的端到端解决方案,特别适合移动设备部署需求下的实时性要求较高的应用场景下使用。 #### 传统方法 对于传统的图像或数据分割算法而言,则更多依靠统计学原理或者特定假设前提下来定义规则来进行操作: 1. **K-Means 聚类** K-means 方法是一种简单有效的聚类方式之一,通过对颜色空间内的距离度量寻找最佳中心位置进而划分簇群达到初步分离目的。 2. **GrabCut** GrabCut 使用图形切割理论自动调整前景背景估计结果直到收敛为止,提供了一种交互式的图像抠图手段。 3. **Watershed Transform** 分水岭变换模仿地理地貌形成过程模拟水流路径最终汇集成湖泊盆地等现象应用于二值化后的形态学分析当中有助于细化轮廓边缘线条走向趋势变化规律研究探讨等方面工作开展实施推进落实执行到位程度考量评估标准体系建立完善健全长效机制建设方面发挥积极作用贡献力量体现价值所在之处得以彰显出来显得尤为重要关键环节不可忽视遗漏掉任何细枝末节部分均需引起高度重视关注对待认真负责态度行事作风严谨细致入微考虑周全妥善安排处置得当合理合法合规依据法律法规政策文件精神实质内涵要义核心要点精髓精华提炼总结归纳概括综合统筹规划协调配合协作联动共同努力奋斗拼搏进取向上向善向前发展进步成长壮大成熟稳定可持续长远健康发展态势局面形势格局规模层次水平高度宽度广度厚度深度影响作用意义非凡卓越杰出优秀出色超凡脱俗鹤立鸡群脱颖而出独占鳌头名列前茅首屈一指举世闻名享誉全球声名远播家喻户晓妇孺皆知人人知晓众所周知尽人皆知家喻户 ```python import numpy as np from sklearn.cluster import KMeans def kmeans_segmentation(image, n_clusters=5): reshaped_image = image.reshape((image.shape[0]*image.shape[1], 3)) model = KMeans(n_clusters=n_clusters) labels = model.fit_predict(reshaped_image) segmented_image = labels.reshape((image.shape[0], image.shape[1])) return segmented_image ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值