PyTorch复现PointNet++——模型训练+模型测试

本博文主要实现对PointNet++源码进行调试,模型训练+模型测试。

一、下载源码和数据集

论文:PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
GitHub源码:Pointnet2_pytorch
数据集包括三种:分类、零部件分割和场景分割
分类数据集:modelnet40_normal_resampled
零部件分割数据集:shapenetcore_partanno_segmentation_benchmark_v0_normal
场景分割数据集:s3dis/Stanford3dDataset_v1.2_Aligned_Version
(科学上网)

PointNet++源码结构如下:
在这里插入图片描述
看起来还是比较清晰的,大概可能知道项目中主要包括三个功能:分类classification零部件分割partseg场景分割semseg
在这里插入图片描述
老规矩,先看README.md

作者安装的是CUDA10.1,PyTorch 1.6和Python 3.7
可以通过anaconda进行安装conda install pytorch==1.6.0 cudatoolkit=10.1 -c pytorch
在这里插入图片描述
我是在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

其实,认认真真看了PyTorch复现PointNet——模型训练+可视化测试显示这篇博文之后,再看README.md就简单的多了

二、分类任务Classification,数据集为ModelNet10/40

先看README.md
在这里插入图片描述
下载所用到的数据集放到data文件夹下,我这边场景分割数据集因为网不好总是失败~~这里就下载好了两个数据集,一个是分类用的,一个是零部件分割用的,场景分割数据集没下载成功…

将用到的分割数据集modelnet40_normal_resampled放到data文件夹下
在这里插入图片描述

2.1 训练模型——train_classification.py

1,由README.md可知运行分类任务的命令如下:

# ModelNet40
## Select different models in ./models ## 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

有四组可以供选择,这里我就选用第一组,不用法向量特征的pointnet2_ssg训练模型作为测试

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

2,需要给定的参数有:--model pointnet2_cls_ssg 和 --log_dir pointnet2_cls_ssg

修改参数:

parser.add_argument('--epoch', default=1, type=int, help='number of epoch in training')
parser.add_argument('--model', default='pointnet2_cls_ssg', help='model name [default: pointnet_cls]')
parser.add_argument('--log_dir', type=str, default="pointnet2_cls_ssg", help='experiment root')
parser.add_argument('--batch_size', type=int, default=8, help='batch size in training')

使用的模型为:models\pointnet2_cls_ssgmodels文件夹里面还有很多模型
训练好的模型信息存放路径为:log\classification\pointnet2_cls_ssg
在这里插入图片描述
在这里插入图片描述
训练模型所使用的数据集存放位置
在这里插入图片描述

3,右击运行

开始训练
在这里插入图片描述
训练完成

模型存放在:log\classification\pointnet2_cls_ssg\checkpoints
在这里插入图片描述

2.2 测试模型——test_classification.py

1,由README.md可知运行分类任务的命令如下:

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

2,需要给定的参数有:--log_dir pointnet2_cls_ssg

修改参数:

parser.add_argument('--log_dir', type=str, default="pointnet2_cls_ssg", help='Experiment root')

在这里插入图片描述
测试集位置和使用的测试模型
在这里插入图片描述

3, 右击运行

测试完成
在这里插入图片描述
模型测试信息
在这里插入图片描述

三、零部件分割任务Part Segmentation,数据集为ShapeNet

先看README.md
在这里插入图片描述

下载所用到的数据集shapenetcore_partanno_segmentation_benchmark_v0_normal放到data文件夹下
在这里插入图片描述

3.1 训练模型——train_partseg.py

1,由README.md可知运行零部件分割任务的命令如下:

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

2,需要给定的参数有:--model pointnet2_part_seg_msg--normal--log_dir pointnet2_part_seg_msg

修改参数:

parser.add_argument('--model', type=str, default='pointnet2_part_seg_msg', help='model name')
parser.add_argument('--normal', action='store_true', default=False, help='use normals')
parser.add_argument('--log_dir', type=str, default="pointnet2_part_seg_msg", help='log path')

在这里插入图片描述
使用的模型为:models\pointnet2_part_seg_msgmodels文件夹里面还有很多模型
在这里插入图片描述
训练好的模型信息存放路径为:./log/part_seg/pointnet2_part_seg_msg
在这里插入图片描述

3,右击运行,报错

AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:

在这里插入图片描述
翻译:在这里插入图片描述

解决:np.array(total_correct_class) / np.array(total_seen_class, dtype=np.float64))
在这里插入图片描述
在这里插入图片描述

4,右击继续运行,报错

提示显卡内存不足
在这里插入图片描述
解决:将batch_size设置小点,例如设置为4,具体情况根据自己的电脑配置来

parser.add_argument('--batch_size', type=int, default=4, help='batch Size during training')

