一、下载
论文地址:arxiv.org/pdf/2210.03105v2.pdf
二、环境配置
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
是一个可调用对象,接受一个样本列表作为输入,并返回一个合并后的批次数据。