源码链接
我用的python3.8,pytorch2.1.2,cuda11.8
#创建名为pointnet2的虚拟环境
conda create -n pointnet2 python=3.8 -y
#激活环境
conda activate pointnet2
#创建名为pointnet2的虚拟环境
conda create -n pointnet2 python=3.8 -y
#激活环境
conda activate pointnet2
#安装torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia
数据集下载地址
选这个Stanford3dDataset v1.2 Aligned Version.zip
解压到data/s3dis/Stanford3dDataset_v1.2_Aligned_Version
需要自己新建(这里我当初疑惑了好久)
cd data_utils
python collect_indoor3d_data.py
执行操作
此时在预处理数据
执行完以后发现自己只生成了stanford_indoor3d但是里面没有任何东西
这时候去自己的Stanford3dDataset_v1.2_Aligned_Version文件中将所有的.npy格式的文件剪切到stanford_indoor3d中
在data中和s3dis中各放入一个stanford_indoor3d文件
这个操作可以避免以后出麻烦
出问题的小地方
接下来,如果自己的numpy这个库比较新,那代码中np.float会在后来的操作中报错
需要把代码所有文件的np.float改成float
注意文件中如果是np.float32这种不需要改
训练模型
cd ..
需要把train_semseg.py文件中num_works-0. linux不需要
#开始训练
python train_semseg.py --model pointnet2_sem_seg --test_area 5 --log_dir pointnet2_sem_seg
注意这步,训练的只有数据集中的Area_5,大概花了我十几个小时
-
python train_semseg.py
:这条部分指示使用Python来执行名为train_semseg.py
的脚本文件,该脚本应包含了训练模型的主要代码逻辑。 -
--model pointnet2_sem_seg
:此选项指定了要使用的模型类型为pointnet2_sem_seg
,意味着将利用PointNet++模型来进行语义分割任务。PointNet++是一个在点云数据上特别有效的深度学习模型,适合处理3D数据的分类、分割等任务。 -
--test_area 1
:这个选项设置了测试区域或者数据集的某个特定部分,值为1
。在不同的场景中,这可能意味着选择数据集中特定的一个区域来进行验证或测试,有助于评估模型在特定子集上的性能。 -
--log_dir pointnet2_sem_seg
:最后这部分指定了日志文件的保存目录为pointnet2_sem_seg
。训练过程中,模型的训练日志、性能指标、可能的可视化结果等信息会被保存到这个目录下,便于后续分析和调试。
训练结束后
python test_semseg.py --log_dir pointnet2_sem_seg --test_area 5 --visual
这步也只是把上一步中的5区域给可视化,生成.obj文件
可使用meshlab查看
groundtruth
pred