DarkGS:论文解读与全流程环境配置及数据集测试【基于Ubuntu20.04 】【2025最新实战无坑版!!】

一、背景及意义

DarkGS是一个创新性的研究项目,旨在解决机器人在黑暗或低光照环境中探索的问题。传统的3D重建和视觉定位系统在光照条件不佳时表现不佳,这严重限制了机器人在黑暗环境中的应用,如夜间救援、深海探索或洞穴勘测等场景。
这项工作的主要意义在于:

  • 为低光照条件下的机器人视觉系统提供了新的解决方案
  • 将神经照明模拟与3D高斯点云(Gaussian Splatting)结合,实现了黑暗环境中的高质量3D重建
  • 支持实时的照明模拟和环境重光照(relighting),使机器人能够"看见"黑暗中的环境

可以点击下面的链接观看效果视频

[🌃DarkGS] 黑暗中用手电筒🔦构建3D高斯

在这里插入图片描述
论文标题:DarkGS: Learning Neural Illumination and 3D Gaussians Relighting for Robotic Exploration in the Dark
论文地址:https://arxiv.org/abs/2403.10814

二、解决的核心问题

DarkGS主要解决了三个关键问题:

  • 低光照环境下的3D重建:在极低光照条件下准确重建3D场景
  • 照明建模与模拟:学习并模拟照明源(如手电筒)的特性,实现虚拟照明
  • 环境重光照:基于重建的3D模型和照明模型,可以从新视角重新照亮场景

三、使用的方法

项目融合了多种先进技术:

  • 3D高斯点云(3D Gaussian Splatting):一种高效的3D场景表示方法,比NeRF更快且质量相当
  • 神经照明模拟(Neural Illumination):使用神经网络学习照明特性
  • 相机-光源标定:通过姊妹项目Neural Light Simulator进行光源与相机的标定
  • RAW图像处理:直接处理低光照条件下的RAW图像,保留更多信息

四、效果和成果

根据项目展示:

  • 能够在几乎完全黑暗的环境中进行3D重建
  • 支持实时的光照模拟,可以通过键盘控制虚拟光源的方向
  • 可以从新视角生成场景,并模拟手电筒光照效果
  • 生成的3D模型保留了场景的详细纹理和几何信息

五、创新点

  • 融合照明模型与3D高斯点云:首次将照明模型与高斯点云结合用于黑暗环境重建
  • 直接处理RAW图像:不同于传统方法的预处理,直接利用RAW图像中的信息
  • 实时交互式照明模拟:支持用户实时调整虚拟光源位置,模拟不同照明条件
  • 无需额外硬件:只需普通相机和光源(如手电筒),无需特殊设备

六、主要工作流程

  • 数据收集:在黑暗环境中使用相机和光源(如手电筒)拍摄RAW图像
  • 相机-光源标定:使用Neural Light Simulator进行光源与相机的标定
  • 数据预处理
    保存原始RAW图像到"raw"文件夹
    对RAW图像进行亮度增强处理,保存到"input"文件夹用于COLMAP特征提取
  • 模型训练:训练DarkGS模型,学习场景3D结构和照明特性
  • 可视化与交互:使用SIRB viewer进行可视化,支持实时调整光源方向

七、开源情况

项目完全开源,代码可在GitHub获取:https://github.com/tyz1030/darkgs

数据集可在Google Drive或Dropbox下载:

Google Drive链接
Dropbox链接

八、环境配置(基于Ubuntu 20.04、CUDA11.8)

# 安装必要的系统依赖
sudo apt-get update
sudo apt-get install -y build-essential git cmake libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libboost-test-dev libeigen3-dev libsuitesparse-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgflags-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev# 安装CUDA(如果需要GPU加速)
# 请根据你的GPU选择适合的CUDA版本
# CUDA安装略(建议CUDA 11.x)# 克隆项目仓库
git clone https://github.com/tyz1030/darkgs.git --recursive
cd darkgs# 创建并激活conda环境
conda env create --file environment.yml
conda activate darkgs# 安装lietorch
pip install git+https://github.com/princeton-vl/lietorch.git

九、数据准备

# 创建数据目录
mkdir -p data/# 下载示例数据集(可选择Google Drive或Dropbox)
# 使用gdown下载Google Drive文件
pip install gdown
gdown --folder https://drive.google.com/drive/folders/1EzhrEBCEHCSF3jtRwMXQpqF9wgh4KlPD# 解压数据集
unzip "*.zip" -d data/

如图所示:
在这里插入图片描述

十、光源标定

如果使用自己的相机-光源设置,需要进行标定:

# 克隆神经光源模拟器仓库
git clone https://github.com/tyz1030/neuralight.git
cd neuralight# 按照仓库指南进行标定
# 完成后,将生成的model_parameters.pth复制到darkgs根目录
cp model_parameters.pth ../
cd ..

十一、训练模型

# 使用示例数据集训练
python train.py -s data/lab1 # 训练完成后,检查点会保存在output目录中

