当前位置:   article > 正文

Win10系统下复现Pointnet++(pytorch)_pointnet++ windows上复现

pointnet++ windows上复现

目录

        本博客主要讲了如何使用公共数据集在pointnet++网络下实现分类网络,部件分割网络以及语义分割网络,这三个实验在win10下已经全部验证跑通,只要跟着博文同样可以无痛跑通,另文末附已下载好的数据集。

1.pointnet++源码下载与环境配置

1.1源码下载

1.2环境配置

2.点云分类模型

2.1Modelnet40数据集下载

2.2模型训练

3.ShapeNet数据集下载并训练点云部件分割模型

3.1shapeNet数据集下载

4.S3dis数据集下载并训练点云语义分割模型

4.总结


1.pointnet++源码下载与环境配置

1.1源码下载

        直接贴出链接,下载后使用vsCode打开,开始配置环境。yanx27/Pointnet_Pointnet2_pytorch: PointNet and PointNet++ implemented by pytorch (pure python) and on ModelNet, ShapeNet and S3DIS. (github.com)icon-default.png?t=N7T8https://github.com/yanx27/Pointnet_Pointnet2_pytorch

1.2环境配置

        参考该项目的环境进行配置:Python3.7,PyTorch1.6,torchvision0.7.0(一般都是比torch版本高0.1或者0.1.1,当然可以自己去查去验证一下)。

        但是由于我电脑的显卡是4060,所以安装高一点版本的CUDA,我选择Python3.8,PyTorch1.12,torchvision0.13.0

        第一,下载torch和torchvison文件:我习惯是下载torch.whl和torchvision.whl文件来安装的,可以在下面的链接下载(这里演示的是下载Python3.7,PyTorch1.6):download.pytorch.org/whl/torch_stable.htmlicon-default.png?t=N7T8https://download.pytorch.org/whl/torch_stable.html        下载对应的torch和torvison版本,如下所示:

         第二,创建Anaconda虚拟环境并激活环境   

  1. #创建名为pointnet2的虚拟环境
  2. conda create -n pointnet2 python=3.8 -y
  3. #激活环境
  4. conda activate pointnet2

         第三,安装torch和torchvison:下载的文件可以直接拖到命令框中,变成路径名,pip install安装即可。

  1. #安装torch
  2. pip install E:\edgeDownLoad\torch-1.12.0+cu116-cp38-cp38-win_amd64.whl
  3. #安装torchvison
  4. pip install E:\edgeDownLoad\torchvision-0.13.0+cu116-cp38-cp38-win_amd64.whl

        第四,安装其他依赖:需要安装tqdm,用来显示进度条的。

2.点云分类模型

2.1Modelnet40数据集下载

        数据集下载地址:全部下载下来就行了,总共有1.6个G。

https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip

         数据集位置:然后数据全部放在data/modelnet40_normal_resampled/路径下面,如下所示:里面的数据全部是以txt格式进行存储的,共有40个类别,还包含着划分的训练集和验证集文件配置。

        数据可视化:可以任意打开一个txt文件查看,每个点包含六列信息,分别代表X,Y,Z坐标以及其对应法向量,至于其类别标签其实就是文件名,或者可以理解为文件夹上。

2.2模型训练

        参考作者的ReadMe文件已经说明的很清楚了,训练时候主要分为是否利用法向量信息,如果使用法向量信息则使用--use_normals。 

  1. ## e.g., pointnet2_ssg without normal features
  2. python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg
  3. python test_classification.py --log_dir pointnet2_cls_ssg
  4. ## e.g., pointnet2_ssg with normal features
  5. python train_classification.py --model pointnet2_cls_ssg --use_normals --log_dir pointnet2_cls_ssg_normal
  6. python test_classification.py --use_normals --log_dir pointnet2_cls_ssg_normal
  7. ## e.g., pointnet2_ssg with uniform sampling
  8. python train_classification.py --model pointnet2_cls_ssg --use_uniform_sample --log_dir pointnet2_cls_ssg_fps
  9. python test_classification.py --use_uniform_sample --log_dir pointnet2_cls_ssg_fps
  10. # ModelNet10
  11. ## Similar setting like ModelNet40, just using --num_category 10
  12. ## e.g., pointnet2_ssg without normal features
  13. python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg --num_category 10
  14. python test_classification.py --log_dir pointnet2_cls_ssg --num_category 10

        我这里以不使用法向量信息训练为例,执行指令,下图是跑了一轮的结果,评价指标是训练和验证的准确率。

