High-quality Surface Reconstruction using Gaussian Surfels 本质上这篇文章也是一个 2DGS
项目地址open in new window  
SIGGRAPH 2024
Fig. 1: Overview  Abstract 本文提出了一种新颖的基于点的表示法——高斯表面元素 (Gaussian Surfels) ,将 3D 高斯点的灵活优化优势和表面对齐特性结合起来。这是通过直接将 3D 高斯点 z 轴的 scale 设为 0 来实现的,从而有效地将原始的 3D 椭圆体扁平化为 2D 椭圆。这样的设计为优化器提供了明确的指导。通过将局部 z 轴作为法线方向,大大提高了优化的稳定性和表面对齐度。虽然在这种情况下,根据协方差矩阵计算出的本地 z 轴导数为零,但本文设计了一种自监督法线深度一致性损失来解决这个问题。为了提高重建质量,还加入了单目法线先验和前景 mask,以减轻与高光和背景相关的问题。本文提出了一种体积切割方法来汇总高斯表面的信息,从而去除 alpha 混合生成的深度图中的错误点。最后,将经过筛选的泊松重建方法应用于融合深度图,以提取表面网格。实验结果表明,与最先进的神经体积渲染和基于点的渲染方法相比,本文的方法在表面重建方面表现出了卓越的性能。
 Introduction 作者认为 3DGS 在重建表面方面存在缺陷,主要是由三个方面导致的:
因为 3D 高斯基元是个椭球,没法与表面对齐 椭球的法向量没办法确定。 alpha 混合过程可能会给重建的表面边缘带来偏差,因为在混合的过程中可能会混合一些边缘之外的高斯基元。 总结来说都是因为 3D 高斯基元是个椭球导致没法完美贴合在表面上
本文的贡献为:
提出了一种新颖的基于点的表示法——高斯表面元素 (Gaussian Surfels),以解决 3DGS 固有的法线模糊,并实现与实际表面的紧密对齐。结合体积切割方法,表面重建的质量得到了显著提高。 提出了一种自监督法线深度一致性正则项以及光度损失正则项,指导高斯表面以密切贴合物体表面的方式移动和旋转。将单目估计法线作为先验值,以解决镜面反射区域的形状亮度模糊问题。 与最先进的基于神经体积和点的渲染方法相比,本文的方法在重建质量和训练速度之间实现了良好的平衡。  Method Fig. 2: Pipeline 如图 2 所示,本文以一组 RGB 图片作为输入,I k \mathbf{I}_k I k  k k k 屏蔽泊松表面重建算法 (Screened Poisson Surface Reconstruction)  来提取高质量的 mesh,在提取 mesh 之前,用体积切割 (volumetric cutting)  来减少因表面边界像素的 alpha 混合而产生的错误深度值。
 Gaussian Surfels Gaussian Surfels 由一组无结构化的高斯核 { x i , r i , s i , o i , C i } i ∈ P \left\{\mathbf{x}_i, \mathbf{r}_i, \mathbf{s}_i, o_i, C_i\right\}_{i \in \mathcal{P}} { x i  , r i  , s i  , o i  , C i  } i ∈ P  
