Windows11和Ubuntu用PointNet++训练本身的数据集(部件分割模子) ...

打印 上一主题 下一主题

主题 974|帖子 974|积分 2924

省流:
(1)不管是Linux照旧Windows都不影响,只要有pycharm或者vscode即可,啥体系都行。
(2)别的由于本身的需求,以是只做物体部件分割(partseg)任务,没有复现分类(classification)和语义分割(semseg)。
(3)文章包罗:创建标注本身的数据集、数据集按格式放到pointnet工程、代码修改、报错修改
(4)博主只是按照本身的数据集复现原来网络的train和test,即跑完一个完整的步骤。至于用本身训练好的模子去检测本身的点云文本,之后再实现可视化和生存检测结果,这个问题博主另有待办理。
  背景:自建了一个轮胎外貌的点云,必要用pointnet++网络分出轮胎的 槽顶 和 槽底。(本身采的点云,精度不是很高,见笑了)。以是就是1个物体(即轮胎)2个部件(即槽底 和 槽顶)。记住这个数字,后面数据集标注和改代码会用到。关于PointNet++的原理和代码讲解可以看这个B站视频。

一、标注数据集

软件:CloudCompare
标注方法:如何使用CloudCompare软件进行点云数据标注
注意:原文中那个:SF name是一样的,便是luntai(一个物体),但是value的值是不一样的,即槽底设置是0,槽顶设置是1(来两个部件)。

标注完后:

得到此中一个txt文本:我们没有用向量信息,以是就是 x y z位置信息和类别。
注意: cloudCompare生成了的txt文件,最后一行会有一个空行,我不知道训练时有没有影响,我是删掉了!!!!!!。

二、下载源码

链接:https://github.com/yanx27/Pointnet_Pointnet2_pytorch

三、添加本身的数据集

3.1知识准备——要看!!发起下载shapenet数据集领会一下

本身用得到的功能是部件分割即partseg,以是得参考原作者用的ShapeNet数据集的格式。
格式介绍:点云数据集ShapeNet
ShapeNet数据集百度网盘下载: 百度网盘【提取码:evqi】
百度网盘来源:【三维视觉】【深度学习】ubuntu18.04下PointNet官方代码Pytorch实现
3.2添加本身的数据集

在本身的源码工程下新建 data 文件夹,在其下新建shapenetcore_partanno_segmentation_benchmark_v0_normal文件夹,之后在创建以下三个文件,由于本身是一个物体即luntai,以是就只有一个本身起的编号(01234567)。


(1)01234567:0-35,一共36个轮胎的点云

(2)synsetoffset2category.txt:对应好即可,注意两者之间是tab键照旧空格。我是从ShapeNet数据集直接改的,以是不太清楚。

(3)train_test_split文件夹:指定本身的36个点云文件,哪些点云是用于训练(train)、那些用于测试(test)、那些用于验证(val)。
三个json文件内里的名字、路径对应上就好,不用加.txt且前面的shape_data要加上而且01234567在多个物体时要记得修改。




(4)最后在pycharm的工程上看到:

四、修改代码

由于原来的partseg代码用的是16种物体共50个部件,咱们是1个物体2个部件,以是有些张量的维度得改。
参考:Pointnet++内Partseg分割网络训练本身的数据集
4.1 改train_partseg.py:

(1)

(2)

4.2 改test_partseg.py:

(1)

(2)

4.3pointnet2_part_seg_msg.py(你若用这个模子,就改动,用别的模子就改别的)

(1)

(2)

(3)

五、运行train_partseg.py

若风俗终端命令,可以从pycharm运行终端,并进入该工程的文件夹

5.1运行train_partseg.py

第一种方法:命令行传参

  1. python train_partseg.py --model pointnet2_part_seg_msg --log_dir pointnet2_part_seg_msg
复制代码
(1)–model pointnet2_part_seg_msg 是指定模子为pointnet2_part_seg_msg,模子名字可以看工程文件的models文件夹有哪些模子
(2)由于咱们本身的txt文件没有向量信息,以是命令行没加 --normal
(3)–log_dir pointnet2_part_seg_msg是指定训练后的数据生存在log/part_srg下那个文件夹。若是指定就是生存到 后面名字指定的文件夹,没指定就是按时间来定名。如下图


第二种方法:直接运行.py文件,但是要设置好默认值(default)

5.2运行出现的问题

(1)问题1:torch.OutOfMemoryError: CUDA out of memory.
(2)办理:减小上图中的批量巨细(batch size) 或者 不要再本身条记本上跑,在具有好的深度学习条件的电脑上跑。我是换成了更好的台式电脑。
(3)参考:torch.OutOfMemoryError: CUDA out of memory
六、运行test_partseg.py

6.1运行test_partseg.py


可以看到相比于train_partseg.py参数设置另有有点不同
法一:终端命令行来进行。
别的,同样咱们的txt是没有向量信息,以是也不带–normal
  1. python test_partseg.py --log_dir pointnet2_part_seg_msg
复制代码
或者日期的文件夹
  1. python test_partseg.py --log_dir 2024-12-05_20-22
复制代码

法2:pycharm点击运行
把required改成 default。后面带文件夹

6.2运行出现问题

(1)问题1:RuntimeError: Error(s) in loading state_dict for model
原因:代码参数值与模子训练时的参数值不一致导致异常信息
办理:看看那些默认值,train和test有些参数是否一样 或者 训练train时存放的log里的文件夹和这里测试test时读取的是否是一个,我的就是单击pycharm运行按钮导致train存放在日期文件夹下,test在终端输入,目录读取pointnet2_part_seg_msg文件夹,不一致,以是命令换成读取相应日期文件就好。

(2)问题2:numpy‘ has no attribute ‘float‘
原因:numpy‘ has no attribute ‘float
办理方法1:低落numpy版本
快捷安装方法:
点击pycharm右下方解释器,再点击解释器设置:

+是下载,还可以选择版本,选1.25.3
-是卸载


办理方法2:参考PyTorch复现PointNet++——模子训练+模子测试,内里有一种方法说把代码中的报错部分改为np.float64。
np.array(total_correct_class) / np.array(total_seen_class, dtype=np.float64))。这里用了老哥的图贴一下。

(3)问题3:RuntimeError: GET was unable to find an engine to execute this computation
办理方法1:先按此链接试试,如果都没问题,都能正常打印再参考此篇知乎批评区
在test_partseg.py前面 加上torch.backends.cudnn.enabled = False(亲测有用)

办理方法2:我看过有帖子说换成cpu就行,我没试过!!!!若用cpu跑。就把那个使用GPU的参数设置为使用cpu。

我没试过!!
七、用本身训练的模子检测一个本身的数据集,并分类生存在相应的txt,正在攻克!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表