一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting

news2025/5/19 5:54:58

一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting

文章目录

  • 一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting
    • 摘要
    • Abstract
    • 1. 基本思想
      • 1.1 设计
      • 1.2 特点
    • 2. Nerfstudio&Splatfacto
      • 2.1 Nerfstudio
      • 2.2 Splatfacto
    • 3. Splatfacto数据格式要求
      • 3.1 相机的内参
      • 3.2 相机的外参
      • 3.3 深度图
      • 3.4 掩码
    • 4. Splatfacto与VTON360
    • 总结
    • 参考

摘要

本周主要学习了开源高斯泼溅实现库 gsplat 及其在 Gaussian Splatting 方法中的应用和优化。gsplat 是一个基于 PyTorch 和 CUDA 的高效实现库,支持模块化 API 接口,能够显著提升 Gaussian Splatting 模型的训练速度、内存效率和收敛时间。此外,还深入研究了 gsplat 的核心功能,包括密集化策略、姿态优化、深度渲染、抗锯齿处理等技术细节,以及其在 Nerfstudio 框架中的扩展实现 Splatfacto。同时,对 Splatfacto 的数据格式要求、训练流程及其在 VTON360 项目中的改进进行了系统性总结,为后续研究基于高斯光栅化的 3D 场景重建提供了重要参考。

Abstract

This week’s study focused on gsplat, an open-source library for Gaussian Splatting, and its applications and optimizations in the Gaussian Splatting method. gsplat is a highly efficient library built on PyTorch and CUDA, offering a modular API interface that significantly improves training speed, memory efficiency, and convergence time for Gaussian Splatting models. Key features such as densification strategies, pose optimization, depth rendering, anti-aliasing techniques, and N-dimensional rasterization were thoroughly examined. Furthermore, the integration of gsplat with the Nerfstudio framework through the Splatfacto module was explored, including its data format requirements, training procedures, and its modification in the VTON360 project. This provides valuable insights for further research on 3D scene reconstruction based on Gaussian rasterization.

1. 基本思想

gsplat是一个开源库,旨在训练和发展Gaussian Splatting方法。它的特点是前端具有与PyTorch库兼容的Python绑定,后端具有高度优化的CUDA内核。 gsplat提供了许多增强高斯分布模型优化的特性,可显著地改善Gaussian Splatting模型的优化,其中包括对速度,内存和收敛时间的优化改进。实验结果表明,与原始Gaussian Splatting论文的实现相比,gsplat的训练时间减少了10%,内存需求减少了4倍。 gsplat在GitHub上长期进行维护。其核心理念是为基于PyTorch的项目开发高斯溅射模型提供一个简单且易于修改的API。

开源Gaussian Splatting方法实现的先前工作包括GauStudio,它将各种研究整合到一个代码库中,以及几个基于PyTorch的复现。与以前的工作不同,gsplat不仅寻求实现原始3DGS工作并进行性能改进,还旨在提供一个易于使用和模块化的API接口,允许外部扩展和修改,从而促进高斯溅射领域的进一步研究。

1.1 设计

gsplat 是一个独立开发的库,旨在提高效率和模块化。它可以在 Windows 和 Linux 平台上通过 PyPI 安装,并提供 PyTorch 接口。

出于速度考虑,许多操作都被编写成了优化的 CUDA 内核,并通过 Python 绑定暴露给开发者。此外,gsplat 还包含了原生的 PyTorch 实现,以支持对新研究想法的迭代。gsplat 的设计目标是提供一个简单的接口,该接口可以从外部项目中导入,从而轻松集成主要的Gaussian Splatting(Gaussian Splatting)功能,并根据最新研究成果进行算法自定义。gsplat 提供了详尽的示例、验证 CUDA 操作正确性的测试用例,以及托管在线的进一步文档,因此也可以作为新研究人员进入该领域的教育资源。

image-20250518155029429

1.2 特点

gsplat 库包含与Gaussian Splatting相关的特性和算法实现。通过模块化接口,用户可以简单地通过 API 调用启用所需功能。在此,我们简要介绍 gsplat 提供的一些算法增强功能,这些功能在 Kerbl 等人提出的原始 3DGS 实现中并未包含。

