pointnet2(pointnet++)源码复现
该项目的github原始地址:https://github.com/charlesq34/pointnet2
目录
- 1.环境配置
- 1.1 环境展示
- 1.2 环境配置
- 1.3 下载源码及训练数据集
- 1.4 编译tf_ops
- 2. 训练
1.环境配置
1.1 环境展示
官方在ubuntu14.04上进行了测试,所用环境为:
tensorflow-gpu1.2
python2.7
我所使用的设备为2080上的ubuntu18.04,所用的环境为:
anaconda3
tensorflow-gpu 1.8.0
python 3.6
cuda 9.0
cudnn7.6
gcc 5.5
conda list如下:
接下来配置上述环境,并编译tensorflow(编译过程遇到的问题比较多)
1.2 环境配置
创建虚拟环境:conda creat -n pointnet++ python=3.6
启动环境:conda activate pointnet++
安装:tensorflow-gpu:pip install tensorflow-gpu==1.8.0
查看是否安装成功:python -c 'import tensorflow as tf; print(tf.__version__)'
(安装成功:输出1.8.0)
其余环境可以在运行程序报错后依次pip安装
安装与tensorflow-gpu1.8对应的cuda和cudnn,这里需要cuda9.0,cudnn7.6,安装过程参看:ubuntu18.04下cuda9.0-cudnn7.6安装与多版本cuda共存及切换
1.3 下载源码及训练数据集
源码地址:https://github.com/charlesq34/pointnet2
修改代码:由于python2与python3的语法上的不同,需要将代码中的xrange替换为range;print后面的加括号
下载数据集:下载地址
将下载好的数据放置到pointnet2-master/data/目录下并解压,如下tree:
将代码中下载数据集的部分注释掉:在train.py 和train_multi_gpu.py中注释掉第25行的import modelnet_ht_dataset
1.4 编译tf_ops
官网中的指导:
终端输入:
python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())'
输出:/home/gzz/anaconda3/envs/pointnet++/lib/python3.6/site-packages/tensorflow/include
python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())'
输出:/home/gzz/anaconda3/envs/pointnet++/lib/python3.6/site-packages/tensorflow
cd 到tf_ops文件夹,将3d_interpolation、grouping、sampling中的.sh文件进行修改(以tf_sampling_compile.sh为例):
将下图蓝色部分改为自己的cuda版本,红色部分为上面的第一个输出,灰黑色部分为上面的第二个输出+/
#/bin/bash
/usr/local/cuda-9.0/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC# TF1.2
#g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /usr/local/lib/python2.7/dist-packages/tensorflow/include -I /usr/local/cuda-8.0/include -lcudart -L /usr/local/cuda-8.0/lib64/ -O2 -D_GLIBCXX_USE_CXX11_ABI=0# TF1.4
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /home/gzz/anaconda3/envs/pointnet++/lib/python3.6/site-packages/tensorflow/include -I /usr/local/cuda-9.0/include -I /home/gzz/anaconda3/envs/pointnet++/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /usr/local/cuda-9.0/lib64/ -L /home/gzz/anaconda3/envs/pointnet++/lib/python3.6/site-packages/tensorflow/ -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0
三个.sh文件操作一样。
这里编译可能会遇到一些问题,我的是按照上述改成功的。
如果失败可以将最后面的-D_GLIBCXX_USE_CXX11_ABI=0
改为-D_GLIBCXX_USE_CXX11_ABI=1
,或者注释掉#-D_GLIBCXX_USE_CXX11_ABI=0
(网上教程gcc版本高于4.0要改为1,这里一开始我是按照网上教程上来直接就改了,但是后面运行train.py文件报错,后面发现0才适合我,如果这里遇到编译失败或者编译成功后train.py报错的话可以把这几种都试试)我的报错如下:
tensorflow.python.framework.errors_impl.NotFoundError: /home/wu/pointnet2-master/tf_ops/sampling/tf_sampling_so.so: undefined symbol: _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringB5cxx11Ev
关于该问题可以参看:
官网issues48
2. 训练
python train.py
报错:
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/wu/pointnet2-master/data/modelnet40_normal_resampled/shape_names.txt’
将data/modelnet40_normal_resampled/下的modelnet40_shape_names.txt文件改名为shape_names.txt即可
训练数据将保存在log文件夹中的log_train.txt中:
通过:tensorboard --logdir=/home/wu/pointnet2-master/log
可以可视化训练过程,其中–logdir后面是你自己的log文件夹的位置
训练完以后进行验证:
python evaluate.py --num_votes 12
pointnet2(pointnet++)源码复现相关推荐
- muduo网络库源码复现笔记(十七):什么都不做的EventLoop
Muduo网络库简介 muduo 是一个基于 Reactor 模式的现代 C++ 网络库,作者陈硕.它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程 ...
- 3D点云深度学习PointNet源码解析——conv2D,fc,max_pooling
PointNet在实际搭建网络结构时,其实是将N×3N×3N\times 3的点云当作图片处理,即height=N,width=3.作者对其搭建网络所用到的各种层进行了二次封装,存放于tf_util. ...
- AttacKG: Constructing Technique Knowledge Graph from Cyber Threat Intelligence Reports 源码复现
AttacKG:从网络威胁情报报告构建技术知识图谱 文章摘要 网络攻击越来越复杂和多样化,使得攻击检测越来越具有挑战性.为了打击这些攻击,安全从业者积极总结并以网络威胁情报(CTI)报告的形式交流他们 ...
- PointNet源码解读
本次源码解读的地址为:https://github.com/yanx27/Pointnet_Pointnet2_pytorch,这一版本的源码易读性高,主要是封装程度较低,注释较全,安装额外的库也比较 ...
- 目标检测——detr源码复现【 End-to-End Object Detection with Transformers】
1.环境 2.文档 detr源码地址 detr论文地址 3.数据集 自定义coco数据集 4.模型 在github上面下载 链接:https://pan.baidu.com/s/1fmOYAOZ4yY ...
- 3D点云深度学习PointNet源码解析——pointnet_cls.py.py
参考博客: #这个文件实现了网络的分类结构.输出为B*40,是每个样本对于每个类别的概率.网络结构在get_model()中定义,loss则在get_loss中定义 import tensorflow ...
- 【图像语义分割】DeepLabv3+(Pytorch版) 源码复现—Kitti数据集
自己研究课题涉及到图像语义分割,所以最近复现了Deeplabv3+,在KITTI数据集上进行实验,kitti的语义分割数据集是按照cityspace的数据集制作的所有可以用cityspaces的训练模 ...
- pytorch 测试每一类_DeepFM全方面解析(附pytorch源码)
写在前面 最近看了DeepFM这个模型.把我学习的思路和总结放上来给大家和未来的自己做个参考和借鉴.文章主要希望能串起学习DeepFM的各个环节,梳理整个学习思路.以"我"的角度浅 ...
- android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、风扇叶片效果等源码...
2019独角兽企业重金招聘Python工程师标准>>> Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android ...
最新文章
- php变量类型怎么表示,PHP 数据类型_php
- properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!...
- signature=eddfa127dafaf9a7c1ea87598961fbc9,Slingerende vrachtwagens verleden tijd?
- VTK:图片之ImageOrientation
- 假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)...
- 15 操作系统第四章 文件管理 文件的物理结构 文件存储空间管理
- AntDesignUI - V3.0 技术手册(资源篇)
- jQuery: 合并表格中相同文本的相邻单元格
- JVM—引用计数和可达性分析算法(存活性判断)
- 工业机器人实训耗材_工业机器人实训室
- 对VC++一些常见问题的整理
- group by 深入总结
- android 开机自启动实现
- java 多线程课件_Thread_java多线程参考源码_ppt_大学课件预览_高等教育资讯网
- 支付宝和微信横扫境外商户,外国人冷眼旁观
- 三种方法解决苹果手机签名问题
- 与rasp的初次心动
- VS2019 MFC模式下如何调用控制台并用cprintf在控制台打印
- 【工业智能】用AI来做工业设备的故障诊断,目前还停留在“鸡尾酒疗法”阶段
- 天然“降脂药”,帮你“吃掉”血脂!