3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkühler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14.

3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最先进的场景渲染。该方法在训练时间和高质量的实时渲染之间实现了很好的权衡,在重建质量之高的情况下还能接入传统光栅化,优化速度也相当快。自从 3D Gaussian Splatting 横空出世,整个 NeRF 圈波涛汹涌,有望显著加速一系列 NeRF 类的工作 1

3D Gaussian Splatting 和 NeRF 一样,所做的任务也是新视图的合成,但没有使用 ray tracing 的渲染方式,而是更偏向于光栅化的渲染。通过构建以协方差为主导的 3D Gaussian 点云,用 Splatting 的方式进行渲染,实现了高分辨率的实时渲染。

在这里插入图片描述

目录

  • 一. 预备知识
    • 1. 几何的隐式表达
    • 2. 计算机中的几何表达
    • 3. 3D Gaussian
    • 4. 光栅化
    • 5. Splatting
  • 二. 研究背景
    • 1. 3D Gaussian Splatting
    • 2. 交叉优化
    • 3. 快速可微光栅化
  • 三. 3D Gaussian Splatting
  • 四. 交叉优化
    • 1. 参数优化
    • 2. 自适应控制
  • 五. 快速可微光栅化
  • 六. 实验结果
    • 1. 数据集
    • 2. 对比实验
    • 3. 消融实验
  • 七. 总结
  • 八. 复现

一. 预备知识

3D Gaussian Splatting 论文直接阅读会比较困难,本节参考 [NeRF坑浮沉记]3D Gaussian Splatting入门:如何表达几何,对需要用到的预备知识进行梳理。

更多参考资料如下:

  • 公式推导:《3D Gaussian Splatting for Real-Time Radiance Field Rendering》3D高斯的理论理解、3D Gaussian Splatting中的数学推导;
  • 源码解读:3D Gaussian Splatting源码解读、3D Gaussian Splatting cuda源码解读;
  • 全文翻译:3D Gaussian Splatting for Real-Time Radiance Field Rendering 笔记;
  • 文章总结:3D Gaussian Splatting笔记、论文简析:3D Gaussian Splatting !!!、Introduction to 3D Gaussian Splatting;
  • 视频讲解:【论文讲解】用点云结合3D高斯构建辐射场,成为快速训练、实时渲染的新SOTA!、Gaussian Splatting: A 3D Rendering Technique;
  • 实验指导:3D Gaussian Splats tutorial;

1. 几何的隐式表达

传统的几何显式表达使用点云、体素、网格等方式,可以沿着存储空间遍历场景中的所有元素。几何隐式表达则是使用函数或神经网络来表示几何信息,而不是使用显式的几何对象。在经典的隐式几何表达 —— NeRF 中,使用一个多层感知机作为几何的隐式表示方法,输入三维空间坐标和观测视角,就可以输出对应点的几何密度和颜色。渲染场景时把光线上的一系列采样点加权积起来,就可以渲染得到一个像素颜色。

从表达方式来看,几何的隐式表达可以分为体积类表达和表面类表达两种:

  • 体积类表达:NeRF 属于体积类表达,通过几何密度决定采样点颜色的贡献度。
  • 表面类表达:在表面类表达方式中,输入采样点,符号距离函数 SDF 输出空间中距离该点最近的表面的距离,正值表示表面外,负值表示表面内,表面类方法判定越靠近表面的采样点颜色贡献度越高。

2. 计算机中的几何表达

目前市面上大部分大型游戏在计算机中都是使用三角网格进行三维显式几何表达,能够借助 GPU 进行快速渲染。但三角网格由于三角形之间或三个顶点之间都是离散的,强行优化网格也只能是顶点粒度的,难免维度爆炸。

NeRF 系列方法大多使用光线追踪 (ray marching),速度自然没法和成熟的显式几何+光栅化比。而NeRF 在参数优化时一个参数变化对几何的优化可能是一大块也可能是一个小细节。

