AI/논문 리뷰 Paper Review

3D Gaussian Splatting for Real-Time Radiance Field Rendering | 논문 리뷰

해드위그 2024. 8. 22. 00:26
반응형
SIGGRAPH 2023.
Bernhard Kerbl, Georgios Kopanas, Thomas Leimkühler, George Drettakis
Inria | Max-Planck-Institut für Informatik
8 Aug 2023

 

3D scene representation 분야에서 NeRF 보다 성능이 좋고, 요즘 떠오르는 방법인 Gaussian splatting에 대해 알아보자.

 

요약

  • 3D Gaussian 을 사용하여 scene을 나타냄.
  • 기존의 NeRF 기반 방법보다 더 좋은 성능 -> Rendering speed가 real-time으로 수행될 수 있을 만큼 빠름.

Introduction

NeRF 방법 :
- 3D scene을 continuous scene으로 표현
- volumetric Ray-marching 을 활용하여 MLP를 학습함으로써 3D 공간을 implicit하게 표현
- 최신의 NeRF 모델들은 continuous한 표현을 위해, voxel grid (Plenoxels)나 hash grid (InstantNGP) 혹은 point 내에서 정의된 feature들을 interpolation하는 방식을 사용
- NeRF는 rendering시 각 ray마다 3D point를 stochastic하게 sampling -> training 및 rendering time cost가 큼.

 

본 논문에서는 Rasterization과 Ray-marching의 장점을 둘 다 가지는 3D Guassian 기반의 모델을 제안한다.

* Rasterization : Mesh와 Point를 이용해 3D 공간의 정보를 2D pixel screend으로 표현 / 3D 공간을 explicit하게 표현
* Ray-marching : 현실에서 물체에 비친 ray를 통해 눈에 상이 맺히는 과정을 묘사하여 3D scene을 최적화

 

해당 방법은 3가지의 main component로 구성된다.

  • 3D gaussian을 통한 scene representation
    • SfM process에서 추출된 point cloud를 초기 initial set으로 활용
    • 3D gaussian은 differentiable volumetric representation이 가능
    • -blending을 통해 NeRF와 비슷한 image formation model을 활용하여 3D to 2D projection을 효율적으로 수행 가능
  • 3D gaussian properties의 최적화
    • 이 방법에서 최적화는 3D gaussian의 3D position, opacity $, anisotropic covariance (gaussian의 shape와 spread), spherical harmonic coefficient (lightening과 shading)에 대한 최적화를 포함
    • 위의 특성들을 최적화할때, adaptive density control을 사용하여 gaussian을 추가하거나 제거하는 과정을 거치는데, 이를 통해 compact하고 precise한 representation을 수행 가능
  • Real-time rendering
    • GPU sorting algorithm과 tile-based rasterization을 활용
    • Tile-based rasterization은 이미지를 몇 개의 tile block으로 나누어 각 tile을 독립적으로 rendering하여 속도가 빠름
    • 3D gaussian representation의 특성 덕분에 각 splat (=gaussian)이 어떤 방향성을 가지게 되는데 (anisotropic splatting), 이러한 3D gaussian들의 shape와 orientation이 2D screen으로 projection될 때 반영되기 때문에 더욱 현실적인 표현이 가능해지고, fast/accurate backward pass 가능

 

Overview

전체적인 흐름을 먼저 보면,

본 논문의 목표는 sparse한 SfM 점 집합에서 시작하여 고품질의 새로운 뷰를 합성하는 장면 표현을 최적화 하는 것이다.

  • Initialization : input은 이미지셋과 SfM알고리즘에서 얻어진 point cloud를 사용한다. COLMAP과 같은 SfM알고리즘은 Camera Pose뿐만 아니라 Point Cloud 정보도 같이 얻을 수 있다.