密集化策略:Gaussian Splatting优化过程的一个关键组成部分包括在场景欠重建和过重建区域分别对高斯分布进行密集化和修剪。这一直是研究的活跃领域,而 gsplat 库支持一些最新的密集化策略。这些策略包括 Kerbl 等人提出的自适应密度控制(ADC)、Ye 等人提出的 Absgrad 方法,以及 Kheradmand 等人提出的马尔可夫链蒙特卡洛(MCMC)方法。gsplat 的模块化 API 允许用户轻松地在不同策略之间切换。

姿态优化:gsplat 中的高斯渲染过程(如图 1 所示)是完全可微的,这使得梯度可以流向高斯参数 G(c,Σ, μ, o) 以及其他参数,如相机视图矩阵 P = [R | t],这在原始工作中并未考虑。这对于缓解数据集中的姿态不确定性至关重要。具体而言,可以针对相机视图矩阵的旋转和平移分量计算重建损失的梯度,从而通过梯度下降优化初始相机姿态。

深度渲染:从高斯场景渲染深度图对于正则化和网格化等应用非常重要。gsplat 支持使用优化的 RGB+Depth 光栅化器渲染深度图,该光栅化器也是完全可微的。gsplat 支持使用每个像素的累积 z-depth和经过 alpha 归一化的预期深度来渲染深度图。

N 维光栅化:除了渲染三通道 RGB 图像外,gsplat 还支持渲染更高维度的特征向量。这受到将学习到的特征图与可微体渲染相结合的算法的启发。为了满足这些特征的存储需求,gsplat 后端允许在训练期间调整影响内存分配的参数,如内核块大小。

抗锯齿:以不同分辨率查看由高斯表示的三维场景时,可能会产生锯齿效应,这在先前的三维表示中也曾出现过。当分辨率降低或从远处查看场景时,小于一个像素大小的单个高斯分布由于采样率低于奈奎斯特频率而会产生锯齿伪影。Mip-Splatting在投影的二维高斯协方差上提出了一种低通滤波器,确保高斯分布的范围始终跨越一个像素。gsplat 支持使用 Yu 等人引入的二维抗锯齿模式进行渲染。

image-20250518160822810

2. Nerfstudio&Splatfacto

2.1 Nerfstudio

Nerfstudio是一个为NeRF开发提供支持的Python框架。该框架的设计注重模块化,实时可视化开发,以及便于处理真实数据,使得NeRF方法的开发和实施变得更加简单。Nerfstudio通过提供一个整合的平台,使得研究人员和开发者能够更容易地合作和开发交互式3D场景。这个框架不仅适用于研究人员,也为工业界和非技术用户提供了使用NeRF的便利。

2.2 Splatfacto

同时Nerfstudio整合了Gaussian Splatting的实现方法,命名为Splatfacto。Nerfstudio使用gsplat作为其高斯光栅化的后端,这是一个内部重新实现旨在对开发人员更加友好。

训练

ns-train splatfacto --data {PROCESSED_DATA_DIR}

查看训练完模型的渲染

ns-viewer --load-config {outputs/.../config.yml}

评估训练指标

ns-eval --load-config={PATH_TO_CONFIG} --output-path=output.json

3. Splatfacto数据格式要求

3.1 相机的内参

如果所有图像都具有相同的相机内参,则可以将这些值放在文件的顶部。

{
  "camera_model": "OPENCV_FISHEYE", // camera model type [OPENCV, OPENCV_FISHEYE]
  "fl_x": 1072.0, // focal length x
  "fl_y": 1068.0, // focal length y
  "cx": 1504.0, // principal point x
  "cy": 1000.0, // principal point y
  "w": 3008, // image width
  "h": 2000, // image height
  "k1": 0.0312, // first radial distortion parameter, used by [OPENCV, OPENCV_FISHEYE]
  "k2": 0.0051, // second radial distortion parameter, used by [OPENCV, OPENCV_FISHEYE]
  "k3": 0.0006, // third radial distortion parameter, used by [OPENCV_FISHEYE]
  "k4": 0.0001, // fourth radial distortion parameter, used by [OPENCV_FISHEYE]
  "p1": -6.47e-5, // first tangential distortion parameter, used by [OPENCV]
  "p2": -1.37e-7, // second tangential distortion parameter, used by [OPENCV]
  "frames": // ... per-frame intrinsics and extrinsics parameters
}

