PointNet——源码调试(模型训练+可视化测试显示)

news2024/9/23 17:11:10

因为项目涉及到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进行分割,效果展示
在这里插入图片描述

六、完结

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

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

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

相关文章

PHP项目中的前端页面随意点击卡片后会重定向到首页或登录页

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

判断对象能否回收的两种方法,以及JVM引用

判断对象能否回收的两种方法&#xff1a;引用计数算法&#xff0c;可达性分析算法 引用计数算法&#xff1a;给对象添加一个引用计数器&#xff0c;当该对象被其它对象引用时计数加一&#xff0c;引用失效时计数减一&#xff0c;计数为0时&#xff0c;可以回收。 特点&#xf…

STMCUBEMX_IIC_LL库/HAL库_扫描总线设备

STMCUBEMX_IIC_LL库/HAL库_扫描总线设备 前言&#xff1a; 在很多开发过程中&#xff0c;I2C总线上会挂载多个从机设备&#xff0c;但是又不知道设备的地址是多少&#xff0c;我做一个简单的小工具扫描总线&#xff0c;把地址打印出来就很方便 LL库实例&#xff1a; void scan…

欧姆龙安全PLC及周边产品要点指南

电气安全、自动化设备作业安全&#xff0c;向来是非常非常之重要的&#xff01;越来越多的客户在规划新产线、改造既有产线的过程中&#xff0c;明确要求设计方和施工方将安全考虑进整体方案中进行考虑和报价&#xff01;作为一名自动化电气工程师&#xff0c;尤其是高级工程师…

Python爬虫教程第3篇-解决使用reqeusts遇到的ProxyError异常

起因 问题出现在windows电脑上&#xff0c;我用mac执行程序的时候并不会报错&#xff0c;但是如果在windows上的时候&#xff0c;大部分windows电脑会报错&#xff0c;而有些版本低的windows电脑又不会报错。 异常栈信息 HTTPSConnectionPool, Cannot connect to proxy, no …

智能无人数字直播间 打造24小时的无人直播间源码系统 带网站的安装代码包以及搭建教程

系统概述 智能无人数字直播间系统是一种基于人工智能技术的软件工具&#xff0c;它结合了高精度扫描建模、自动化控制、多模态生成等多项先进技术&#xff0c;能够实现对真实人物的高度仿真&#xff0c;并自主执行各类直播任务。该系统不仅支持24小时不间断直播&#xff0c;还…

物联网安全的优秀实践以及八种策略

大多数物联网安全漏洞都是可以预防的&#xff0c;甚至可能是全部。看看任何引人注目的物联网攻击&#xff0c;都会发现一个已知的安全漏洞。 大多数物联网安全漏洞都是可以预防的&#xff0c;甚至可能是全部。看看任何引人注目的物联网攻击&#xff0c;都会发现一个已知的安全漏…

【BUG】RestTemplate发送Post请求后,响应中编码为gzip而导致的报错