十二、可视化与交互

# 编译SIBR查看器(如果需要)#安装依赖
sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev#进入文件夹
cd SIBR_viewers#因为我是20.04版本,所以还要加一句
#22.04版本不需要加
git checkout fossa_compatibility#构建安装
cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release

在SIBR_viewers/install/bin文件夹内如下:

在这里插入图片描述

接下来可以启动可视化:

# 启动可视化服务器
python viz_chkpt.py -s data/lab1/ -m output/名称-时间戳 --start_checkpoint output/名称-时间戳/chkpnt30000.pth# 在另一个终端中启动查看器
./SIBR_remoteGaussian_app
# 然后可以使用键盘上的JKLI键控制光源方向

十三、基于自己的数据集进行测试

1、创建数据集目录结构

mkdir -p data/tunnel_all/raw
mkdir -p data/tunnel_all/input

2、准备数据

将R原始图像放入raw文件夹

注意:这些应该是暗光环境下拍摄的原始图像

数据集图像如下图所示:

在这里插入图片描述

由于是低光昏暗场景,很难对进行COLMAP特征提取,因此需要对原始图像进行处理:

对原始图像进行了伽马曲线/手动增加了亮度,以便进行特征提取和匹配。这些校正后的图像被放在 “input” 子文件夹中。我们只使用“原始”图像来构建 DarkGS。

# enhance.py (updated)
"""
Brighten + gamma‑correct dark images for COLMAP feature extraction.* Works with either:1. A flat directory of images (e.g. tunnel_all/raw/*.jpg)2. Nested folders named image1/ image2/ image3/ …Usage examples
--------------python enhance.py                                   # default paths & paramspython enhance.py --src data/tunnel_all/raw \--dst data/tunnel_all/input \-e 2.5 -g 2.0Dependencies
------------pip install opencv-python rawpy tqdm
"""

具体数据处理代码可以评论区留言获取!!

3、COLMAP特征提取

# 处理图像以用于COLMAP特征提取
python convert.py -s data/tunnel_all

4、执行训练

# 然后使用处理后的数据集进行训练
python train.py -s data/tunnel_all

5、可视化

# 编辑scene/lighting.py文件,取消注释第129行
nano scene/lighting.py
# 取消注释第129行后保存# 然后运行可视化
python viz_chkpt.py -s data/my_dataset -m output/模型名称 --start_checkpoint output/模型名称/chkpnt30000.pth# 在另一个终端启动查看器
./SIBR_remoteGaussian_app -m output/模型名称

十四、推荐的测试数据集

  • lab1(作者提供的示例数据集):包含实验室环境的暗光图像,适合初步测试
  • hallway:走廊场景数据集,有更复杂的几何结构
  • desk:桌面场景,包含多种小物体,适合测试细节重建效果

十五、性能优化建议

硬件推荐:

  • 使用支持CUDA的GPU(推荐至少8GB显存)
  • 至少16GB系统内存
  • 多核CPU(推荐8核以上)

训练优化:

  • 调整train.py中的批量大小以适应您的GPU
  • 对于较大场景,可以减少点云密度以提高性能

问题排查:

  • 如果遇到内存不足问题:减小图像分辨率或降低最大训练迭代次数
  • 如果重建质量不佳:尝试增加更多视角的图像,或改善输入图像的光照条件

十六 总结

通过上述内容,应该能够在Ubuntu 20.04上使用conda环境完整测试DarkGS项目,包括使用示例数据集和你自己的数据集。这个工作流程涵盖了从环境设置到训练、可视化和测试的所有关键步骤,如果有感兴趣的同学,欢迎评论区留言讨论!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/903882.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/903882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(八)RestAPI 毛子(Unit Testing/Integration)

文章目录 项目地址一、Unit Testing1.1 创建X unit 测试项目1. 创建项目目录2. 管理包1.2 创建CreateEntryDtoValidator测试1.3 创建CreateEntryDtoValidator测试二、Integration test2.1 创建Integration test环境1. 安装所需要的包2.2 配置基础设置1. 数据库链接DevHabitWebA…

设计模式--桥接模式详解

桥接模式(bridge pattern) 桥接模式时将抽象部分与它的实现部分分离,使他们可以独立的变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或者接口(interface)模式&…

关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146354088 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Vite 动态导入静态资源与自动依赖发现实战解析

一、Vite 动态导入静态资源的实现方案 在 Vite 中,动态加载图片、JSON 等静态资源是高频需求,但动态路径拼接可能导致构建失败或资源未识别。以下结合示例代码,分析三种实现方案: 1. 方案一:new URL 动态路径转换 通…

在matlab中使用UAV123官方toolkits测试自己的数据集

一、前言 最近需要将自己的跟踪代码在自己拍摄的数据集上进行测试,这里我选择使用 UAV123 官方 toolkits 进行配置。首先需要搞清楚这部分代码是如何运行的,精度图和成功率图是如何绘制出来的,然后再将自己的数据集加进去进行测试。 二、UA…

