当前位置:首页 > 系统教程 > 正文

Ubuntu20 RTX3090 环境下的RandLA-Net复现指南

Ubuntu20 RTX3090 环境下的RandLA-Net复现指南

基于S3DIS自建数据的点云语义分割实战

本文将带你从零开始在 Ubuntu20 系统上,利用 RTX3090 显卡,基于 S3DIS自建数据 完整复现 RandLA-Net(随机采样与局部特征聚合网络),实现点云语义分割。无论你是刚接触点云的小白,还是想迁移到自有数据的研究者,这篇教程都将提供手把手的指导。

Ubuntu20 RTX3090 环境下的RandLA-Net复现指南  S3DIS自建数据 RandLA-Net复现 第1张

1. 环境准备:驱动、CUDA与cuDNN

由于 RTX3090 基于Ampere架构,必须使用CUDA 11.0以上版本。推荐安装 Ubuntu20 官方驱动(470+)和CUDA 11.2 + cuDNN 8.1。执行以下命令:

    sudo apt updatesudo apt install nvidia-driver-470wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.runsudo sh cuda_11.2.0_460.27.04_linux.run# 在~/.bashrc中添加环境变量export PATH=/usr/local/cuda-11.2/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATHsource ~/.bashrc# 验证CUDAnvcc --version# 下载并安装cuDNN(需NVIDIA账号),解压后复制到cuda目录  

2. 创建Conda环境与安装TensorFlow

为了与 RTX3090 兼容,我们使用TensorFlow 2.6(支持CUDA 11.2)。创建专用环境并安装:

    conda create -n randla python=3.8conda activate randlapip install tensorflow==2.6.0# 安装常用依赖pip install open3d plyfile numpy scipy h5py  

3. 获取RandLA-Net源码与适配TF2.x

官方RandLA-Net复现仓库基于TF1.x,我们需要稍作修改以兼容TF2.6。克隆仓库并应用补丁:

    git clone https://github.com/QingyongHu/RandLA-Net.gitcd RandLA-Net# 将所有的 tf.compat.v1 替换为 tf,或者使用以下脚本自动修改sed -i "s/tf.compat.v1./tf./g" $(find . -name "*.py")# 注意:部分函数如 tf.logging 改为 tf.compat.v1.logging,需手动调整# 更简单的方式是使用 tf.compat.v1 模式,在代码开头加入:# import tensorflow.compat.v1 as tf# tf.disable_v2_behavior()  

4. 准备S3DIS自建数据

S3DIS自建数据是指将自己的点云数据集整理成与Stanford 3D Indoor Spaces (S3DIS) 相同的格式。每个房间保存为一个 .ply 文件,并附带相应的 annotation 文件。具体步骤:

  • 将每个房间的点云存为 Area_X_roomname.ply(包含xyz rgb等信息)。
  • 创建同名的 .txt 标签文件,每行对应一个点的类别ID(0~12)。
  • 按照S3DIS划分方式(Area_1~Area_6)组织文件夹。
  • 修改 utility/read_plyfile.py 中的读取逻辑,确保能正确加载自定义点云。

我们提供一个简单的转换脚本 convert_to_s3dis.py(略),将原始点云和标签转换为上述格式。

5. 配置与训练

编辑 train.py 中的数据集路径和超参数。关键修改:

    # 在 config.py 或 train.py 中设置dataset = "S3DIS"data_path = "/path/to/your/S3DIS/data"save_path = "/path/to/save/models"batch_size = 4  # RTX3090 24GB显存可尝试更大gpu = "0"  

启动训练:

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

6. 测试与可视化

训练完成后,使用测试集评估:

    python test.py --gpu 0 --model_path /path/to/saved_model  

利用Open3D可视化预测结果:

    import open3d as o3dpcd = o3d.io.read_point_cloud("predicted.ply")o3d.visualization.draw_geometries([pcd])  

至此,你已成功在 Ubuntu20 + RTX3090 上基于 S3DIS自建数据 完成了 RandLA-Net复现。整个流程涵盖了环境配置、数据准备、代码修改和训练测试,希望这篇教程能帮助你在点云语义分割领域快速起步。