在Julia中实现更好的高斯溅射

Hacker News Top 工具

摘要

GaussianSplatting.jl 2.0版本通过KernelAbstractions.jl带来了多GPU后端支持、多线程UI、MCMC致密化策略,以及用于更好3D重建的深度/几何监督。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/13 15:22

# Julia 中更好的高斯泼溅 来源:https://pxl-th.github.io/blog/better-gs-julia/ **使用 WASD + 鼠标或点击屏幕即可四处走动 :)** 乌克兰基辅的圣迈克尔护身符(使用 GaussianSplatting.jl 重建,约 6M 个高斯) GaussianSplatting.jl (https://github.com/JuliaNeuralGraphics/GaussianSplatting.jl) **2.0** 版本带来了显著的质量提升和新功能。 ### 同一套代码,多 GPU 后端支持 完全使用 Julia 编写,支持以下 GPU 后端: - AMD GPU(AMDGPU.jl) - NVIDIA GPU(CUDA.jl) - MacBook GPU(Metal.jl) 这是通过 KernelAbstractions.jl (https://github.com/JuliaGPU/KernelAbstractions.jl) 实现的,它允许编写单个内核,然后编译到特定的目标平台。 ### 多线程 UI 为了避免应用在繁重工作(如 GPU 内核的 JIT 编译、数据集加载等)期间卡死,应用现在分为两个线程: - 前端:处理 UI,执行 OpenGL 渲染,将命令分派给后端。 - 后端:执行高斯泼溅渲染、训练、数据集加载等。 这样,UI 始终保持响应,即使用户在后台运行长时间任务,也能与之交互。它还会显示进度条,提示正在进行的操作,而不是像以前那样冻结。当数据集在后端线程加载以及首次训练迭代进行 JIT 编译内核时,加载动画会持续旋转。 UI/UX 本身也有重大更新,现在在训练期间实时显示损失曲线以及所有超参数。训练运行时,损失曲线和超参数会实时更新。 ### 马尔可夫链蒙特卡洛策略 除了默认的克隆和拆分致密化策略外,我们现在支持 MCMC (https://arxiv.org/abs/2404.09591)(将 3D 高斯泼溅视为马尔可夫链蒙特卡洛)致密化策略。它可以精确控制场景中高斯的数量,并且通常不太依赖良好的初始化。用户可以在数据集加载期间选择 MCMC,或在代码中这样使用: ``` Trainer( rasterizer, gaussians, dataset, opt_params; strategy=MCMCStrategy(; kwargs...), ) ``` ### 深度与几何监督 为了改善重建的几何形状,我们可以使用现成的深度估计模型提供**深度先验**。深度图像应为数据集的一部分,位于 `/depths/.png` 路径下。 来自数据集的喷泉照片 喷泉场景的估计深度图 使用 Depth-Anything 3 得到的数据集图像及其估计深度先验。 要启用深度监督,可以在 UI 中切换,或使用 `OptimizationParams(; use_depth_loss=true)`。深度图随后会在训练期间提供监督,从而获得更好的几何形状并减少漂浮物。由于深度在不同的帧之间可能不同,所有深度图首先根据先验点云重新拟合到同一尺度。重新拟合失败的深度图将被丢弃,不用于监督。 为了进一步改善几何形状和平滑度,我们可以执行**几何正则化**来约束表面的形状,而深度监督仅约束其位置。可以在 UI 中启用,或使用 `OptimizationParams(; use_normal_loss=true)`,它执行两件事: - 深度法线一致性固定表面方向:从渲染深度图导出的法线必须与每个高斯(per-Gaussian)的法线对齐。 - 展平表面:沿每个高斯的最小轴将其展平。 启用了几何正则化的模型的渲染图像、深度和法线。 ### 天空穹顶 为了帮助分离天空/遥远背景并减少漂浮物,GaussianSplatting.jl 现在支持天空穹顶(Sky Dome)。天空穹顶是一个在大半径处的固定高斯外壳,在单独的一次渲染中渲染,并合成在场景后面。 天空穹顶可以呈球体或半球形式。 根据你的环境(例如上方的喷泉),你可能希望优先使用半球而不是球体,因为完整的球体会将部分几何体拉向自身,使地面更不透明。使用半球时,下半部分的背景为黑色,完全不影响几何体。 经过 3K 次迭代后,未使用和使用天空穹顶的重建对比。使用天空穹顶后,天空与喷泉清晰分离,不再漂浮环绕。 与场景其余部分(数百万高斯)相比,天空穹顶的开销可以忽略不计(约 32K 个高斯)。为了进一步帮助分离天空,我们可以使用从任何现成的天空分割模型获得的**天空分割掩码**,它们应为数据集的一部分,位于 `/sky/.png` 路径下。 来自数据集的喷泉照片 估计的天空掩码 数据集图像及其估计的天空掩码。 这有助于处理几何体边缘的小细节,例如树叶。 ### 相机视锥体 相机视锥体(Camera Frustum)可视化获得了一个小的体验更新,现在会显示实际相机拍摄图像的缩略图。 相机视锥体可视化。 ### 其他一些改进 以下是一些其他改进,不分先后: - **自动检查点(checkpointing)**每隔 N 步将检查点保存到所选目录。 - 自定义**超参数配置**(学习率、损失权重、正则化等)可以在数据集加载期间通过 `hyperparameters.toml` 文件提供(使用 `Load...`、`Save...` 按钮)。如果你对这些值满意,以后也可以保存,有助于复现。 - **捕获模式**的**相机路径**现在可以保存/加载,并在不同训练运行中精确复现。 - 界面会显示应用程序正在使用多少**VRAM**。 --- 以上是 GaussianSplatting.jl 2.0 更新的全部内容。欢迎试用并在 GitHub 仓库上留下反馈。 ### 感谢!:) ### 致谢 - LichtFeld Studio (https://lichtfeld.io/) 给予灵感! - JuliaGPU 生态系统的开发者们 (https://juliagpu.org/)。 ← 返回 (https://pxl-th.github.io/blog)

相似文章

高斯点溅射

Hacker News Top

研究人员提出了高斯点溅射(Gaussian Point Splatting),这是一种随机渲染方法,利用像素大小的不透明点和64位GPU原子操作,能够实时渲染数亿个高斯点。该方法已被SIGGRAPH 2026接收,采用层次化剔除与并行编程原语,实现均匀的工作负载分配,与原始高斯溅射相比仅存在轻微的噪声差异。

ZipSplat:更少的高斯,更优的 Splats

Hugging Face Daily Papers

ZipSplat 是一种基于 token 的前馈 3D 高斯溅射模型,利用 k-means 聚类将高斯放置与像素网格解耦,在无需真实位姿或内参的情况下,在 DL3DV 和 RealEstate10K 上实现了约 6 倍的高斯减少,同时设立了新的最佳结果。

GlobalSplat: 通过全局场景标记实现高效的前馈式三维高斯散射

Hugging Face Daily Papers

GlobalSplat 引入了一种高效的前馈框架,用于三维高斯散射,通过全局场景标记实现紧凑且一致的场景重建,将计算开销和推理时间降低至78毫秒以下。该方法采用从粗到细的训练策略,防止表示膨胀,同时以显著更少的高斯原语(16K)达到有竞争力的新视角合成性能,与密集基线相比更为高效。

Tsplat – 在终端中运行高斯泼溅渲染

Hacker News Top

Tsplat 是一款基于 Rust 的命令行工具,仅使用 CPU 即可直接在终端中渲染 3D 高斯泼溅场景,甚至支持通过 SSH 运行。它支持 Unicode 半角块和图形协议,并具有导航和自动旋转控制。