안녕하세요. 오늘 리뷰해볼 논문은 Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields 입니다. Google에서 발표한 논문이며 해당 논문에 참여한 Jonathan T. Barron, Ben Mildenhall, Matthew Tancik 세 사람은 Google 혹은 UC Berkeley 소속입니다. 굵직한 NeRF 논문들을 지속적으로 내고 있으니 세 사람의 publication을 tracking하는 것도 NeRF 연구 경향을 따라가는데 도움이 될 것으로 보입니다.
(해당 글은 개인적인 기록을 목적으로 잘못된 내용이 있을 수 있음을 알립니다.)
(https://arxiv.org/abs/2103.13415)
0. Abstract
기존의 NeRF는 하나의 픽셀을 렌더링하기 위해서 하나의 ray을 사용합니다. 이렇게 하면 training 혹은 test time에서 사용된 sample들의 해상도 차이가 있는 경우에 렌더링 된 화면이 흐려지거나 aliasing이 생기는 현상이 불가피하게 나타난다고 합니다. 이런 현상은 supersampling을 하는 방식을 사용해볼 수도 있지만 MLP를 통한 연산을 반복적으로 해야하는 NeRF의 구조상 그렇게 효율적인 방법은 아니라고 합니다. 해당 논문에서 저자들은 해당 문제를 연속적인 해상도 상황를 고려한 Mip-NeRF를 통해 해결하려고 하였습니다. 해당 논문을 처음 읽을 때 달라지는 해상도라는 표현이 무슨 뜻인지 개인적으로 헷갈렸습니다. 혹시라도 저처럼 헷갈리시는 분을 위해 말해보자면 Scene에서 카메라와 관측하는 대상 사이의 거리라고 생각하시면 될 것 같습니다. 카메라와 대상 사이의 거리가 멀다면 NxN 픽셀로 된 화면에 관찰 대상이 작게 보일 것입니다. 이 관찰 대상을 가까이 보일 때의 크기만큼 확대하면 그만큼 해상도가 줄어들이 때문에 해상도가 달라진다는 표현을 한 것 같습니다. 예를 들어서 카메라로 멀리있는 물체를 가까이서 찍은 물체와 같은 크기로 보기위해 가로 세로를 8배로 확대한다고 가정했을 때 같은 크기에 화면을 훨씬 더 적은 픽셀로 채워야하기 때문에 픽셀의 크기가 커집니다.
Mip-NeRF에서는 ray 대신에 conical frustum(원뿔에서 위를 잘라낸 후 아래의 모양)을 쏴서 aliasing, artifact 문제를 막고 fine detail을 잘 살릴 수 있었다고 합니다. 결과적으로 모델 사이즈는 절반으로 줄이고, 연산 속도는 7% 향상 됬으며, NeRF 대비 17% avg error가 주었으며, Mip-NeRF에서 새롭에 제시한 multiscale variant 세팅 기준으로 NeRF보다 60% 개선된 성능을 보였다고 합니다. 그리고 앞서 말했던 supersampling 방식을 사용한 NeRF보다 22배 빨랐다고 합니다. multiscale variant 세팅은 관찰 대상을 카메라가 가까이서 관측한 장면과 멀리서 관측한 장면이 섞여있는 세팅이라고 보시면 될 것 같습니다.
1. Introduction
Abstract에서 말씀드렸던 것처럼 NeRF는 샘플들에서 카메라와 관측 대상과의 거리가 어느정도 일정해야 잘 작동합니다. 만약 NeRF를 multiple resolution으로 구성된 데이터셋을 가지고 학습하게 되면 카메라와 대상과의 거리가 가까운 경우를 렌더링할 때는 흐려지고 먼 물체를 렌더링할 때는 aliasing artifact가 생긴다고 합니다. 이런 현상을 해결하기 위한 supersampling과 같은 해결책은 scene 하나를 학습하기 위해 몇 시간이 걸리는 NeRF의 특성상 굉장히 비효율적입니다.
저자들은 mipmapping이라는 방법에서 영감을 받아서 discrete한 여러 구간의 거리에 따라 픽셀의 크기(?)를 조절해주는 방법을 취합니다. 해당 방법은 MLP에 데이터가 통과되는 렌더링 이전에 발생하는 과정이며 그렇기 때문에 같은 카메라 위치+거리에서 렌더링을 반복적으로 해야하는 경우에는 mipmap을 한 번만 계산해 놓은 뒤 MLP를 통과할 때마다 가져다 쓰면 됩니다. 논문에서는 "prefiltered radiance field for a continuous space of scales"라고 방법론을 소개합니다. 여기서는 3차원인 conical frustum에 대한 positional encoding을 해주어야하기 때문에 3D Gaussian을 가지고 positional 인코딩을 진행하게 되고 이를 intergrated positional encoding(IPE)라고 부릅니다.
위 그림(a)을 보면 NeRF를 가지고 카메라를 뒤로 당긴 뒤 줌을 해서 찍은 사진을 입력으로 넣었을 때 일종의 지글지글한 이미지가 만들어집니다. muliscale로 NeRF를 학습시키게 되면 이 현상이 어느정도 개선되지만 가까이서 찍은 사진의 질이 낮아지게 됩니다. 반면 Mip-NeRF에서는 두 환경에서 모두 높은 정확도를 보이는 것을 확인할 수 있습니다.
2. Related Work
주로 NeRF에 대한 소개를 하고 있는데 아래 제가 작성한 포스트나 다른 블로그의 포스트를 확인하시면 도움이 될 것 같습니다.
3. Method
Mip-NeRF는 conical frustum 모양의 ray를 쏘면서 점 단위로 sampling을 하는 NeRF와는 다르게 거리에 따라 픽셀의 크기를 조정할 수 있게 합니다. 아래 그림처럼 카메라가 멀리 있을 때(노란색)는 conical fructum의 직경이 커지고, 카메라가 가까이 있을 때(파란색)은 conical frustum의 직경이 작아집니다 이를 가지고 pixel 하나를 렌러링 하는 것입니다. 이를 통해 Mip-NeRF는 거리 aware하게 장면을 학습할 수 있게 됩니다.
잘 아시겠지만 NeRF는 coarse network, fine network가 따로 있어서 coarse network에서는 균일한 거리로 sampling을 먼저하고, 이를 가지고 물체가 있을 확률이 높은 거리에서 더 많은 sampling을 해서 fine network에 통과시키는 방식을 사용합니다. 이는 물체와 카메라가 항상 어느정도 일정한 거리를 유지하고 있다는 조건과 제약 하에서 가능한 세팅입니다. 반면 Mip-NeRF는 자체적으로 물체와의 거리를 학습하고 있기 때문에 coarse network와 fine network를 따로 두지 않아도 문제가 없습니다. 그래서 단일 network를 가지고 sampling을 두 번하게 됩니다. 이를 통해서 학습과 평가 시에 모두 빠른 속도를 낼 수 있게 되고 모델 크기도 절반으로 감소시킬 수 있었다고 합니다.
3.1. Cone Tracing and Positional Encoding
위 식을 통해 \(t_{0}\)과 \(t_{1}\) 사이의 거리 상에 있는 F(x, -)=1임을 가정합니다. \(\dot{r}\)은 거리에 따라 parameterized 된 conical frustum의 반지름입니다.
그리고 위와 같은 방식으로 positional encoding을 진행해주어야하는데 분자 부분이 closed form solution이 아니기 때문에 계산하는데 문제가 있다고 합니다. 그래서 conical frustum을 multivariate gaussian을 통해 효율적으로 근사하였고, 이를 integrated positional encoding(IPE)라고 부릅니다.
Mean과 coefficient는 위와 같이 계산하면 됩니다. \(t_{\mu}\)는 \((t_{0}+t_{1})/2\)이고 \(t_{\delta}\)는 \((t_{1}-t_{0})/2\)입니다. 이렇게 하는 것이 수치적으로 안정적이라고 합니다. 더 구체적인 수식은 해당 논문 서플에 있으니 참고하셔도 좋을 것 같습니다.
최종적으론 위와 같은 식으로 쓸 수 있습니다.
위에서 정의한 Gaussian에 대해 positional encodnig을 해주기 위한 과정입니다. 기존의 PE는 위와 같이 Fourier feature처럼 쓸 수 있스빈다. 이렇게 reparameterization을 해주면 IPE을 하기 위한 closed form 형태가 완성됩니다. Linear transform의 covariance가 변수의 covariance의 linear transform과 같다는 사실을 착안하면 conical frustum의 mean과 variance를 구할 수 있습니다.
그리고 IPE는 아래와 같은 식으로 만들어주시면 됩니다.
\(diag(\Sigma_{\gamma})\)를 효율적으로 계산하기 위해 아래처럼 계산을 합니다.
아래 이미지를 보면 Mip-NeRF가 고주파 영역에서 크기가 작아지는 것을 toy example로 보여주고 있습니다.이를 통해 aliasing이 생기는 것을 막아준다고 합니다.
3.2. Architecture
구조 자체는 MLP를 사용하고 hierarchical sampling을 한다는 점에서 기존 NeRF와 크게 다르지 않습니다. 다만 단일 network를 사용하며 IPE을 사용한다는 차이가 있습니다. 학습을 위해서 coarse, fine 부분에서 나온 loss를 동시에 사용하지만 이 loss가 하나의 network로 가기에 가중치를 0.1로 설정하여 coarse loss를 조정해줍니다.
그리고 coarse sampling과 fine sampling 모두 128개를 sampling합니다. 뒤에 NeRF와 비교하는 부분에서는 공정성을 위해 sampling 갯수를 맞춰주었다고 합니다.
W는 위와 같이 fitering을 해줍니다.
4. Results
정량적으로나 정성적으로나 NeRF와 비교했을 때 더 좋은 성능을 보여줍니다.
SS는 supersample이라는 뜻입니다.