每帧图片的内参也可以定义在frames域中。一旦在一个域中定义了一个字段(比如fl_x),每个frames域中都要定义相同的字段补充相应数据。

{
  // ...
  "frames": [
    {
      "fl_x": 1234
    }
  ]
}

3.2 相机的外参

对于相机的变换矩阵,前3列是 + X +X +X + Y +Y +Y + Z +Z +Z,定义相机方向; X X X Y Y Y Z Z Z 值定义原点。最后一行是为了写成齐次坐标的形式。

{
  // ...
  "frames": [
    {
      "file_path": "images/frame_00001.jpeg",
      "transform_matrix": [
        // [+X0 +Y0 +Z0 X]
        // [+X1 +Y1 +Z1 Y]
        // [+X2 +Y2 +Z2 Z]
        // [0.0 0.0 0.0 1]
        [1.0, 0.0, 0.0, 0.0],
        [0.0, 1.0, 0.0, 0.0],
        [0.0, 0.0, 1.0, 0.0],
        [0.0, 0.0, 0.0, 1.0]
      ]
      // Additional per-frame info
    }
  ]
}

3.3 深度图

为了进行带有深度图条件的监督学习,需要在transforms.json中为每一帧定义字段depth_file_path,并使用一种由nerfstudio支持的计算深度损失的方法(例如,depth-nerfacto)。深度假定为16位或32位,单位为毫米,以保持与Polyform一致。深度图像中的零值被视为未知深度。我们可以使用NerfstudioDataParserConfig中的depth_unit_scale_factor参数来调整这个比例因子。请注意,默认情况下,我们会调整深度图像的大小以匹配RGB图像的形状。

{
  "frames": [
    {
      // ...
      "depth_file_path": "depth/0001.png"
    }
  ]
}

3.4 掩码

Splatfacto训练的图像中,某些部分可能不应该在训练期间使用(例如:移动的物体,人)。这些图像可以使用帧数据中指定的附加掩码图像进行屏蔽。

{
  "frames": [
    {
      // ...
      "mask_path": "masks/mask.jpeg"
    }
  ]
}
  • mask必须只有一个通道,并且只能有黑和白这两种像素
  • mask的大小必须与训练图片的大小一致
  • 黑色像素的区域是被忽略的

4. Splatfacto与VTON360

在VTON360中作者提到对Nerfstudio的Splatfacto进行了修改与扩展,主要是去掉了3D场景中的背景。作者添加一个不透明度损失到背景区域,并强制背景的不透明度为零。但如果在3DGS重建的早期阶段使用,不透明度损失可能会迫使所有高斯函数为零不透明度,导致训练失败。所以作者线性增加不透明度损失系数从0到max-opacity-loss-scale。更多细节可以在splatfactox/splatfactox.py:286中找到。

image-20250518160742323

因此splatfacto模块在VTON360项目中需要手动安装。

#! /bin/bash

set -exu
exp_dir="output"
cam_path="demo_data/campath.json"

# 1. reconstruction with 3DGS.
ns-train splatfactox \
    --output-dir ${exp_dir} \
    --experiment-name test \
    --max-num-iterations 20000 \
    --pipeline.model.cull-alpha-thresh 0.005 \
    --pipeline.model.max-opacity-loss-scale 2.0 \
    --pipeline.model.background_color white \
    --viewer.quit-on-train-completion True \
    nerfstudio-data --data demo_data/0024_00208 \

# use the newest checkpoint
ckpt_dir=$(ls ${exp_dir}/test/splatfactox | sort -r | head -n 1)
echo using checkpoint ${ckpt_dir}

# 2. render a video with the given camera path.
# there is no detail about the format of the camera path in NeRF Studio's docs,
# but you could export camera path manually using ns-view and then 
# edit the exported JSON file (focus on the field named `camera_path` in the JSON file) for a better result.
ns-render camera-path \
    --camera-path-filename $cam_path \
    --load-config ${exp_dir}/test/splatfactox/${ckpt_dir}/config.yml \
    --output-path ${exp_dir}/video.mp4 \