为了快速训练演示,把epoch设置为1
在这里插入图片描述

5,右击继续运行

开始模型训练
在这里插入图片描述
训练完成
在这里插入图片描述

训练好的模型保存在log\part_seg\pointnet2_part_seg_msg\checkpoints/best_model.pth
在这里插入图片描述
模型训练好了,接下来开始测试

3.2 测试模型——test_partseg.py

1,由README.md可知运行零部件分割任务的命令如下:

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

2,需要给定的参数有:--normal--normal--log_dir pointnet2_part_seg_msg

修改参数:

parser.add_argument('--log_dir', type=str, default="pointnet2_part_seg_msg", help='experiment root')
parser.add_argument('--normal', action='store_true', default=False, help='use normals')
parser.add_argument('--batch_size', type=int, default=4, help='batch size in testing')

在这里插入图片描述

3,右击运行,报错

又是遇到的这个问题
在这里插入图片描述
解决:
改成np.float64即可

np.array(total_correct_class) / np.array(total_seen_class, dtype=np.float64))

4,右击继续运行

输出测试每个类型的mIoU得分
在这里插入图片描述
结果会存放到log\part_seg\pointnet2_part_seg_msg\eval.txt日志文件中
在这里插入图片描述

四、场景分割任务Semantic Segmentation,数据集为S3DIS

先看README.md
在这里插入图片描述
首先把下载好的数据集解压放到data/s3dis/Stanford3dDataset_v1.2_Aligned_Version/
data文件夹下创建一个s3dis文件夹,数据集解压到/data/s3dis下即可

哈哈哈哈哈,数据集我没下载成功

在这里插入图片描述
主要是场景分割任务对我而言也用不到
我就按着README.md大致说下流程

4.1 转换数据集

查看下data_utils/collect_indoor3d_data.py,可以得知数据集的存放路径,看来好像跟README.md给的不太一样,按照代码里面的来哈,可能是作者不小心整错路径了
在这里插入图片描述
数据集存放路径:data\stanford_indoor3d
在这里插入图片描述

4.2 训练模型——train_semseg.py

1,由README.md可知运行场景分割任务的命令如下:

## Check model in ./models 
## e.g., pointnet2_ssg
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

2,需要给定的参数有:--model pointnet2_sem_seg --test_area 5--log_dir pointnet2_sem_seg

修改参数:
要我的话我会修改这些参数

parser.add_argument('--model', type=str, default='pointnet_sem_seg', help='model name [default: pointnet_sem_seg]')
parser.add_argument('--test_area', type=int, default=5, help='Which area to use for test, option: 1-6 [default: 5]')
parser.add_argument('--log_dir', type=str, default="data/stanford_indoor3d", help='Log path [default: None]')
parser.add_argument('--epoch', default=4, type=int, help='Epoch to run [default: 32]')

3,能不能正常运行我也不清楚,我没下载成功数据集~~,抱歉各位老爷们

4.3 测试模型——test_semseg.py

1,由README.md可知运行场景分割任务的命令如下:

## Check model in ./models 
## e.g., pointnet2_ssg
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

2,需要给定的参数有:--log_dir pointnet2_sem_seg --test_area 5--visual

修改参数:

parser.add_argument('--batch_size', type=int, default=4, help='batch size in testing [default: 32]')
parser.add_argument('--log_dir', type=str, default="pointnet2_sem_seg", help='experiment root')
parser.add_argument('--test_area', type=int, default=5, help='area for testing, option: 1-6 [default: 5]')
parser.add_argument('--visual', action='store_true', default=False, help='visualize result [default: False]')

3,能不能正常运行我也不清楚,我没下载成功数据集~~,抱歉各位老爷们

五、总结

其实由先前的PyTorch复现PointNet——模型训练+可视化测试显示,家人们应该都知道如何调试了,大差不差,但是得需要多动手,光说不练假把式,天道酬勤!
加油!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块,简单配置,灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具,否则会报错“No crontab program”。如下图: python-crontab是其提供了python模块对crontab的访问,即可以通过p…

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台(PAI)自研开源的视频生成项目EasyAnimate正式发布v3版本: 支持 图片(可配合文字) 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p(960*960分辨率) 144帧视…

【Git分支管理】分支策略 | Bug分支

