pointnet实现
最近在学三维点云处理网络,想自己把pointnet跑一下,但我的笔记本是CPU的,据说跑起来很慢而且电脑很烫,所以就想利用云端服务器提供的GPU来跑一下。在此记录一下实现过程。
为了方便上传自己的数据集,我选择了在极客云租用GPU,按小时计费,有很多GPU选择,总算是能够成功实现pointnet了,目前我只运行了分类模型(classcification),下面我来介绍一下步骤。
1. 下载源码
首先,在pointnet的官网有github的链接,注册github后可以直接下载源代码。记得要注册github,我刚开始直接下载,下载了半天都没成。。。
从github下载的文件包如图,打开README.md文件可以看到pointnet的官方介绍和使用指南。
注意,图中的.py文件是分类模型的源码,如果要运行part segmentation模型或semantic
segmentation模型,则对应part_seg或sem_seg文件夹的代码。
2. 对源代码作一些改动准备
不知道为什么,在源码的README.md文件中,写明每个点云是在实体表面上均匀采集的2048个点,但是train.py的文件中默认的num_point是1024,所以我将pointnet-master下train.py文件中的num_point默认值改成2048
一些博客上说需要改动train.py中数据集的路径信息,我亲自测试过,只要按照步骤3下载数据集,不用更改路径信息。
#源码中的默认点数为1024
#parser.add_argument('--num_point', type=int, default=1024, help='Point Number [256/512/1024/2048] [default: 1024]
#改成2048
parser.add_argument('--num_point', type=int, default=2048, help='Point Number [256/512/1024/2048] [default: 2048]')
3. 下载数据集
在provider.py文件中有自动下载数据集的代码,建议自己先下载好数据集到本地。 (如果使用国外的服务器,可以直接在服务器上下载。)
由于官方下载数据集太慢了,这里给出classification的数据集的网盘链接。
modelnet40_ply_hdf5_2048.zip
提取码:gu5q
在对应train.py所在的目录中新建文件夹data,把数据集下载到里面。先不要解压。然后将provider.py中红框圈起来部分注释掉。(注意:使用不同的模型,需要在不同的文件夹下载不同的数据集,需要修改对应不同的provider.py文件)
由于数据集下载很慢,我只下载了分类网络的数据集。我是根据另一个博主的推荐用Free Download Manager下载的,但还是下载了很久,建议夜间下载。听说迅雷下载也会快一点,可以试试。
做完上述工作后,把文件夹压缩保存为文件。
4. 上服务器
注册极客云。极客云提供GPU云服务,极客云上可以根据不同版本的tensorflow和python创建环境。
极客云注册传送门(刚注册可以申请5元新人体验券哦)
(这是我的邀请码:fknS1fQ2L5TPZkIq1mTi7g==,填写邀请码后,被邀请者充值满10元后,我们都能获得10元优惠劵 ^ _ ^* )
!!!先上传数据再创建实例!!!
将步骤3准备好的压缩包上传。然后将data文件夹下的数据集解压。
下图是选择界面
根据README.md文件描述,选择python2.7+tensorflow1.0.1
GPU类型自己选,有很多不同型号和价格
我选择的是 GTX 1070 G3930 2核16G 1.5TB硬盘 网速D100/U30 (独占2.8元每小时)
接下来的部分我借鉴了下面这篇博文
pointnet代码运行------by极客云服务器
5. 输出的结果都是什么?
(1) 关于数据集
先了解一下数据集构成,点云文件由h5格式存储。
训练集含有5个h5文件,train_files中是这5个h5文件的路径。
测试集含有2个h5文件,test_files中是这2个h5文件的路径。
(2)关于输出的理解
查看train.py代码得知,
每一轮(EPOCH)分别进行training和testing两个任务。
for epoch in range(MAX_EPOCH):log_string('**** EPOCH %03d ****' % (epoch))sys.stdout.flush()train_one_epoch(sess, ops, train_writer)eval_one_epoch(sess, ops, test_writer)# Save the variables to disk.if epoch % 10 == 0:save_path = saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"))log_string("Model saved in file: %s" % save_path)
在training阶段,训练集每个h5文件的数据分批次输入网络训练,对每个文件输出一次【平均分类误差和分类准确率】。然后重置loss和acc,5个文件的这两个参数并不累加。
在testing阶段,测试集每个h5文件的数据分批次输入网络训练,2个h5文件输入网络后,输出【总的平均分类误差、分类准确率和40个类别召回率的平均值】,2个文件的这些参数值累加。
#这是Terminal的输出,保存在log_train.txt文件中
**** EPOCH 000 ****
----0-----
mean loss: 3.741447
accuracy: 0.220703
----1-----
mean loss: 2.662842
accuracy: 0.332031
----2-----
mean loss: 2.233688
accuracy: 0.416667
----3-----
mean loss: 2.018896
accuracy: 0.463379
----4-----
mean loss: 1.819018
accuracy: 0.503906
----0-----
----1-----
eval mean loss: 1.642117
eval accuracy: 0.549919
eval avg class acc: 0.470893
Model saved in file: log/model.ckpt
每10个EPOCH保存一次模型,保存在pointnet-master文件夹下log/model.ckpt中
# Save the variables to disk.if epoch % 10 == 0:save_path = saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"))log_string("Model saved in file: %s" % save_path)
默认最大训练轮数为250,我最终训练到第137个EPOCH,一共花了超过4个半小时。训练集准确率为95.5%左右,测试集准确率只有约88.3%,召回率约为85.5%
**** EPOCH 137 ****
----0-----
mean loss: 0.113151
accuracy: 0.958984
----1-----
mean loss: 0.125070
accuracy: 0.955078
----2-----
mean loss: 0.138621
accuracy: 0.948242
----3-----
mean loss: 0.127347
accuracy: 0.958333
----4-----
mean loss: 0.127848
accuracy: 0.955078
----0-----
----1-----
eval mean loss: 0.496802
eval accuracy: 0.882711
eval avg class acc: 0.855228
6. tensorboard数据可视化
使用tensorboard可以查看训练过程的超参数变化
我是将log文件夹下面这个文件下载到本地,用自己的tensorflow查看。
打开Anaconda Prompt,激活tensorflow,输入代码:
activate tensorflow
tensorboard -logdir="上面那个文件的绝对路径"
复制最后的网址到浏览器打开即可。
下面是曲线被90%平滑后,我的accuracy变化(背景是未平滑,smothing=0)
classificaton_loss:
Trainig loss:
pointnet实现相关推荐
- PointNet++:(1)网络完成的任务分析
-----------物体形状分类任务(Shape Classfication)------- 一.数据准备 modelnet40_normal_resampled.zip 解压后下边有: (1)有4 ...
- PointNet++论文个人理解
点击上方"视学算法",选择"星标" 干货第一时间送达 作者丨zmYD@知乎 来源丨https://zhuanlan.zhihu.com/p/157489233 ...
- 细嚼慢咽读论文:PointNet论文及代码详细解析
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨刘昕宸@知乎 来源丨https://zhuanlan.zhihu.com/p/264627148 ...
- 一文搞懂PointNet全家桶——强势的点云处理神经网络
作者:黎国溥,3D视觉开发者社区签约作者,CSDN博客专家,华为云-云享专家 首发:公众号[3D视觉开发者社区] 前言 PointNet是由斯坦福大学的Charles R. Qi等人在<Poin ...
- pointnet 结果可视化_PointNet论文复现及代码详解
写在前面 本文主要对PointNet(之前有解读论文)的代码进行了分析和解读,有助于进一步理解其思想.可以发现,PointNet的结构并不复杂,比起CNN还要简单一些.理解PointNet关键在于理解 ...
- 点云配准 PointNet + Concat + FC
原文: https://yongqi.blog.csdn.net/article/details/109759708 这个推荐有几个: https://zhuanlan.zhihu.com/p/107 ...
- 点云配准网络 PCRNet: Point Cloud Registration Network using PointNet Encoding 2019
本文使用PointNet对点云提取全局特征,不需要计算点云之间的一一对应关系,因此能够实现快速的点云配准. PCRNet根本没有用到局部特征,因此在速度上有优势,精度上会有所妥协.加入了局部特征信息的 ...
- pointnet分割自己的点云数据_点云学习历史文章大汇总
LaserNet:一种高效的自动驾驶概率三维目标探测器 从相机标定到SLAM,极简三维视觉六小时课程视频(附PPT) 计算机图形学遇上深度学习,为3D图像任务打造的深度学习利器TensorFlow G ...
- 【pointnet++点云识别】基于pointnet++的点云地理数据识别的MATLAB仿真
1.软件版本 matlab2021a 2.本算法理论知识 根据http://stanford.edu/~rqi/pointnet2/中关于pointnet++的介绍可知,该算法的基本构架如下所示: 根 ...
- 基于matlab的pointnet++深度学习网络点云数据分类
这里,采用的pointnet++网络结构如下图所示: 在整体网络结构中, 首先进行set abstraction,这一部分主要即对点云中的点进行局部划分,提取整体特征,如图可见,在set abstra ...
最新文章
- edge chrome 浏览器 底色调黑 反色
- JDK与JRE的关系和path的作用浅谈
- 【转】Oracle SPARC SuperCluster全能王:不改大道至简本色
- Kali 渗透测试—Metasploit
- Uncaught TypeError: Object #Document has no method 'load'
- stl-map的一道很好的题目
- PHP的单引号双引号
- git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...
- 奖学金c语言程序,奖学金 (C语言代码)
- android 推送的小图标,android - 推送通知中没有声音并且没有自定义的小图标 - 堆栈内存溢出...
- 球迷 如何在Linux纯命令行玩转谷歌浏览器,边看欧洲杯,边看足球宝贝
- Git教程_1 简介
- bzoj2705 [SDOI2012]Longge的问题
- 如何手动安装wxpython_如何在Ubuntu中安装wxPython的方法及命令
- 数据结构与算法——左程云07
- c# directory.getfiles按照文件名称
- xiunobbs装插件
- 如何在word中删除一段文字的所有空格
- Tungsten Fabric(6):部署更高版本的TF
- Linux_day02
热门文章
- java同步调用异步方法_关于同步方法里面调用异步方法的探究
- java mybatis XML文件中大于号小于号转义
- 部署Kubernetes集群(二进制 v1.18.5版)
- R语言dplyr包group_by函数、quantile函数、summarise函数计算dataframe数据中指定数值数据列在每个分组中的多个分位数值
- “关爱空巢老人”社区小程序开源
- linux 查看已加载模块,Linux怎么查看加载内核模块之lsmod命令
- helloword的忠实追随者
- 基于MATLAB与SOIDWORKS的关节型六轴机械臂仿真
- android 下载图片到相册
- 什么是 spring boot?为什么要用?