# 3. render each frame in the video.
ns-render camera-path \
    --output-format images \
    --camera-path-filename $cam_path \
    --load-config ${exp_dir}/test/splatfactox/${ckpt_dir}/config.yml \
    --output-path ${exp_dir}/frames/ \

这是2D VTON后将多视角图片转换为3D GS的训练命令和渲染视频命令。

3D_VTON_THuman

3D_VTON_MVHumanNet

总结

本周的学习主要围绕 gsplat 库及其在 Gaussian Splatting 方法中的优化展开。作为一个基于 PyTorch 和 CUDA 的开源项目,gsplat 提供了高效的模块化 API,实现了对原始 3DGS 方法的多方面改进,包括训练速度提高 10%、内存需求减少 4 倍等。通过研究 gsplat 的密集化策略、姿态优化、深度渲染、抗锯齿处理等核心功能,进一步理解了该库在 3D 场景重建中的潜力。

此外,详细分析了 Nerfstudio 框架下的 Splatfacto 模块,包括其数据格式要求、训练指令和扩展功能。特别是在 VTON360 项目中,Splatfacto 模块通过引入不透明度损失机制实现了背景区域的裁剪优化,同时避免了训练早期的梯度消失问题,展现了高斯光栅化方法在多视角 3D 场景重建中的重要应用价值。

参考

gsplat: An Open-Source Library for Gaussian Splatting

gsplat: GitHub仓库

Nerfstudio: A Modular Framework for Neural Radiance Field Development

复现nerfstudio并训练自己制作的数据集

NeRF Studio’s Dataset Format

Splatfacto: Nerfstudio’s Gaussian Splatting Implementation

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

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

相关文章

ARM A64 STR指令

ARM A64 STR指令 1 STR (immediate)1.1 Post-index1.1.1 32-bit variant1.1.2 64-bit variant 1.2 Pre-index1.2.1 32-bit variant1.2.2 64-bit variant 1.3 Unsigned offset1.3.1 32-bit variant1.3.2 64-bit variant 1.4 Assembler symbols 2 STR (register)2.1 32-bit varia…

Linux wlan 单频段 dual wifi创建

环境基础 TP LINK WN722N V1网卡linux 主机 查看设备是否支持双ap managed:客户端模式(连接路由器/AP)AP:接入点模式(创建热点)AP/VLAN:支持带VLAN标签的虚拟AP{ AP, mesh point, P2P-GO } &l…

【CSS】使用 CSS 绘制三角形

