2D Gaussian Splatting

김민솔·2024년 11월 26일

Gaussian-Splatting

목록 보기
4/6

1. Introduction

3D GS는 3D 가우시안을 2D screen space로 정사영하여 렌더링하는 모델입니다. 2D GS는 3D 가우시안을 정사영하는 데에서 발생하는 문제점을 해결하고자, Homogeneous 좌표를 도입하였습니다. 이를 통해 2D 가우시안을 보다 직접적으로 근사하여 explicit rendering을 구현하였습니다. 또한, surface normal을 모델링하고, splats가 surface에 위치하도록 구현하여, 더 뛰어난 렌더링 성능을 보입니다.

  • explicit이다 보니, 렌더링 속도도 매우 빠릅니다.
  • surface reconstruction에서 3D GS보다 좋은 성능을 보입니다.

2. Related Works

vs SuGaR

2D GS는 가우시안을 2D로 직접 적용하여, SuGaR에 비해 rasterization 과정을 더 간단하게 구현하였으며, mesh 후처리 없이도 geometry를 개선하였습니다.

vs NeuSG

NeuSG는 3D 가우시안 변수와 SDF network를 동시에 학습하고, SDF로부터 surface를 추출합니다. 2D GS에선 2D 가우시안의 내재 변수로 surface를 근사하여 더 빠르고 간단한 solution을 제시합니다.

3 . 3D GS

About 3D GS

3D GS의 한계점 in surface reconsturction

3D GS는 surface reconsturction에서 아래의 문제점들을 가집니다.
1️⃣ 얇은 표면에 대해 학습하지 못합니다.
2️⃣ 3D GS에서는 surface normal이 모델링되지 않았습니다.
3️⃣ multi-view에 대해 일관하지 않은 recon이 이루어집니다.
4️⃣ 카메라에 가까운 projection만 정확하게 이루어집니다. (1st-order Affine matrix로 3D 가우시안을 ray space에 사영하기 때문입니다.)

4. 2D GS

4.1 Modeling

  • pk\mathbf{p}_k: central point
  • tu,tv\mathbf{t}_{u}, \mathbf{t}_{v}: tangential vectors
    -> tw=tu×tv\mathbf{t}_{w}= \mathbf{t}_{u}\times \mathbf{t}_{v}: primitive normal (두 벡터의 외적이므로 surface에 직교하는 벡터가 됩니다.)
  • S=(su,sv)\mathbf{S}=(s_u,s_v): scaling vector -> 2D 가우시안의 variance 조절
    위의 Figure에서 볼 수 있듯이, 2D splat은 central point pk\mathbf{p}_k와 두 개의 tangential vectors tu,tv\mathbf{t}_{u}, \mathbf{t}_{v}, scaling vector S=(su,sv)\mathbf{S}=(s_u,s_v)로 이루어져 있습니다. 해당 값들은 모두 learnable parameter입니다.
P(u,v)=pk+sutuu+svtvv=H(u,v,1,1)where  H=[sutusvtv0pk0001]=[RSpk01]\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)^{\top}\\ where \ \ \mathbf{H} &= \begin{bmatrix} s_u\mathbf{t}_{u} & s_v\mathbf{t}_{v} & \mathbf{0} & \mathbf{p}_k \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \mathbf{R}\mathbf{S} & \mathbf{p}_k \\ \mathbf{0} & 1 \end{bmatrix} \end{aligned}
  • H\mathbf{H}: homogeneous transform
    따라서 local tangent plane(in world space)에서 2D GS P(u,v)P(u, v)를 표현하면 다음과 같습니다. homogeneous로 2D GS의 geometry를 표현할 수 있습니다.
G(u)=exp(u2+v22)\mathcal{G}(\mathbf{u})=\exp\Big( - \frac{u^{2}+v^{2}}{2} \Big)

(u,v)(u, v) point에 대해 2D 가우시안 값은 위와 같습니다. 또한, 각 가우시안은 opacity α\alpha, view-dependent appearance cc를 학습하게 됩니다. (cc는 SH로 최적화됩니다.)

4.2 Splatting

가우시안 렌더링 시 affine 근사를 사용하면 1️⃣ 가우시안의 중심만 정확하게 사영된다는 점과 2️⃣ 카메라와 멀어질수록 에러가 커진다는 단점이 존재합니다. 따라서, homogeneous coords를 사용하여 렌더링을 구현합니다.

