对于Pointnet++这个网络是一个基于和扩展Pointnet网络,pointnet网络(V1模型)可以独立的转换各个点的特征,也可以处理整个点集的全局特征,然而在多数情况下,存在明确定义的距离度量,例如,由3D传感器手机的3D电云的欧几里得距离或者注入等距形状表面的流形的测地距离。在pointnet++中,网络对点集的空间局部特征进行了处理。

本博文主要记录跑pointnet++时候遇到的几个问题,以及如何解决的。

pointnet++官网的运行环境是:在 Unbuntu14.04系统下,Python版本2.7,Tensorflow-GPU版本 1.2.0

本博文的运行的环境是:在Ubuntu18.04.1系统下, Python版本 3.6.2, Tensorflow-GPU版本 1.8.0

问题1:python版本不一致的问题

官网的代码运行的Python版本是2.7,本博文的Python版本是3.6.2,所以需要将所有的代码中出现 xrange 更改为range

所有需要print的部分都需要使用括号括起来。

问题2:缺少一些必要的库的问题

如果代码中缺少必须要是用的库,那么你需要安装相应的库。一些库可以使用pip命令进行安装,而有的一些自己编写的函数需要导入的则需要将它的路径添加到python的libary path中即可。

对于可以使用pip命令安装的库可以使则需要使用下面命令进行缺少库的安装。

pip3 install 库的名称

#例如,缺少numpy

pip3 install numpy

对于一些自己编写的需要导入,像这个里面的   modelnet_dataset.py   、modelnet_h5_dataset.py 等 就不能使用pip命令进行安装,这时就在终端中输入以下命令新建一个pth格式文件,(针对在pycharm中进运行代码的)

echo > pointnet++.pth

使用右键点击 Open With Text Editor 打开文件后,在里面添加 需要导入自己编的函数的路径然后保存。

把保存后的文件复制到你的python的site-packages文件夹中,我的是在路径:/home/hui/anaconda3/lib/python3.6/site-packages中。这时候重新打开pycharm就会发现,找不到自己编写的库的问题已经解决。

问题3:如何进行编译tf_ops文件夹下的文件并得到   *so 和 *o   格式的文件

在tf_ops的文件夹下,有   3d_interpolation、grouping、sampling 三个文件夹,每一个文件夹中的文件都需要进行编译才能运行

1.如果你的环境配置和官方的环境配置一样,进入到sampling文件夹中(以这个编译为例,其他两个和这个一模一样),右击打开终端,输入下面命令就可以编译成功。

sh tf_sampling_compile.sh

编译前:                                                                             编译成功后:

2.如果和官方的环境不一样(其实可以不用管tensorflow的版本,版本高的都用TF1.4 并将TF1.2下面的命令注释掉就行;低于1.4的你就用TF1.2下面的命令,将TF1.4注释掉),则需要修改    tf_sampling_compile.sh  文件中的内容。

修改前的内容,如下图所示。

修改后的内容,如下图所示。

下面是对上面为什么这样修改的解释说明:

对于 /bin/bash 下面的修改,你需要找到你电脑中安装nvidia的cuda的位置,如果是默认安装位置一般情况下是在路径: /usr/local/cuda-9.0/bin/nvcc  下,如果记不清楚在哪里,直接文件夹的搜索,找到nvcc路径,并将  /usr/local/cuda-8.0/bin/nvcc  l路径替换掉即可。

该前:

改后:

对于#   TF1.4  下面的修改,需要替换掉5个路径

①路径:/usr/local/lib/python2.7/dist-packages/tensorflow/include  的替换。

你需要找到你自己的python下的tensorflow的安装包在哪里,我的使用的anaconda下的环境,路径在      /home/hui/.local/lib/python3.6/site-packages/tensorflow/include (如果你找不到,直接使用‘tensorflow’关键词进行搜索) ,然后替换掉原始文件中的路径   /usr/local/lib/python2.7/dist-packages/tensorflow/include  就行。

