(2025.06)ubuntu20.04运行OpenGS-SLAM记录

    这篇文章的核心内容是介绍了一种名为“RGB-Only Gaussian Splatting SLAM for Unbounded Outdoor Scenes”的SLAM(Simultaneous Localization and Mapping,即同时定位与建图)方法,该方法专注于仅使用RGB图像进行无边界户外场景的高斯点绘制(Gaussian Splatting)SLAM。

项目信息

方法概述

  • 核心思想:该方法仅依赖RGB图像,利用高斯点绘制技术实现无边界户外场景的SLAM。高斯点绘制是一种将点云表示为高斯分布的技术,能够高效地处理大规模场景。

  • 技术特点

    • RGB-only:不依赖深度信息,仅使用RGB图像进行建图和定位。

    • 无边界场景:适用于大规模户外场景,能够处理无边界环境。

    • 高斯点绘制:通过高斯分布表示点云,提高计算效率和建图质量。

安装与运行 

1、安装步骤:

(1)克隆项目代码库:
git clone https://github.com/3DAgentWorld/OpenGS-SLAM.git --recursive
(2)设置环境:
conda env create -f environment.yml

激活环境:

conda activate opengs-slam
(3)编译子模块:
pip install submodules/simple-knn 
pip install submodules/diff-gaussian-rasterization

 (4)编译CUDA内核:

cd croco/models/curope/

运行: 

python setup.py build_ext --inplace

2、检查点 

    在机器学习和计算机视觉领域,检查点(Checkpoint)是指在模型训练过程中保存的模型参数和状态信息。检查点通常用于以下目的:

  1. 模型恢复:在训练过程中,如果训练中断(例如,由于硬件故障、手动停止等),可以使用检查点恢复模型,继续从上次保存的状态开始训练,无需而从头开始。

  2. 模型评估:检查点包含了模型的参数,可以直接加载这些参数来评估模型在测试数据上的性能。

  3. 模型部署:在实际应用中,可以直接加载检查点中的模型参数,用于推理(inference)任务。

  4. 代码复现:在研究中,检查点可以用于复现他人的工作,验证模型的有效性。

    在本项目中,检查点是指预训练的模型参数文件,具体是DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth。这个文件包含了模型的权重和参数,用于在SLAM任务中进行深度估计或其他相关任务。以下是关于这个检查点的详细信息:

检查点的作用
  • 预训练模型DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth是一个预训练的深度模型估计的检查点。它可能是在大规模数据集上训练得到的,包含了模型的权重和参数。

  • 深度估计:在SLAM任务中,即使仅使用RGB图像,深度信息也是重要的。这个检查点可能用于从RGB图像中估计深度信息,从而辅助SLAM系统的建图和定位。

如何使用检查点 
(1)下载检查点

1)可以从DUSt3R代码库下载。

2)或者使用以下命令直接下载:

mkdir -p checkpoints/
wget https://download.europe.naverlabs.com/ComputerVision/DUSt3R/DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth -P checkpoints/
(2)加载检查点

1)将下载的检查点文件保存到项目的checkpoints目录下。

2)在代码中,加载这个检查点文件,使用其参数初始化深度估计模型。 

3、数据集下载:(根据Github主页的百度网盘地址或谷歌进行下载)

(9 个Waymo数据段的处理数据)数据保存路径:datasets/waymo

4、运行示例:

(1)单个场景运行:
CUDA_VISIBLE_DEVICES=0 python slam.py --config configs/mono/waymo/100613.yaml

报错1: 

 解决方法:是因为数据集没有解压。 需要把数据集解压缩放到指定的路径。

报错2:

GUI 显示崩溃(OpenCV 报错)

cv2.flip(img, 0, img)

这行代码在原地写入 img,但 img 是 只读的 NumPy 数组(readonly),所以 OpenCV 无法写入,抛出错误。 

 解决方法:

修改 slam_gui.py 第 636 行:

cv2.flip(img, 0, img)

改为:

img = img.copy() # 解除只读标志 cv2.flip(img, 0, img)

或者更保险地用返回值:

img = cv2.flip(img, 0)

 报错3:

     evo 错误导致评估失败。因为之前手动下载了一些库,没有制定版本,导致安装的最新版与之不兼容。

    新版 evo 库(v1.20.0+)中已 移除了 align_trajectory() 方法。

 解决方法:
回退安装旧版 evo
pip install evo==1.11.0

然后再次运行即可。

(2)批量运行所有Waymo场景: 
bash run_waymo.sh

5、实时交互式SLAM窗口

    修base_config.yaml中的Results-use_guiTrue,在Ubuntu系统上运行时会弹出GUI窗口。

CUDA_VISIBLE_DEVICES=0 python slam.py --config configs/mono/waymo/100613.yaml

     截了一些图,基本上是初始化的,5,10,15...后面由于CUDA显存不够就退出了。。。(我再想想要不要删掉,先放着吧)

 

 

 

 


扩展应用:

其他数据集:
  • 需要将数据格式组织为项目要求的格式,并修改utils/dataset.py中的代码。

  • 尽管代码中保留了深度图输入接口,但该方法并未在SLAM中使用深度信息。

后面也遇到了一些报错,直接贴了gpt的解决方法,可供参考 

报错:

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ... libLerc.so.4)

