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

news2024/11/15 23:45:24

本博文主要实现对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.coloradmin.cn/o/1922425.html

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

相关文章

修改留言板

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>备忘录</title><!-- <link rel"…

[Spring] Spring Web MVC基础理论

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

如何从 PDF 中删除背景

您是否曾经收到过充满分散注意力背景的扫描 PDF 文档&#xff1f;也许是带有繁忙水印的旧收据或背景光线不均匀的扫描文档。虽然这些背景可能看起来没什么大不了的&#xff0c;但它们会使您的工作空间变得混乱&#xff0c;并使您难以专注于重要信息。轻松删除这些不需要的元素并…

嵌入式基础 硬件接口汇总

在此收集整理嵌入式通信中常见的接口协议&#xff0c;它们具有一定的通用性&#xff0c;在今后的开发中会反复遇到。 包括但不限于以下类别&#xff08;逐步完善中…&#xff09;&#xff1a; GPIOUARTSPII2CUSBEthernetNAND Flash类SDRAM类&#xff08;ram-like&#xff09;LC…

机器学习——随机森林(学习笔记)

目录 一、基础认识 1. 集成算法介绍 2. 集成算法种类 二、sklearn中的随机森林 1. ensemble.RandomForestClassifier &#xff08;随机森林分类&#xff09; &#xff08;1&#xff09;基本参数 &#xff08;2&#xff09;基本属性 &#xff08;3&#xff09;基本接口 …

【Linux】centos7安装PHP7.4报错:libzip版本过低

问题描述 configure: error: Package requirements (libzip > 0.11 libzip ! 1.3.1 libzip ! 1.7.0) were not met: checking for libzip > 0.11 libzip ! 1.3.1 libzip ! 1.7.0... no configure: error: Package requirements (libzip > 0.11 libzip ! 1.3.1 libzi…

DAMA学习笔记(五)-数据存储和操作

1.引言 数据存储与操作包括对存储数据的设计、实施和支持&#xff0c;最大化实现数据资源的价值&#xff0c;贯穿于数据创建/获取到处置的整个生命周期。 数据存储与操作包含两个子活动&#xff08;图6-1&#xff09;。 图6-1 语境关系图&#xff1a;数据存储与操作 (1) 数据库…

分布式系统—Ceph块存储系统(RBD接口)

目录 一、服务端操作 1 创建一个名为 rbd-xy101 的专门用于 RBD 的存储池 2 将存储池转换为 RBD 模式 3 初始化存储池 4 创建镜像 5 管理镜像 6.Linux客户端使用 在管理节点创建并授权一个用户可访问指定的 RBD 存储池 ​编辑修改RBD镜像特性&#xff0c;CentOS7默认情…

英特尔CPU研发团队繁忙的一天

早晨&#xff1a;准备与启动 7:00 AM - 起床与准备 研发团队的工程师们早早起床&#xff0c;快速洗漱并享用健康的早餐。部分工程师会进行晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达办公室 工程师们来到位于硅谷的英特尔总部&#xff0c;进入研发中心。…

Open-TeleVision——通过VR沉浸式感受人形机器人视野的远程操作

前言 7.3日&#xff0c;我司大模型机器人(具身智能)线下营群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接&#xff0c;我当时快速看了一遍&#xff0c;还是有价值的一个工作(其有受mobile aloha工作的启发)&#x…

MT6816磁编码IC在工控机器人中的应用

在现代工业自动化领域&#xff0c;高精度的位置检测和控制技术对于机器人系统的稳定运行至关重要。MT6816磁编码IC作为一款先进的磁传感器解决方案&#xff0c;以其卓越的性能和稳定性&#xff0c;在工控机器人中得到了广泛的应用。本文将详细探讨MT6816磁编码IC在工控机器人中…

git常用命令及git分支

git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支删除分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git con…

Golang:数据科学领域中的高性能并发编程新星

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 并发性能的卓越表现📝 系统级工具的便捷性📝 语言设计的简洁性📝 强类型系统的严格性📝 版本兼容性的稳定性📝 内置工具的全面性⚓️ 相关链接 ⚓️📖 介绍 📖 在数据科学和机器学习的广阔天地…

音视频开发—使用FFmpeg从纯H264码流中提取图片 C语言实现

文章目录 1.H264码流文件解码流程关键流程详细解码流程详细步骤解析 2.JPEG编码流程详细编码流程详细步骤解析 3.完整示例代码4.效果展示 从纯H.264码流中提取图片的过程包括解码和JPEG编码两个主要步骤&#xff0c;以下是详细阐述 1.H264码流文件解码流程 关键流程 查找编解…

微信小程序---分包加载

一、分包加载 1. 什么是分包加载 什么是分包加载 ❓ 小程序的代码通常是由许多页面、组件以及资源等组成&#xff0c;随着小程序功能的增加&#xff0c;代码量也会逐渐增加&#xff0c;体积过大就会导致用户打开速度变慢&#xff0c;影响用户的使用体验。 分包加载是一种小…

线性代数|机器学习-P23梯度下降

文章目录 1. 梯度下降[线搜索方法]1.1 线搜索方法&#xff0c;运用一阶导数信息1.2 经典牛顿方法&#xff0c;运用二阶导数信息 2. hessian矩阵和凸函数2.1 实对称矩阵函数求导2.2. 线性函数求导 3. 无约束条件下的最值问题4. 正则化4.1 定义4.2 性质 5. 回溯线性搜索法 1. 梯度…

nodejs模板引擎(一)

在 Node.js 中使用模板引擎可以让您更轻松地生成动态 HTML 页面&#xff0c;通过将静态模板与动态数据结合&#xff0c;您可以创建可维护且易于扩展的 Web 应用程序。以下是一个使用 Express 框架和 EJS 模板引擎的基本示例&#xff1a; 安装必要的依赖&#xff1a; 首先&#…

(四)stm32之通信协议

一.串口通信 1、全双工、半双工、单工 单工:只能一个人传输,只能向一个方向传输 半双工:只能一个人传输,可以多个方向传输 全双工:多方传输,多个方向传输 2、同步通信、一步通信 异步通信:双方时钟可以不同步,发送的信息封装(加上起始位、停止位)实现同步,效率低,…

生成式AI推动药物发现革命:加速开发,降低成本

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Ubuntu 22.04.4 LTS (linux) Auditd 安全审计rm命令 记录操作

1 audit增加rm 规则 #sudo vim /etc/audit/rules.d/audit.rules -w /bin/rm -p x -k delfile #重新启动服务 sudo systemctl restart auditd #查看规则 sudo auditctl -l -w /bin/rm -p x -k delfile 2 测试规则 touch test.txt rm test.tx 3 查看日志 sudo ausear…