SfM : Structure from Motion?
2차원 영상으로부터 3차원 정보를 추출하여 3D로 재구성하는 (structure = 3D structure, motion = camera pose) 것을 Structure from Motion(SfM)이라 함.

 

  • 3D Gaussian 정의
    • Position (mean): 3D space에서 gaussian의 center point를 의미
    • Covariance matrix: Gaussian의 spread를 의미하며, shape을 결정
    • Opacity : Gaussian의 투명도를 결정=> 각 gaussian의 directional appearance (color)는 spherical harmonics (SH)를 통해 표현
Spherical harmonics?
원래 양자역학에서 주로 사용되는 방법, Computer graphics 분야에서는 directional appearance (color) 값을 계산할 때 자주 사용되는 방법.
구면 좌표계에서 laplace equation의 해를 표현하는 방법, 최근에는 많은 연구가 이러한 개념을 사용하여 서로 다른 각도에서 light interaction을 고려한 color를 표현하고 있으며, 본 논문도 이 개념을 차용함.
  • Projection : 3D Gaussian이 (Camera에서 z축으로 거리가 1만큼 떨어진) Image Plane으로 Projection되어 2D Gaussian형태가 된다. 이 과정은 GT 입력 이미지와 비교하여 parameter를 업데이트하기 위함임. (3D 공간의 정보를 2D 이미지로 투영하는 과정)
  • Differentiable Tile Rasterizer : 미분 가능한형태의 Tile Rasterization을 통해 2D Gaussian들을 하나의 Image로 생성한다.
  • Gradient Flow : 생성된 이미지와 GT 이미지의 Loss를 계산하고 Loss만큼 Gradient를 전파한다.
  • Adaptive Density Control : Gradient를 기반으로 Gaussian의 형태를 변화시킨다.

 

DIFFERENTIABLE 3D GAUSSIAN SPLATTING

본 논문의 저자들은 미분 가능하고, 쉽게 2D projection이 가능한 3D gaussian을 선택하여 $blending을 이용한 빠른 rendering을 가능하게 하였다.

또한, 이전의 방법들이 어떤 planar circle과 normal vector로 2D point를 모델링한 것과 다르게 3D gaussian은 normal vector를 필요로 하지 않기 때문에, sparse한 SfM point로부터 어려운 task인 normal estimation을 하지 않아도 된다.

 

3D Gaussian Define

각 3D gaussian은 world space에서 covariance matrix 로 정의되며, mean 를 center point로 갖는다.

이 gaussian은 blending 과정에서 가 곱해진다.

 

아래의 수도코드 기반으로 본 논문의 방법을 알아보자.

  • 첫번째 빨간 박스 부분은 변수를 초기화 하는 부분이다.
  • 두번째 파란 박스 부분은 입력을 받아 inference후, loss를 계산하고, update하는 부분이다.
  • 세번째 초록 박스 부분은 특정 iteration 마다 Gaussian을 remove, clone, split하는 부분이다.

각 부분을 자세히 살펴보자.

Initialization

 

M,S,C,A는 학습 Parameter에 해당한다.

 

M은 SfM으로 획득한 Point Cloud을 의미한다. 3D Gaussian은 평균과 공분산으로 구성이 되는데, Point Cloud의 point점들이 초기 3D Gaussian들의 평균값으로 사용된다. -> Point Cloud의 Point 갯수만큼 3D Gaussian이 생성

S는 3D Gaussian의 Covariance Matrix로써, 3x3의 행렬, 논문 수식에서는 Scale Matrix S와 Rotation Matrix R로 구성된 Σ로 나타남.

이렇게 설계된 이유에 대해서 설명하자면, 랜더링을 위해 3D Gaussian이 2D Gaussian으로 Projection 되어질 때 Covariance Matrix가 Positive Definite를 만족하기 위함이다.

 

3D Gaussian을 2D Gaussian으로 Projection하는 수식

Rendering을 위해서는 3D gaussian을 2D로 projection 시켜야하는데,

viewing transformation 를 통해 camera coordinate에서 2D covariance matrix 를 얻게 된다.

 

C는 3D Gaussian의 Color값을 의미,

A는 3D Gaussian의 투명도값을 의미하며 단일 실수값이다.

 

Optimization

