当前位置: 首页 > news >正文

2d-gaussian-splatting:论文分析、全流程环境配置与数据集测试【2025最新版!!!】

一、引言

2D Gaussian Splatting (2DGS) 是SIGGRAPH 2024发表的一项突破性工作,主要解决了传统3D Gaussian Splatting在几何重建方面的根本性缺陷。传统3DGS虽然在新视角合成方面表现出色,但由于使用3D椭球体来表示场景,在处理薄结构和复杂几何时容易产生"浮动伪影",导致几何重建质量较差。
这个问题的根源在于3D高斯椭球体本身具有体积,当用来表示实际上是二维表面的物体时,会在空间中产生厚度,从而引入不准确的几何信息。想象一下用气球来描述一张纸的形状——气球总是有厚度的,无法完美表达纸张的薄度特性。
本博客将深入分析2DGS论文、其方法论,并提供环境配置和数据集测试的详细步骤,旨在自我复盘总结,也希望可以给三维重建领域的同学的提供一些帮助。

在这里插入图片描述

二、背景与意义

3DGS通过将场景表示为3D高斯核的集合,实现了高效的辐射场重建和实时渲染。尽管其在性能上表现出色,但在跨多个视图投影3D高斯时存在不一致性,导致表面表示不准确——特别是在处理薄结构时,这一问题尤为明显。2DGS通过使用2D定向平面高斯盘(surfels)建模场景,紧密对齐表面以确保几何一致性,成功克服了这一局限。这一进步不仅提升了新视图合成的质量,还提供了精确的几何重建,支持快速训练和≥30 fps的实时渲染,使其成为高保真3D应用的理想选择。

三、方法论

2DGS的核心创新是将场景表示从3D椭球体改为2D定向圆盘(称为surfels,即surface elements)。这种表示方法更贴近真实世界中物体表面的本质——大多数可见表面实际上都是二维的。
技术上,2DGS引入了透视正确的可微分光栅化技术,这是一个重要的数学创新。传统的仿射变换在处理透视投影时会产生误差,而透视正确的变换确保了2D高斯在投影到图像平面时保持正确的形状和大小关系。
为了增强重建质量,作者还开发了两个关键的正则化项:法向一致性正则化确保相邻表面元素的法向量保持合理的连续性;深度扭曲正则化则防止表面元素在深度方向上的不合理分布。

四、创新点:

2DGS引入了以下关键创新:

  • 2D高斯建模:将场景表示为2D定向平面高斯盘,而非3D体积,确保了表面建模的内在一致性,并消除了多视图不一致性。
  • 视图校正的2D溅射:采用射线-溅射相交和光栅化技术,确保从任意视角准确渲染薄表面,提升视觉质量。
  • 新颖的正则化项:引入深度失真和法线一致性项,进一步增强几何精度,稳定优化过程,减少噪声并改善细节恢复。

五、主要工作流程

2DGS的主要工作流程包括:

  • 场景建模:初始化2D高斯盘以覆盖场景表面。
  • 溅射过程:通过视图校正的2D溅射,使用射线-溅射相交和光栅化技术渲染场景。
  • 优化:应用深度失真和法线一致性正则化,优化高斯盘的参数。
  • 渲染与网格提取:实时生成新视图,并从优化后的2D高斯盘中提取详细的三角形网格,用于几何分析。

整个系统的工作流程可以分为几个关键阶段。首先是数据预处理阶段,系统使用COLMAP进行相机标定和稀疏重建,这为后续的优化提供了初始的相机参数和稀疏点云。
接下来是核心的优化阶段,系统通过可微分渲染来优化2D高斯参数。每个2D高斯由位置、法向量、两个切向量的缩放、不透明度和颜色参数定义。优化过程中,系统会动态地增加和删除高斯来适应场景的复杂度。
最后是网格提取阶段,系统使用TSDF(Truncated Signed Distance Function)融合技术从优化后的2D高斯中提取三角网格。这里有两种模式:有界网格提取适用于前景物体,而无界网格提取则能处理任意大小的场景。

六、效果与性能

在标准数据集上的测试结果表明,2DGS在几何重建方面显著优于传统3DGS。在DTU数据集上,平均Chamfer距离从3DGS的约1.0降低到0.74,这是一个substantial的改进。同时,在新视角合成质量方面,2DGS基本保持了与3DGS相当的水平,PSNR值仅有微小下降。
更重要的是,2DGS能够提取出高质量的三角网格,这为后续的编辑、动画和其它下游应用提供了可能。传统3DGS由于几何质量问题,很难直接用于需要精确几何的应用场景。

七、优势与局限性

