从零部署点云实例分割项目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是一个可调用对象,接受一个样本列表作为输入,并返回一个合并后的批次数据。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Yolov8模型本身不支持实例分割,因为它是一个目标检测模型,主要用于检测图像中的物体,并输出它们的位置和类别。如果您需要实现实例分割,可以考虑使用其他模型,如Mask R-CNN或U-Net。 在Mask R-CNN中,可以通过在检测框上应用分割模型来生成每个物体的掩码。而在U-Net中,可以直接输出图像的掩码。 如果您已经有了图像中每个物体的检测框,可以使用各种图像处理技术来生成掩码。例如,可以使用边缘检测算法或分水岭算法来分割物体并生成掩码。 ### 回答2: YOLOv8是一种目标检测模型,用于检测图像中的目标位置和类别。实例分割是一种计算机视觉任务,旨在将图像中的每个像素与特定的目标实例相关联。因此,将YOLOv8与实例分割结合起来可以生成每个目标实例的遮罩,也称为“mask”。 要生成实例分割mask,可以按照以下步骤进行操作: 第一步是目标检测。使用YOLOv8模型对输入图像进行目标检测,识别出图像中的目标位置和类别。YOLOv8基于卷积神经网络,可以高效地检测出不同尺寸和类别的目标。 第二步是生成初始mask。根据目标检测结果,可以为每个检测到的目标实例生成初始的二进制mask。这可以通过在与目标实例相关的像素位置上设置像素值为1,其他位置设置为0来实现。 第三步是mask细化。由于初始mask可能存在一些噪点或不连续的部分,需要对其进行细化处理。可以使用图像处理技术,例如腐蚀和膨胀操作,以去除小的噪点或填充不连续的区域,使得mask更加精确。 第四步是后处理。对于复杂的场景或目标,仅使用目标检测结果生成的mask可能不够准确。可以利用图像分割算法,例如语义分割或实例分割网络,对mask进行进一步优化和修正。 综上所述,利用YOLOv8实例分割生成mask的过程包括目标检测、初始mask生成、mask细化和后处理等步骤。通过这些步骤,我们可以从图像中提取出每个目标实例的准确mask,以便于进一步的图像分析和理解。 ### 回答3: YOLOv8是一种目标检测的算法,可以用于实例分割任务。实例分割是将图像中的每个目标实例分割出来,并为每个实例生成一个mask。YOLOv8在目标检测的基础上通过对每个目标的像素属性进行分析,生成对应的mask。 YOLOv8首先使用深度神经网络对图像进行目标检测,识别出图像中的目标物体及其位置信息。然后,对于每个目标,利用像素属性分析的方法生成一个mask。 生成mask的过程主要包括两个步骤。首先,根据目标的位置信息,将目标所在区域的像素提取出来。然后,对于提取出的像素,根据其像素属性进行分类,判定其属于目标的哪个部分,并赋予相应的mask值。 具体而言,YOLOv8通常使用语义分割的方法对目标进行分割。这意味着,它会训练一个神经网络,使其能够对不同目标部分进行分类,例如背景、前景等。然后,在目标检测的基础上,将检测到的每个目标区域的像素输入到语义分割网络中,得到每个像素所属的类别,进而生成相应的mask。 通过使用YOLOv8进行实例分割,可以实现对图像中目标的准确分割,并生成相应的mask。这对于许多应用领域,如图像分割、计算机视觉等,具有重要的意义和应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值