Paper/Neural rendering

Multi-Scale 3D Gaussian Splatting for Anti-Aliased Rendering

침닦는수건 2023. 12. 12. 20:51
반응형

내 맘대로 Introduction

 

이 논문은 Mip-Splatting 과 같은 문제를 푼다. 학습할 때와 다른 해상도, 카메라 거리로 렌더링할 경우 aliasing이 발생하는 것을 막는 연구다. 이론적 기반으로 깔고 가는 nyquist frequency 기반 필터링은 mip-splatting과 완전히 동일하지만 구현해낸 방법이 다르다. mip-splatting의 경우, gaussian이 학습될 때 loss function에 이론을 적용해서 애초에 anti-aliasing된 gaussian 1 set를 만들어내는 식이고 이 논문은 해상도 별로 frequency 고려해서 gaussian을 따로 만들고 렌더링할 때 선별해내서 사용하는 식이다.

 

방법론이 mip-splatting보다는 단점이 많아서 하위 호환 정도 되는 것 같다. 여러 해상도에 대해 따로 들고 있으니 저장 공간 문제도 있을 것이고 선별 과정에서 추가 연산이 필요해서 속도도 조금 느려질 것이다. 게다가 1x, 4x, 8x, 16x 처럼 2의 배수 해상도만 다루었기 때문에 완전히 연속적으로 anti-aliasing을 했다고 보긴 조금 어렵다. 

 

하지만 빠른 시간 안에 분석하고 이런 아이디어를 적용해본 것은 박수쳐줄만 하다.

 

메모하며 읽기

3D Gaussian 찍먹.

aliasing이 발생하는 원인부터 분석하고 가는데, mip-splatting에서 한 번 봐서 그런지 이해가 쉬웠다. 결국 똑같이 nyquist frequency를 사용한다.

수식이 복잡하지만 결국에 요점은,

표현하고자 하는 형상 디테일이 많아 작은 3D GS들이 많을 때(high frequency), 학습 해상도가 너무 크면 (low sampling frequency) 이미지가 깨진다는 것이다. 

그래서 최소한 3d gs 크기 대비 최소 해상도를 맞춰줘야 된다는 내용. 

그 기준인 nyquist frequency로 2배 이상이다. 

EWA splatting에서 이러한 문제를 이미 겪었기 때문에 이를 해결하기 위해 low pass filtering를 rendered image 상에 가해주곤 했었는데 이 방법을 적용해도 남아있는 문제들이 있다.

1) 해상도가 낮아질수록, 픽셀 사이즈가 gaussian 대비 너무 커지므로 픽셀 레벨에서 filtering을 해주는 것은 오히려 더 망가질 위험이 있음. 

해상도마다 kernel을 따로 디자인하는 것도 어려움

2) 해상도가 낮아지면 픽셀 사이즈가 커지므로 pixel frustrum이 넓어지게 되고 해당 pixel color를 맞추기 위해 불필요하게 많은 gaussian들이 추가 생성됨. 

gaussian 증가는 속도와 메모리 문제로 직결됨.

따라서 low pass filter 대신 새로운 방법론이 필요하다고 주장함.
aliasing을 돌파하는 방법을 해상도 별로 각기 다른 gaussian을 학습시킨다는 단순한 방식이다. 

각 레벨(해상도)을 독립적으로 학습시키는 것까지는 아니고 fine-to-coarse 방향으로 순차적으로 학습시켜나가는데 해상도가 떨어질수록(pixel size 증가, sampling frequency 증가) fine level의 gaussian들을 aggregation하면서 보다 큰 gaussian(target frequency 감소)으로 만들면서 coarse level gaussian을 생성한다. 

일단 gaussian이 지금 해상도 대비 크다 작다 (low frequency다 high frequency다) 구분하기 위해선 gaussian의 이미지 레벨 크기를 정의해야 한다. 

이는 2D projected gaussian을 이용해 정의하면 간편하다. 기존 3DGS  논문 방식대로 2D projection을 수행했을 때 아래 그림과 같이 생성될 것이다. 



그리고 수직v, 수평 u 두 방향에 대해서 중심으로부터 opacity가 1/255보다 큰 최외곽 pixel까지의 거리를 이용했다. 

이 거리 S가 gaussian의 frequency에 해당한다고 보았다.
sampling frequency는 사실 픽셀 1칸으로 정해져있다. 해상도가 달라지면서 그 물리적 의미가 달라지는 것이지.

따라서 위 gaussian frequency가 nyquist freuqnecy를 기준으로보면 2 pixel보다 작을 경우, aliasing이 발생한다고 볼 수 있다. 

gaussian frequency가 현 해상도 기준 2픽셀보다 작을 경우, "너무 작다"라고 분류되어 coarse level 로 넘겨질 때 aggregation 대상이 된다.



그냥 지워버리면 안되냐고 할 수 있는데, 그러면 위 그림처럼 디테일이 사라져버린다. aliasing 관점에서만 좀 아쉬운 gaussian들이지 여전히 기능을 하고 있긴 하다.

위와 같이 각 레벨 별로 해상도를 기준으로 aggregation 대상 gaussian들을 선별했다면 어떻게 합칠까?

fine level을 level 1, coarse level을 level N이라고 하면 [1, N-1] 까지의 gaussian을 다 모아서 level N의 gaussian을 만드는 식이다.




1) [1, N-1] 렌더링 일단 함. 

2) 400 / level voxel로 분류 후 voxel 별로 average pool (rotation은 안 적혀있는 supplementary보니까 적혀있음. 누락된 듯.)

3) average scale 갖고 gaussian frequency, Savg를 새로 계산할 수 있지만 이게 nyquist frequency보다 작을수도 있다. (통상적으로 작다. 왜냐면 작은 애들이 애초에 aggregation 대상이었으니까)

그래서 nyquist frequency로 scale up해준다. 
알고리즘은 참고

[1, N-1]을 aggregation해서 level N을 준비했다면 level N 해상도에 맞추어 downsample된 이미지로 학습을 또 한다. 

각 level을 학습할 때 각 level gaussian으로 하여금 최소 S와 최대 s를 저장해두도록 한다. 

이는 나중에 최종 렌더링할 때 해상도를 보고, 어떤 level을 사용해서 렌더링해야할지 결정하는 척도가 된다.



렌더링할 때는 해상도를 보고 sampling frequency 최소 조건을 보고, gaussian culling할 때 적합한 level의 gaussian을 culling해온다. 그리고 렌더링.

각 level gaussian 별로 sampling frequency 구간이 같이 저장되어 있으니 가능.
반응형