PyTorch复现PointNet——模型训练+可视化测试显示

因为项目涉及到3D点云项目,故学习下PointNet这个用来处理点云的神经网络
论文的话,大致都看了下,网络结构有了一定的了解,本博文主要为了下载调试PointNet网络源码,训练和测试调通而已。

我是在Anaconda下创建一个新的虚拟环境空间部署项目测试
大概用到的就这些了,后面调试项目时候缺少安装啥就行了

torch                     2.0.0+cu117
torchvision               0.15.0+cu117
python                    3.8.19
numpy                     1.24.3
matplotlib                3.7.5
opencv-python             4.10.0.84

一、下载源码和数据集

论文:《PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation》
GitHub源码:pointnet.pytorch
数据集下载:shapenetcore_partanno_segmentation_benchmark_v0.zip

大致的源码结构如下:
在这里插入图片描述

二、PyCharm打开项目

拿到项目,第一件事是要看下README.md
在这里插入图片描述
没啥高级词汇,大概能看出来啥意思就行

三、下载数据集

.sh文件是Linux下的脚本文件夹,我这是Windows操作系统,先打开看看这里面都写了啥
可视化工具在build.sh文件中,数据集在download.sh中,我这边就只用到必须的数据集

看下download.sh
在这里插入图片描述
知道了数据集下载的链接
数据集下载:https://shapenet.cs.stanford.edu/ericyi/shapenetcore_partanno_segmentation_benchmark_v0.zip
也就是第一部分中提到的数据集下载链接

四、分类任务

训练的话,通过README.md可以看出有两种,一种是分类任务,一种是分割任务

cd utils
python train_classification.py --dataset <dataset path> --nepoch=<number epochs> --dataset_type <modelnet40 | shapenet>

4.1 分类模型训练:train_classification.py

1,文件在utils文件夹下

在这里插入图片描述

2,README.md也说明了要配置的参数

python train_classification.py --dataset <dataset path> --nepoch=<number epochs> --dataset_type <modelnet40 | shapenet>

我把要配置的参数给整理到一块了,方便进行修改测试,其他的参数根据情况去修改即可
在这里插入图片描述

3,右击运行(Ctrl + Shift + F10),报错

在这里插入图片描述
修改进程数为0,parser.add_argument('--workers', type=int, help='number of data loading workers', default=0)
在这里插入图片描述

4,再次右击运行(Ctrl + Shift + F10)报错

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

在这里插入图片描述
按要求加入,os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" ,允许程序在存在多个 libiomp5md.dll 副本的情况下继续执行,但这可能会导致不稳定的行为,包括程序崩溃或产生不正确的结果,所以它只是一个临时的解决方案

import os                                  
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"  

在这里插入图片描述

5,再次右击运行(Ctrl + Shift + F10),开始训练

在这里插入图片描述
让它跑着吧先~~也就5个epoch

6,因为这里训练的epoch为5,每个epoch都会存下来一个模型

可以看到在utils下的cls文件下有五个模型
在这里插入图片描述

4.2 分类模型测试:show_cls.py

1,utils文件夹下的show_cls.py文件用于分类模型测试

在这里插入图片描述

2,指定两个参数即可

模型路径:parser.add_argument('--model', type=str, default = './cls/cls_model_4.pth', help='model path')
数据集的路径:root='../dataset/shapenetcore_partanno_segmentation_benchmark_v0'
在这里插入图片描述

3,右击运行(Ctrl + Shift + F10),测试成功

可以看到测试的损失和准确率,目前作者没有提供可视化结果展示
在这里插入图片描述

五、分割任务

能把分类任务跑通,分割任务都是类似的

5.1 分割模型训练:train_segmentation.py

python train_segmentation.py --dataset <dataset path> --nepoch=<number epochs>

1,文件在utils文件夹下

在这里插入图片描述

2,看README.md指定配置参数

python train_segmentation.py --dataset <dataset path> --nepoch=<number epochs>
在这里插入图片描述

3,右击运行(Ctrl + Shift + F10),开始训练

开始训练
在这里插入图片描述
epoch为25

4,epoch为25,会保存25个模型

可以看到在utils下的seg文件下有二十五个模型
在这里插入图片描述

5.2 分割任务测试:show_seg.py

1,utils文件夹下的show_seg.py文件用于分割模型测试

在这里插入图片描述

2,右击运行(Ctrl + Shift + F10),报错

在这里插入图片描述
找了一下原因,show_seg.py用到了show3d_balls.py里面的showpoints函数
show3d_balls.py又用到了一个dll文件,dll = np.ctypeslib.load_library('render_balls_so', '.')而这个是.so不是.dll(原文是在Linux下跑的)
在这里插入图片描述
故需要转换一下,通过Visual Studio创建一个动态链接库(DLL)项目,生成render_balls_so.dll放到utils文件下即可
在这里插入图片描述
我这边就不搞了,抓紧时间学习下PointNet++
参考博客:https://blog.csdn.net/qq_45369294/article/details/121041403

3,直接拿来用

render_balls_so.dll免费下载
下载是一个压缩包,里面是一个完整的Visual Studio项目,但是用不到,咱们就用到了里面的一个dll文件
在这里插入图片描述

4,再次右击运行(Ctrl + Shift + F10),报错

在这里插入图片描述
还是之前遇到的问题,导入

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

和分类任务一样,进行简单配置即可
在这里插入图片描述

5,再次右击运行(Ctrl + Shift + F10),测试成功

对Airplane进行分割,效果展示
在这里插入图片描述

六、完结

目前只是实现了代码的跑通,后续还得认真学习原理以及去修改模型架构适配自己的工作任务。

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PointNet是一个处理点云数据的深度学习框架,它的实现使用了PyTorch。下面是复现PointNet的具体步骤: 1. 准备数据集 PointNet处理的是点云数据,因此需要准备相应的数据集。可以使用公开的点云数据集,如ModelNet40、ShapeNet等。数据集需要进行预处理,将点云数据转换为张量形式,同时需要进行归一化和数据增强等操作。 2. 定义模型 PointNet由两个主要部分组成:PointNet Encoder和PointNet Decoder。PointNet Encoder负责将点云数据编码为全局和局部特征,PointNet Decoder则将这些特征解码为点云数据。PyTorch的实现可以参考PointNet论文中的代码。 3. 定义损失函数 PointNet的损失函数采用了交叉熵和正则化项。可以使用PyTorch提供的交叉熵损失函数和L2正则化项来定义损失函数。 4. 定义优化器 可以使用PyTorch提供的优化器,如SGD、Adam等。 5. 训练模型 将数据集分为训练集和测试集,使用PyTorch提供的DataLoader加载数据,然后使用定义的模型、损失函数和优化器进行模型训练。可以使用PyTorch提供的自动微分机制进行反向传播,更新模型参数。 6. 测试模型 使用测试测试训练好的模型,计算模型的准确率和其他指标。 以上就是复现PointNet的具体步骤,需要注意的是,由于点云数据的处理比较复杂,因此需要仔细阅读PointNet论文和相关代码,以确保复现过程正确无误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyond谚语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值