课题涉及到点云语义分割,最近配置运行了RangeNet++,复现过程中,GPU加速工具配置较为头疼,所以做一个全面的记录,包括一些编译报错和踩坑的总结,与大家分享(纯小白)

本文代码Github地址:https://github.com/PRBonn/rangenet_lib
原文地址:https://www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/milioto2019iros.pdf

目录

  • 1、环境配置
    • 1.1 笔者环境(亲测可用)
    • 1.2 Cuda10.1安装
    • 1.3 cudnn 7.6.2安装
    • 1.4 TensorRT 5.1.5安装
  • 2、RangeNet++源码编译
  • 3、运行demo

1、环境配置

1.1 笔者环境(亲测可用)

Ubuntu18.04
GPU:GTX1060 6GB
驱动:Ubuntu推荐的nvidia-driver-470
Cuda10.1 + cudnn7.6.2 + TensorRT 5.1.5.0+GCC 7
接下来对本文GPU加速工具的配置做个总结

1.2 Cuda10.1安装

官网下载:https://developer.nvidia.com/cuda-toolkit-archive

(1)选择CUDA Toolkit 10.1 update2

(2)选择自己的配置,依照Base Installer命令安装(注意选择runfile)

(3)开始安装,取消安装驱动,其余默认(y)安装

(4)安装完成
(5)环境变量配置
1> 终端输入:

gedit ~/.bashrc

2> 在bashrc末尾加入:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
export PATH=$PATH:/usr/local/cuda-10.1/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.1

3> 变量生效

source ~/.bashrc

4> 验证版本

nvcc -V

1.3 cudnn 7.6.2安装

官网下载(需要登陆):https://developer.nvidia.com/cudnn

(1) 选择与Cuda对应的版本下载(cudnn7.6.2)

(2)下载后解压得到cuda文件夹
(3)将解压出的文件,移动到/usr/local/cuda文件夹下

sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib64/
sudo cp  cuda/include/cudnn.h /usr/local/cuda-10.1/include/

(4)赋予所有用户权限,cudnn安装完成

sudo chmod a+r /usr/local/cuda-10.1/include/cudnn.h
sudo chmod a+r /usr/local/cuda-10.1/lib64/libcudnn*

(5)验证cudnn

cat /usr/local/cuda-10.1/include/cudnn.h | grep CUDNN_MAJOR -A 2

1.4 TensorRT 5.1.5安装

官网下载地址:https://developer.nvidia.com/nvidia-tensorrt-download
(1)选择要下载的版本(TensorRT 5)
(2)选择TensorRT 5.1 GA(GA版较稳定)
(3)完成问卷调查,选择同意协议
(4)选择对应的Ubuntu和Cuda得版本下载,我的选择如下:

注:如果Cuda下载用的是deb(local),则TensorRT也需要下载Debian包本地安装(上图第一个);而Cuda用runfile安装,就得下载tar压缩安装;两者需要对应,否则安装会报错。

(5)下载完成后,解压到本地
(6)把 TensorRT 的库和头文件添加到系统路径下(这步很重要)

# TensorRT目录下
sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include

(7)添加路径到环境变量

gedit ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-5.1.5.0/lib
source ~/.bashrc

上述完成,则TensorRt的C++接口安装就完成了。

(8)测试

#在TensorRt目录文件夹下,cd到sample文件夹下
sudo make
cd ../bin
./sample_int8 mnist

输出如下结果则安装成功!

(9)如果还要用Python接口:

#在下载的TensorRT目录文件夹下
cd TensorRT-5.0.2.6/python
pip install tensorrt-5.0.2.6-py2.py3-none-any.whl# 安装UFF,支持tensorflow模型转化
cd TensorRT-5.0.2.6/uff
pip install uff-0.5.5-py2.py3-none-any.whl# 安装graphsurgeon,支持自定义结构
cd TensorRT-5.0.2.6/graphsurgeon
pip install graphsurgeon-0.3.2-py2.py3-none-any.whl

(10)python接口验证

python3
import tensorrt
tensorrt.__version__
#输出'5.1.5.0'则安装成功!

2、RangeNet++源码编译

(1)确认上述Cuda、cudnn和TensorRT安装成功
(2)相关依赖安装

sudo apt-get update
sudo apt-get install -yqq  build-essential python3-dev python3-pip apt-utils git cmake libboost-all-dev libyaml-cpp-dev libopencv-dev
sudo apt install python-empy
sudo pip install catkin_tools trollius numpy

(3)使用 catkin 工具来构建库,终端打开:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/ros/catkin.git
git clone https://github.com/PRBonn/rangenet_lib.git
cd .. && catkin init
catkin build rangenet_lib

(4)笔者编译报错
注意gcc和g++版本(我的是gcc-7,可以编译通过)
报错如下:
“–can not be used when making a PIE object; recompile with -fPIC”
“最后的链结失败:输出不可表示的节”

原因:推断故障在连接程序上。从Ubuntu16.04版本开始默认启用PIE了,但makefile里不支持PIE导致报错。 专门的静态库“libmbedcrypto.a”曾经在没有选项“fPIC”的情况下编译过,但目前的系统编译器肯定会打开这个功能,所以提示建议使用-fPIC重新编译。