②路径: /usr/local/cuda-8.0/include   的替换

对于  /usr/local/cuda-8.0/include 命令,找到你的电脑中安装的cuda下的include路径即可(找不到,直接使用关键词‘cuda’ 进行搜索)。(我的是:/usr/local/cuda-9.0/include   替换掉    /usr/local/cuda-8.0/include)。

③路径:  /usr/local/lib/python2.7/dist-packages/tensorflow/include/external/nsync/public   的替换。

这个是你所安装的tensorflow库文件夹下的public文件夹(不一定在tensorflow文件夹下,找不到直接用关键词‘external’搜索文件夹,找到后替换)。

我的路径是:/home/hui/.local/lib/python3.6/site-packages/external/nsync/public     替换掉      /usr/local/lib/python2.7/dist-packages/tensorflow/include/external/nsync/public

④路径:  /usr/local/cuda-8.0/lib64/    的替换。

跟②一样的方法,只要找到②,这个就一定能找到。我的路径:/usr/local/cuda-9.0/lib64/     替换掉     /usr/local/cuda-8.0/lib64/

⑤路径:  /usr/local/lib/python2.7/dist-packages/tensorflow    的替换。

跟①一样的方法,只要找到①,这个也一定能找到。我的路径:/home/hui/.local/lib/python3.6/site-packages/tensorflow    替换掉      /usr/local/lib/python2.7/dist-packages/tensorflow

替换掉上面路径后然后保存。

替换前:

替换后:

然后使用下面命令进行编译,得到   *o   和   *so  文件就说明编译成功。

sh tf_sampling_compile.sh

编译成功后如下图所示:

tf_ops 文件夹下的  3d_interpolation 和 grouping 文件夹的编译方式和上面一样。

如果你使用单GPU进行训练到这里代码基本没有什么问题,可以正常训练。如果是多个GPU进行训练还需要解决下面的问题四。

问题4:tensorflow版本不同带来的问题

由于我这里是tensorflow1.8.0版本,官网是1.4版本,有些代码是不一样的,这里进行修改(很小的修改,大部分还是不需要改的)。

train_multi_gpu.py文件的186 和 188 行会报出下图的错误:

错误的代码 :

##train_multi_gpu.py文件中的186行和188行

pc_batch = tf.slice(pointclouds_pl,

[i*DEVICE_BATCH_SIZE,0,0], [DEVICE_BATCH_SIZE,-1,-1])

label_batch = tf.slice(labels_pl,

[i*DEVICE_BATCH_SIZE], [DEVICE_BATCH_SIZE])

改正后的代码:

pc_batch = tf.slice(pointclouds_pl,

[int(i*DEVICE_BATCH_SIZE),0,0], [int(DEVICE_BATCH_SIZE),-1,-1])

label_batch = tf.slice(labels_pl,

[int(i*DEVICE_BATCH_SIZE)], [int(DEVICE_BATCH_SIZE)])

到这里我碰到所有的问题已经解决,可以正常运行,下面是运行的结果。

运行结果

1.运行下面命令,在tensorboard中可视化。

tensorboard --logdir=log

2.CPU的使用情况

3. GPU的使用情况

4.使用 utils 文件夹下的  show3d_balls.py  文件可视化出来的结果。