(opengs-slam) huang@huang-System-Product-Name:~/Code/Open/OpenGS-SLAM$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

    Python 运行时链接的是系统的 /usr/lib/x86_64-linux-gnu/libstdc++.so.6,它的版本太旧(只有到 GLIBCXX_3.4.28),而我 Anaconda 环境里已经有新版的 libstdc++,但系统没有自动用它。


解决方法:强制 Python 使用 Anaconda 的 libstdc++

方式一:设置 LD_PRELOAD(推荐临时测试)<暂时用这个是ok的>

LD_PRELOAD=/home/huang/anaconda3/envs/opengs-slam/lib/libstdc++.so.6 CUDA_VISIBLE_DEVICES=0 python slam.py --config configs/mono/waymo/100613.yaml

    这个命令的意思是:优先加载 Anaconda 环境中那个新版的 libstdc++.so.6,避开系统老版本的冲突。


方式二:修改环境变量(长期有效)

你也可以在你的环境中添加如下变量(比如 .bashrc.zshrc):

export LD_LIBRARY_PATH=/home/huang/anaconda3/envs/opengs-slam/lib:$LD_LIBRARY_PATH

然后:

source ~/.bashrc conda activate opengs-slam python slam.py --config configs/mono/waymo/100613.yaml

验证方式(可选)

确认链接到的 libstdc++ 是新的:

ldd $(which python) | grep libstdc++

你应该看到类似:

libstdc++.so.6 => /home/huang/anaconda3/envs/opengs-slam/lib/libstdc++.so.6

如还有报错、程序依旧报同样错误,确认:

  • 你用的是 当前环境的 Python

  • LD_PRELOAD 设置路径完全正确(指向 libstdc++.so.6.0.34 并建立有软链)

❗问题描述:(有时候运行着突然CUDA显存不够就报错退出了)

PyTorch 有时即使你 ctrl+C 停止程序,显卡显存仍然没有释放。

解决方案:

 方法一:手动清除显存残留
nvidia-smi # 找出占用显存的进程PID

kill -9 <PID>

或者使用快捷指令:<用的这个>

kill -9 $(nvidia-smi | grep python | awk '{ print $5 }')

方法二:自动释放脚本(推荐放在 run.sh 前)
#!/bin/bash # safe_kill_cuda.sh PIDS=$(nvidia-smi | grep python | awk '{print $5}') if [ -z "$PIDS" ]; then echo "No CUDA processes to kill." else echo "Killing stale CUDA processes: $PIDS" kill -9 $PIDS fi

 方法三:PyTorch 内部释放机制(代码级)

每次使用完模型后手动清理 GPU:

python

import torch torch.cuda.empty_cache() del model

 

 

 

大约耗时半个小时 

小总结:OpenGS-SLAM 在 Waymo_100613 数据集上的重建测试

验证 OpenGS-SLAM 系统在真实自动驾驶数据集(Waymo_100613)上的单目重建性能,评估其在轨迹精度、渲染质量和关键帧管理方面的表现。


一、实验配置
  • 平台环境

    • Ubuntu 20.04.6 LTS

    • Python 3.11(conda 环境)

    • CUDA 11.x + PyTorch(支持 GPU 加速)

    • GPU:16GB 显存

  • 模型与参数

    • 预训练模型:DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth

    • 图像尺寸:512 × 512

    • 模型结构:AsymmetricCroCo3DStereo

    • 输入图像帧数:约 200 帧


二、系统运行过程
  • 初始化阶段
    成功完成系统重置与模型加载,初始化地图构建完成。

  • 关键帧选取
    系统在第 5 帧起开始选择关键帧,关键帧编号如下所示:

    5, 10, 15, 20, ..., 最后为197

    共选取约 30 个关键帧,平均间隔 6~7 帧,体现出系统对场景动态变化的有效响应。

  • SLAM 执行流程

    • 初始 BA(Bundle Adjustment)在关键帧 30 后开始。

    • 在帧编号 44、112、174 处分别进行了 ATE(Absolute Trajectory Error) 评估。


三、评估结果
项目评估位置RMSE ATE [m]
初始阶段第 44 帧0.0973
中段阶段第 112 帧0.2468
后段阶段第 174 帧0.6212
全局结果最终帧0.7556

  • 从结果可见,系统在初始阶段定位精度较高,随着视角复杂化,误差有所增加,但整体轨迹重建仍维持在可接受范围内。


四、渲染与重建质量

    系统在 SLAM 阶段后进行了完整的 颜色重建与优化,共执行 26,000 步 refinement,历时约 9 分钟。

指标优化前优化后
PSNR19.4921.64
SSIM0.7390.767
LPIPS0.5370.445

说明颜色一致性与细节保真度有显著提升,图像重建效果可视化质量较好。


五、运行性能
  • 总运行时间:598.9 秒

  • 平均处理帧率:0.33 FPS(包含渲染与优化)

  • 平均渲染时间(每帧):约 0.77 秒


六、结论与后续

    OpenGS-SLAM 在该序列上运行稳定,系统成功完成从图像输入到三维建图、重建与颜色优化的全流程。初期轨迹重建精度较高,后期因场景复杂及视角切换导致误差上升,但整体重建结果仍具参考价值。

后续可从以下方面优化:

  • 调整关键帧策略或增加鲁棒初始化策略;

  • 引入 loop closure(回环检测)以抑制误差累积;

  • 针对特定场景配置更合适的图像尺寸或模型结构,以降低显存压力并提升速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值