赞
踩
目录
本博客主要讲了如何使用公共数据集在pointnet++网络下实现分类网络,部件分割网络以及语义分割网络,这三个实验在win10下已经全部验证跑通,只要跟着博文同样可以无痛跑通,另文末附已下载好的数据集。
直接贴出链接,下载后使用vsCode打开,开始配置环境。yanx27/Pointnet_Pointnet2_pytorch: PointNet and PointNet++ implemented by pytorch (pure python) and on ModelNet, ShapeNet and S3DIS. (github.com)https://github.com/yanx27/Pointnet_Pointnet2_pytorch
参考该项目的环境进行配置: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.htmlhttps://download.pytorch.org/whl/torch_stable.html 下载对应的torch和torvison版本,如下所示:
第二,创建Anaconda虚拟环境并激活环境
- #创建名为pointnet2的虚拟环境
- conda create -n pointnet2 python=3.8 -y
- #激活环境
- conda activate pointnet2
第三,安装torch和torchvison:下载的文件可以直接拖到命令框中,变成路径名,pip install安装即可。
- #安装torch
- pip install E:\edgeDownLoad\torch-1.12.0+cu116-cp38-cp38-win_amd64.whl
- #安装torchvison
- pip install E:\edgeDownLoad\torchvision-0.13.0+cu116-cp38-cp38-win_amd64.whl
第四,安装其他依赖:需要安装tqdm,用来显示进度条的。
数据集下载地址:全部下载下来就行了,总共有1.6个G。
https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip
数据集位置:然后数据全部放在data/modelnet40_normal_resampled/路径下面,如下所示:里面的数据全部是以txt格式进行存储的,共有40个类别,还包含着划分的训练集和验证集文件配置。
数据可视化:可以任意打开一个txt文件查看,每个点包含六列信息,分别代表X,Y,Z坐标以及其对应法向量,至于其类别标签其实就是文件名,或者可以理解为文件夹上。
参考作者的ReadMe文件已经说明的很清楚了,训练时候主要分为是否利用法向量信息,如果使用法向量信息则使用--use_normals。
- ## e.g., pointnet2_ssg without normal features
- python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg
- python test_classification.py --log_dir pointnet2_cls_ssg
-
- ## e.g., pointnet2_ssg with normal features
- python train_classification.py --model pointnet2_cls_ssg --use_normals --log_dir pointnet2_cls_ssg_normal
- python test_classification.py --use_normals --log_dir pointnet2_cls_ssg_normal
-
- ## e.g., pointnet2_ssg with uniform sampling
- python train_classification.py --model pointnet2_cls_ssg --use_uniform_sample --log_dir pointnet2_cls_ssg_fps
- python test_classification.py --use_uniform_sample --log_dir pointnet2_cls_ssg_fps
-
- # ModelNet10
- ## Similar setting like ModelNet40, just using --num_category 10
-
- ## e.g., pointnet2_ssg without normal features
- python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg --num_category 10
- 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
数据集下载地址:
https://shapenet.cs.stanford.edu/media/shapenetcore_partanno_segmentation_benchmark_v0_normal.zip
数据集位置:然后数据全部放在data/shapenetcore_partanno_segmentation_benchmark_v0_normal/
路径下。
模型训练:使用以下指令训练模型,如下所示
- ## Check model in ./models
- ## e.g., pointnet2_msg
- python train_partseg.py --model pointnet2_part_seg_msg --normal --log_dir pointnet2_part_seg_msg
- 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三个部件:
- cls1:
- a,b
-
- cls2:
- c,d,e
-
- 比如一个批次里面有3个点云(3个实例),一个是cls1,两个是cls2,每个类的部件mIoU为:
-
- cls1:
- a:0.5
- b:0.6
- ===>cls1 mIoU:(0.5+0.6)/2=0.55
- 第一个cls2:
- c:0.6
- d:0.7
- e:0.8
- ===>第一个cls2 mIoU:(0.6+0.7+0.8)/3=0.7
- 第二个cls2:
- c:0.5
- d:0.5
- e:0.5
- ===>第二个cls2 mIoU:(0.5+0.5+0.5)/3=0.5
-
-
- class mIoU=[0.55/1+(0.7+0.5)/2]/2=0.575
-
- instance mIoU=(0.55+0.7+0.5)/3=0.5833
数据集下载地址: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路径下。
模型训练:执行以下指令就行了
- python train_semseg.py --model pointnet2_sem_seg --test_area 5 --log_dir pointnet2_sem_seg
- python test_semseg.py --log_dir pointnet2_sem_seg --test_area 5 --visual
报错了EOFError: Ran out of input,可以通过调小num_worker来解决,如下所示,不然我都内存都快爆了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。