2DGS
论文地址:https://arxiv.org/abs/2403.17888
源码地址:https://github.com/hbb1/2d-gaussian-splatting
项目地址:https://surfsplatting.github.io/
论文解读
由于知乎上面已经有了一片极其详细的代码和论文解读,作者在这里就不再解读,大家可以移步知乎看大佬的论文解析;2D Gaussian Splatting 文章 + 代码串读(无敌详细/引经据典/疯狂解读)
论文翻译
1 引言
在计算机图形学和视觉领域,逼真的新视角合成(NVS)和准确的几何重建是长期追求的目标。最近,由于三维高斯泼溅(3DGS)在高分辨率下实现了实时的逼真NVS结果,所以成为隐式表示[Barron等,2022a;Mildenhall等,2020]和基于特征网格的表示[Barron等,2023;Müller等,2022]的一个有吸引力的替代方案。3DGS迅速发展,已在多个领域得到扩展,包括抗锯齿渲染[Yu等,2024]、材质建模[Jiang等,2023;Shi等,2023]、动态场景重建[Yan等,2023]和可动画化身创建[Qian等,2023;Zielonka等,2023]。然而,它在捕捉复杂几何形状方面存在不足,因为体积化的三维高斯,它模拟了完整的角辐射度,与表面的薄性质相冲突。
另一方面,早期的工作[Pfister等,2000;Zwicker等,2001a,b]已经展示了表面元素(surfels,曲面元)是复杂几何形状的有效表示。Surfels通过形状和阴影属性局部近似物体表面,并且可以从已知的几何形状中派生出来。它们在SLAM[Whelan等,2016]和其他机器人任务[Schöps等,2019]中作为有效的几何表示被广泛使用。随后的进步[Yifan等,2019]将surfels纳入了可微框架。然而,这些方法通常需要地面真实(GT)几何数据、深度传感器数据,或在已知照明的受限场景下运行。
受到这些工作的启发,我们提出了三维场景重建和新视角合成的二维高斯泼溅,结合了两者的优势,同时克服了它们的局限性。与3DGS不同,我们的方法用二维高斯基元表示一个三维场景,每个基元定义为一个定向的椭圆形盘。二维高斯与其三维对应物相比,有着在渲染过程中准确表示几何形状的重要优势。具体来说,3DGS在像素射线和三维高斯[Keselman和Hebert,2022,2023]的交点处评估高斯值,这在从不同视点渲染时导致深度不一致。相反,我们的方法利用显式 ray-splat intersection,从而得到透视正确的泼溅,如图2所示,这反过来显著提高了重建质量。此外,二维高斯基元中固有的表面法线通过法线约束直接实现表面正则化。与基于surfels的模型[Pfister等,2000;Yifan等,2019;Zwicker等,2001a]相比,我们的二维高斯可以从未知几何形状中恢复,通过基于梯度的优化。
虽然我们的二维高斯方法在几何建模方面表现出色,但仅用光度损失优化可能导致嘈杂的重建,这是由于三维重建任务本身不受限制的性质,正如[Barron等,2022b;Yu等,2022b;Zhang等,2020]中所指出的。为了增强重建并实现更平滑的表面,我们引入了两个正则化项:深度失真和法线一致性。深度失真项将沿射线分布的二维原语集中在紧密范围内,解决了渲染过程中忽略高斯之间的距离的限制。法线一致性项最小化了渲染法线图和渲染深度梯度之间的差异,确保了深度和法线定义的几何形状之间的对齐。在与我们的二维高斯模型结合使用这些正则化的同时,使我们能够提取高度准确的表面网格,如图1所示。
总结来说,我们做出了以下贡献:
- 我们提出了一种高效的可微分二维高斯渲染器,通过利用二维表面建模、射线-涂抹交叉和体积积分,实现了透视正确的涂抹。
- 我们引入了两个正则化损失,以改进并实现无噪声的表面重建。
- 与其它显式表示相比,我们的方法在几何重建和新视角合成方面达到了最先进的结果。
3 3D GAUSSIAN SPLATTING
Kerbl等人[Kerbl等,2023]提出用三维高斯原语表示三维场景,并使用可微体积涂抹技术进行图像渲染。具体来说,三维高斯涂抹通过3D协方差矩阵𝚺和它们的位置p𝐴?显式参数化高斯原语:
G ( p ) = exp ( − 1 2 ( p − p k ) ⊤ ∑ − 1 ( p − p k ) ) G(p) = \exp(-\frac{1}{2}(p - p_k)^{\top}{\sum}^{-1}(p - p_k)) G(p)=exp(−21(p−pk)⊤∑−1(p−pk))
其中协方差矩阵 ∑ = R S S T R T \sum = RSS^TR^T ∑=RSSTRT是因子分解为缩放矩阵S和旋转矩阵R。为了渲染图像,三维高斯被转换到相机坐标系中,使用世界到相机的变换矩阵W,并通过局部仿射变换J投影到图像平面上[Zwicker等,2001a]:
$$
{\textstyle \sum^{\prime}} = J W {\textstyle \sum} W^{\top} J^{\top}
$$
通过跳过𝚺’的第三行和第三列,我们得到一个二维高斯G2𝐴?,其协方差矩阵为𝚺2𝐴?。接下来,三维高斯涂抹[Kerbl等,2023]使用体积alpha混合从前到后整合alpha加权的外观:
c ( x ) = ∑ k = 1 K c k α k G k 2 D ( x ) ∏ j = 1 k − 1 ( 1 − α j G j 2 D ( x ) ) ( 3 ) \mathbf{c(x)}=\sum_{k=1}^K c_k\alpha_k G_k^{2D}(\mathbf{x})\prod_{j=1}^{k-1}(1-\alpha_j G_j^{2D}(\mathbf{x})) \quad (3) c(x)=k=1∑KckαkGk2D(x)j=1∏k−1(1−αjGj2D(x))(3)
其中𝐴?是高斯原语的索引,𝛹?𝐴?表示alpha值,c𝐴?是视图依赖的外观。三维高斯原语的属性使用光度损失进行优化。
表面重建的挑战,使用三维高斯建模和涂抹重建表面面临几个挑战。首先,三维高斯的体积辐射度表示与表面的薄性质相冲突。其次,三维高斯涂抹没有本地建模表面法线,这对于高质量的表面重建至关重要。第三,三维高斯涂抹的光栅化过程缺乏多视图一致性,导致不同视点的2D交叉平面不同[Keselman和Hebert,2023],如图2(a)所示。此外,使用仿射矩阵将三维高斯转换为射线空间,只在中心附近提供准确的投影,在周边区域则存在透视准确性的妥协[Zwicker等,2004]。因此,通常会导致嘈杂的重建,如图5所示。
4 二维高斯涂抹
为了在保持新视角合成的高质量的同时准确重建几何形状,我们提出了可微分的二维高斯涂抹(2DGS)。
4.1 建模
与在整体角辐射度中建模的3DGS[Kerbl等,2023]不同,我们通过采用“扁平”的二维高斯嵌入在3D空间中来简化三维建模。通过二维高斯建模,原语在平面圆盘内分布密度,定义法线作为密度变化最陡的方向。这个特性使得它能够更好地与薄表面对齐。虽然之前的方法[Kopanas等,2021;Yifan等,2019]也使用二维高斯进行几何重建,但它们需要密集的点云或地面真实法线作为输入。相比之下,我们仅给定一个稀疏的校准点云和光度监督,就可以同时重建外观和几何形状。
如图3所示,我们的二维涂抹由其中心点 p k \mathbf{p}_{k} pk、两个主要切向量 t u \mathbf{t}_{u} tu和 t v \mathbf{t}_{v} tv,以及控制二维高斯方差的缩放向量 S = ( s u , s v ) \mathbf{S} = (s_u,s_v) S=(su,sv)表征。注意,基元法线由两个正交切向量 t w = t u × t v \mathbf{t}_w = \mathbf{t}_u \times \mathbf{t}_v tw=tu×tv定义。我们可以将方向排列成一个3 × 3旋转矩阵 R = [ t w , t u , t v ] \mathbf{R} =[ \mathbf{t}_w, \mathbf{t}_u, \mathbf{t}_v] R=[tw,tu,tv],将缩放因子排列成一个3 × 3对角矩阵 S \mathrm{S} S,其最后一个条目为零。
因此,二维高斯在世界空间中的局部切平面中定义,其参数化如下:
P ( u , v ) = p k + s u t u u + s v t v v = H ( u , v , 1 , 1 ) T ( 4 ) where H = [ s u t u s v t v 0 p k 0 0 0 1 ] = [ R S p k 0 1 ] ( 5 ) \begin{aligned} P(u, v) & =\mathbf{p}_{k}+s_{u} \mathbf{t}_{u} u+s_{v} \mathbf{t}_{v} v=\mathbf{H}(u, v, 1,1)^{\mathrm{T}} \quad(4) \\ \text { where } \mathbf{H} & =\left[\begin{array}{cccc} s_{u} \mathbf{t}_{u} & s_{v} \mathbf{t}_{v} & 0 & \mathbf{p}_{k} \\ 0 & 0 & 0 & 1 \end{array}\right]=\left[\begin{array}{cc} \mathbf{RS} & \mathbf{p}_{k} \\ 0 & 1 \end{array}\right] \quad(5) \end{aligned} P(u,v) where H=pk+sutuu+svtvv=H(u,v,1,1)T(4)=[sutu0svtv000pk1]=[RS0pk1](5)
其中 H ∈ 4 × 4 \mathbf{H} \in 4 × 4 H∈4×4是一个齐次变换矩阵,代表二维高斯的几何形状。对于空间中的点 u = ( u , v ) \mathbf{u} = (u, v) u=(u,v),其二维高斯值可以通过标准高斯公式评估:
G ( u ) = exp ( − u 2 + v 2 2 ) ( 6 ) G(\mathbf{u}) = \exp\left(-\frac{u^2 + v^2}{2}\right) \quad(6) G(u)=exp(−2u2+v2)(6)
中心 p k \mathbf{p}_k pk、缩放 ( s u , s v ) (s_u, s_v) (su,sv)和旋转 ( t u , t v ) (\mathbf{t}_u, \mathbf{t}_v) (tu,tv)是可学习的参数。遵循3DGS[Kerbl等,2023],每个二维高斯原语具有不透明度 α \alpha α和视图依赖的用球谐函数参数化颜色 c c c。
4.2 Splatting
渲染二维高斯的一个常见策略是使用透视投影的仿射近似将二维高斯基元投影到图像空间[Zwicker等,2001a,b]。然而,**如[Zwicker等,2004]中所指出的,这种投影只在高斯中心处准确,并且随着距离中心的增加,近似误差也会增加。**为了解决这个问题,Zwicker等人提出了一种基于齐次坐标的公式。具体来说,将二维泼溅投影到图像平面可以被描述为齐次坐标中的一般2D到2D映射。设 W ∈ 4 × 4 \mathbf{W} \in 4 × 4 W∈4×4是从世界空间到屏幕空间的变换矩阵。屏幕空间点由下式获得:
x = ( x z , y z , z , 1 ) T = W P ( u , v ) = W H ( u , v , 1 , 1 ) T ( 7 ) \mathbf{x} = (xz,yz,z,1)^{\mathrm{T}} =\mathbf{W}P(u,v)= \mathbf{W} \mathbf{H}(u, v, 1, 1)^{\mathrm{T}} \quad(7) x=(xz,yz,z,1)T=WP(u,v)=WH(u,v,1,1)T(7)
其中 x \mathbf{x} x代表从相机发出并通过像素 ( x , y ) (x,y) (x,y)并与深度 z z z处的splat相交的齐次射线。为了光栅化二维高斯,Zwicker等人提出了一种使用 M = ( W H ) − 1 \mathbf{M} = (\mathbf{W}\mathbf{H})^{−1} M=(WH)−1的隐式方法将其投影到屏幕空间的隐式方法。然而,逆变换引入了数值不稳定性,特别是当泼溅平面退化成线段时(即,如果从侧面观看)。为了解决这个问题,先前的表面泼溅渲染方法使用预定义的阈值丢弃这种病态变换。然而,这种方案在可微分渲染框架内带来了挑战,因为阈值处理可能导致不稳定的优化。为了解决这个问题,我们采用了[Sigg等,2006]中启发的显式ray-splat交叉方法。
Ray-splat Intersection:我们通过寻找三个非平行平面的交点来有效地定位Ray-splat Intersection,这种方法最初是为专用硬件设计的[Weyrich等,2007]。给定一个图像坐标 x = ( x , y ) \mathbf{x} = (x,y) x=(x,y),我们将一个像素的射线参数化为两个正交平面的交点:x平面和y平面。具体来说,x平面由法向量 ( − 1 , 0 , 0 ) (−1, 0, 0) (−1,0,0)和偏移 x x x定义。因此,x平面可以表示为一个4D齐次平面 h x = ( − 1 , 0 , 0 , x ) T \mathbf{h}_x = (−1, 0, 0,x)^\mathrm{T} hx=(−1,0,0,x)T。类似地,y平面是 h y = ( 0 , − 1 , 0 , y ) T \mathbf{h}_y = (0, -1, 0,y)^\mathrm{T} hy=(0,−1,0,y)T。因此,射线 x = ( x , y ) \mathbf{x} = (x,y) x=(x,y)由x平面和y平面的交点决定。
接下来,我们将两个平面都变换到2D高斯基元的局部坐标中,即 u v uv uv坐标系。注意,使用变换矩阵 M \mathbf{M} M变换平面上的点等同于使用逆转置 M − T \mathbf{M}^{-\mathrm{T}} M−T变换齐次平面参数。因此,应用 M = ( W H ) − 1 \mathbf{M} = (\mathbf{W}\mathbf{H})^{−1} M=(WH)−1相当于 ( W H ) T (\mathbf{W}\mathbf{H})^\mathrm{T} (WH)T,消除了显式矩阵求逆,并得到:
h u = ( W H ) T h x h v = ( W H ) T h y ( 8 ) \mathbf{h}_{u}=(\mathbf{W H})^{\mathrm{T}} \mathbf{h}_{x} \quad \mathbf{h}_{v}=(\mathbf{W H})^{\mathrm{T}} \mathbf{h}_{y} \quad(8) hu=(WH)Thxhv=(WH)Thy(8)
如第4.1节所介绍的,二维高斯平面上的点被表示为 ( u , v , 1 , 1 ) (u, v, 1, 1) (u,v,1,1)。同时,交点应该落在变换后的x平面和y平面上。因此,
h u ⋅ ( u , v , 1 , 1 ) T = h v ⋅ ( u , v , 1 , 1 ) T = 0 ( 9 ) \mathbf{h}_{u} \cdot (u, v, 1, 1)^{\mathrm{T}} = \mathbf{h}_{v} \cdot (u, v, 1, 1)^{\mathrm{T}} = 0 \quad(9) hu⋅(u,v,1,1)T=hv⋅(u,v,1,1)T=0(9)
这导致了一个有效的交点u(x)的解决方案:
u ( x ) = h u 2 h v 4 − h u 4 h v 2 h u 1 h v 2 − h u 2 h v 1 v ( x ) = h u 4 h v 1 − h u 1 h v 4 h u 1 h v 2 − h u 2 h v 1 ( 10 ) u(\mathbf{x})=\frac{\mathbf{h}_{u}^{2} \mathbf{h}_{v}^{4}-\mathbf{h}_{u}^{4} \mathbf{h}_{v}^{2}}{\mathbf{h}_{u}^{1} \mathbf{h}_{v}^{2}-\mathbf{h}_{u}^{2} \mathbf{h}_{v}^{1}} \quad v(\mathbf{x})=\frac{\mathbf{h}_{u}^{4} \mathbf{h}_{v}^{1}-\mathbf{h}_{u}^{1} \mathbf{h}_{v}^{4}}{\mathbf{h}_{u}^{1} \mathbf{h}_{v}^{2}-\mathbf{h}_{u}^{2} \mathbf{h}_{v}^{1}} \quad(10) u(x)=hu1hv2−hu2hv1hu2hv4−hu4hv2v(x)=hu1hv2−hu2hv1hu4hv1−hu1hv4(10)
其中 h u i , h v i \mathbf{h}_{u}^{i},\mathbf{h}_{v}^{i} hui,hvi是4D齐次平面参数的第 i i i个参数。我们通过方程7获得交点的深度 z z z,并使用方程6评估高斯值。
退化解决方案:当从倾斜视图观察二维高斯时,它会退化成屏幕空间中的一条线。因此,它可能在光栅化过程中被遗漏。为了处理这些情况并稳定优化,我们采用了[Botsch等,2005]中介绍的对象空间低通滤波器:
G ^ ( x ) = max { G ( u ( x ) ) , G ( x − c σ ) } ( 11 ) \hat{G}(x) = \max \{ G(\mathbf{u(x)} ), G( \frac{\mathbf{x-c} }{\sigma}) \} \quad(11) G^(x)=max{G(u(x)),G(σx−c)}(11)
其中 u ( x ) \mathbf{u(x)} u(x)由公式(10)给出, c \mathbf{c} c是中心点 p k \mathbf{p}_k pk的投影。直观地说, G ^ ( x ) \hat{G}(x) G^(x)是下限由固定屏幕空间高斯低通滤波器,中心为 c \mathbf{c} c和半径为 σ \sigma σ的。在我们的实验中,我们设置 σ = 2 / 2 \sigma = \sqrt{2}/2 σ=2/2以确保在渲染过程中使用足够的像素。
光栅化:我们遵循3DGS[Kerbl等,2023]中的类似光栅化过程。首先,为每个高斯基元计算屏幕空间的边界框。然后,根据它们中心的深度对二维高斯进行排序,并根据它们的边界框将它们组织到瓦片中。最后,使用体积alpha混合从前到后整合alpha加权的外观:
c ( x ) = ∑ i = 1 c i α i G ^ i ( u ( x ) ) ∏ j = 1 i − 1 ( 1 − α j G ^ j ( u ( x ) ) ) ( 12 ) \mathbf{c(x)}=\sum_{i=1}c_i\alpha_i\hat{G}_i(\mathbf{u(x)})\prod_{j=1}^{i-1}(1-\alpha_j\hat{G}_j(\mathbf{u(x)})) \quad (12) c(x)=i=1∑ciαiG^i(u(x))j=1∏i−1(1−αjG^j(u(x)))(12)
迭代过程在累积的不透明度达到饱和时终止。
5 训练
我们的二维高斯方法在几何建模方面虽然有效,但仅用光度损失优化时可能会导致噪声较多的重建,这是三维重建任务固有的挑战[Barron等,2022b;Yu等,2022b;Zhang等,2020]。为了缓解这个问题并改善几何重建,我们引入了两个正则化项:深度失真和法线一致性。
深度失真:不同于NeRF,3DGS的体积渲染没有考虑相交高斯基元之间的距离。因此,分散的高斯基元可能产生类似的颜色和深度渲染。这与表面渲染不同,在表面渲染中,射线只与第一个可见表面精确相交一次。为了缓解这个问题,我们从Mip-NeRF360[Barron等,2022a]中汲取灵感,提出了深度失真损失,通过最小化ray-splat intersections之间的距离,将权重分布沿射线集中:
L d = ∑ i , j w i w j ∣ z i − z j ∣ ( 13 ) \mathcal{L}_d = \sum_{i,j} w_i w_j |z_i - z_j| \quad(13) Ld=i,j∑wiwj∣zi−zj∣(13)
其中 w i = α i G i ( u ( x ) ) ∏ j = 1 i − 1 ( 1 − α j 𝐺 j ( u ( x ) ) ) w_i = \alpha_i G_i(\mathbf{u(x)})\prod_{j=1}^{i-1} (1 − \alpha_j 𝐺_j(\mathbf{u(x)})) wi=αiGi(u(x))∏j=1i−1(1−αjGj(u(x))) 是第 i i i个交叉点的混合权重, z i z_i zi是交叉点的深度。与Mip-NeRF360中的失真损失不同,后者的 z i z_i zi是采样点之间的距离并不参与优化,我们的方法直接通过调整交叉深度 z i z_i zi鼓励高斯基元的集中。注意我们使用CUDA以类似于[Sun等,2022b]的方式高效实现了这个正则化项。
法线一致性:由于我们的表示基于二维高斯表面元素,我们必须确保所有二维splats在局部与实际表面对齐。在体积渲染的背景下,沿射线可能存在多个半透明曲面元,我们考虑在交叉点 p s \mathbf{p}_s ps的中位点处的实际表面,其中累积的不透明度达到0.5。然后我们按照如下方式将涂抹的法线与深度图的梯度对齐:
L n = ∑ i ω i ( 1 − n i T N ) ( 14 ) \mathcal{L}_n = \sum_i \omega_i (1 - \mathbf{n}_i^\mathrm{T} \mathbf{N}) \quad(14) Ln=i∑ωi(1−niTN)(14)
其中 i i i遍历沿射线交叉的splats, w i w_i wi表示交叉点的混合权重, n i \mathbf{n}_i ni代表朝向相机的splats的法线, N \mathbf{N} N是通过深度图的梯度估计的法线。具体来说, N \mathbf{N} N使用如下的有限差分从附近的深度点计算:
N ( x , y ) = ∇ x p s × ∇ y p s ∣ ∇ x p s × ∇ y p s ∣ ( 15 ) \mathbf{N}(x,y) = \frac{\nabla_x \mathbf{p}_s \times \nabla_y \mathbf{p}_s}{|\nabla_x \mathbf{p}_s \times \nabla_y \mathbf{p}_s|} \quad(15) N(x,y)=∣∇xps×∇yps∣∇xps×∇yps(15)
通过将splats的法线与估计的表面法线对齐,我们确保二维splats在局部近似实际物体表面。
最终损失:最后,我们使用一组摆好姿势的图像从初始稀疏点云优化我们的模型。我们最小化以下损失函数:
L = L c + α L d + β L n ( 16 ) \mathcal{L} = \mathcal{L}_c + \alpha\mathcal{L}_d + \beta\mathcal{L}_n (16) L=Lc+αLd+βLn(16)
其中 L c \mathcal{L}_c Lc是结合L1和D-SSIM项的RGB重建损失[Kerbl等,2023],而 L d \mathcal{L}_d Ld和 L n \mathcal{L}_n Ln是正则化项。有界场景中我们将 α = 1000 \alpha = 1000 α=1000,无界场景的 α = 1000 \alpha = 1000 α=1000,所有场景 β = 0.05 \beta = 0.05 β=0.05。
7 结论
我们提出了二维高斯涂抹,这是一种新颖的方法,用于重建几何上准确的辐射场。我们利用二维高斯基元进行三维场景表示,便于进行准确且视角一致的几何建模和渲染。我们提出了两种正则化技术,以进一步增强重建的几何形状。在几个具有挑战性的数据集上的广泛实验验证了我们方法的有效性和效率。
局限性。虽然我们的方法成功地为各种物体和场景提供了准确的外观和几何重建,我们也讨论了它的局限性:首先,我们假设表面完全不透明,并从多视图深度图中提取网格。这在准确处理半透明表面,如玻璃时可能会面临挑战,因为它们的复杂光传输属性,如图12所示。其次,我们当前的密集化策略偏爱纹理丰富的区域而非几何形状丰富的区域,有时可能导致对精细几何结构的表示不够准确。更有效的密集化策略可以缓解这个问题。最后,我们的正则化通常涉及图像质量和几何之间的权衡,并且可能导致某些区域过度平滑。
参考资料
- 代码运行和测试及解析:学习笔记之——2D Gaussian Splatting(2DGS)
- 详细到不能再详细的详解:https://zhuanlan.zhihu.com/p/708372232