而 3D Gaussian 使用的椭球形表示可以作为小型可微空间进行优化,不同 Gaussian 之间则能够像三角网格一样并行光栅化渲染。可以看成是在可微和离散之间做了一个微妙平衡。其实早期的 3D 游戏也曾尝试过以椭球为基础元素进行建模 2

在这里插入图片描述

3. 3D Gaussian

说到 3D Gaussian 3,第一反应是:
N μ x , σ x , μ y , σ y , μ z , σ z ( x , y , z ) = 1 ( 2 π ) 3 σ x σ y σ z exp ⁡ ( − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 − ( z − μ z ) 2 2 σ z 2 ) N_{\mu_x, \sigma_x, \mu_y, \sigma_y, \mu_z, \sigma_z}(x, y, z)=\frac{1}{(\sqrt{2 \pi})^3 \sigma_x \sigma_y \sigma_z} \exp \left(-\frac{\left(x-\mu_x\right)^2}{2 \sigma_x{ }^2}-\frac{\left(y-\mu_y\right)^2}{2 \sigma_y{ }^2}-\frac{\left(z-\mu_z\right)^2}{2 \sigma_z{ }^2}\right) Nμx,σx,μy,σy,μz,σz(x,y,z)=(2π )3σxσyσz1exp(2σx2(xμx)22σy2(yμy)22σz2(zμz)2)
但这其实是分量 x , y , z x, y, z x,y,z 互相独立的特例,此时的模型坐标系和世界坐标系平行。不过这种特例可以帮助理解 3D Gaussian:试想一个实心椭球,将它沿某一条轴切开后会得到一个椭圆,这个椭圆其实是无限大的,每一层的密度都不相同,这个切面就是二维高斯分布的等线图:
在这里插入图片描述
在这里插入图片描述

3D Gaussian 也叫三维高斯分布或三维正态分布,是统计学中一种特殊的多维正态分布,通常用来建模具有连续性随机性的现象,如图像处理、统计建模、机器学习等领域。3D Gaussian 能够涵盖空间中任意形状的椭球,包括平移、旋转。3D Gaussian 在三维空间中定义了一个概率分布,标准模型数学表示如下:
G s ( x ) = 1 ( 2 π ) 3 det ⁡ ( Σ ) e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) G_s(x)=\frac{1}{(\sqrt{2 \pi})^3 \operatorname{det}(\Sigma)}exp \left( {-\frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu)} \right) Gs(x)=(2π )3det(Σ)1exp(21(xμ)TΣ1(xμ))
其中 x = [ a , b , c ] T x=[a, b, c]^T x=[a,b,c]T 是三维坐标向量; μ \mu μ 是椭球的中心,控制椭球的位置平移; Σ = [ σ a 2 Cov ⁡ ( a , b ) Cov ⁡ ( a , c ) Cov ⁡ ( b , a ) σ b 2 Cov ⁡ ( b , c ) Cov ⁡ ( c , a ) Cov ⁡ ( c , b ) σ c 2 ] \Sigma=\left[\begin{array}{ccc} \sigma_a^2 & \operatorname{Cov}(a, b) & \operatorname{Cov}(a, c) \\ \operatorname{Cov}(b, a) & \sigma_b^2 & \operatorname{Cov}(b, c) \\ \operatorname{Cov}(c, a) & \operatorname{Cov}(c, b) & \sigma_c^2 \end{array}\right] Σ= σa2Cov(b,a)Cov(c,a)Cov(a,b)σb2Cov(c,b)Cov(a,c)Cov(b,c)σc2 是协方差矩阵,控制椭球在三维方向的伸缩和旋转。

