当前位置:   article > 正文

Pointnet++复现流程及问题解决

pointnet++复现

复现流程

1.通过github下载pointnet++的包;

2.以分类为例,在pointnet2-master目录下新建data文件夹,将modelnet40_ply_hdf5_2048数据集解压到data文件夹内;

3.安装相关环境配置,有如下建议:
a. Anaconda3还是要装的,conda的虚拟环境在学习阶段,有着多种网络且各个网络环境不同时还是挺好用的
b.通过conda创建python2.7的虚拟环境
c.在python2.7的虚拟环境中安装conda install tensorflow-gpu==1.12.0,conda install会同时帮我们安装cudatoolkit 9.2 和 cudnn 7.6.5,测试此环境可运行pointnet++和spider cnn这两个架构
d.其他缺少的包可通过查找来做相应安装

4.tf_ops目录下的三个文件编译
铺垫:任意打开一终端,通过locate cuda_runtime.h查找cuda_runtime.h位置。
本人电脑的结果如:/usr/local/cuda-10.0/include/cuda_runtime.h
a.对3d_interpolation内容修改
将tf_interpolate_compile.sh文件内的内容修改为:

# Get TF variables
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')

g++ -std=c++11 tf_interpolate.cpp -o tf_interpolate_so.so -shared -fPIC -I$TF_INC  -I$TF_INC/external/nsync/public  -L$TF_LIB -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1
  • 1
  • 2
  • 3
  • 4
  • 5

修改完成后运行sh tf_interpolate_compile.sh

b.对grouping内容修改
将tf_grouping_compile.sh文件内的内容修改为:

#/bin/bash
/usr/local/cuda-10.0/bin/nvcc tf_grouping_g.cu -o tf_grouping_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
#!!!!!!上处cuda-10.0版本跟据locate cuda_runtime.h结果修改为相应的版本!!!!!!

# Get TF variables
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')

g++ -std=c++11 tf_grouping.cpp tf_grouping_g.cu.o -o tf_grouping_so.so -shared -fPIC -I$TF_INC  -I$TF_INC/external/nsync/public  -L$TF_LIB -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

将tf_grouping.cpp文件,第十行#include <cuda_runtime.h>修改为#include </usr/local/cuda-10.0/include/cuda_runtime.h>,修改内容见铺垫
修改完成后运行sh tf_grouping_compile.sh

c.对sampling内容修改
将tf_sampling_compile.sh文件内的内容修改为:

#/bin/bash
/usr/local/cuda-10.0/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
#!!!!!!上处cuda-10.0版本跟据locate cuda_runtime.h结果修改为相应的版本!!!!!!

# Get TF variables
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')

g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I$TF_INC  -I$TF_INC/external/nsync/public  -L$TF_LIB -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

将tf_sampling.cpp文件,第十行#include <cuda_runtime.h>修改为#include </usr/local/cuda-10.0/include/cuda_runtime.h>,修改内容见铺垫
修改完成后运行sh tf_sampling_compile.sh

5.在pointnet2-master文件第一级目录下打开python2.7的conda虚拟环境,运行python train.py即可训练

报错解决

1.如下报错:
/usr/bin/ld: 找不到 -ltensorflow_framework
collect2: error: ld returned 1 exit status
  • 1
  • 2

修改方法:一开始用的tf1.14.0,cuda10.1,cudnn7.6.5,就会报着个错误。论文给的环境是cuda8和cudnn6,经过测试,cuda9和cudnn7还能运行,再高就不行了,所以就别装tf1.12以上的tf架构了。anaconda就是解决这种问题的。

2.如下报错:
fatal error: cuda_runtime.h: No such file or directory
  • 1

修改方法:通过locate cuda_runtime.h查找cuda_runtime.h位置(本人电脑的结果如:/usr/local/cuda-10.0/include/cuda_runtime.h ),之后将cpp文件里的内容修改#include <cuda_runtime.h>修改为#include </usr/local/cuda-10.0/include/cuda_runtime.h>

3.如下报错:
ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringEv
  • 1

修改方法:将tf_ops目录下的三个文件的sh文件按上文修改后再进行sh命令。
主要就是要帮sh文件内的命令找对目录,并且要将-D_GLIBCXX_USE_CXX11_ABI=0修改为 -D_GLIBCXX_USE_CXX11_ABI=1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/101767
推荐阅读
相关标签
  

闽ICP备14008679号