优势

  • 卓越的几何重建和新视图合成质量。
  • 实时渲染(≥30 fps)和快速训练。
  • 视图一致的表面建模,适用于高精度应用。
    优点方面,2DGS最大的贡献是解决了3DGS几何重建质量差的根本问题,同时保持了实时渲染的能力。系统支持无界场景的网格提取,这对于大规模场景重建具有重要意义。

局限性

  • 对大型场景的计算资源需求较高。
  • 对输入数据质量(如相机校准)敏感。
  • 目前仅限于静态场景,暂不支持动态环境。

缺点主要体现在计算复杂度上,透视正确的光栅化相比传统方法需要更多计算资源。另外,对于某些特殊场景(如高度透明或反射的表面),2D表示可能不如3D表示灵活。

八、测试数据集推荐

  • 标准评测数据集:DTU数据集是几何重建的标准基准,包含多个物体的多视角图像。MipNeRF360数据集则适合测试新视角合成质量,包含室内外不同场景。
  • 自定义数据准备:对于您自己的图像数据集,需要确保图像质量良好,光照相对稳定,相机运动轨迹覆盖充分。对于视频数据集,建议提取关键帧来避免运动模糊。

九、完整测试方案

9.1 环境准备

# 确认CUDA版本
nvcc --version
nvidia-smi# 确认系统版本
lsb_release -a

在这里插入图片描述

9.2 创建Conda环境

# 创建专用环境
conda create -n 2dgs python=3.8
conda activate 2dgs# 安装PyTorch (CUDA 11.8版本)
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia

9.3 项目克隆与依赖安装

# 克隆项目(包含子模块)
git clone https://github.com/hbb1/2d-gaussian-splatting.git --recursive
cd 2d-gaussian-splatting# 安装基础依赖
pip install plyfile
pip install opencv-python
pip install tqdm
pip install scikit-image
pip install lpips
pip install trimesh
pip install mediapy# 关键:安装Open3D(注意版本兼容性)
pip install open3d==0.18.0# 安装COLMAP依赖
conda install -c conda-forge colmap# 编译CUDA扩展(关键步骤)
pip install submodules/diff-surfel-rasterization

十、测试数据集准备

10.1 标准数据集下载

# 创建数据目录
mkdir -p data/dtu data/mipnerf360 data/custom# DTU数据集(预处理版本)
# 从 https://drive.google.com/drive/folders/1SJFgt8qhQomHX55Q4xSvYE2C6-8tFll9 下载
# 推荐先下载scan105进行测试# MipNeRF360数据集
# 从 https://jonbarron.info/mipnerf360/ 下载garden场景

10.2 自定义数据集准备