x=(xz,yz,z,1)=WP(u,v)=WH(u,v,1,1)\mathbf{x} = (xz,yz,z,1)^{\top}=\mathbf{W}P(u,v) =\mathbf{W}\mathbf{H}(u,v,1,1)^{\top}
  • x\mathbf{x}: homogeneous ray
    • (x,y)(x, y) 지남
    • splat과 depth zz에서 만남
  • W\mathbf{W}: world to screen transformation 행렬
    2D(world)에서 2D(image)로 매핑하기 위해 위의 과정을 거칩니다. w2c로 screen space로 옮긴 후, homogenous로 image space에 매핑하는 과정입니다.

문제점

위의 과정으로 conic을 projection하기 위해 M=(WH)1\mathbf{M}=(\mathbf{W}\mathbf{H})^{-1}을 적용하면, numerical instability가 발생합니다. (특히 side에서 생성된 view 등의 조건에서, line segment로 splat이 퇴화됩니다.) 기존에는 threshold를 지정하여 해당 splat을 제거하였지만, 안정적인 최적화를 위해 ray-splat intersection을 제시하였습니다.

Ray-splat Intersection

ray-splat intersection을 평행하지 않은 세 평면의 교차를 찾는 것으로 구현하였습니다. ray가 z축을 맡기 때문에, 두 직교 평면인 x 평면과 y 평면의 교차점에 ray을 위치시키면 됩니다.

  • hx=(1,0,0,x)\mathbf{h}_{x}= (-1,0,0,x)^\top: x-plane in 4D homogeneous plane
  • hy=(0,1,0,y)\mathbf{h}_{y}= (0,-1,0,y)^\top: y-plane in 4D homogeneous plane

다음으로는 uv plane으로 옮기는 과정입니다. 이때, homogeneous 평면에서의 특징인 M=MT\mathbf{M} = \mathbf{M}^{-T}인 점을 활용하여, inverse 대신 transpose를 사용하여 아래와 같이 local 좌표를 표현합니다.

  • hu=(WH)hx\mathbf{h}_{u}= (\mathbf{W}\mathbf{H})^\top\mathbf{h}_{x}: u-coord
  • hv=(WH)hy\mathbf{h}_{v}= (\mathbf{W}\mathbf{H})^\top\mathbf{h}_{y}: v-coord

이때 위에서 정의한 것과 같이 (4.1) 2D 가우시안 plane의 points는 (u,v,1,1)(u,v,1,1)로 표현됩니다. 따라서 교차평면 포인트는 다음과 같이 표현됩니다.

hu(u,v,1,1)=hv(u,v,1,1)=0\mathbf{h}_{u}\cdot (u,v,1,1)^{\top}=\mathbf{h}_{v}\cdot (u,v,1,1)^{\top}=0
u(x)=hu2hv4hu4hv2hu1hv2hu2hv1v(x)=hu4hv1hu1hv4hu1hv2hu2hv1u(\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}}

이때, hui,hvi\mathbf{h}_{u}^{i}, \mathbf{h}_{v}^{i}는 4D homogeneous plane의 i번째 파라미터가 됩니다.

Degenerate Solutions

2D 가우시안이 slanted viewpoint에서 관찰될 경우, screen space의 line으로 사라지는 현상이 발생합니다. 안정적인 최적화를 위해 object-space low-pass filter를 적용하였습니다.

G^(x)=max{G(u(x)),G(xcσ)}\hat{\mathcal{G}}(\mathbf{x})=\max\Big\{ \mathcal{G}(\mathbf{u}(\mathbf{x})), \mathcal{G}(\frac{\mathbf{x}-\mathbf{c}}{\sigma}) \Big\}
  • u(x)\mathbf{u}(\mathbf{x}): intersection points
  • c\mathbf{c}: center of projected points
  • σ\sigma: radius
    해당 pass filter를 통해, G^\hat{\mathcal{G}}은 고정된 screen space에 lower-bound됩니다.

Rasterization