目录 1.分支策略 2.特殊场景-Bug分支 2.1 master出现bug ​2.2 dev2正在开发☞stash区域 2.3 dev2正在开发master出现bug 2.3.1 fix_bug修复bug和master合并 2.3.2 dev2分支开发完和master合并 合并冲突:merge☞手动解决☞提交没有合并冲突:mer…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单,所以自己改了一个demo,把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹: (后续的运行指令后面都需要…

【深度学习】基于深度学习的模式识别基础

一 模式识别基础 “模式”指的是数据中具有某些相似特征或属性的事物或事件的集合。具体来说,模式可以是以下几种形式: 视觉模式 在图像或视频中,模式可以是某种形状、颜色组合或纹理。例如,人脸、文字字符、手写数字等都可以视…

一图了解网络通信原理

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

正则表达式怎么控制匹配的字符串更近的一个

http((?!http).)*m3u8 正则表达式怎么控制匹配的字符串更近的一个 正则如何匹配最近的字符 正则如何匹配最近的两个字符 怎么控制只要离字符串b匹配更近一点的字符串a 解释 a.b,它将会匹配最长的以a开始,以b结束的字符串 a.?b匹配最短的&#xff…

废品回收小程序:高效便捷回收,推动市场发展

随着互联网的发展和人们日益提升的环保意识,对废品回收市场的关注度不断提高,废品回收成为了当下发展前景巨大的行业之一。 传统的废品回收体系不完善,存在较大的不便利性,回收流程繁琐。为了方便大众回收,连接回收企…

【数据结构】树和二叉树——Lesson1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

科普文:微服务技术栈梳理

概叙 如上两图所示,微服务架构下,需要的组件很多,上面中也并未列全。下面将梳理一下国内微服务架构下,用到的技术栈,仅供参考。 科普文:12种常见的软件架构-CSDN博客 没有最好的架构,只有最适…

常用网络接口自动化测试框架应用

一、RESTful(resource representational state transfer)类型接口测试 (一)GUI界面测试工具:jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDat…

python数据可视化(7)——绘制箱形图

课程学习来源:b站up:【蚂蚁学python】 【课程链接:【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接:【链接】】 Python绘制箱形图分析北京天气数据 箱形图 箱形图(Box-plot)又称为盒…

一站式短视频矩阵开发,高效托管!

短视频矩阵系统源码SaaS解决方案提供全面的开发服务,包括可视化视频编辑、矩阵式内容分发托管以及集成的多功能开发支持。 短视频矩阵:引爆您的数字营销革命 短视频矩阵系统是一套多功能集成解决方案,专为提升在短视频平台上的内容创作、管理…

【C++】多态-最全解析(多态是什么?如何使用多态?多态的底层原理是什么?)

目录 一、前言 二、多态是什么? 三、多态的定义及实现 🔥 多态的构成条件🔥 🔥 虚函数的重写🔥 🔥虚函数重写的两个例外 🔥 🍍 协变返回类型 🥝 析构函数的重写…

使用APEXSQL LOG解析sql server事务日志,进行审计与数据恢复

一 下载 https://download.csdn.net/download/sunke861/11449739 二 使用 解压安装包后,点击:ApexSQLLog.exe 2.1 连接数据库 连接要审计的数据库: 假如报错: 则点击ok关闭该窗口,然后点击左上方的New按钮&#xf…

Codeforces Round 958 (Div. 2)(A~C)题

A. Split the Multiset 思路: 最优的策略是每次操作分出 k−1&#x1d458;−1 个 1&#xff0c;然后考虑最后是否会剩下一个单独的 1。 代码: #include<bits/stdc.h> using namespace std; #define N 1000005 typedef long long ll; typedef unsigned long long ull;…

【找不到视图问题解决】@RestController 与 @Controller注解的使用区别

一、问题描述 苍穹外卖在菜品分页查询功能实现的过程中&#xff0c;出现了找不到视图的情况 2024-07-12 21:54:20.860 ERROR 22488 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with p…

Transformer注意力机制

Transformer注意力机制 &#x1f42c; 目录: 一、Transformer简介二、理解注意力机制自注意力机制多头注意力机制 一、Transformer简介 Transformer是一种用于自然语言处理(NLP)和其他序列到序列(Seq2Seq)任务的深度学习模型框架&#xff0c;它在2017年由Vaswani等人首次提出…

手机m4a怎么转换成mp3,手机端即可完成格式转换

M4A&#xff08;MPEG-4 Audio&#xff09;是一种无损压缩的音频格式&#xff0c;通常用于苹果设备和 iTunes 上&#xff0c;因为它能提供较高的音质同时占用较小的存储空间。 然而&#xff0c;MP3 作为最普及的音频格式之一&#xff0c;兼容性更强&#xff0c;几乎所有的播放设…

【单元测试】SpringBoot

【单元测试】SpringBoot 1. 为什么单元测试很重要&#xff1f;‼️ 从前&#xff0c;有一个名叫小明的程序员&#xff0c;他非常聪明&#xff0c;但有一个致命的缺点&#xff1a;懒惰。小明的代码写得又快又好&#xff0c;但他总觉得单元测试是一件麻烦事&#xff0c;觉得代码…