# 为你的图像数据集创建COLMAP格式
mkdir -p data/custom/your_scene/images# 将你的图像复制到images目录
cp /path/to/your/images/* data/custom/your_scene/images/# 运行COLMAP进行处理
python convert.py -s data/custom/your_scene --skip_matching

10.3 视频数据处理

# 从视频中提取关键帧
python scripts/extract_frames.py --video_path your_video.mp4 --output_dir data/custom/video_scene/images --fps 2# 运行COLMAP处理视频帧
colmap automatic_reconstructor \--workspace_path data/custom/video_scene \--image_path data/custom/video_scene/images \--quality_factor 1.0

10.4 基础训练测试

# 使用DTU数据集测试(小规模,快速验证)
python train.py -s data/dtu/scan105 -m output/dtu/scan105 -r 2 --depth_ratio 1# 监控训练过程
tensorboard --logdir output/dtu/scan105

10.5 渲染与网格提取测试

# 有界网格提取(适合物体)
python render.py -s data/dtu/scan105 -m output/dtu/scan105 -r 2 --depth_ratio 1 --skip_test --skip_train# 无界网格提取(适合场景)
python render.py -s data/mipnerf360/garden -m output/m360/garden --unbounded --skip_test --skip_train --mesh_res 1024

10.6 完整流程测试

# MipNeRF360场景完整测试
python train.py -s data/mipnerf360/garden -m output/m360/garden
python render.py -s data/mipnerf360/garden -m output/m360/garden --unbounded --skip_test --skip_train --mesh_res 1024# 自定义数据测试
python train.py -s data/custom/your_scene -m output/custom/your_scene
python render.py -s data/custom/your_scene -m output/custom/your_scene --skip_test --skip_train

十一、超参数调节与优化

11.1 核心超参数的物理意义

2D Gaussian Splatting就像是一位画家在创作一幅立体画作。每个参数都控制着画家的不同技法:画笔的粗细、颜料的浓度、色彩的过渡方式。理解这些参数的相互作用,就能创造出较好的三维重建效果。
首先,我们需要理解每个超参数背后的物理意义,这样才能做出合理的调节决策。

(1)、深度参数的哲学思考

  • depth_ratio参数是最重要的参数之一,它控制深度计算的方式。当设置为0时,系统使用均值深度;设置为1时使用中位数深度。这个选择的背后有深刻的统计学原理。想象您正在观察一个复杂场景,其中有些物体很近,有些很远。均值深度会被极值影响,而中位数深度更加稳健。对于包含大量背景的无界场景,均值深度能更好地处理深度分布的长尾特性;对于前景物体占主导的有界场景,中位数深度能提供更稳定的几何约束。
  • depth_ratio参数体现了一个深刻的统计学哲学问题:我们应该如何理解一个复杂场景的"典型"深度?当我们站在一个房间里环顾四周时,什么深度最能代表这个空间的特征?
    让我用一个具体的例子来说明。假设你正在重建一个客厅场景,其中包含近处的茶几(距离2米)、中等距离的沙发(距离4米)、以及远处的书柜(距离8米)。如果使用均值深度(depth_ratio=0),系统会计算所有深度值的平均值,大约是4.7米。但如果场景中还包含窗外的远山(距离1000米),均值就会被严重拉偏。
    相反,中位数深度(depth_ratio=1)会选择中间值,不受极端值影响。在上述客厅例子中,中位数深度仍然是4米左右,即使加入了远山这个极端值。这就是为什么室内场景通常建议使用中位数深度的原因。
# 深度选择的实际影响示例
# 客厅场景:推荐 depth_ratio=1.0
python train.py -s data/indoor/living_room -m output/living_room \--depth_ratio 1.0 \--lambda_normal 0.12 \--lambda_distortion 0.015# 城市街景:推荐 depth_ratio=0.0  
python train.py -s data/outdoor/street_view -m output/street_view \--depth_ratio 0.0 \--lambda_normal 0.04 \--lambda_distortion 0.003

(2)、正则化参数的平衡艺术

  • lambda_normal参数控制法向一致性正则化的强度。这个参数实际上在平衡表面的平滑性和细节保持之间进行权衡。较大的值会让相邻的表面元素(surfels)保持更一致的法向量,产生更平滑的表面,但可能会模糊掉重要的几何细节。较小的值则允许更多的几何变化,能够捕捉精细结构,但可能产生噪声。

  • lambda_normal参数就像是雕塑家手中砂纸的粗细程度。粗砂纸(高数值)能快速平滑表面,但会磨掉精细的纹理;细砂纸(低数值)保留细节,但可能留下粗糙的痕迹。
    考虑一个古代陶瓷花瓶的重建项目。花瓶表面有精细的雕刻图案,同时整体形状应该平滑连续。如果lambda_normal设置过高(比如0.2),雕刻细节会被模糊掉,花瓶变成一个光滑的椭球体。如果设置过低(比如0.01),表面会保留噪声,看起来像是破损的陶片拼接而成。
    最佳的设置通常在0.08-0.12之间,这样既能保持花瓶的整体平滑性,又能捕捉到表面的装饰纹理。

(3)、扭曲正则化的几何约束

  • lambda_distortion参数控制深度扭曲正则化,它防止表面元素在深度方向上的不合理分布。这个参数特别重要,因为它直接影响几何重建的质量。过小的值可能导致表面元素聚集或分散不均,过大的值则可能过度约束,影响复杂几何的表达能力。

  • lambda_distortion参数控制着三维空间中表面元素的合理分布。想象您正在拼装一个复杂的立体拼图,每一片都必须在正确的空间位置上才能形成完整的图像。
    让我通过一个建筑重建的例子来解释。假设您要重建一座哥特式教堂,其中包含复杂的尖塔、飞扶壁和雕花装饰。如果lambda_distortion设置过低,表面元素可能会在深度方向上产生不合理的聚集,导致墙面看起来有"气泡"或"凹陷"。如果设置过高,系统会过度约束表面元素的分布,可能无法正确表达建筑的复杂几何结构。

11.2 场景驱动的参数调优举例

(1)室内物体重建场景

对于桌面物体、雕塑等有界的室内场景,我们的目标是获得精确的几何细节。这类场景通常具有清晰的前景背景分离,光照相对稳定,几何结构相对简单但细节丰富。
在这种场景下,建议使用depth_ratio=1.0。原因是室内物体场景的深度分布相对集中,中位数深度能够提供更稳定的几何约束。同时,可以适当增大lambda_normal到0.1-0.15范围,因为室内物体通常具有相对平滑的表面,强化法向一致性有助于减少噪声并获得更干净的几何。
lambda_distortion参数可以设置在0.01-0.02范围内。室内物体的深度变化相对平缓,适中的扭曲正则化既能保证几何合理性,又不会过度约束细节表达。
训练参数方面,可以使用较高的图像分辨率(-r 1),因为室内场景通常图像质量较好,高分辨率有助于捕捉更多细节。迭代次数可以设置为15000-20000次,因为室内场景相对简单,过多迭代可能导致过拟合。

(2)室外大场景重建

室外场景如街道、建筑群、自然景观等,具有复杂的深度分布和光照变化。这类场景的挑战在于处理远近物体的巨大深度差异和复杂的几何结构。
对于这类场景,强烈推荐使用depth_ratio=0.0(均值深度)。室外场景的深度分布通常具有长尾特性,远处的建筑和天空会产生很大的深度值,中位数深度可能会偏向近处物体,而均值深度能更好地平衡整个深度范围。
lambda_normal参数需要相对较小,建议设置在0.02-0.05范围内。室外场景包含大量不同材质和结构的表面,过强的法向约束会抹掉重要的几何变化。建筑物的边缘、植被的纹理、地面的起伏都需要一定的几何自由度来表达。
lambda_distortion也应该相对较小,设置在0.001-0.005范围内。大场景中物体的深度分布本身就很复杂,过强的扭曲约束可能会影响场景的真实表达。
训练方面,由于场景复杂度高,建议增加迭代次数到25000-30000次。可以考虑使用较低的初始分辨率(-r 2)进行快速预训练,然后切换到高分辨率(-r 1)进行精细化。

(3)透明和反射材质场景

玻璃器皿、金属物体、水面等具有复杂光学特性的场景需要特殊的参数策略。这类场景的挑战在于视觉外观与几何结构的复杂对应关系。
对于透明物体,建议使用depth_ratio=1.0并增大lambda_normal到0.15-0.2。透明表面的法向量信息对于正确渲染至关重要,强化法向一致性有助于获得更准确的光线折射效果。
lambda_distortion可以适当增大到0.02-0.03,因为透明材质的深度关系需要更严格的约束来避免几何上的歧义。同时,可能需要增加训练迭代次数,因为透明材质的优化通常更加困难。

(4)高动态范围和复杂光照场景

对于包含强烈阴影、高光、或者光照变化剧烈的场景,参数调节需要特别注意平衡几何约束和外观表达。
这类场景建议使用中等强度的正则化参数:lambda_normal=0.05-0.08,lambda_distortion=0.005-0.01。过强的约束可能会影响系统对复杂光照效果的学习能力。
深度参数的选择取决于场景的空间特性,但通常建议从depth_ratio=0.5开始尝试,这是一个均值和中位数的折中选择。

案例一:精密工业零件检测

假设你需要为汽车发动机零件建立数字孪生模型,用于质量检测和缺陷分析。这种应用要求极高的几何精度,表面细节的准确性直接关系到检测结果的可靠性。
在这种场景下,我们需要优先考虑几何准确性而非渲染速度。参数设置策略如下:

# 工业零件高精度重建配置
python train.py -s data/industrial/engine_part -m output/engine_part \--depth_ratio 1.0 \           # 零件场景深度集中,使用中位数--lambda_normal 0.15 \         # 高法向约束确保表面平滑--lambda_distortion 0.02 \     # 强几何约束防止伪影--iterations 25000 \           # 更多迭代确保收敛-r 1                           # 全分辨率训练

这种配置的理论依据是:工业零件通常具有规则的几何特征和相对均匀的材质,强正则化有助于减少测量噪声的影响。同时,零件检测对细节的要求极高,需要更多的训练迭代来达到收敛。

案例二:文物数字化保护

考虑一个更具挑战性的场景:为博物馆的珍贵文物创建高保真数字档案。文物通常具有复杂的表面纹理、不规则的几何形状,以及可能存在的损坏或老化痕迹。

# 文物数字化专用配置
python train.py -s data/artifact/ancient_vase -m output/ancient_vase \--depth_ratio 1.0 \           # 文物场景相对紧凑--lambda_normal 0.06 \         # 较弱约束保留表面纹理--lambda_distortion 0.008 \    # 适中约束平衡质量和细节--iterations 20000 \           # 标准迭代次数-r 1                           # 高分辨率捕捉纹理细节

这里的关键思考是:文物的价值往往在于其独特的历史痕迹和工艺细节。过强的正则化可能会"修复"这些珍贵的历史信息,因此我们选择较弱的约束来保持原始特征。

案例三:虚拟现实场景构建

对于VR应用,我们需要在视觉质量和实时性能之间找到平衡。用户在VR环境中的沉浸感很大程度上取决于场景的真实感和流畅的交互体验。

# VR场景优化配置
python train.py -s data/vr/apartment_tour -m output/vr_apartment \--depth_ratio 0.2 \           # 轻微偏向中位数的折中选择--lambda_normal 0.08 \         # 中等强度确保视觉连续性--lambda_distortion 0.01 \     # 平衡几何质量和性能--iterations 15000 \           # 较少迭代节省训练时间-r 2                           # 适中分辨率平衡质量和性能

VR应用的特殊考虑是用户可能从任意角度观察场景,因此几何的一致性比极致的细节更重要。同时,VR系统对计算资源的要求很高,适当的性能优化是必要的。

动态调优策略

实际应用中,最有效的策略是采用动态调优方法。我建议从保守的参数开始,逐步调整并观察结果。

  • 初始参数设置:先使用默认参数进行短时间训练(5000-7000迭代),观察初步结果。检查几何重建是否存在明显的伪影,渲染质量是否满足基本要求。
  • 几何质量优先调优:如果发现几何重建存在噪声或不连续,逐步增大lambda_normal参数,每次增加0.02-0.03,重新训练并比较结果。如果几何过于平滑丢失细节,则减小该参数。
  • 深度分布优化:通过可视化深度图来判断depth_ratio的设置是否合理。如果深度分布不均匀或存在明显的深度跳跃,尝试调整该参数。
  • 渲染质量平衡:最后微调lambda_distortion参数,平衡几何约束和渲染质量。过强的约束可能导致渲染质量下降,过弱则可能影响几何准确性。

十二、关键实施策略

  • 环境配置的关键点:CUDA扩展的编译是成功运行的关键,特别是diff-surfel-rasterization模块。这个模块实现了透视正确的光栅化,是2DGS的核心技术。如果编译遇到问题,通常是CUDA路径或版本不匹配导致的。
  • 数据预处理的重要性:COLMAP的质量直接影响最终效果。对于您的自定义数据,建议图像之间有充分的重叠(至少60%),相机运动要平滑,避免快速移动导致的模糊。对于视频数据,每秒提取2-5帧通常是合适的,过密会导致冗余,过疏会影响重建质量。
  • 参数调优策略:depth_ratio参数是关键,对于室内物体使用1.0(中位数深度),对于大场景使用0.0(均值深度)。lambda_normal控制法向一致性,增大该值可以获得更平滑的表面,但可能损失细节。
  • 硬件优化建议:您的RTX 4090显卡内存充足,可以适当增大mesh_res到1024甚至2048来获得更精细的网格。训练时可以使用更大的图像分辨率(-r 1而非-r 2)来获得更好的质量。

十三、总结

2D高斯溅射(2DGS)在3DGS的基础上,通过创新的2D高斯建模、视图校正溅射和高级正则化技术,成功解决了多视图不一致性和薄表面重建难题。它提供了业界领先的几何重建质量和实时渲染能力,成为图形学和视觉应用中的宝贵工具。尽管2DGS对计算资源需求较高且目前仅支持静态场景,但其未来扩展潜力——如支持动态场景——是巨大的。本博客从论文分析到环境配置和数据集测试,进行了全面的记录,希望能帮助有需要的同学!

相关文章:

  • AntDesignPro动态路由配置全攻略
  • AES算法的Verilog流水线实现(带测试)
  • 【机器人-深度估计】双目深度估计原理解析
  • 汽车制造领域:EtherCAT转Profinet网关案例全面解析
  • Redis精简总结|一主二从哨兵模式(工作机制)|集群模式|缓存的穿透雪崩击穿
  • day040-搭建lnmp服务与数据库迁移
  • C#串口通讯实战指南
  • JavaScript操作DOM对象
  • solidity+Remix本地化部署和安装教程
  • MATLAB GUI界面设计 第三章——仪器组件
  • ISO 26262-11 半导体功能安全学习(二)
  • C#采集电脑硬件(CPU、GPU、硬盘、内存等)温度和使用状况
  • 技术解读|MatrixOne Intelligence模型解析原理及微调实践
  • 华为云 Flexus+DeepSeek 征文|文案魔盒・Emoji 菌:基于华为云 CCE 集群 Dify 大模型,创意文案智能生成助手
  • 企业网盘和个人网盘的区别?
  • 数组题解——​最大子数组和​【LeetCode】(更新版)
  • 基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
  • github常用插件
  • 6.23_JAVA_RabbitMQ
  • 使用AI开发招聘网站(100天AI编程实验)