Win10系统下复现Pointnet++(pytorch)

本文详细介绍了如何在Windows10环境下使用Pointnet++实现点云的分类、部件分割和语义分割。提供了源码下载、环境配置步骤,包括Python、PyTorch和CUDA的版本选择,以及ModelNet40、ShapeNet和S3DIS数据集的下载和预处理。文章还包含了训练模型的具体命令和训练结果,并讨论了评价指标。最后,指出了项目中缺少预测代码和可视化部分,表示后续会分享相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

        本博客主要讲了如何使用公共数据集在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虚拟环境并激活环境   

#创建名为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,用来显示进度条的。

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。 

## 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

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

3.1shapeNet数据集下载

        数据集下载地址:

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

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路径下。

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

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来解决,如下所示,不然我都内存都快爆了😂😂 

         这差不多也算是跑起来了,至此三个网络都过了一遍,这个项目很顺畅没有什么坑。

4.总结

        本博客主要关注pointnet++三个任务的训练过程,分别为分类网络,部件分割网络以及语义分割网络,而且该项目代码中也缺少预测代码(只有test.py代码,用来验证得到评价指标的),也就是缺少可视化代码,后面在新的博文中也会分享一下pointnet++网络结构及代码,以及分类网络和部件分割网络的可视化代码部分。

        如果博客中哪里出现有错误,还请各位大佬指正。

        数据集自取链接:https://pan.baidu.com/s/1Mr4axiajSkMEZ9lPclMcSA  提取码:hiio

评论 79
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃鱼不卡次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值