• ubuntu18.04+RTX3080下安装rangnet++推理版踩坑全纪录


    1、首先找到rangnet++推理版的github地址
    https://github.com/PRBonn/rangenet_lib
    2、安装
    2.1、TensorRT
    TensorRT版本和cuda版本有严格的对应关系,虽然作者说他们的代码和预训练模型仅在TensorRT-5.1上有效,但是因为本人电脑的cuda版本为11.2,其对应的TensorRT版本不是5.1,而且因为本地已经安装了其它模型,所以不太可能重装cuda,所以本人决定安装cuda11.2对应版本的TensorRT。
    官网https://developer.nvidia.com/nvidia-tensorrt-8x-download查看cuda11.2对应的TensorRT版本为8.0.0.3,找到对应版本“TensorRT 8.0 EA for Linux and CUDA 11.1, 11.2 & 11.3”点击第一个“TensorRT 8.0 EA for Linux x86_64 and CUDA 11.1, 11.2 & 11.3 TAR package”,如图所示,
    在这里插入图片描述这样会下载tar压缩包格式的安装包,名字叫TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz。
    下载好后,我把它安装在了/usr/local下

    cd ~/Downloads
    sudo tar -xzvf TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz -C /usr/local/
    
    • 1
    • 2

    当然,安装在任何地方都可以
    配置环境变量

    gedit ~/.bashrc
    
    • 1

    在.bashrc文件最后一行增加路径

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-8.0.0.3/lib
    
    • 1

    配置生效

    source ~/.bashrc
    
    • 1

    编译TensorRT的示例,会在bin路径下生成一个针对MINIST数据集的sample_mnist可执行文件

    cd /usr/local/TensorRT-8.0.0.3/samples/sampleMNIST
    sudo make
    cd ../../bin/
    ./sample_mnist
    
    • 1
    • 2
    • 3
    • 4

    成功运行的提示

    &&&& RUNNING TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist
    [10/14/2022-17:01:44] [I] Building and running a GPU inference engine for MNIST
    [10/14/2022-17:01:44] [I] [TRT] [MemUsageChange] Init CUDA: CPU +146, GPU +0, now: CPU 151, GPU 407 (MiB)
    [10/14/2022-17:01:44] [I] [TRT] [MemUsageSnapshot] Builder begin: CPU 153 MiB, GPU 407 MiB
    [10/14/2022-17:01:45] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
    [10/14/2022-17:01:45] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +182, GPU +76, now: CPU 335, GPU 483 (MiB)
    [10/14/2022-17:01:45] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +128, GPU +80, now: CPU 463, GPU 563 (MiB)
    [10/14/2022-17:01:45] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
    [10/14/2022-17:01:45] [W] [TRT] Detected invalid timing cache, setup a local cache instead
    [10/14/2022-17:01:50] [I] [TRT] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.
    [10/14/2022-17:01:50] [I] [TRT] Detected 1 inputs and 1 output network tensors.
    [10/14/2022-17:01:50] [I] [TRT] Total Host Persistent Memory: 5440
    [10/14/2022-17:01:50] [I] [TRT] Total Device Persistent Memory: 0
    [10/14/2022-17:01:50] [I] [TRT] Total Scratch Memory: 0
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 1 MiB, GPU 4 MiB
    [10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +8, now: CPU 619, GPU 629 (MiB)
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +0, GPU +8, now: CPU 619, GPU 637 (MiB)
    [10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 619, GPU 621 (MiB)
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 619, GPU 605 (MiB)
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageSnapshot] Builder end: CPU 619 MiB, GPU 605 MiB
    [10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +8, now: CPU 617, GPU 613 (MiB)
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +0, GPU +8, now: CPU 617, GPU 621 (MiB)
    [10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
    [10/14/2022-17:01:50] [I] Input:
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@%.:@@@@@@@@@@@@
    @@@@@@@@@@@@@: *@@@@@@@@@@@@
    @@@@@@@@@@@@* =@@@@@@@@@@@@@
    @@@@@@@@@@@% :@@@@@@@@@@@@@@
    @@@@@@@@@@@- *@@@@@@@@@@@@@@
    @@@@@@@@@@# .@@@@@@@@@@@@@@@
    @@@@@@@@@@: #@@@@@@@@@@@@@@@
    @@@@@@@@@+ -@@@@@@@@@@@@@@@@
    @@@@@@@@@: %@@@@@@@@@@@@@@@@
    @@@@@@@@+ +@@@@@@@@@@@@@@@@@
    @@@@@@@@:.%@@@@@@@@@@@@@@@@@
    @@@@@@@% -@@@@@@@@@@@@@@@@@@
    @@@@@@@% -@@@@@@#..:@@@@@@@@
    @@@@@@@% +@@@@@-    :@@@@@@@
    @@@@@@@% =@@@@%.#@@- +@@@@@@
    @@@@@@@@..%@@@*+@@@@ :@@@@@@
    @@@@@@@@= -%@@@@@@@@ :@@@@@@
    @@@@@@@@@- .*@@@@@@+ +@@@@@@
    @@@@@@@@@@+  .:-+-: .@@@@@@@
    @@@@@@@@@@@@+:    :*@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    [10/14/2022-17:01:50] [I] Output:
    0: 
    1: 
    2: 
    3: 
    4: 
    5: 
    6: **********
    7: 
    8: 
    9: 
    
    [10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 617, GPU 605 (MiB)
    &&&& PASSED TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    参考:http://www.yaotu.net/biancheng/26353.html

    3、编译

    $ mkdir -p ~/catkin_ws/rangenet++/src
    $ cd ~/catkin_ws/rangenet++/src
    $ git clone https://github.com/PRBonn/rangenet_lib.git
    $ cd .. 
    $ catkin_make
    
    • 1
    • 2
    • 3
    • 4
    • 5

    编译会报很多错,原因是TensorRT版本由5.1升级到8.0导致的。在寻求解决办法的过程中发现已经有大神解决了rangenet++适配TensorRT-8.0版本的问题,并且代码已经开源https://github.com/vincenzo0603/rangenet_lib_forTensorRT8XX
    于是,直接改为编译大神贡献的适配TensorRT-8.0的这版rangenet++,在编译过程中会报TensorRT的一些小bug,需要在CMakeLists.txt中添加TensorRT-8.0.0.3的路径,如下所示

    set(CMAKE_PREFIX_PATH "/usr/local/TensorRT-8.0.0.3/lib")
    include_directories(/usr/local/TensorRT-8.0.0.3/include)
    link_directories(/usr/local/TensorRT-8.0.0.3/lib/)
    
    • 1
    • 2
    • 3

    4、运行
    编译通过后,开始测试一个demo。
    首先在这里下载一个预训练模型model,然后在~/catkin_ws/rangenet++/src/rangenet_lib路径下新建一个model文件夹,将其放进去。
    单帧的点云数据在这里~/catkin_ws/rangenet++/src/rangenet_lib/example/000000.bin
    推理并可视化的命令如下

    $ cd ~/catkin_ws/rangenet++
    $ ./devel/lib/rangenet_lib/infer -p ~/catkin_ws/rangenet++/src/rangenet_lib/model/darknet53 -s ~/catkin_ws/rangenet++/src/rangenet_lib/example/000000.bin --verbose
    
    
    • 1
    • 2
    • 3

    运行结果如下图所示
    在这里插入图片描述这明显不对,通过修改kFP16为kTF32,如图所示,
    在这里插入图片描述
    解决了这个问题,运行效果如下,要注意,修改后要删除model.trt,重新编译才会生效。
    在这里插入图片描述至此即完成了rangenet++推理版的部署,然而,这个版本无法实时读取ros的bag包数据,还是没办法为我所用。
    5、rangenet++实时订阅ros消息推理版安装
    正在我调研如何让rangenet++可以实时订阅ros消息,为我所用时,发现了一个更大的大神,大神已经实现了,并且开源了代码https://github.com/Natsu-Akatsuki/RangeNetTrt8
    作者说该工程只适用于TensorRT8.2.3,但是我觉得用我目前的TensorRT8.0.0.3版本一样可以通过一些小改动部署它的工程。作者提供了两种安装方法,由于docker下载环境需要很大空间,所以我选择了第二种方法,安装在本地。
    onnx模型还用之前下载好的。所以在前面部署rangenet++安装的环境基础上,该工程只需要额外安装libtorch。libtorch版本同样和cuda版本有严格的对应关系,同时libtorch版本和pytorch版本是一致的,因为之前验证过安装1.8.1+cuda11.1版本的pytorch是可行的,于是选择安装1.8.1版本的libtorch,下载链接https://download.pytorch.org/libtorch/cu111/libtorch-cxx11-abi-shared-with-deps-1.8.1%2Bcu111.zip
    安装命令如下

    unzip libtorch-cxx11-abi-shared-with-deps-1.8.1+cu111.zip 
    
    • 1

    配置环境变量

    gedit ~/.bashrc
    
    • 1

    在.bashrc文件最后一行增加路径

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/tools/libtorch/lib
    
    • 1

    配置生效

    source ~/.bashrc
    
    • 1

    参考:https://blog.csdn.net/agq358/article/details/121074551
    https://blog.csdn.net/agq358/article/details/121078611

    6、rangenet++实时订阅ros消息推理版编译
    修改CMakeLists:修改其中的TensorRT, libtorch等依赖库的路径

    $ catkin_make
    
    • 1

    编译出现的问题及解决方法:
    问题1:
    找不到math_functions.hpp
    在这里插入图片描述

    解决方法:
    /usr/local/cuda/include/中没有math_functions.hpp,建立软连接

    sudo ln -s /usr/local/cuda/include/crt/math_functions.hpp /usr/local/cuda/include/math_functions.hpp
    
    • 1

    问题2:

    [报错]In file included from /usr/local/cuda/include/cuda_runtime.h:115:0,
    from :0:
    /usr/local/cuda/include/crt/common_functions.h:74:24: error: token ““CUDACC_VER is no longer supported. Use CUDACC_VER_MAJOR, CUDACC_VER_MINOR, and CUDACC_VER_BUILD instead.”” is not valid in preprocessor expressions
    #define CUDACC_VER “CUDACC_VER is no longer supported. Use CUDACC_VER_MAJOR, CUDACC_VER_MINOR, and CUDACC_VER_BUILD instead.
    ^
    /usr/local/cuda/include/crt/common_functions.h:74:24: note: in definition of macro ‘CUDACC_VER’
    #define CUDACC_VER “CUDACC_VER is no longer supported. Use CUDACC_VER_MAJOR, CUDACC_VER_MINOR, and CUDACC_VER_BUILD instead.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    解决方法:

    cd /usr/local/cuda/include/crt
    sudo gedit common_functions.h
    将第74行对应内容直接注释
    
    • 1
    • 2
    • 3

    问题3:
    project_kernel.cu中不能使用constexpr
    解决方法:
    删除constexpr,如下所示

    __device__  float means[] = {12.12, 10.88, 0.23, -1.04, 0.21};
    __device__  float stds[] = {12.32, 11.47, 6.91, 0.86, 0.16};
    // __device__ constexpr float means[] = {0.0, 0, 0.0, 0.0, 0.0};
    // __device__ constexpr float stds[] = {1.0, 1.0, 1.0, 1.0, 1.0};
    
    • 1
    • 2
    • 3
    • 4

    问题4:
    utils/pointcloud_io.h文件报pcd_io.h的错
    解决方法:

    #include 
    
    • 1

    替换为

    #include 
    #include  
    
    • 1
    • 2

    问题5:
    在这里插入图片描述
    camkelist change
    问题6:
    在这里插入图片描述zhushi 596

    7、rangenet++实时订阅ros消息推理版运行
    完成编译后,将kitti转换为bag,由于kitti2bag软件需要python2.7的解释器,而目前本地python为3.9,所以新建一个虚拟环境python2.7,在里面安装。
    生成bag后,修改launch文件,执行以下命令运行

    $ roslaunch /src/RangeNetTrt8/launch/rangenet.launch
    $ roslaunch /src/RangeNetTrt8/launch/rosbag.launch
    
    • 1
    • 2

    效果如下

    屏幕录像 2022-11-13 23:59:11

  • 相关阅读:
    这个技术值得拥有 - 录制细胞生物反应的实时小电影
    【后端高频面试题--Mybatis篇】
    画中画视频剪辑:批量制作画中画视频,让视频更具吸引力和创意
    解决ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘问题
    LabVIEW性能和内存管理 1
    高等数学---第九章二重积分
    基于matlab实现的中点放炮各类地震波时距曲线程序
    计算机组成原理知识点总结——第三章存储系统
    SpringCloud(二) 用Eureka做服务注册中心认证
    Pytorch深度学习实战(1)—— 使用LSTM 自动编码器进行时间序列异常检测
  • 原文地址:https://blog.csdn.net/weixin_40826634/article/details/127836169