1: 정답 이미지 I헷과 해당 이미지의 Camera Pose정보 V를 읽어온다.

2: M(mean=xyz), S(Covariance), C(Color), A(투명도), V(카메라포즈)를 입력으로 받아 Rasterization하여 predicted된 Image를 만든다.

Rasterization : 3D 공간 상에 있는 물체의 형상을 2D 공간 상에 매핑을 하여 표현하는 과정

먼저, 16x16 tile로 쪼갠 후, 각각의 타일에 이미지를 구성하게 되는 Gaussian 덩어리들을 선별하는 과정을 거친다. (선별 시 view frusturm 방법 사용 ex: 너무 가까운 애들 제거)

CUDA에서 병렬적으로 Threading,  instance들은 View space depth tile ID 조합하여 (dictionary) key K 만들게 된다.

Key를 Sort 처리하여 카메라와 가까운 Gaussian을 먼저 그리도록 한다. (연산 효율 높아짐.)

앞쪽부터 뒤쪽까지 훑어가며 이미지 얻어냄.

 

3: predicted된 이미지와 GT이미지를 비교하여 Loss를 계산, Loss 함수는 L1 D-SSIM 설계 되었고, λ는 0.2이다. 

4: Adam Optimizer로 M, S, C, A값을 업데이트 한다.

 

Adaptive Control of Gaussians

Scene에 맞게 3D Gaussian들을 adaptive하게 변형시키는 단계이다.

앞서 언급한 M,S,C,A paramter들은 매 iteration마다 update되지만, 초록색부분은 100 iteration마다 수행된다.

3D Gaussian이 Remove/Split/Clone하게 되는데, 이를 densification한다고 표현한다.

 

Remove: 특정 threshold(=ε) 보다 낮은 alpha값(=α=투명도)을 가진 Gaussian은 제거된다. 코드상 threshold == 0.005

Remove Gaussian을 단계를 거친 후, under/over - Reconstruction 영역에 대한 처리를 진행하게 된다.

view-space position gradient 평균 크기(=average magnitude)가 특정 Thresould(=0.0002)이상이 된다,

Gaussian들을 Clone 또는 Split합니다.

 

Clone: Under-Reconstruction 영역에 대해서, 작은 크기의 (=covariance가 작은) 3D Gaussian들은 같은 크기로 copy되고, positional gradient의 방향에 배치.

Split: Over-Reconstruction 영역에 대해서, 큰 크기의 (=covariance가 큰) 3D Gaussian들이 작은 Gaussian으로 분해된다. 1개의 Gaussian 2개의 Gaussian으로 분리하게 되는데, scale 1.6(=실험적으로 결정한값)으로 나누는 형태로 계산된다.

 

이때, Gaussian의 갯수가 무작위로 증가하게 되는데, 3000 iteration 마다 alpha 값을 0으로 초기화 해준다.

주기적으로 alpha 값이 0으로 초기화 되면서 큰 크기의 Gaussian들이 중첩되는 케이스를 제거해준다.

M,S,C,A를 Optimization하는 단계에서 100 iteration동안 alpha값은 0이 아닌 값으로 바뀌게 되며, 100 iteration후에 Gaussian Densification단계에서 Remove Gaussian연산을 통해 원치 않는 값들이 제거된다.

=> 전체 Gaussian 조절에 큰 역할을 하는 전략임.

 

Evaluation

Mip-NeRF360은 A100 4장을 사용하였고, 나머지는 A6000을 사용했다고 한다. FPS는 랜더링 시간을 의미한다.

3D Gaussian Splatting을 Instant-NGP와 비교하였을 때, Train속도가 비슷하나, PSNR이 높고, 무엇보다도 랜더링 속도가 매우 빠르다.

 

Limitations

입력 이미지가 부족한 Sparse Scene에서 artifact 발생하게 된다.

현재  논문에서 제시한 알고리즘은 어떤 regularization 도입할  없다고 한다.

NeRF기반 solution보다 상당히 높은 메모리 사용량을 가진다.

 

 

반응형