一、Border 边框法(最常用) 原理:通过设置元素的宽高为 0,利用透明边框相交形成三角形。 .triangle {width: 0;height: 0;border-left: 50px solid transparent; /* 左侧边框透明 */border-right: 50px solid transparent; /* …

信奥赛-刷题笔记-栈篇-T2-P3056括号调整问题0518

总题单 ​ 本部分总题单如下 【腾讯文档】副本-CSP-JSNOI 题单 (未完待续) https://docs.qq.com/sheet/DSmJuVXR4RUNVWWhW?tabBB08J2 栈篇题单 P3056 [USACO12NOV] Clumsy Cows S https://www.luogu.com.cn/problem/P3056 题目描述 Bessie the cow is trying to type …

inverse-design-of-grating-coupler-3d

一、设计和优化3D光栅耦合器 1.1 代码讲解 通过预定义的环形间距参数(distances数组),在FDTD中生成椭圆光栅结构,并通过用户交互确认几何正确性后,可进一步执行参数扫描优化。 # os:用于操作系统相关功能(如文件路径操作) import os import sys# lumapi:Lumerical 的…

Science Robotics 封面论文:基于形态学开放式参数化的仿人灵巧手设计用于具身操作

人形机械手具有无与伦比的多功能性和精细运动技能,使其能够精确、有力和稳健地执行各种任务。在古生物学记录和动物王国中,我们看到了各种各样的替代手和驱动设计。了解形态学设计空间和由此产生的涌现行为不仅可以帮助我们理解灵巧的作用及其演变&#…

DSU-Net

目录 Abstract 摘要 DSU-Net 模型框架 编码器 轻量级适配器模块 特征融合与协作 解码器 模型优势 实验 代码 总结 Abstract DSU-Net is an improved U-Net model based on DINOv2 and SAM2. It addresses the limitations of existing image segmentation models …

2025年- H30-Lc138- 141.环形链表(快慢指针,快2慢1)---java版

1.题目描述 2.思路 弗洛伊德算法(快慢指针 3.代码实现 public boolean hasCycle(ListNode head) {//1.如果空节点或者只有一个节点,都说明没有环,返回falseif(headnull||head.nextnull){return false;}//2.定义快慢指针,都从头…

LoadBarWorks:一款赛博风加载动画生成器的构建旅程

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 项目缘起:赛博与实用的结合 在日常开发中,我经常需要为不同的项目添加加载动画&#x…

SAP集团内部公司间交易自动开票

SAP集团内部公司间交易自动开票(非STO/EDI模式) 集团内部公司间采购与销售业务,在确认相应单据无误后,为减少人工开票业务, 可以用系统标准功能来实现自动开票。 1.采购发票自动开票(ERS) T-CODE:BP,勾选“基于收货的发票校验”、“自动G…

【YOLO(txt)格式转VOC(xml)格式数据集】以及【制作VOC格式数据集 】

1.txt—>xml转化代码 如果我们手里只有YOLO标签的数据集,我们要进行VOC格式数据集的制作首先要进行标签的转化,以下是标签转化的脚本。 其中picPath为图片所在文件夹路径; txtPath为你的YOLO标签对应的txt文件所在路径; xmlPa…

Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器

目录 1. 回显服务器 -- echo server 1.1 相关函数介绍 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服务端的封装 -- UdpServer.hpp 1.3 服务端代码 -- UdpServer.cc 1.4 客户端代码 -- UdpClient.…

C++笔试题(金山科技新未来训练营):

题目分布: 17道单选(每题3分)3道多选题(全对3分,部分对1分)2道编程题(每一道20分)。 不过题目太多,就记得一部分了: 单选题: static变量的初始…

【RabbitMQ】 RabbitMQ高级特性(二)

文章目录 一、重试机制1.1、重试配置1.2、配置交换机&队列1.3、发送消息1.4、消费消息1.5、运行程序1.6、 手动确认 二、TTL2.1、设置消息的TTL2.2、设置队列的TTL2.3、两者区别 三 、死信队列6.1 死信的概念3.2 代码示例3.2.1、声明队列和交换机3.2.2、正常队列绑定死信交…

电子电路:什么是电流离散性特征?

关于电荷的量子化,即电荷的最小单位是电子的电荷量e。在宏观电路中,由于电子数量极大,电流看起来是连续的。但在微观层面,比如纳米器件或单电子晶体管中,单个电子的移动就会引起可观测的离散电流。 还要提到散粒噪声,这是电流离散性的表现之一。当电流非常小时,例如在二…

深入理解位图(Bit - set):概念、实现与应用

目录 引言 一、位图概念 (一)基本原理 (二)适用场景 二、位图的实现(C 代码示例) 三、位图应用 1. 快速查找某个数据是否在一个集合中 2. 排序 去重 3. 求两个集合的交集、并集等 4. 操作系…

猫番阅读APP:丰富资源,优质体验,满足你的阅读需求

猫番阅读APP是一款专为书籍爱好者设计的移动阅读应用,致力于提供丰富的阅读体验和多样化的书籍资源。它不仅涵盖了小说、非虚构、杂志等多个领域的电子书,还提供了个性化推荐、书架管理、离线下载等功能,满足不同读者的阅读需求。无论是通勤路…

MetaMask安装及使用-使用水龙头获取测试币的坑?

常见的异常有: 1.unable to request drip, please try again later. 2.You must hold at least 1 LINK on Ethereum Mainnet to request native tokens. 3.The address provided does not have sufficient historical activity or balance on the Ethereum Mainne…

AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》

AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》 导读:2025年4月24日,OpenAI论坛全面探讨了 AI 的发展趋势、技术范式、地缘政治影响以及对经济和社会的广泛影响。强调了 AI 的通用性、可扩展性和高级推理能力,以…

Linux配置vimplus

配置vimplus CentOS的配置方案很简单,但是Ubuntu的解决方案网上也很多但是有效的很少,尤其是22和24的解决方案,在此我整理了一下我遇到的问题解决方法 CentOS7 一键配置VimForCPP 基本上不会有什么特别难解决的报错 sudo yum install vims…