9.idea中创建springboot项目_jdk1.8

9. idea中创建springboot项目_jdk1.8 步骤 1:打开 IntelliJ IDEA 并创建新项目 启动 IntelliJ IDEA。在欢迎界面,点击 New Project(或通过菜单栏 File > New > Project)。 步骤 2:选择 Maven 项目类型 在左侧…

SpringAI实现AI应用-搭建知识库

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 概述 想要使用SpringAI搭建知识库,就要使用SpringAI中的TikaDocumentReader,它属于ETL(提取、转换、加载)框架中的提取&…

内网服务器映射到公网上怎么做?网络将内网服务转换到公网上

如何将内网映射到公网?本地局域网的网络下部署的内网服务地址转换到公网上连接访问是大家比较关注的问题,特别是在无公网IP使用的情况下,很多人不知道怎么做。 在没有公网 IP 的情况下,要将内网映射到公网,以便外网能…

intellij idea最新版git开启Local Changes

习惯了在idea的git插件里,查看项目已修改的文件,但是新版idea默认不展示了,用起来很难受。 参考网上教程开启方法如下: 1. 确保安装Git Modal Commit Interface插件并开启该插件 2. 在Advanced Settings开启Use Modal Commit In…

​​智能制造中的预测性维护:基于深度学习的设备故障预测​​

智能制造中的预测性维护:基于深度学习的设备故障预测 引言 在智能制造领域,设备突发故障可能导致巨大的经济损失。传统维护方式(如定期检修或事后维修)往往效率低下且成本高昂。预测性维护(Predictive Maintenance, PdM)通过实时监测设备状态并预测潜在故障,能够显著减…

DeepSeek+即梦:AI视频创作从0到1全突破

目录 一、开启 AI 视频创作大门:前期准备1.1 注册与登录1.2 熟悉工具界面1.3 硬件与网络要求 二、用 DeepSeek 构思视频脚本2.1 明确创作主题与目标2.2 编写优质提示词2.3 生成并优化脚本 三、即梦 AI 实现画面生成3.1 文生图基础操作3.2 调整参数提升画质3.3 保持人…

初始化列表详解

1.类中包含以下成员,必须放在初始化列表位置进行初始化: 1. 引用成员变量 2.const成员变量 3. 自定义类型成员(且该类没有默认构造函数时 ) 2. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关…

基于建造者模式的信号量与理解建造者模式

信号量是什么? AI解释:信号量(Semaphore)是操作系统中用于 进程同步与互斥 的经典工具,由荷兰计算机科学家 Edsger Dijkstra 在 1965 年提出。它本质上是一个 非负整数变量,通过原子操作(P 操作…

开闭原则(OCP)

非常棒的问题!🔍 开闭原则(OCP, Open/Closed Principle)是软件设计的核心原则之一,下面我将从定义、意义、优劣分析、Python示例和结构图五个方面完整解析给你。 🧠 什么是开闭原则? 开闭原则&a…

python数据分析(七):Pandas 数据变形与重塑

Pandas 数据变形与重塑全面指南 1. 引言 在数据分析过程中,我们经常需要将数据从一种结构转换为另一种结构,以适应不同的分析需求。Pandas 提供了丰富的数据变形与重塑功能,包括旋转(pivot)、堆叠(stack)、融合(melt)等多种操作。本文将详细…

Android学习总结之jetpack组件间的联系

在传统安卓开发中,UI 组件(Activity/Fragment)常面临三个核心问题: 生命周期混乱:手动管理 UI 与数据的绑定 / 解绑,易导致内存泄漏(如 Activity 销毁后回调仍在触发)。数据断层&am…

C++初阶:类和对象(二)

大家好,我是小卡皮巴拉 文章目录 目录 一.运算符重载 1.1 基本概念 定义 参数规则 特性 选择原则 重载要点 二.类的默认成员函数 2.1 构造函数 构造函数的特点 2.2 析构函数 析构函数的特点 2.3 拷贝构造函数 拷贝构造的特点 2.4 拷贝赋值运算符重…

【c++】【STL】priority_queue详解

目录 priority_queue的作用priority_queue的接口构造函数emptysizetoppushpopswap priority_queue的实现仿函数(函数对象)是什么?向上调整算法(adjustup)向下调整算法(adjustdown)迭代器构造pus…

测试——用例篇

目录 1. 测试用例 1.1 概念 2. 设计测试用例的万能公式 2.1 常规思考逆向思维发散性思维 2.2 万能公式 3. 设计测试用例例的方法 3.1 基于需求的设计方法 ​编辑 3.2 具体的设计方法 3.2.1 等价类 3.2.2 边界值 3.2.3 正交法 3.2.4 判定表法 3.2.5 场景法 3.2.6…

销售总监求职简历模板

模板信息 简历范文名称:销售总监求职简历模板,所属行业:其他 | 职位,模板编号:KREUNY 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…