解决:在rangenet_libz的 “CMakeLists.txt” 中,添加下一个命令行,将“-fPIC”更改为“-no-pie”,如下所示:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -fopenmp -w -no-pie")


修改后保存,重新catkin编译

(5)编译通过

3、运行demo

(1)预训练模型下载:https://www.ipb.uni-bonn.de/html/projects/semantic_suma/darknet53.tar.gz
(2)预测demo

# cd到catkin workspace下
cd ~/catkin_ws
# -p后是预训练模型路径、-s后是要预测点云.bin demo路径
./devel/lib/rangenet_lib/infer -p /path/to/the/pretrained/model -s /path/to/the/scan.bin --verbose

(3)结果展示

视频展示:https://www.bilibili.com/video/BV1vY411M7ry?spm_id_from=333.999.0.0
至此RangeNet++配置运行完成,感谢阅读!

参考致谢:
https://zongxp.blog.csdn.net/article/details/86077553
https://blog.csdn.net/mathlxj/article/details/107810548
https://blog.csdn.net/weixin_44793883/article/details/120659876
https://blog.csdn.net/pei327586354/article/details/122371524
https://blog.csdn.net/hanyulongseucas/article/details/87715186
https://blog.csdn.net/qq_33530592/article/details/106011826

【点云语义分割】Ubuntu18.04+GTX1060 配置运行RangeNet++相关推荐

  1. 深度学习点云语义分割:CVPR2019论文阅读

    深度学习点云语义分割:CVPR2019论文阅读 Point Cloud Oversegmentation with Graph-Structured Deep Metric Learning 摘要 本 ...

  2. 三维点云语义分割总览

    点云PCL免费知识星球,点云论文速读. 标题:三维点云语义分割总览 作者:吉祥街 欢迎各位加入免费知识星球,获取PDF文档,欢迎转发朋友圈,分享快乐. 希望有更多的小伙伴能够加入我们,一起开启论文阅读 ...

  3. 17篇点云处理综述-点云语义分割、点云物体检测、自动驾驶中的点云处理……

    三维点云是最重要的三维数据表达方式之一. 从技术角度看,在三维重建.SLAM.机器人感知等多个领域,三维点云都是最简单最普遍的表达方式,因为三维点云直接提供了三维空间数据,而图像则需要通过透视几何来反 ...

  4. 点云分割和点云分类(点云语义分割)

    目录 概念 点云分割(point cloud segmentation) 点云分类(point cloud classification) 特征提取 分割 物体识别 分类 常见点云分割方法 随机抽样一 ...

  5. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  6. 一种高效的基于邻域空间聚合的点云语义分割不确定性估计方法(ICRA2021)

    Neighborhood Spatial Aggregation based Efficient Uncertainty Estimation for Point Cloud Semantic Seg ...

  7. CVPR2021|基于双边扩充和自适应融合方法的点云语义分割网络

    Semantic Segmentation for Real Point Cloud Scenes via Bilateral Augmentation and Adaptive Fusion 1.M ...

  8. [CVPR 2020] RandLA-Net:大场景三维点云语义分割新框架(已开源)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文由知乎作者Qingyong Hu授权转载,不得擅自二次转载.原文链接:https://zhuanl ...

  9. 利用深度学习的点云语义分割(一)

                                               Semantic Segmentation of Point Clouds using Deep Learning ...

最新文章

  1. php ping 命令注入,CTF关于ping命令注入问题
  2. 黑客这样使用python发邮件
  3. c语言 系统命令,c语言如何调用系统命令
  4. 为啥大街上全是跑外卖的年轻人?
  5. python自动搜索最佳超参数之GridSearchCV函数
  6. 好莱坞法则_人工智能去好莱坞
  7. 扩展kalman滤波matlab程序,扩展卡尔曼滤波算法的matlab程序
  8. Stimulsoft BI Designer创建报告和仪表板
  9. 基于javaweb+mysql的个人日记管理系统
  10. Java开源Web开发框架
  11. androidstudio安装的app打开闪退,AndroidManifest中也声明了类,但是却没有报错信息。(小坑)
  12. 空间解析几何:圆柱面一般式方程的推导——已知中轴线和半径
  13. C语言自己认为理解有难度的或者容易犯错的知识
  14. R12_专题知识总结提炼-AP模块
  15. Linda Rising:“你相信谁?”
  16. 牛投客- 最新热门炒股讲解分享
  17. Python-计算md5值对图片去重
  18. 心得整理之一--RDLC多数据源多表
  19. FPGA之蜂鸣器播放音乐《花海》
  20. 游戏关键数据指标解读

热门文章

  1. IPv4地址的基础概念与应用
  2. rdp远程连接windows和linux,详解 Linux 和 Windows 间的远程桌面访问
  3. 优秀的网站都用了这几个属性
  4. 优秀笔记课件——当今世界政治格局
  5. Android自动化测试基础知识——Appium
  6. RxJava2 如何使工作线程在Disposable.dispose后完成流程
  7. 那些不得不说的Android App专项测试必备命令,你值得拥有!
  8. Fixed There was a problem with the editor 'vi'
  9. flutter 视频播放器 FijkPlayer视频播放器的使用
  10. TOEFL wordlist 20