深度学习-ubuntu18.04+RTX3080下安装RandLA-NET踩坑全纪录

1、首先找到RandLA-NET的github地址
https://github.com/QingyongHu/RandLA-Net
2、查看RandLA-Net安装文档发现,作者测试使用的系统为Ubuntu 16.04,环境配置为Python 3.5+Tensorflow 1.11+CUDA 9.0+cuDNN 7.4.1,于是本人决定也使用Python 3.5+Tensorflow 1.11+CUDA 9.0+cuDNN 7.4.1的环境,但是在下载CUDA 9.0时发现其并不适用于Ubuntu 18.04。
在这里插入图片描述

3、总不至于重装系统吧,所以决定安装支持Ubuntu 18.04的环境
如图所示,Python,Tensorflow,CUDA和cuDNN的版本有严格的对应关系,为了和作者测试环境尽量相近,继续使用Tensorflow v1,于是选择了Python 3.5+Tensorflow 1.14+CUDA 10.0+cuDNN 7.4.1。
在这里插入图片描述
4、然后开始安装Tensorflow,CUDA和cuDNN。
4.1 CUDA安装
CUDA下载地址
根据官方安装指南开始安装,如图所示,下载安装包,然后执行命令

Run `sudo sh cuda_10.0.130_410.48_linux.run`

在这里插入图片描述
在下面选择安装选项时,我都点了y,结果把显卡驱动的cuda版本也修改了,导致重启电脑,发现显卡驱动没了,原来是因为Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?要选择n,这样就不会覆盖显卡驱动的cuda。

  Do you accept the previously read EULA?   # ctrl+c 可加快速度
  accept/decline/quit: accept
  
  Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
  (y)es/(n)o/(q)uit: n
  
  Install the CUDA 10.0 Toolkit?
  (y)es/(n)o/(q)uit: y
  
  Enter Toolkit Location
   [ default is /usr/local/cuda-10.0 ]: 
  
  Do you want to install a symbolic link at /usr/local/cuda?
  (y)es/(n)o/(q)uit: y
  
  Install the CUDA 10.0 Samples?
  (y)es/(n)o/(q)uit: y
  
  Enter CUDA Samples Location
   [ default is /home/user ]: 

于是打算卸载cuda后,重装显卡驱动和cuda。根据https://blog.csdn.net/baidu_37366055/article/details/124299588卸载重启发现电脑黑屏,于是开始解决黑屏问题,见我另外一篇博客https://editor.csdn.net/md/?articleId=127470370
注:CUDA Installer 前面的 X表示 execute,安装的意思,并非叉叉。https://blog.csdn.net/kuweicai/article/details/109314381
解决了黑屏问题后,显卡驱动也重新安装了,然后继续安装cuda,这一次Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?选择n。安装结果如下:

- Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.0
Samples:  Installed in /home/***, but missing recommended libraries
  Please make sure that
  - PATH includes /usr/local/cuda-10.0/bin
  - LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
  To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

然后添加环境变量
sudo gedit ~/.bashrc

  export PATH="/usr/local/cuda-10.0/bin:$PATH"
  export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64/:$LD_LIBRARY_PATH"

source ~/.bashrc
最后测试是否安装成功

    cd ~/NVIDIA_CUDA-10.0_Samples/1_Utilities/deviceQuery
    sudo make
    ./deviceQuery

显示pass即成功
4.2 然后开始安装cuDNN
cuDNN下载地址
https://blog.csdn.net/fulin9452/article/details/111560913提到了两种安装方式,并且推介ubuntu用户使用deb包,但是我按这种方式安装后发现,测试是失败的。于是改用tgz方式安装。
减压文件

sudo tar -xvf cudnn-10.0-linux-x64-v7.6.5.32.tgz

复制文件

sudo cp cuda/include/* /usr/local/cuda-10.0/include/
sudo cp cuda/lib64/* /usr/local/cuda-10.0/lib64/

最后测试是否安装成功

 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2  #查看cudnn的版本

5、然后开始安装Tensorflow
根据网上教程,用conda创建Tensorflow虚拟环境,然后在里面安装了Tensorflow,结果发现在后来创建的randlanet虚拟环境中无法使用,才明白不同虚拟环境之间环境不能互相使用,但是cuda和cudnn是在本地安装的,后来成功的测试表明,虚拟环境可以使用本地的环境。所以Tensorflow安装在本地或者randlanet虚拟环境都可以,弄明白虚拟环境后,本人将Tensorflow安装在了randlanet虚拟环境,当然需要第6步执行完才能安装,安装命令如下。

pip install tensorflow-gpu==1.14.0

测试安装是否成功
在虚拟环境下执行

python
import tensorflow as tf
tf.__version__
tf.test.is_gpu_available()

结果在import tensorflow as tf会报protobuf的版本错误,于是更新protobuf版本

pip install --upgrade "protobuf==3.20.*"

如果能输出版本且不报错,则安装成功
6、接下来终于可以开始安装RandLA-NET
根据官方安装指南,在本地RandLA-NET路径下执行以下四步

conda create -n randlanet python=3.5#创建名为randlanet的虚拟环境,python编译器版本3.5
source activate randlanet#激活虚拟环境,以后只要跑该虚拟环境下的程序,都需要先激活
pip install -r helper_requirements.txt#安装依赖
sh compile_op.sh#编译c++程序

7、然后就开始数据准备

将准备好的数据,按kitti的格式放在路径"/home/用户名/catkin_ws/RandLA-Net/data/semantic_kitti/dataset/sequences"下,文件data_prepare_semantickitti.py中数据读取地址为绝对路径,如图所示,
在这里插入图片描述
然后执行python utils/data_prepare_semantickitti.py,数据准备工作比较漫长…
8、然后就可以开始心心念念的训练工作了

执行训练脚本

python main_SemanticKITTI.py --mode train --gpu 0

结果还有不少问题等着我…

  • 首先数据读取路径需要修改
    在这里插入图片描述
  • python3.5版本已经停止使用

9、于是更改python为3.7,使用Python 3.7+Tensorflow 1.14+CUDA 10.0+cuDNN 7.4.1重新开始训练
此时报错open3d无法使用,在挣扎了一番后,灵机一动,既然用不了,作为显示工具,不用不就可以了,注释掉后,顺利解决。然而依然存在一些问题,具体问题忘了,但是查资料后,发现是现在的配置必须使用tf2.0以上才行。
10、于是为了不重装cuda和cudnn,选择了Python 3.7+Tensorflow 2.0+CUDA 10.0+cuDNN 7.4.1。
从tf 1.0换成tf 2.0就是一个大的变化,果然代码报了很多语法错误,经过一番尝试后,只需要稍微做一些修改,就可以解决所有版本切换问题。将

import tensorflow as tf

换成

import tensorflow.compat.v1 as tf

在RandLANET.py的import tensorflow.compat.v1 as tf后加

tf.disable_v2_behavior()

然后还有一个nearest_neighbors的问题,原来这是c++编译的生成文件,刚开始把我吓坏了,这可咋解决,python咋跑出c++来了,经过一番斗争后,发现报错原因是因为在不同版本下编译生成了多个动态库so文件,解决方法是把这些动态库和所有编译生成文件build,lib删除,再重新编译,即可解决。终于进入到正向传播、反向传播训练阶段,没错,并没有如我所愿开始正常训练,cuda报错了,查资料发现30系显卡只支持11以上的cuda。
11、最终重装Python3.7+Tensorflow2.5+CUDA 11.2+cuDNN8.1
终于进入了正常的训练过程,接下来就是漫长的两天训练时间…
12、用tensorboard可视化
RandLA-NET把可视化文件保存在了train_log里,在RandLA-NET路径下输入以下命令

tensorboard --logdir=train_log

将图中输出网址http://localhost:6006在网页中打开即可
在这里插入图片描述13、batch_size,batch,spoch,steps含义

  • batch和batch_size
    假设我们有2000个数据样本,设batch_size = 100,则 batch = 2000/100 = 20.
    注:
    batch_size 一般取32,64,128等2的N次方,batch的计算也是向上取整。
  • step、iteration、epoch
    step和iteration:两者的意思是完全一样,两者都是指参数更新的次数。
    对于epoch: 全部样本训练完算一个epoch.
    样本共2000个,batch_size=100, 所以batch=20。
    epoch=1表示2000个样本全部参与训练一次,那么此时,step=iteration=batch=20,因为step和iteration表示的是参数的次数,而深度学习都是在运行完一个batch_size的数据之后才会进行反向传播,才会更新参数。
    所以,如果epoch=2, 可以推导出step=iteration=20*2=40。
    参考:https://blog.csdn.net/qq_41915623/article/details/124847431

14、完成训练后,开始测试

sh jobs_test_semantickitti.sh

测试会在test文件夹下生成测试集的每一帧预测结果。测试过程并不能同时显示实时分割点云,只能最后利用预测的标签和原始点云进行可视化。

15、离线可视化
但是发现作者可视化用的就是前面我注释掉的open3d,没办法只能重新想办法解决open3d的问题。显示用的是helper_tool.py,
先删除之前安装的

pip uninstall open3d-python

然后用以下命令安装

conda install -c open3d-admin open3d

安装完成后,再根据提示解决一些不同版本语法问题即可。
但是作者并没有提供显示连续多帧预测点云的工具,我通过翻阅资料,写了一个和作者动图一样的可视化效果,代码如下

from helper_tool import Plot
from os.path import join, dirname, abspath
from helper_tool import DataProcessing as DP
import numpy as np
import os
import pickle
import yaml
import open3d as open3d
import time
 
def get_file_list_test(dataset_path):
    seq_list = np.sort(os.listdir(dataset_path))
    test_file_list = []
    for seq_id in seq_list:
        seq_path = join(dataset_path, seq_id)
        pc_path = join(seq_path, 'velodyne')
        if int(seq_id) >= 11:
            for f in np.sort(os.listdir(pc_path)):
                test_file_list.append([join(pc_path, f)])
                # break
    test_file_list = np.concatenate(test_file_list, axis=0)
    return test_file_list
 
def get_test_result_file_list(dataset_path):
    seq_list = np.sort(os.listdir(dataset_path))
    test_result_file_list = []
    for seq_id in seq_list:
        seq_path = join(dataset_path, seq_id)
        pred_path = join(seq_path, 'predictions')
        for f in np.sort(os.listdir(pred_path)):
            test_result_file_list.append([join(pred_path, f)])
            # break
    test_file_list = np.concatenate(test_result_file_list, axis=0)
    return test_file_list
 
 
if __name__ == '__main__':
    dataset_path = '/home/mdj/catkin_ws/RandLA-Net/data/semantic_kitti/dataset/sequences'
    predict_path = '/home/mdj/catkin_ws/RandLA-Net/test/sequences'
    test_list = get_file_list_test(dataset_path)
    test_label_list = get_test_result_file_list(predict_path)
    BASE_DIR = dirname(abspath(__file__))
 
    #  remap_lut  #
    data_config = join(BASE_DIR, 'utils', 'semantic-kitti.yaml')
    DATA = yaml.safe_load(open(data_config, 'r'))
    remap_dict = DATA["learning_map"]
    max_key = max(remap_dict.keys())
    remap_lut = np.zeros((max_key + 100), dtype=np.int32)
    remap_lut[list(remap_dict.keys())] = list(remap_dict.values())
    #  remap_lut  #
    
    plot_colors = Plot.random_colors(21, seed=2)
    vis = open3d.visualization.Visualizer()
    vis.create_window()
    for i in range(len(test_list)):
        time.sleep(0.01)
        pc_path = test_list[i]
        labels_path = test_label_list[i]
        points = DP.load_pc_kitti(pc_path)
        # 用深蓝色画初始点云 #
        # rpoints = np.zeros((points.shape[0],6),dtype=np.int)
        # rpoints[:,0:3] = points
        # rpoints[:,5] = 1
        # Plot.draw_pc(rpoints)
        # print("888888888888888888")
 
        # 画对应的预测点云 #
        labels = DP.load_label_kitti(labels_path, remap_lut)
        Plot.draw_pc_sem_ins(points, labels, vis, plot_colors)

至此就可以完美可视化连续多帧点云了,效果如下:

在这里插入图片描述

16、ros-randlanet安装测试
因为ros-randlanet可以继续使用前面建好的虚拟环境,所以将ros-randlanet在randlanet虚拟环境中运行。
首先需要将ros_main.py中的解释器路径改为虚拟环境中Python解释器的路径。
然后需要安装pytorch,因为pytorch和cuda有严格的对应关系,且官网没有cuda11.2对应的pytorch版本,这里https://blog.csdn.net/didadifish/article/details/127487635提供了解决办法,所以我下载安装了这个
在这里插入图片描述成功!!!
最后启动launch,会提示如图所示错误
在这里插入图片描述发现是ros_main.py有问题,如图所示修改解释器路经
在这里插入图片描述

至此,launch文件可以正常启动了.

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: greenplum-db-6.24.0-ubuntu18.04-amd64.deb是一个针对Ubuntu 18.04操作系统的Greenplum数据库软件包文件。Greenplum是一个强大的、兼容PostgreSQL的分布式数据库管理系统。 Greenplum数据库是为大规模数据处理和分析而设计的,它使用了多个节点(或服务器)以及并行计算的技术。这使得它能够处理大量的数据和复杂的查询,并提供高性能和可靠性。 这个软件包是用于安装Greenplum数据库的工具。安装过程将会包括将软件文件拷贝到适当的目录、配置数据库的参数、创建数据库的用户和角色等步骤。 通过安装Greenplum数据库,用户可以轻松地构建和管理一个分布式的数据仓库。它提供了许多功能,包括数据的导入和导出、数据的查询和分析、数据的备份和恢复等。此外,Greenplum支持并行化查询和负载均衡,使得用户可以实现高性能的数据处理。 在安装完成之后,用户可以使用标准的PostgreSQL接口,如pgAdmin或psql等,来连接和管理Greenplum数据库。此外,还可以使用Greenplum提供的特定工具和扩展,以进一步优化和扩展数据库的功能。 总之,greenplum-db-6.24.0-ubuntu18.04-amd64.deb是一个用于安装Greenplum数据库的软件包,它提供了一个强大、高性能和可扩展的分布式数据库解决方案,可以满足大规模数据处理和分析的需求。 ### 回答2: greenplum-db-6.24.0-ubuntu18.04-amd64.deb是一个基于Ubuntu 18.04操作系统和AMD64架构的Greenplum数据库包。 Greenplum是一种开源的关系型分布式数据库,它专为处理大规模数据分析和处理而设计。它采用了Massively Parallel Processing(MPP)架构,可以将数据分布在多个节点上进行并行处理,以提高查询和分析的速度。它支持SQL语言,并具有成熟的事务处理和并发控制功能。 这个软件包是一个.deb格式的安装包,可安装在Ubuntu 18.04操作系统上的AMD64架构下。.deb是Debian软件包管理系统的标准包格式,它包含了安装一个软件包所需的所有文件和依赖项。 要安装这个软件包,可以通过运行以下命令: ``` sudo dpkg -i greenplum-db-6.24.0-ubuntu18.04-amd64.deb ``` 安装完成后,可以使用相应的命令和配置文件来启动和管理Greenplum数据库。 总而言之,greenplum-db-6.24.0-ubuntu18.04-amd64.deb是一个可用于在Ubuntu 18.04操作系统上安装Greenplum数据库的软件包,它提供了一个高性能的、分布式的关系型数据库解决方案。 ### 回答3: greenplum-db-6.24.0-ubuntu18.04-amd64.deb 是一个用于 Ubuntu 18.04 操作系统、针对 AMD 64 位架构的 Greenplum 数据库软件包。Greenplum 是一个高度可扩展的大数据平台,它基于 PostgreSQL 架构并加以优化,为企业提供了一种高性能、高可用性和高可扩展性的数据库解决方案。该软件包可以被安装在 Ubuntu 18.04 操作系统上,并且支持 64 位的 AMD 处理器。 通过安装该软件包,用户可以获得完整的 Greenplum 数据库系统,包括 Greenplum 数据库服务器、管理工具和其他必需的组件。用户可以使用它来构建和管理大规模的数据分析和处理平台,进行数据存储、查询和分析等操作。Greenplum 数据库采用并行处理和分布式架构,可以处理大量的数据并实现并行计算,因此非常适用于大规模数据处理场景。 安装这个软件包通常需要用户具备一定的 Linux 系统管理经验,用户需要通过终端和命令行来执行相关的安装和配置操作。在安装之前,用户应该先了解自己的操作系统版本,确认是运行在 Ubuntu 18.04 上,并且是否具备了 AMD 64 位架构的硬件支持。 安装软件包之后,用户可以按照官方的安装指南和文档进一步配置 Greenplum 数据库系统,包括创建数据库、添加用户、设置权限等。用户可以通过各种工具和接口来访问和管理 Greenplum 数据库,例如命令行工具、Web 控制台和 JDBC/ODBC 驱动程序等。 总而言之,greenplum-db-6.24.0-ubuntu18.04-amd64.deb 是用于 Ubuntu 18.04 操作系统和 AMD 64 位架构的 Greenplum 数据库软件包,它提供了一种高性能、高可用性和可扩展性的大数据解决方案,用户可以通过安装和配置来构建自己的数据分析和处理平台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值