python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg --batch_size 8

3.ShapeNet数据集下载并训练点云部件分割模型

3.1shapeNet数据集下载

        数据集下载地址:

https://shapenet.cs.stanford.edu/media/shapenetcore_partanno_segmentation_benchmark_v0_normal.zip

        数据集位置:然后数据全部放在data/shapenetcore_partanno_segmentation_benchmark_v0_normal/路径下。

        模型训练:使用以下指令训练模型,如下所示

  1. ## Check model in ./models
  2. ## e.g., pointnet2_msg
  3. python train_partseg.py --model pointnet2_part_seg_msg --normal --log_dir pointnet2_part_seg_msg
  4. python test_partseg.py --normal --log_dir pointnet2_part_seg_msg

         (出现BUG:AttributeError: module 'numpy' has no attribute 'float'.这种情况一般是由于numpy版本问题,查阅相关资料,将numpy版本降低为1.23.5就行了。

         下面是训练一轮的结果,评价指标有训练的准确率(train accuracy),每个类别的mIoU(共16个类50个部件),测试的准确率(test Accuracy),class mIoU,instance mIoU。这里介绍一下class mIoU,instance mIoU,其实主要就是分母不相同:

        class mIoU:分母为类别数,反映的是类别的精度。instance mIoU:分母是预测的实体数,反应的是实体的精度。

        下面举例说明,比如现在有两个类共5个类别,分别为类别cls1有a,b两个部件,cls2有c,d,e三个部件:

  1. cls1:
  2. a,b
  3. cls2:
  4. c,d,e
  5. 比如一个批次里面有3个点云(3个实例),一个是cls1,两个是cls2,每个类的部件mIoU为:
  6. cls1:
  7. a:0.5
  8. b:0.6
  9. ===>cls1 mIoU:(0.5+0.6)/2=0.55
  10. 第一个cls2:
  11. c:0.6
  12. d:0.7
  13. e:0.8
  14. ===>第一个cls2 mIoU:(0.6+0.7+0.8)/3=0.7
  15. 第二个cls2:
  16. c:0.5
  17. d:0.5
  18. e:0.5
  19. ===>第二个cls2 mIoU:(0.5+0.5+0.5)/3=0.5
  20. class mIoU=[0.55/1+(0.7+0.5)/2]/2=0.575
  21. instance mIoU=(0.55+0.7+0.5)/3=0.5833

4.S3DIS数据集下载并训练点云语义分割模型

        数据集下载地址:Index of /s3dis (ethz.ch)

        数据集位置:然后数据全部放在data/s3dis/Stanford3dDataset_v1.2_Aligned_Version/.要看清楚是在data下新建s3dis文件。

        数据预处理:进入data_utils文件夹,执行collect_indoor3d_data.py,将在data/s3dis/Stanford3dDataset_v1.2_Aligned_Version/生成npy文件,应该把这些npy文件全部放到/data/stanford_indoor3d路径下。

        模型训练:执行以下指令就行了

  1. python train_semseg.py --model pointnet2_sem_seg --test_area 5 --log_dir pointnet2_sem_seg
  2. python test_semseg.py --log_dir pointnet2_sem_seg --test_area 5 --visual

        报错了EOFError: Ran out of input,可以通过调小num_worker来解决,如下所示,不然我都内存都快爆了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/101819
推荐阅读
相关标签