pointnet 结果可视化_pointnet++的运行相关推荐

  1. pointnet 结果可视化_PointNet论文复现及代码详解

    写在前面 本文主要对PointNet(之前有解读论文)的代码进行了分析和解读,有助于进一步理解其思想.可以发现,PointNet的结构并不复杂,比起CNN还要简单一些.理解PointNet关键在于理解 ...

  2. pointnet 结果可视化_pointNet代码

    组成 1.PointNet classification network分类网络 part segmentation network 数据集 1.point clouds sampled from 3 ...

  3. pointnet 结果可视化_PointNet 网络分析

    目前二维深度学习取得了很大的进步并且应用范围越来越广,随着三维设备的发展,三维深度学习得到了很大的关注.PointNet是斯垣福大学在2016年提出的一种点云分类/分割深度学习框架. PointNet ...

  4. MaxCompute Studio使用心得系列3——可视化分析作业运行

    上一篇写分享了通过MaxCompute Studio 编写sql脚本时"编译"功能带来的便捷,这次分享脚本编译好提交运行后,自助查看作业的执行情况. 我们很熟悉的是通过logvie ...

  5. 爬取猫眼电影影评,数据可视化分析源代码运行说明

    欢迎关注微信公众号:简说Python 账号:xksnh888 关注回复:1024,可以领取精选编程学习电子书籍. 爬取猫眼电影影评,数据可视化分析 项目地址 :github项目地址 之前一直有同学说不 ...

  6. Tensorflow学习教程------tensorboard网络运行和可视化

    tensorboard可以将训练过程中的一些参数可视化,比如我们最关注的loss值和accuracy值,简单来说就是把这些值的变化记录在日志里,然后将日志里的这些数据可视化. 首先运行训练代码 #co ...

  7. Python命令行可视化库

    我们通常都是在自己的电脑上跑程序,直接是可以可视化相应的结果.如果是在服务器上的话,使用终端,是不太方便查看结果.本文介绍4个可以在命令行中使用的Python库,分别是 Bashplotlib tqd ...

  8. 发现 4 个 Python 命令行可视化库,又酷又炫!

    通常大家都是在自己的电脑上跑程序,直接是可以可视化相应的结果. 如果是在服务器上的话,使用终端,是不太方便查看结果. 今天给大家介绍4个可以在命令行中使用的Python库. 分别是Bashplotli ...

  9. TensorFlow笔记(3) TensorBoard可视化

    TensorFlow笔记(3) TensorBoard可视化 1. TensorBoard简介 2. 运行TensorBoard 3. 常用API 1. TensorBoard简介 TensorBoa ...

最新文章

  1. [软件架构:设计模式系列C#篇]系列教程汇总
  2. 6招识破翻新iPhone
  3. 原创,自己做的一个简单实用的提示小插件,兼容性很好,基本上都兼容!
  4. mongoDB 数据库简介
  5. win 8升级win8.1的几个问题
  6. [html] marquee详解
  7. win32应用程序_电脑打不开exe程序|Win10提示exe不是有效32应用程序
  8. java 国际化 properties_java Properties 读取文件,国际化
  9. 生成指定序列的前一字典序序列(洛谷P2525题题解,C++语言描述)
  10. jstack 线程状态分析_面试官:说说你是怎么用JDK监控和故障处理工具的吧?例如jstack...
  11. HTML控制表格边线显示。
  12. 计算机组成原理第6版课后答案,计算机组成原理第6章习题参考答案
  13. Win8怎么在桌面显示我的电脑
  14. 计算机专业人才需求大吗,对计算机专业人才需求现状
  15. 对于提高团队开会效率的看法
  16. linux文件与目录管理常用命令的分类【linux基础篇五】
  17. 现代企业管理的12法宝(zt)
  18. 共读四步法:看见正向核心的力量—欣赏式探询共读会
  19. 2019年南京大学计算机研究生复试分数线,南京大学2019年硕士研究生复试基本分数线...
  20. spring-context.xml

热门文章

  1. C#中的线程(中)-线程同步
  2. linux必须运行在enforcing,Linux系统中SELinux的工作模式(Disabled、Permissive和Enforcing)...
  3. plink - 关于提取某一个特定的SNP
  4. GE千兆以太网光口模式协商原理
  5. 研究生毕业后要不要落户上海?今年非上海生源应届生申请户籍评分办法~
  6. Windows Essentials 2012(Windows live 2012) 简体中文离线版
  7. linux查看db2表空间大小,DB2 查看表空间的容器情况
  8. opengl/c++ 用粒子系统实现星轨效果
  9. 2个或多个路由器有线连接设置技巧分享
  10. 关于Blender导出FBX动作失效的问题