G ( x ; x i , Σ i ) = exp  { − 0.5 ( x − x i ) ⊤ Σ i − 1 ( x − x i ) } (1)  G\left(\mathbf{x} ; \mathbf{x}_i, \Sigma_i\right)=\exp \left\{-0.5\left(\mathbf{x}-\mathbf{x}_i\right)^{\top} \Sigma_i^{-1}\left(\mathbf{x}-\mathbf{x}_i\right)\right\} \tag{1}  G ( x ; x i  , Σ i  ) = exp { − 0.5 ( x − x i  ) ⊤ Σ i − 1  ( x − x i  ) } ( 1 ) 
x i ∈ R 3 \mathbf{x}_i\in\R^3 x i  ∈ R 3 r i ∈ R 4 \mathbf{r}_i\in\R^4 r i  ∈ R 4 s i ∈ R e \mathbf{s}_i\in\R^e s i  ∈ R e o i ∈ R o_i\in\R o i  ∈ R C i ∈ R k C_i\in\R^k C i  ∈ R k Σ i \Sigma_i Σ i  高斯核和高斯基元是同一个意思
将 s i = [ s i x , s i y , 0 ] ⊤ \mathbf{s}_i=[\mathbf{s}_i^x,\mathbf{s}_i^y,0]^\top s i  = [ s i x  , s i y  , 0 ] ⊤ Σ i \Sigma_i Σ i  
Σ i = R ( r i ) S i   S i ⊤ R ( r i ) ⊤ = R ( r i ) Diag  [ ( s i x ) 2 , (   s i y ) 2 , 0 ] R ( r i ) ⊤ (2)  \Sigma_i=\mathbf{R}\left(\mathbf{r}_i\right) \mathbf{S}_i \mathbf{~S}_i^{\top} \mathbf{R}\left(\mathbf{r}_i\right)^{\top}=\mathbf{R}\left(\mathbf{r}_i\right) \operatorname{Diag}\left[\left(\mathbf{s}_i^x\right)^2,\left(\mathbf{~s}_i^y\right)^2, 0\right] \mathbf{R}\left(\mathbf{r}_i\right)^{\top} \tag{2}  Σ i  = R ( r i  ) S i    S i ⊤  R ( r i  ) ⊤ = R ( r i  ) Diag [ ( s i x  ) 2 , (   s i y  ) 2 , 0 ] R ( r i  ) ⊤ ( 2 ) 
D i a g [ ⋅ ] \mathrm{Diag}[\cdot] Diag [ ⋅ ] 每个高斯核的法向量可以直接表示为 n i = R ( r i ) [ : , 2 ] \mathbf{n}_i=\mathbf{R}(\mathbf{r}_i)[:,2] n i  = R ( r i  ) [ : , 2 ] 
可微 Gaussian splatting 和 3DGS 基本上没区别。每个像素点的深度 D ~ \tilde{D} D ~ N ~ \tilde{N} N ~ 
N ~ = 1 1 − T n + 1 ∑ i = 0 n T i α i R i [ : , 2 ] , D ~ = 1 1 − T n + 1 ∑ i = 0 n T i α i d i ( u ) (3)  \tilde{N}=\frac{1}{1-T_{n+1}} \sum_{i=0}^n T_i \alpha_i \mathbf{R}_i[:, 2], \quad \tilde{D}=\frac{1}{1-T_{n+1}} \sum_{i=0}^n T_i \alpha_i d_i(\mathbf{u}) \tag{3}  N ~ = 1 − T n + 1  1  i = 0 ∑ n  T i  α i  R i  [ : , 2 ] , D ~ = 1 − T n + 1  1  i = 0 ∑ n  T i  α i  d i  ( u ) ( 3 ) 
对于深度渲染,直接用高斯核的中心位置来计算深度是不正确的,因为这样忽视了椭圆的倾斜。如图 3 所示,第一行直接用椭圆的中心位置来估计深度,这样会产生误差;第二行用光线和椭圆的交点作为深度。
Fig. 3: The first row: the intersection of a ray with a 3D Gaussian point is challenging to calculate precisely. As a result, approximate the depth of intersection with the depth of the Gaussian's center point, which can introduce errors. The second row: the intersection of a ray with our Gaussian surfel can be calculated precisely, as well as its depth. 在 splatting 的过程中,通过计算穿过像素 u \mathbf{u} u i i i 
d i ( u ) = d i ( u i ) + ( W k R i ) [ 2 , : ] J p r − 1 ( u − u i ) (4)  d_i(\mathbf{u})=d_i\left(\mathbf{u}_i\right)+\left(\mathbf{W}_k \mathbf{R}_i\right)[2,:] \mathbf{J}_{p r}^{-1}\left(\mathbf{u}-\mathbf{u}_i\right) \tag{4}  d i  ( u ) = d i  ( u i  ) + ( W k  R i  ) [ 2 , : ] J p r − 1  ( u − u i  ) ( 4 ) 
J p r − 1 \mathbf{J}^{-1}_{pr} J p r − 1  ( W k R i ) (\mathbf{W}_k\mathbf{R}_i) ( W k  R i  )  Optimization Photometric loss . 光度损失和 3DGS 中一样:
L p = 0.8 ⋅ L 1 ( I ~ , I ) + 0.2 ⋅ L D S S I M ⋅ ( I ~ , I ) (5)  \mathcal{L}_\mathrm{p}=0.8\cdot L_1(\tilde{\mathbf{I}},\mathbf{I})+0.2\cdot L_{DSSIM}\cdot(\tilde{\mathbf{I}},\mathbf{I}) \tag{5}  L p  = 0.8 ⋅ L 1  ( I ~ , I ) + 0.2 ⋅ L D SS I M  ⋅ ( I ~ , I ) ( 5 ) 
I ~ , I \tilde{\mathbf{I}}, \mathbf{I} I ~ , I Depth-normal consistency loss . 这个正则项用来约束渲染深度和渲染法向量之间的一致性:
L c = 1 − N ~ ⋅ N ( V ( D ~ ) ) (6)  \mathcal{L}_c=1-\tilde{\mathbf{N}}\cdot N(V(\tilde{\mathbf{D}})) \tag{6}  L c  = 1 − N ~ ⋅ N ( V ( D ~ )) ( 6 ) 
N ~ , D ~ \tilde{\mathbf{N}},\tilde{\mathbf{D}} N ~ , D ~ V ( ⋅ ) V(\cdot) V ( ⋅ ) N ( ⋅ ) N(\cdot) N ( ⋅ ) 这个正则项在本文的优化过程中起着至关重要的作用,尤其是在解决每个 Gaussian Surfels 的梯度消失问题时。
Normal-prior loss . 在高光的区域,光度损失可能会导致错误的表面,因此用预测的法向量图作为先验,来提高优化的稳定性:
L n = 0.04 ⋅ ( 1 − N ~ ⋅ N ^ ) + 0.005 ⋅ L 1 ( ∇ N ~ , 0 ) (7)  \mathcal{L}_{\mathrm{n}}=0.04 \cdot(1-\tilde{\mathbf{N}} \cdot \hat{\mathbf{N}})+0.005 \cdot L_1(\nabla \tilde{\mathbf{N}}, \mathbf{0}) \tag{7}  L n  = 0.04 ⋅ ( 1 − N ~ ⋅ N ^ ) + 0.005 ⋅ L 1  ( ∇ N ~ , 0 ) ( 7 ) 
N ^ \hat{\mathbf{N}} N ^ ∇ N ~ \nabla \tilde{\mathbf{N}} ∇ N ~ Opacity loss . 不透明度损失来约束每个高斯核的不透明度尽量要么为 0 要么为 1:
L o = exp  ( − ( o i − 0.5 ) 2 / 0.05 ) (8)  \mathcal{L}_o=\exp(-(o_i-0.5)^2/0.05) \tag{8}  L o  = exp ( − ( o i  − 0.5 ) 2 /0.05 ) ( 8 ) 
o i o_i o i  最终的 loss 为:
L = L p + L n + λ o L o + λ c L c + λ m L m (9)  \mathcal{L}=\mathcal{L}_{\mathrm{p}}+\mathcal{L}_{\mathrm{n}}+\lambda_{\mathrm{o}} \mathcal{L}_{\mathrm{o}}+\lambda_{\mathrm{c}} \mathcal{L}_{\mathrm{c}}+\lambda_{\mathrm{m}} \mathcal{L}_{\mathrm{m}} \tag{9}  L = L p  + L n  + λ o  L o  + λ c  L c  + λ m  L m  ( 9 ) 
L m \mathcal{L}_m L m   Gaussian Point Cutting and Meshing 通过融合渲染的深度图和法线图,然后应用屏蔽泊松表面重建算法 (树深度为 10) 来获得最终的 mesh。
但是如图 4 所示,如果椭圆超出了真正的表面边界,且相关权重无法快速衰减为零,则背景表面的渲染深度将受到前景高斯核 alpha 值的影响,导致深度错误。由于 Gaussian Surfels 的复杂分布,很难通过丢弃远离中位数或 alpha 加权平均值的 surfels 来去除每条射线上的异常值。因此根据每个 Gaussian Surfels 的累积的 alpha 值实施体积切割。
Fig. 4: An example of error in the rendered depth Volumetric cutting . 这样做的目的是将那些远离 Gaussian Surfels 的体素标记为未占用体素,即从 grid 中删除这些体素。因此,图 4 中红色的错误 3D 点可以被删除,因为它位于未被占用的体素内部。具体来说,首先在 bounding box 内构建 51 2 3 512^3 51 2 3 G ( x , x i , Σ i ) ⋅ o i G(\mathbf{x},\mathbf{x}_i,\Sigma_i)\cdot o_i G ( x , x i  , Σ i  ) ⋅ o i  λ = 1 \lambda=1 λ = 1 
 Reference [1]High-quality Surface Reconstruction using Gaussian Surfelsopen in new window