c(x)=i=1ciαiG^(u(x))j=1i1(1αjG^j(u(x)))\mathbf{c}(\mathbf{x}) = \sum\limits_{i=1}\mathbf{c}_{i}\alpha_{i}\hat{\mathcal{G}}(\mathbf{u}(\mathbf{x}))\prod^{i-1}_{j=1}(1-\alpha_j\hat{\mathcal{G}}_{j}(\mathbf{u}(\mathbf{x})))

1️⃣ 가우시안 내재변수로 screen space bbox를 계산합니다.
2️⃣ depth center로 가우시안을 정렬 후, tile에 위치시킵니다.
3️⃣ alpha-blending으로 앞에서부터 가우시안을 축적시킵니다.
위의 과정은 3D GS와 동일합니다. 다만, 3D GS는 3D 가우시안을 정사영시켜 2D 가우시안을 얻어낸 반면에, 2D GS는 homogenous로 2D 가우시안을 얻어낸 것이 차이점입니다.


5. Training

Depth Distortion

3D GS는 교차된 Gaussian 간의 거리를 계산하지 않고 렌더링합니다. 따라서 depth distortion loss를 적용하여 ray-splat intersection 간의 거리를 최소화하였습니다.

Ld=i,jwiwjzizj\mathcal{L}_{d} = \sum\limits_{i,j}w_{i}w_{j}|z_{i}-z_{j}|
  • ww: blending weights
    i-th intersection과 j-th intersection의 가중치를 depth loss에 부여하여 구현되었습니다.

Noraml Consistency

2D splats은 모두 실제 표면에 위치해야 합니다. 이때 다수의 semi-transparent surfel이 ray에 존재할 가능성을 고려합니다. 따라서 intersection의 median point(축적된 opac이 0.5)에 depth map의 gradient로 계산한 Normal을 두어 문제를 해결하였습니다.

Ln=iwi(1niN)N(x,y)=xps×ypsxps×yps\mathcal{L}_{n} = \sum\limits_{i}w_{i}(1-\mathbf{n}_{i}^{\top}\mathbf{N}) \quad \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}|}

카메라 방향의 splat의 normal n\mathbf{n}과 intersection ps\mathbf{p}_{s}에서의 depth map gradient로 구한 normal N\mathbf{N}을 통해 실제 object surface에서의 2D splats를 근사할 수 있습니다.

Final loss

L=Lc+αLd+βLn\mathcal{L} = \mathcal{L}_{c}+\alpha\mathcal{L}_{d}+\beta\mathcal{L}_{n}

L1 + SSIM의 color loss와 depth, normal loss term으로 최종 식이 구현되었습니다.


6. Experiments

Quantative

  • 정량 지표로만 확인하게 될 경우, 2D GS의 성능이 떨어지는 것으로 파악할 수 있습니다.
  • 중요한 점은, time과 size 측면에서 큰 이점을 갖는다는 점입니다.
  • explicit 방법으로 렌더링하기 때문에, 렌더링 속도가 매우 빠릅니다.

Qualitative

  • qualitative 측면에서 확실한 이점을 보입니다.
  • 위의 Fig 이외에도 실제로 사용한 2D GS 결과물을 살펴보시는 것을 추천드립니다.

Ablations

  • normal, depth loss term을 비교한 부분입니다.
  • normal consistency가 성능에 매우 큰 영향을 미치고 있음을 파악할 수 있습니다.
  • depth 추출 방법에서도 ablation을 적용하였습니다.
    • median depth(논문) vs expected depth

  • 각 loss term에 대한 품질 비교입니다.
  • qualitative로 확인하였을 때, loss 적용 후 올라간 성능 정도가 매우 눈에 띕니다.

Limitations

  • full opac으로 표면을 추정하고, multi view에서 mesh를 추출합니다. 이때, 반투명 물체(유리)의 표면을 다루는 부분에서 어려움을 겪게 됩니다.
  • densification이 기하학적 영역에서보다, texture 영역에서 이루어집니다. 이는 부정확한 geometric 표현으로 이어질 수 있습니다.
  • regularization에서 image quality와 geometry 간의 trade-off가 존재합니다.

Reference

[1] 2D Gaussian Splatting for Geometrically Accurate Radiance Fields, Binbin Huang, Zehao Yu, https://arxiv.org/pdf/2403.17888

profile
Interested in Vision, Generative, Neural Rendering

0개의 댓글