BUG描述 20240613-09:59:59.062|INFO|null|810184|xxx|xxx||8|http-nio-xxx-exec-1|com.xxx.jim.xxx.XXXController.?.?|MSG接收到来自xxx的文件请求 headers:[host:"xxx", accept:"text/html,application/json,application/xhtmlxml,application/xml;q0.9,*…

如何在OpenFOAM的案例文件夹中确定数据的点和面,确定点和网格之间的关系,从而用于深度学习预测和构建模型呢(分析数据格式及其含义)

在OpenFOAM中&#xff0c;点&#xff08;points&#xff09;和面&#xff08;faces&#xff09;的定义是通过不同的文件来进行的。在案例一级目录下面的constant/polyMesh目录下&#xff0c;会有points, faces, owner, neighbour等文件&#xff0c;来描述网格的几何和拓扑结构。…

Vue学习笔记-自定义组件使用v-model

拆解实现 父组件 <template><div></div><Son :name"name" inputChange"inputChange"></Son>{{ name }} </template><script setup> import {ref} from vue import Son from ./son2.vueconst nameref("张…

戴尔笔记本(WIndows11)长时间睡眠后就会蓝屏或者死机必须重启问题解决

以下只是记录客服解决的过程&#xff0c;本人非专业人员&#xff0c;不能提供帮助。 戴尔笔记本&#xff08;游匣G15 5510&#xff09;长时间睡眠后&#xff0c;会出现蓝屏&#xff1a; 控制面板 -> 电源 -> 选择关闭计算机盖的功能 关闭快速启动&#xff1a; 关闭快速…

学习XDMA—20240709

概览&#xff1a; 在内部&#xff0c;子系统可以配置为实现多达8个独立的物理DMA引擎(最多4个H2C和4个C2H)。这些DMA引擎可以映射到单独的AXI4Stream接口&#xff0c;也可以将共享的AXI4内存映射(MM)接口映射到用户应用程序。在axis4 MM接口上&#xff0c;PCI Express的DMA/桥接…

Goby漏洞利用优化 | GeoServer远程代码执行漏洞(CVE-2024-36401)(支持回显命令执行、内存马)

漏洞名称&#xff1a;GeoServer /geoserver/wfs 远程代码执行漏洞&#xff08;CVE-2024-36401&#xff09; English Name&#xff1a;GeoServer /geoserver/wfs Code Execution Vulnerability(CVE-2024-36401) 漏洞描述及详情&#xff1a;&#xff08;见上篇&#xff09; Ge…

Linux -- 认识gcc/g++、代码的编译过程

目录 前言&#xff1a; 使用 gcc/g&#xff1a; 代码的编译过程&#xff1a; 预处理&#xff1a; 头文件展开&#xff1a; 宏替换去注释&#xff1a; ​编辑 条件编译&#xff1a; 编译&#xff1a; 汇编&#xff1a; 链接&#xff1a; 动态库&#xff08;动态链…

爬取天气数据,利用Pyecharts作轮播图

爬取网站链接&#xff1a;https://lishi.tianqi.com/xiamen/202312.html 爬取了厦门市2023年一整年的天气数据&#xff0c;包括最高温&#xff0c;最低温&#xff0c;天气&#xff0c;风力风向等 爬虫代码&#xff1a; import requests import pandas as pd import csv from…

新手怎么使用《藏文翻译词典》查藏文单词和藏语近义词反义词?手把手教你写藏文作文!

西藏地区的学生常常需要使用藏语写作业写作文&#xff0c;同时还需要学习汉语中文&#xff0c;在这种情况下&#xff0c;一款好用的藏语翻译和藏文词典工具&#xff0c;就显得非常重要了&#xff0c;在这里教大家使用《藏文翻译词典》工具&#xff0c;利用它学习汉语和写好藏文…

excel表格移动一整行或者移动一整列

首先选中一整行&#xff0c;将鼠标移动到边边上&#xff0c;知道出现黑色十字型箭头鼠标头然后按住shift键&#xff0c;同时移动到想去的地方就可以了 注意&#xff1a;mac和Windows都是shift键&#xff0c;mac的option键只是将列复制一份到移动到的地方&#xff0c;然后移动到…

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件 使用Sortable插件这里要保证获取到的是父节点的下标&#xff0c;属性newDraggableIndex获取到的就是只有父节点的下标。设置子节点不能被拖动&#xff0c;最后在逐个调用接口进行数据库中顺序的更新。 <template>…

两名程序员与一名运维人员历经整整一天的时间,成功解决了 nacos 登录时出现“ERR CONNECTION RESET,用户名或密码错误”这一棘手问题

上图看页面报错 这是网页应用提示的信息&#xff0c;服务器日志没有明显的错误日志&#xff0c;检查了账号密码是正常的。 再上第二张图 把这个信息发到百度上查找 通过上图的信息大概知道网络层的原因&#xff0c;可能是在网络安全方面被重置了 下面我们就验证下 1、在服务…

谈面向任务的多轮对话系统(TOD)

面向任务对话系统&#xff08;Task-Oriented Dialogue (TOD) Systems)主要是为解决特定任务的&#xff0c;比如订票任务&#xff08;订机票&#xff0c;电影票等&#xff09;&#xff0c;预定饭店等。这种对话往往需要多轮对话才能够完成。 多轮对话的例子 客户预定一个餐厅的…