Multi-Scale 3D GS,多尺度3D高斯阅读
初始三维高斯溅射存在严重的混叠伪影和速度下降的原因:
当3D场景的一部分以高细节表示,但以低分辨率或从遥远的位置渲染时,低采样和高信号频率之间的差异最终导致混叠伪影。
(1)当以低分辨率或从远处看这些区域时,许多飞溅的小高斯分布在一个像素中,因此该区域的像素颜色由最前面的高斯分布主导。
(2)溅射到同一像素的高斯函数不能并行渲染。在低分辨率下,大量的高斯溅射到同一个像素内。
部分公式解释:
δ s ( x , Δ x ) = ∑ n = − ∞ ∞ δ ( x − n ⋅ Δ x ) \delta_s(x,\Delta x)=\sum^{\infin}_{n=-\infin}\delta(x-n\cdot \Delta x) δs(x,Δx)=∑n=−∞∞δ(x−n⋅Δx)中 δ ( ⋅ ) \delta(\cdot) δ(⋅)是狄拉克Delta函数,只有在输入 0 时才会“取样”或“产生冲击”,在其他位置上值为 0。该式表示:在 x = n Δ x x=n\Delta x x=nΔx(n为任意整数)处放置一个 Delta 函数脉冲,从而形成一个脉冲列。每个脉冲之间的距离为 Δ x \Delta x Δx。
公式(1), g s ( x ) = δ s ( x , Δ x ) ⋅ g ( x ) g_s(x)=\delta_s(x,\Delta x)\cdot g(x) gs(x)=δs(x,Δx)⋅g(x),乘积的结果就只在 x = n Δ x x=n\Delta x x=nΔx这些点上保留了 g ( x ) g(x) g(x)的信息;在所有其他位置,结果都为 0。即 g s ( x ) = ∑ n = − ∞ ∞ g ( n Δ x ) δ ( x − n Δ x ) g_s(x)=\sum\limits^{\infin}_{n=-\infin}g(n\Delta x)\delta(x-n\Delta x) gs(x)=n=−∞∑∞g(nΔx)δ(x−nΔx)。
公式(2),根据傅里叶变换乘积-卷积定理: F { f ( x ) ⋅ h ( x ) } = [ F { f ( x ) } ] ∗ [ F { h ( x ) } ] \mathcal F\{f(x)\cdot h(x)\}=[\mathcal F\{f(x)\}]*[\mathcal F\{h(x)\}] F{f(x)⋅h(x)}=[F{f(x)}]∗[F{h(x)}],因此 F { g s ( x ) } ( u ) = F { δ s ( x , Δ x ) ⋅ g ( x ) } ( u ) = [ F { δ s ( x , Δ x ) } ( u ) ] ∗ [ F { g ( x ) } ( u ) ] = [ F { δ s ( x , Δ x ) } ( u ) ] ∗ [ F { g ( x ) } ] \mathcal F\{g_s(x)\}(u)=\mathcal F\{\delta_s(x,\Delta x)\cdot g(x)\}(u)=[\mathcal F\{\delta_s(x,\Delta x)\}(u)]*[\mathcal F\{g(x)\}(u)]\\=[\mathcal F\{\delta_s(x,\Delta x)\}(u)]*[\mathcal F\{g(x)\}] F{gs(x)}(u)=F{δs(x,Δx)⋅g(x)}(u)=[F{δs(x,Δx)}(u)]∗[F{g(x)}(u)]=[F{δs(x,Δx)}(u)]∗[F{g(x)}]。
对于脉冲列的傅里叶变换,它有一个非常重要的性质:其傅里叶变换依然是一个脉冲列,只不过在频域的脉冲间隔变成了 1 Δ x \frac{1}{\Delta x} Δx1,并且带有 1 Δ x \frac{1}{\Delta x} Δx1的缩放系数: F { δ s ( x , Δ x ) } ( u ) = F { ∑ n = − ∞ ∞ δ ( x − n Δ x ) } ( u ) = 1 Δ x ∑ k = − ∞ ∞ δ ( u − k Δ x ) \mathcal F\{\delta_s(x,\Delta x)\}(u)=\mathcal F\{\sum\limits^{\infin}_{n=-\infin}\delta(x-n\Delta x)\}(u)=\frac{1}{\Delta x}\sum\limits^{\infin}_{k=-\infin}\delta(u-\frac{k}{\Delta x}) F{δs(x,Δx)}(u)=F{n=−∞∑∞δ(x−nΔx)}(u)=Δx1k=−∞∑∞δ(u−Δxk)。
卷积运算: δ ( u − a ) ∗ f ( u ) = f ( u − a ) \delta(u-a)*f(u)=f(u-a) δ(u−a)∗f(u)=f(u−a)
所以, F [ g s ( x ) ] ( u ) = 1 Δ x ∑ k = − ∞ ∞ G ( u − k Δ x ) \mathcal F[g_s(x)](u)=\frac{1}{\Delta x}\sum\limits^{\infin}_{k=-\infin}G(u-\frac{k}{\Delta x}) F[gs(x)](u)=Δx1k=−∞∑∞G(u−Δxk)。
公式(3)、(4),在 3D Gaussian Splatting 的渲染过程中,每个“点”被投影到屏幕上,会用一个 2D 高斯函数来表示其在像素平面上的影响范围(即“splat”)。为减轻走样(aliasing)现象,需要给这些 splat 再做一个额外的高斯低通滤波,从而得到**带限(band-limited)**的结果。
设原始的 2D 信号为: g c ( x ) = ∑ k σ k c k T k q k ( x ) g_c(x)=\sum\limits_k\sigma_kc_kT_kq_k(x) gc(x)=k∑σkckTkqk(x), q k ( x ) q_k(x) qk(x)表示第k个 splat 在平面上的 2D 高斯(或近似高斯)形状。
g c ′ ( x ) = g c ( x ) ∗ h ( x ) ≈ ∑ k σ k c k T k ∫ R 2 q k ( η ) h ( x − η ) d η ∑ k σ k c k T k = ∑ k α k ∫ R 2 q k ( η ) h ( x − η ) d η g_c'(x)=g_c(x)*h(x)\approx \frac{\sum_k\sigma_kc_kT_k\int_{R^2}q_k(\eta)h(x-\eta)d\eta}{\sum_k\sigma_kc_kT_k}=\sum_k\alpha_k\int_{R^2}q_k(\eta)h(x-\eta)d\eta gc′(x)=gc(x)∗h(x)≈∑kσkckTk∑kσkckTk∫R2qk(η)h(x−η)dη=∑kαk∫R2qk(η)h(x−η)dη
α k = σ k c k T k ∑ j σ j c j T J \alpha_k=\frac{\sigma_kc_kT_k}{\sum_j\sigma_jc_jT_J} αk=∑jσjcjTJσkckTk
卷积定义: ( f ∗ g ) ( x ) = ∫ R 2 f ( η ) g ( x − η ) d η (f*g)(x)=\int_{\mathbb R^2}f(\eta)g(x-\eta)d\eta (f∗g)(x)=∫R2f(η)g(x−η)dη
两个高斯函数的卷积仍是一个高斯函数,其协方差为二者协方差之和。溅射的2维高斯 G v k ( x ) G_{v^k}(x) Gvk(x)与低通滤波高斯 G v h ( x ) G_{v^h}(x) Gvh(x)的卷积为 G v k + v h ( x ) G_{v^k+v^h}(x) Gvk+vh(x)。
因此, g c ′ ( x ) = ∑ k α k ⋅ ( G V k ∗ G V h ) ( x ) = ∑ k α k ⋅ G V k + V h ( x ) g'_c(x)=\sum\limits_k\alpha_k\cdot (\mathcal G_{V^k}*\mathcal G_{V^h})(x)=\sum\limits_k\alpha_k\cdot\mathcal G_{V^k+V^h}(x) gc′(x)=k∑αk⋅(GVk∗GVh)(x)=k∑αk⋅GVk+Vh(x)。
因为与一个附加的高斯核卷积后,协方差矩阵变成 V k + V h V^k+V^h Vk+Vh,这意味着每个 splat 在屏幕上最终呈现的分布变得更“宽”,从而起到平滑、低通的作用,抑制了高频走样。
EWA Splatting 低通滤波的缺陷:
(1)前面的小高斯分布支配着像素的颜色,并造成严重的伪影
(2)随着图像分辨率的降低,涉及每个像素尺度的 α \alpha α混合的高斯数增加。渲染速度变慢。
核心方法
减轻三维高斯溅射混叠的关键挑战:在于用适当比例的高斯分布表示场景。
方法:提出计算三维高斯图像在溅射过程中的像素覆盖率,并将其作为选择性渲染的标准。在当前渲染分辨率下,过大或过小的高斯值会被过滤,以提高抗混叠和速度。在训练过程中通过聚合小高斯函数来插入大高斯函数,以保留低频细节,防止细节丢失。
像素覆盖:
溅射2维高斯
G
(
μ
k
,
V
k
)
\mathcal G_{(\mu^k,V^k)}
G(μk,Vk)的像素覆盖记为
S
k
S_k
Sk。定义为其2维高斯的水平或垂直轴的长度,直到低于设置的不透明度阈值。
σ T \sigma^T σT是设置的不透明度阈值,设置为 1 255 \frac{1}{255} 2551。
在给定相机方向的渲染过程中,每个飞溅高斯的颜色在该像素覆盖范围内是恒定的。该像素的覆盖率近似于该区域最高频率分量 f m a x = 1 / S k f_{max}=1/S_k fmax=1/Sk的倒数。光栅化的采样频率是 f s = 1 p x − 1 f_s=1px^{-1} fs=1px−1。因此当 f m a x > f s / 2 f_{max}>f_s/2 fmax>fs/2时会产生混叠。所以,在渲染过程中,应滤除像素覆盖率 S k < S T = 2 p x S_k<S_T=2px Sk<ST=2px的高斯分布,以避免混叠。
聚合插入大高斯
随着分辨率降低,像素尺寸变大,小高斯造成混叠伪影。在像素覆盖阈值以下的每个体素中聚集小高斯分布,然后通过像素覆盖倍率放大大高斯分布。
算法步骤:
对所有训练图像,遍历所有降采样尺度级别 { l m ∣ 2 ≤ l m ≤ l m a x } \{l_m|2\le l_m\le l_{max}\} {lm∣2≤lm≤lmax}。得到每个高斯降采样 4 l m − 1 4^{l_m-1} 4lm−1倍的图像覆盖 S 1 : K S_{1:K} S1:K,选出像素覆盖 S k S_k Sk小于阈值 S T S_T ST的小高斯 G s m a l l G_{small} Gsmall。把空间划分为 ( 400 / l m ) 3 (400/l_m)^3 (400/lm)3的像素网格( 400 / l m 400/l_m 400/lm是个经验值),每个体素内所有高斯的属性被聚合,使用平均池化创建一个新的高斯,包括位置、缩放、不透明度和颜色。把聚合的高斯放大 S T / S a v g S_T/S_{avg} ST/Savg,插入大高斯,插入的大高斯的尺度层级为 l m l_m lm。
多尺度训练和选择性渲染
每个高斯的像素覆盖范围允许模型在不同的细节水平上保持多尺度高斯。在不同的分辨率和距离下选择合适的高斯子集进行渲染。编码高频信息的小高斯分布以高分辨率呈现,编码低频信息的大高斯分布以低分辨率呈现,从而减少混叠效果,提高速度。
在训练过程中,记录每个高斯的最大像素覆盖和最小像素覆盖 S k m a x 、 S k m i n S_k^{max}、S^{min}_k Skmax、Skmin。当覆盖面积尺度和高斯创建的尺度相等时才进行更新。(在训练过程中,遇到不同距离的训练图像,形成最大覆盖范围和最小覆盖范围)最大像素覆盖和最小像素覆盖更新公式:
S k ′ m a x = m a x ( λ 1 S k m a x , S k ) S'^{max}_k=max(\lambda_1S^{max}_k,S_k) Sk′max=max(λ1Skmax,Sk)
S k ′ m i n = m i n ( λ 2 S k m i n , S k ) S'^{min}_k=min(\lambda_2S^{min}_k,S_k) Sk′min=min(λ2Skmin,Sk)
λ 1 = 0.95 , λ 2 = 1.05 \lambda_1=0.95,\lambda_2=1.05 λ1=0.95,λ2=1.05
选择性渲染过滤掉太大的高斯和太小的高斯。在任何分辨率或相机距离的渲染过程中,如果高斯图像在屏幕上的像素覆盖率满足以下条件,则选择高斯图像进行渲染。
KaTeX parse error: Undefined control sequence: \and at position 41: … S^{max}_{rel})\̲a̲n̲d̲ ̲(\frac{S_k}{S^{…
S r e l m a x = 1.5 , S r e l m i n = 0.5 S^{max}_{rel}=1.5,S^{min}_{rel}=0.5 Srelmax=1.5,Srelmin=0.5
S k ≥ S T S_k\ge S_T Sk≥ST是为了保留小高斯中相对大的高斯,其像素覆盖大于阈值 S T S_T ST,不会引起混叠问题。
Yan Z, Low W F, Chen Y, et al. Multi-scale 3d gaussian splatting for anti-aliased rendering[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2024: 20923-20931.