본문 바로가기
AI/NeRF

[NeRF] 3D Gaussian Splatting 알아보기

by 여기는 정글 2024. 5. 8.

안녕하세요. 정글러입니다.

 

이전에 NeRF 논문을 리뷰한 적이 있는데요,

그 이후에 많은 논문들이 후속 연구를 진행하고 있습니다.

 

학습에 오랜시간이 걸리는 문제점을 해결하기 위해 Training, Rendering 속도를 개선하는 연구 / 입력 이미지수를 축소하는 연구 / Pose estimation / 기존엔 Static Scene만 Rendering할 수 있었는데 Editing이나 Relighting할 수 있도록 개선한 연구 / 높은 퀄리티의 3D Geometry, Texture 생성 / Dynamic Scene을 렌더링하는 연구 등으로 진행되고 있습니다.

 

오늘은 그 중에서도 렌더링 속도와 퀄리티를 개선하는 3D Gaussian Splatting을 알아보겠습니다.


 

3D Gaussian Splatting은 기존의 NeRF보다 빠르게 렌더링하고 보다 나은 퀄리티를 낼 수 있습니다.

 

그림과 같이 기존의 NeRF는 pixel마다 ray를 그려서 여러 점을 샘플링하고, 각 점의 color와 volume density계산 후, ray위의 각 점들을 summation하여 이미지를 렌더링했다면,

3D Gaussian Splatting은 이미지를 16x16pixel로 구성된 타일별로 그룹화하고, 타일마다 Gaussian을 depth로 정렬한 뒤, 순차적으로 Alpha blending하여 이미지를 렌더링합니다.

기존 NeRF에 비해 훨씬 적은 연산량을 갖고 있기 때문에 짧은 시간에 렌더링이 가능한 것입니다.

 

기존의 NeRF는 이런 식으로 렌더링된 뷰와 실제 뷰 간의 손실이 생겨 퀄리티 이슈가 있었습니다.

이를 해결하기 위한 3D Gaussian Splatting의 전체적인 흐름은 다음과 같습니다.

 

먼저 1) Initialization단계에서 SfM 알고리즘을 통해 카메라 pose와 point cloud 정보를 얻어 3D 가우시안(3D 공 덩어리들/ 색깔이나 투명도를 입힘)의 초기값으로 활용합니다.

2) Projection 단계에서 camera에서 z축으로 1만큼 떨어진 Image plane으로 projection됩니다. 이때 3D 가우시안은 2D 가우시안 형태가 됩니다.

3) Differentiable Tile Rasterizer 단계에서 미분 가능한 형태의 Tile Rasterizer를 활용하여 2D 가우시안을 하나의 image로 생성합니다.

이후 4) Gradient Flow로 생성한 GT이미지와 실제 카메라가 촬영한 이미지랑 비교해서 Loss을 계산하고 Loss만큼 Fradient를 전파합니다.

5) Adaptive Density Control에서는 나중에 가우시안들을 최적화 시킬 때 각각 가우시안의 크기를 알맞게 조절하는 방법입니다.

Gaussian Splatting은 큰 기울기를 가진 점들을 분할하고, alpha값을 가져 낮은 값으로 수렴한 점들을 제거하여 손실 함수를 최적화하도록 되었습니다.

사진처럼 Under-reconstruction된 부분이나 Over-Reconstruction된 부분들을 처리합니다. 

Under-Reconstruction된 부분에서는 Clone Gaussian으로 최적화 시키고, Over-Reconstruction된 부분에서는 Split Gaussian을 해줍니다.

 

퀄리티의 결과값은 여기서 확인하실 수 있습니다. https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/

 

3D Gaussian Splatting for Real-Time Radiance Field Rendering

[Müller 2022] Müller, T., Evans, A., Schied, C. and Keller, A., 2022. Instant neural graphics primitives with a multiresolution hash encoding [Hedman 2018] Hedman, P., Philip, J., Price, T., Frahm, J.M., Drettakis, G. and Brostow, G., 2018. Deep blending

repo-sam.inria.fr

최근 Luma AI를 사용할 때도 Gaussian Splatting 기능이 추가되어 있더라고요.

직접 사용해봤을 때 물체는 굉장히 높은 퀄리티로 렌더링되는 반면,

배경에서 Sparse Scene에서는 여전히 많은 얼룩이 있었습니다.

 

이 부분은 1) Rasterizer 단계에서 Gaussian trivial rejection이 일어나거나

2) Depth/blending order를 갑작스럽게 바꾸는 Gaussian을 만들 때 발생한다고 합니다.

 

해당 부분을 개선할 수 있는 후속 연구가 나온다면,

범위가 넓은 Scene에서도 최적화된 기술이 나오지 않을까 생각합니다.


해당 개념을 알아보다가 Virtual Production에서 실제로 NeRF기술을 활용하여 배경을 모델링하는 시도도 볼 수 있었습니다.

이러한 기술을 통해 실제로 어떤 콘텐츠를 제작할 수 있을지 생산적인 고민을 이어나가는 것이 중요할 것 같습니다.

 

감사합니다.