论文中的 3D Gaussian 表示去掉了指数部分前面的尺度系数(因为系数不影响椭球的几何形状)和均值(因为每个点云有自己的位置 p p p,方便旋转放缩。于是 3D Gaussian 表示如下:
G ( x ) = e x p ( − 1 2 x T Σ − 1 x ) G(x)=exp \left({-\frac{1}{2}x^T \Sigma^{-1}x} \right) G(x)=exp(21xTΣ1x)
因此只要确定了 Σ \Sigma Σ 就可以确定一个椭球的形状。但需要注意的是,三维高斯分布的协方差矩阵 Σ \Sigma Σ 必须是半正定的才有数学意义。论文中使用的是各向异性 Σ \Sigma Σ,即在不同方向上具有不同方差值。各向异性协方差更有利于优化,因为它能够适应不同方向的变化,具有更精确的建模、更好的参数优化和更紧凑的表示。

4. 光栅化

在介绍 Splatting 之前需要先介绍一下 光栅化 (Rasterization) :光栅化是将图形或图像的矢量数据转换为像素数据,从而能够在计算机屏幕上显示的过程。通过将图形转换为像素级别,计算机可以更容易地处理和显示图形,同时确保图像在屏幕上以高速率绘制。

光栅化时,先将三角网格映射到二维平面,然后使用采样函数获取三角形内的像素情况 4,再根据走样情况(如锯齿 Jaggies、摩尔纹 Moire Patterns、车轮效应 Wagon Wheel Illusion 等)进行反走样 5,最后使用顶点片元着色 6 或其他方法进行像素点着色 7

光栅化是实现计算机屏幕上图形显示和渲染的关键步骤,能够以非常高的速度生成图像,适用于实时渲染,例如视频游戏和模拟器。

5. Splatting

Splatting 是一种用于光栅化 3D 对象(如前文讨论的椭球)的技术。这些 3D 对象被映射到投影平面后得到的 2D 图形称为 splat,类似于一个点、圆、矩形或其他形状,就像雪球打在墙上留下的印记,能量从中心向外扩散并减弱。这个过程可以在 GPU 上并行处理,因为每个 Splat 之间是独立的。
在这里插入图片描述

Splatting 可以将三维空间中的点投影到二维图像平面上,这些投影的数据点以某种方式在图像上产生视觉效果,从而呈现在最终的渲染图像中。Splatting 通常并不是由传统的图形硬件管线 8 自动执行,而是需要相对复杂的 GPU 编程,通常由图形开发者在需要时自行实现。

二. 研究背景

  • 传统的三维场景表示方法需要使用网格或点云进行三维重建,近几年出现的 NeRF 可以直接进行场景的视图合成。
  • 但 NeRF 想要生成高质量的视图需要需要花大量的时间进行训练和渲染,因此在实际应用中需要对质量和速度进行权衡。并且目前还没有方法能够达到实时显示的效果。
  • 文章提出了一种新方法—— 3D Gaussian Splatting,同时保证了图像的质量和渲染的速度:3D Gaussian 模型能够表示先进的 (state-of-the-art, SOTA) 视觉质量和高效的训练速度,Splatting 技术能够确保高分辨率的实时渲染。

整个模型的输入是 SfM 点云表示的一组静态场景的照片和相应机位,使用点云初始化一组 3D Gaussian 模型。 3D Gaussians 能够合理紧凑地表示三维场景,颜色由球谐系数 SH 表示。 通过交叉优化 3D Gaussian 模型参数和自适应控制得到场景表示。本文方法高效的关键在于 3D Gaussian 的光栅化,通过各向异性的 Splatting 和 α \alpha α-blending 技术,能够快速合成渲染图像。

在这里插入图片描述

1. 3D Gaussian Splatting

引入 3D Gaussian 来表示场景,将其初始化为摄像机标定产生的 SfM 稀疏 点云。这样既能保持辐射场的理想特性以便优化,又能避免在空白空间中进行不必要的计算。
在这里插入图片描述

3D Gaussian 的 光栅化 (rasterization) 过程如下:先使用 Splatting 技术将 3D Gaussian 投影到 2D 图像,然后使用标准的 α \alpha α-blending 技术快速合成渲染图像。这意味着 3D Gaussian 的三维场景表示可以转换为二维图像,以供渲染和可视化。

α \alpha α-blending:一种用于合成两幅或多幅图像以获得混合效果的图像处理技术。在 α \alpha α-blending 中,每幅图像都被赋予一个权重参数 α \alpha α ( 0 ≤ α ≤ 1 ) (0 \leq \alpha \leq 1) (0α1),表示每幅图像在最终合成中的贡献程度,0 表示完全使用第一幅图像,1 表示完全使用第二幅图像,而在 0 到 1 之间的中间值则表示混合两幅图像。
α \alpha α-blending 可以用于各种图像处理任务,包括图像叠加、过渡效果、颜色校正等,以实现图像的合成与编辑。一个典型应用就是创建图像淡入淡出效果,其中一个图像逐渐淡出,同时另一个图像逐渐淡入,通过调整 𝛼 参数的值来实现平滑过渡。𝛼-blending 也可以用于将两个图像合成成一个,以产生具有新特性的图像,如合成景深效果、融合不同光照条件下的图像等。

2. 交叉优化

交叉优化 (interleaved optimization) 3D Gaussian 的属性和 Gaussians 的自适应 密度控制 (density control),尤其是优化 各向异性协方差 (anisotropic covariance),以实现场景的精确表示。

可以优化的 3D Gaussian 点云属性包括:三维位置 p p p、透明度 α \alpha α(其实就是 α \alpha α-blending 中的权重参数)、各向异性协方差 Σ \Sigma Σ、球谐系数 SH (spherical harmonic coefficients) 等。

3. 快速可微光栅化

使用 GPU 进行快速、可微的渲染,支持各向异性 Splatting 和快速反向传播。因此能够加速训练和实时渲染。

三. 3D Gaussian Splatting

鉴于 3D Gaussian 可微、便于投影到二维 splats、显示地支持快速渲染等优点,用其作为场景表示。使用一个三维的满协方差矩阵初始化 3D Gaussian:
G ( x ) = e x p ( − 1 2 x T Σ − 1 x ) G(x)=exp \left({-\frac{1}{2}x^T \Sigma^{-1}x} \right) G(x)=exp(21xTΣ1x)

光栅化时需要将三维场景变换到二维空间,作者希望 3D Gaussian 在变换中保持分布(不然光栅完和高斯没关系的话一直以来的努力都白费了),这难免需要更多限制。View 变换 W W W 主要是旋转和平移,都是 仿射 (affine)9,不会有问题;但 Project 变换不是仿射的,于是文中用 J J J 矩阵变换替代 Project 变换, J J J 是 Project 变换的仿射近似。于是得到摄像机坐标下的协方差矩阵 Σ ′ \Sigma^{\prime} Σ
Σ ′ = J W Σ W T J T \Sigma^{\prime}=J W \Sigma W^T J^T Σ=JWΣWTJT

Σ \Sigma Σ 不能直接优化,因为 Σ \Sigma Σ 必须是 半正定 (semi-definite) 的 3D Gaussian 才有意义。于是文中将 Σ \Sigma Σ 表示为球变换到椭球的过程:将球按轴向先放缩 S S S 再旋转 R R R(注意顺序,是先放缩再旋转,椭球的对称轴一直是模型空间的 xyz 轴,互相垂直,详见视频讲解 17:15)。因此 Σ \Sigma Σ 初始化如下:
Σ = R S S T R T \Sigma=R S S^T R^T Σ=RSSTRT
于是在训练过程中使用梯度下降对参数 Σ \Sigma Σ 进行优化时需要继续将梯度传递到 S S S R R R 进行优化。

如前文所述,各向异性协方差更适合优化:能够优化 3D Gaussian 以适应场景中不同形状的几何形状,从而产生一个紧凑的表示。如下图所示,将 3D Gaussian 渲染的图像缩小 60% 后细节仍然清晰可见,说明其对复杂细节较强的拟合能力:
在这里插入图片描述

四. 交叉优化

本文的核心是对 3D Gaussian 的优化,优化的目的是创建一组密集的 3D Gaussian 以精确地表示场景。优化的参数包括:三维位置 p p p、透明度 α \alpha α、各向异性协方差 Σ \Sigma Σ 和球谐系数 SH (spherical harmonic coefficients) 。这些 ⌈ \lceil 参数的优化 ⌋ \rfloor ⌈ \lceil 自适应控制高斯模型 ⌋ \rfloor 交替进行。

在这里插入图片描述

1. 参数优化

由于 3D 投影到 2D 的模糊性,渲染图像中的几何体可能会被放错位置。因此,优化过程中需要能够创建几何体,并且在错误位置处销毁或移动几何体

参数优化使用 SGD 连续迭代完成,每一轮迭代时都会渲染图像并将其与真实的训练视图做比较。 α \alpha α 使用 Sigmoid 激活函数来限制 (0, 1) 的范围; Σ \Sigma Σ 使用指数激活函数激活; p p p 使用指数衰减调度技术 (exponential decay scheduling technique) 进行优化。模型的损失函数是 L1 与 D-SSIM 项的组合:
L = ( 1 − λ ) L 1 + λ L D − S S I M \mathcal{L}=(1-\lambda) \mathcal{L}_1+\lambda \mathcal{L}_{\mathrm{D}-\mathrm{SSIM}} L=(1λ)L1+λLDSSIM

2. 自适应控制

在 3D Gaussian Splatting 中,场景表示是通过多个高斯模型叠加而成的。在早期迭代次数较少时,会出现 重建不足 (under-reconstruction) 的问题,即高斯模型没有完全覆盖小规模的几何体,此时需要复制高斯模型进行覆盖;在后期迭代次数较多时,会出现 重建过度 (over-reconstruction) 的问题,即高斯模型超出小规模几何体的范围,此时需要将该高斯模型一分为二。这就是自适应控制 Gaussians:
在这里插入图片描述

从初始化 Gaussians 为稀疏的 SfM 点云开始,通过 自适应地控制高斯模型的数量和它们在单位体积上的密度,逐渐从稀疏的高斯模型集合过渡到更密集且能够更好地表示场景的集合。该过程主要关注 under-reconstruction 和 over-reconstruction 的区域,即具有较大的视图空间位置梯度的区域。直观理解来看,是因为这些区域尚未完全重建好,因此优化算法试图移动高斯函数以进行修正。under-reconstruction 和 over-reconstruction 的区别是 over-reconstruction 区域的 Gaussian 方差大,因为数据的变化幅度较大。对于视图空间的位置梯度大于阈值 𝜏pos 的区域,需要对该高斯模型进行 稠密化 (densify) 操作:

  • under-reconstruction 区域:高斯模型没有完全覆盖小规模的几何体,此时需要复制高斯模型并将其沿位置梯度方向移动,以覆盖几何体。
  • over-reconstruction 区域:高斯模型超出小规模几何体的范围,此时需要将该拆分高斯模型只覆盖几何体。

然而,这种体积表示法在优化过程中可能会因为相机附近的漂浮物而陷入困境,从而导致高斯密度不合理的增加。一个有效的调节方法是每 3000 次迭代就将 α \alpha α 值设为接近零,然后再根据上述优化过程逐渐提高 α \alpha α 值。此外,每 100 次迭代就剔除透明的高斯分布(即 α \alpha α 小于阈值 ϵ α \epsilon_{\alpha} ϵα)以限制高斯模型的总数量。

五. 快速可微光栅化

直接 Splatting 显然没法实现高帧率的渲染效果,下面介绍文中是如何进行光栅化的。Gaussians 快速可微光栅化是为了快速实现整体渲染和排序,从而实现近似 α \alpha α-blending 并且不再限制能够接收梯度的 splats 的数量。为了达到目的,对 Gaussian splats 进行分块 (tile) 处理,将该光栅化过程命名为 基于分块的光栅化 (tile-based rasterization)

  1. 首先将 2D 屏幕分割成 16×16 个 tile,然后为每个 tile 筛选视锥体 (view frustum) 内的 3D Gaussian:

    • 每个视锥体内只保留置信度大于 99% 的高斯模型;
    • 设置一个保护带 (guard band) 剔除位于极端位置的高斯模型,如均值接近近平面或在视锥体之外;
  2. 根据每个 Gaussian 重叠的 tile 数量来实例化,为其分配 key 值(key 值结合了该 Gaussian 所在 tile 的 ID 和对应视域的深度);

  3. 使用 GPU Radix sort 根据 key 值对 Gaussians 进行排序(其实就是按高斯模型到图像平面的深度值);

    传统光栅化渲染管线只能逐像素进行,将三角网格分解为像素,并经过颜色插值、深度测试等一系列的像素处理步骤,最终将渲染结果呈现在屏幕上。

  4. 将排好序的 Gaussians 从近到远向对应 tile 上做 Splatting。然后在每个 tile 上对高斯模型留下的 splat 做堆叠(类似 α \alpha α-blending,累积 α \alpha α c \bold c c),直到所有像素的不透明度都饱和( α \alpha α=1);

    为每个 tile 都单独开了一个线程快,因此每个 tile 上的光栅化过程可以并行执行。图像中某一个像素不透明度达到饱和后,线程块就停止对该像素的处理。

  5. 优化参数时,按每个 tile 堆叠的 splat 对应的 Gaussians 的顺序反向传播;

本节就是 3D Gaussian Splatting 的渲染过程。在合成新视图时,只需要指定一个视角,就可以使用视锥体筛选 3D Gaussian 点云,然后光栅化得到 2D 图像。

六. 实验结果

1. 数据集

实验中使用了 13 个真实场景,来自以下数据集:

  • Synthetic Blender dataset:Mildenhall 等人在论文《Nerf: Representing scenes as neural radiance fields for view synthesis》中合成的数据集;
  • Mip-Nerf360 dataset:Barron 等人在论文《Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields》中采样得到的数据集;
  • Tanks&Temples dataset: Knapitsch 等人在论文《Tanks and temples: Benchmarking large-scale scene reconstruction》中采样得到的数据集;
  • Deep Blending dataset:Hedman 等人在论文《Deep blending for free-viewpoint image-based rendering》中采样得到的数据集;

2. 对比实验

文中使用 PSNR、L-PIPS、SSIM 作为模型的评价指标,将 3D Gaussian Splatting 和 Mip-Nerf360、InstantNGP、Plenoxels 做了对比。定量结果见下表:
在这里插入图片描述

定性结果如图:
在这里插入图片描述

3. 消融实验

图像质量随迭代轮次逐渐提高,背景中伪影逐渐减少:
在这里插入图片描述

不同细节处理对应 PSNR 指标:
在这里插入图片描述

初始化 SfM 点云和随机初始化的效果对比:
在这里插入图片描述

自适应控制 Gaussians 的 densification 操作效果对比:
在这里插入图片描述

各向同性和各向异性 Gaussian 效果对比:
在这里插入图片描述

七. 总结

3D Gaussian Splatting 是一种用于实时渲染的光栅化技术,同 NeRF 一样,可以对从小图像样本集中学习到的逼真场景进行极其快速的渲染。但 3D Gaussian Splatting 本质与 NeRF 还是有比较大的区别,前者更偏向于光栅化的渲染,后者则有点类似于 ray tracing 的渲染方式。

3D Gaussian Splatting 无疑是继 InstantNGP 后,一种更高效的显 - 隐式相结合的 3D 空间表达方式。它的优势在于可以提供类似于点云的可存储的显式表达,对于各种设备更加友好。并且光栅化的渲染方式不需要光线追踪、路径追踪、Diffusion 等技术,就可以直接将模型信息转换为图像,相较于 ray tracing 的渲染方式也更加快。

但 3D Gaussian Splatting 也存在一些缺点:视角不足区域和反光区域容易出现伪影、未使用正则化、数百万个高斯需要几十个 G 的显存。

八. 复现

3D Gaussian Splatting 使用 Pytorch 框架,并自定义 CUDA 核用于光栅化,以及使用 NVIDIA CUB 排序例程进行快速基数排序。

  • 平台:AutoDL
  • 显卡:RTX A5000 24G
  • 镜像:PyTorch 2.0.0、Python 3.8(ubuntu20.04)、Cuda 11.8
  • 源码:https://github.com/graphdeco-inria/gaussian-splatting

(这里选用 A5000 显卡,因为 Cuda 版本要求 11.8,之前一直使用的 3090 显卡最高支持 11.5 版本。)

实验记录

  1. 克隆仓库时,因为使用了 --recursive 选项递归处理目录,因此费时较长,耐心等待即可;

  2. 执行 environment.yml 脚本创建完虚拟环境后,使用 conda activate 指令无法激活环境。改为 source activate 即可;

  3. 下载可用的数据集,并将其上传至正确的位置以供调用。复现时使用的是 Tanks&Temples dataset 下的火车 (train) 场景;

  4. 如果想要训练时呈现实时渲染效果,需要执行 Interactive Viewers 下 SIBR 相关配置,详见 3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程;

  5. 训练时如果直接执行 Running 下的指令默认将所用可用图片都用来训练,如果想要评价模型(Evaluation 部分)需要划分测试集,即执行 train.py 时加上 --eval 选项;
    在这里插入图片描述

  6. 训练完成后,output 文件夹下会保存 7k 和 3w 次迭代时对应的结果。再执行 render.py 后就会生成 3w 次迭代时 train 和 test 的渲染图像;

  7. 如果想要将渲染图像生成 mp4,需要执行 Colab 中最后两条 ffmpeg 指令:

    ffmpeg -framerate 3 -i output/ac1d9199-0/test/ours_30000/renders/%05d.png -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -c:v libx264 -r 3 -pix_fmt yuv420p output/ac1d9199-0/test/ours_30000/renders.mp4
    ffmpeg -framerate 3 -i output/ac1d9199-0/test/ours_30000/gt/%05d.png -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -c:v libx264 -r 3 -pix_fmt yuv420p output/ac1d9199-0/test/ours_30000/gt.mp4
    

    在这里插入图片描述
    在这里插入图片描述

  8. 执行 ffmpeg 指令期间出现 ffmpeg: error while loading shared libraries: libopenh264.so.5: cannot open shared object file: No such file or directory 问题,更新 ffmpeg 即可 10conda update ffmpeg

实验结果

实验证明,3D Gaussian Splatting 确实又快又准。仅仅经过十几分钟 3w 轮迭代,就可以完成高质量的三维重建。火车场景的真实视图和渲染新视图对比如下:

真实视图

渲染视图


  1. Siggraph 2023 有什么值得关注的论文 ? ↩︎

  2. 怪异魔幻!人类早期3D恐怖开放世界游戏是啥样子? ↩︎

  3. 多元高斯分布完全解析 ↩︎

  4. 计算机图形学基础2——光栅化 ↩︎

  5. Games101计算机图形学入门基础之二:光栅化 ↩︎

  6. 光栅化过程 (顶点片元着色) ↩︎

  7. GAMES101现代计算机图形学入门——光栅化成像之着色 ↩︎

  8. RTR4 第二章图形渲染管线 ↩︎

  9. 【射影几何08】仿射映射 ↩︎

  10. ffmpeg: error while loading shared libraries: libopenh264.so.5 ↩︎

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

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

相关文章

线性代数(二)| 行列式性质 求值 特殊行列式 加边法 归纳法等多种方法

文章目录 1. 性质1.1 重要性质梳理1.1.1 转置和初等变换1.1.2加法行列式可拆分1.1.3 乘积行列式可拆分 1.2 行列式性质的应用1.2.1 简化运算1.2.2 将行列式转换为(二)中的特殊行列式 2 特殊行列式2.1 上三角或下三角行列式2.2 三叉行列式2.3 行列式行和&…

VueCli 自定义创建项目及配置

一、VueCli 自定义创建项目 1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-exp-mobile选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually select features 选自定义手动…

生活污水处理一体化处理设备有哪些

生活污水处理一体化处理设备有多种类型,包括但不限于以下几种: 鼓风机:提供曝气系统所需的气流。潜水污水提升泵:将污水从低处提升到高处。旋转式滚筒筛分机:对污水中的悬浮物进行分离和筛选。回旋式格栅:…

【计算机网络笔记】网络层服务模型——虚电路网络

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

图的表示与基础--Java

1.图的基础知识 该图片来自于&#xff1a; https://b23.tv/KHCF2m6 2.稀疏图与稠密图 G(V,E)&#xff1a;V顶点个数&#xff0c;E边的个数 稀疏图&#xff1a;E<<V 一般用邻接表表示(数组链表) 稠密图&#xff1a;E接近V 一般用邻接矩阵表示&#xf…

中断处理机制解析

要处理中断&#xff0c;需要有一个中断处理函数。定义如下&#xff1a; irqreturn_t (*irq_handler_t)(int irq, void * dev_id);/*** enum irqreturn* IRQ_NONE interrupt was not from this device or was not handled* IRQ_HANDLED interrupt was handled by this de…

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…

『Linux升级路』基础开发工具——vim篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、vim的基本概念 &#x1f4d2;1.1命令模式 &#x1f4d2;1.2插入模式 &…

前端---认识HTML

文章目录 什么是HTML&#xff1f;HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…

数据分析实战 | SVM算法——病例自动诊断分析

目录 一、数据分析及对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型应用及评价 一、数据分析及对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/download/m0_70452407/88…

数据结构与算法C语言版学习笔记(6)-树、二叉树、赫夫曼树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、树的定义1.结点的度、树的度2.结点的逻辑关系3.树的深度4.有序树和无序树5.森林 二、树的存储结构&#xff08;1&#xff09;双亲表示法&#xff08;2&…

k8s集群搭建(ubuntu 20.04 + k8s 1.28.3 + calico + containerd1.7.8)

环境&需求 服务器&#xff1a; 10.235.165.21 k8s-master 10.235.165.22 k8s-slave1 10.235.165.23 k8s-slave2OS版本&#xff1a; rootvms131:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.5 LTS Release: …

Python数据容器(序列操作)

序列 1.什么是序列 序列是指&#xff1a;内容连续、有序。可以使用下标索引的一类数据容器 列表、元组、字符串。均可以视为序列 2.序列的常用操作 - 切片 语法&#xff1a;序列[起始下标:结束下标:步长]起始下标表示从何处开始&#xff0c;可以留空&#xff0c;留空视作从…

Libhybris之线程局部存储TLS实例(五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于php+thinkphp的网上书店购物商城系统

运行环境 开发语言&#xff1a;PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHPvue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 系统主要分为管理员和用户二部分&#xff0c;管理员主要功能包括&#xff1a;首页、个人中心、用户管理、图书分类…

问卷调查表单、表设计

一、DWSurvey实现&#xff1a; 参考文档&#xff1a;快速入门 | 调问开源问卷系统 管理员通过拖拽题型生成表单&#xff0c; 点击保存&#xff0c;预览&#xff0c;发布问卷。用户根据预览的地址&#xff0c;填写问卷提交。管理员可以在我的问卷里看到答卷情况。 关于数据存…

PCL安装与使用

1 apt安装 ubuntu20.04及以上版本下可以直接通过apt方式安装pcl编译好的二进制文件,二进制安装的版本为1.10。 sudo apt update sudo apt install libpcl-dev 2 源码安装 在pcl的github上下载对应的版本进行安装&#xff1a; https://github.com/PointCloudLibrary/pcl/rel…

5G网络切片,到底是什么?

网络切片&#xff0c;是5G引入的一个全新概念。 一看到切片&#xff0c;首先想到的&#xff0c;必然是把一个完整的东西切成薄片。于是&#xff0c;切面包或者切西瓜这样的画面&#xff0c;映入脑海。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 然而…

找工作去哪个网站比较好

吉鹿力招聘网是一个专注于互联网岗位求职招聘的网站&#xff0c;提供海量的互联网人才储备。它主要覆盖了互联网类招聘&#xff0c;包括技术、产品、设计、运营、市场、销售等。吉鹿力招聘网的特点是用户量大&#xff0c;需求旺盛。如果你希望找工作&#xff0c;吉鹿力招聘网是…