본문 바로가기
NeRF

[논문 리뷰] Mip-NeRF (CVPR 2021) : Anti-Aliasing 연구

by xoft 2022. 12. 4.

Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields, CVPR 2021

 

NeRF에서 실험한 데이터셋을 유심히 살펴보면, Test 카메라 위치가 항상 사물에서 일정거리로 떨어져 있는 것을 볼 수 있습니다. 파란색은 NeRF 데이터셋에서의 카메라 위치 입니다.

빨간색 카메라 위치에서 zoom해서 Rendering한다면, 어떤 현상이 발생 할까요? 

원본 이미지를 1/8배 저해상도로 줄였을 때의 이미지(카메라 포즈를 뒤로하고 확대)입니다. Ground Truth조차도 퀄리티가 좋지 않습니다. NeRF로 구동하였을 땐, 더 많은 Aliasing이 발생합니다. Aliasing 계단 현상이라고도 합니다. 이미지가 Pixel단위로 color값을 저장하는 raster(래스터)방식을 사용하기 때문에 발생합니다.

또한 카메라를 물체에 아주 가까이에 두었을 때, 어떤 현상이 발생할까요?

NeRF로 Inference를 하였을 때, Blur가 심하게 발생합니다. multi-scale이 고려되지 않아서 발생하는 현상입니다.

MipNeRF 논문에서는 어떻게 이 현상을 줄일 수 있는가에 대해 다루었습니다.

 

논문의 Contribution은 다음과 같습니다.

  • Multiresolution을 위해 Point Sampling방식과 Positional Encoding 방식을 개선하였습니다.
  • NeRF와 비교했을 때, NeRF데이터셋에서 17% error rate를, multiresolution benchmark에서 60% error rate를 줄였습니다.
  • NeRF보다 7%빠르고, 모델의 크기를 50% 줄였습니다.

 

 

Anti-Aliasing 기존 방법론들

첫번째 방법으로 Supersampling은 샘플링하는 양을 늘여서, Aliasing을 줄이는 방법론입니다. 샘플링을 많이 하는 만큼 속도가 떨어집니다. 주로 offline rendering시에 사용됩니다. 

두번째 방법인 Prefiltering은 방식은 동일한 이미지를 다양한 해상도인 MipMap으로 만들어 놓는 방법입니다.

MipNeRF라는 명칭은 MipMap을 두고 지은 것으로 보이며, 저자 영상에 MipMap은 image aliasing을 줄이고, MipNeRF는 NeRF aliasing을 줄인다라고 표현되어 있습니다.

 

MipMap을 NeRF로 바로 적용 시킬 수가 없는데, 첫째로 NeRF에서는 scene geometry를 미리 알 수 없기 때문에 tringing시에 prefiltering 방식을 학습해야 한다는 점입니다. 둘째로 scale이 discrete하지 않고 continuous하다는 점입니다.

 

 

Cone Tracing and Positional Encoding

MipNeRF에서는 Mipmap개념을 응용하여, ray가 아닌 cone방식으로 multivariate Gaussian을 사용하게 됩니다.

NeRF에서는 point기반으로 sampling하는 point-sampled feature를 사용합니다. 이 방법은 ray로 부터 관측되는 volume의 shape와 size가 무시되기 때문에, 다른 scale에서 같은 position을 rendering하는 다른 카메라들이 같은 ambiguous point-sample feature를 생성할 수 있습니다.

다르게 표현하자면, ray에 대한 깊이 t에 대해, train과정에서  t사이의 간격이 평균적으로 10cm로 학습된 Scene이 있는데, inference할 때, t사이의 간격이 평균적으로 1cm로 샘플링 될 경우, 10개의 점은 같은 feature를 갖게 될 것 입니다. Scale이 고려되지 못합니다. 때문에 MipNeRF에서는 conical frustrum(cone을 수평으로 자른 도형)의 영역을 feature로 사용합니다. 영역을 Feature로 만드는 것은 어렵기 때문에, 이러한 Feature를 Multivariate Gaussian 을 사용해서 근사합니다. (<- 개인 의견이 많이 들어간 해석입니다.)

 

 

NeRF는 카메라 관측시점인 o, 샘플링 되는 깊이인 t, direction인 d 로 표현될 수 있습니다.

MipNeRF에서는 cone을 표현하기 위해 반지름r이 추가되는데, 해당 깊이에서의 Image plane에 대응되는 pixel 크기에 2/root(12)하여 계산됩니다.

 

 

NeRF에서는 샘플링된 point 좌표값(위 그림에서 점)을 Positional Encoding을 통해 Transform하여 MLP의 Input값으로 사용했었습니다. 

MipNeRF에서는 샘플링된 point를 기준으로, conical frstums으로 나누고, 분할된 conical frstums 단위로, Multivariate Gaussian기반으로 기대되는 feature값을 추정하는 Integrated Positional Encoding을 사용하였습니다. 위 그림에서 conical frustrum 영역(=적분값=Integrated)을 feature로 사용하게 됩니다.

MipNeRF와 비교를 위해 논문에서 소개한 (Fourier feature로써) NeRF의 Positional Encoding 표현법은 아래와 같습니다.

같은 표현법으로 MipNeRF의  Integrated Positional Encoding 수식은 아래와 같습니다. 

암호처럼 보입니다.. 하나씩 풀어보겠습니다. P와 diag(Σγ)가 매칭되는 쌍이고, γ(x) 와 γ(μ,Σ) 매칭되는 쌍입니다. 여기선 차이점만 확인하겠습니다. sin함수를 가우시안 분포의 expectation로 표현할 경우, 아래와 같은 수식이 됩니다.(출처 link )

다음으로 오른쪽 sin, cos의 입력값을 보겠습니다. μγ는 가우시안분포의 평균값입니다. 1차적으로 샘플링한 좌표t0 t1으로 계산합니다.

다음으로 diag(Σγ) 을 보면, diag(Σ)가 여러개 붙어있는 형태입니다. diag(Σ)는 깊이 t에 대한 분산과 range r에 대한 분산으로 식이 구성되어 있습니다. 논문에서는 샘플링한 좌표에 대한 conical frustum의 가우시안 분포값을 world 좌표계로 바꾼 식이라고 합니다. 해당식이 어떻게 도출했는지는 모르겠습니다. d는 view direction에 해당되며, d o d 에서 두번째 d는 행과열이 바뀐 전치행렬로 보입니다. 정확히 모르겠습니다.

파악한 부분만 좀 더 설명하기 위해서, 아래에 t분산, r분산에 대해 표시해 보았습니다.

위 Integrated Positional Encoding 수식을 종합적으로 해석해보자면, 카메라 관측시점인 o, 깊이인 t, direction인 d 를 사용해서, tn ~ tn+1 에 대한 간격이 수직 방향에 대한 scale로 보고, 카메라로부터의 거리에 따라 원뿔의 반지름이 커짐에 따른 수평 방향에 대한 scale로 보고, scale마다 Multivariate Gaussian을 사용해서 다른 feature를 만든다고 생각됬습니다. 이렇게 설계 함으로써, tn ~ tn+1 사이에 sampling되는 점이 다른 feature를 갖도록 만들게 됩니다. (위 4줄은 논문에 없는 내용으로써, 개인적 의견이 많이 들어간 해석입니다.)

 

이렇게 설계하였을 때, NeRF의 Positional Encoding과 MipNeRF의 Integrated Positional Encoding을 비교하면서 적용한 효과에 대해서 다음과 같이 설명하고 있습니다.

정확한 해석이 아닌 것 같아 원문을 첨부하였습니다.

원문 : Toy 1D visualizations of the positional encoding (PE) used by NeRF (left) and our integrated positional encoding
(IPE) (right). Because NeRF samples points along each ray and encodes all frequencies equally, the highfrequency
PE features are aliased, which results in rendering artifacts. By integrating PE features over each interval, the high frequency dimensions of IPE features shrink towards zero when the period of the frequency is small compared to the size of the interval being integrated, resulting in anti-aliased features that implicitly encode the size (and in higher dimensions, the shape) of the interval.

-> 단순 해석 : NeRF는 모든 frequency를 동일하게 Encdoing하기 때문에, High Frequency feature들이 alias됩니다. MipNeRF에서는 각 interval에 대해 적분함으로써, 적분되는 interval의 크기에 비해 frequency의 구간이 작아질 때, high frequnecy에 대한 diemsion이 0이 됩니다. 이것은 interval의 size를 implicitly하게 encoding하면서, anti-alias된 feature를 만들어냅니다. 

-> 의미 해석 : NeRF는 모든 scale에 대해 동일하게 High Frequency feature를 뽑아 내는 반면에, MipNeRF에서는 Sampling되는 간격이 넓을 경우에는, High Frequency를 뽑아내지 않고, Low Frequency만을 뽑아내어서, 부드럽게 만듭니다.

 

논문에 언급이 안됬지만 소스 코드상으로 보았을 때, 좌표에 대해서는 Integrated Positional Encoding을 사용했지만, View Direction에 대해서는 Positional Encoding을 사용 되었습니다.

 

 

Architecture

NeRF에서는 Coarse Network, Fine Network가 각각 분리되어 있었습니다.

MipNeRF에서는 NeRF와 똑같은 개념으로 sampling을 하고 Network를 통과하지만, 2개의 Network가 같은 Weight를 공유합니다. 때문에 한개의 Network를 사용하게 됩니다.

C는 color를 출력하는 함수를 의미하고, Θ부분이 weight에 해당하고, f,c라는 기호가 구분안붙어 있는 것을 확인 할 수 있습니다. (실험적으로 λ는 0.1) NeRF에서는 Coarse Sampling 64개, Fine Sampling 128개이었지만, MipNeRF에서는 Coarse Sampling 128개, Fine Sampling 128개로 두었습니다.

Coarse Network의 결과 Weight로 Fine Point를 Sampling할 때는 아래식으로 변형한 weight로 Inverse transform sampling 하였습니다.

Weight는 특정 Point가 Surface일 확률을 나타내는 값인데, Ray위의 Point들에 대한 PDF(확률 밀도 함수)에서 Surface확률이 높은 Point들을 좀더 더 많이 샘플링하기 위해 사용하게 됩니다. MipNeRF에서는 이 Weight에서 이전point의 weight와 이후 weight의 max값을 취함으로써, 좀더 wide하고 smooth하게 fine 샘플링하게 합니다.

 

 

Results : Multi-scale NeRF Blender dataset

NeRF의 Blender dataset은 camera pose가 일정 거리를 유지하고 focal length, resolution이 모두 같은 Scene을 가진 데이터셋입니다. aliasing과 scale-space reasoning이 잘되는지를 보기 위해, 해당 데이터셋을 수정하였습니다.

2,4,8배 downsampling을하고, camera intrinsic parameter(focal lenth)를 수정하고 카메라 거리를 2,4,8배 증가하였습니다. 

Area Loss는 학습할 때, 적은 해상도의 loss를 고해상도의 loss보다 크게 만들어주기 위해, 줄어든 scale만큼 loss를 늘여주는 기법입니다. 1/4 이미지라면 loss를 16배 늘여줬습니다. 

Centered Pixel은 ray가 각 pixel의 중간을 지나가도록, pixel크기의 절반 만큼을 offset값으로 하여, 각 ray의 direction에 더해주는 방법입니다. 기존 NeRF에서는 pixel의 좌측 상단에 ray가 그려졌었습니다.

Center, Misc는 miscellaneous의 줄임말로 여러가지 이것저것 다양한 실험을 했다는 내용입니다. MLP의 input에 대한 concatnation, MLP의 activation function, optimization 세부 방법에 관한 셋팅을 변화했다는 것이고, 실험적으로 약간의 차이만 있을 뿐 큰 차이는 없었습니다.

MipNeRF는 모든 경우에 대해서 NeRF보다 좋은 성능(평균 약 60%)을 보이는 것을 볼 수 있습니다. 시간도 약간 향상(약 7%)되었고, model크기도 작아진 것을(약 50%) 확인해 볼 수 있습니다. 특히 해상도가 줄었을 때, 성능차이가 큰 것을 볼 수 있습니다.

 

Results : Single-scale NeRF Blender dataset

NeRF원문 그대로 데이터셋을 두고 다른 실험과 비교한 Test 결과입니다.

NeRF, MipNeRF는 이전 테이블의 Full Resolusion 열과 같은 성능을 보여야 하는 것같은데, 조금 다르네요. MipNeRF는 평균 17%성능 향상이 있었습니다.

 

Results : Supersampling

Anti-aliasing 효과를 위해 sampling하는 갯수를 늘였을 때의 실험 결과입니다. 약간의 퀄리티 향상만 있고, 예상대로 속도는 느려졌습니다. 22배 느려졌다고 합니다.

 

 

Closing..

MipNeRF에서는 Anti-Aliasing에 대해 다룬 논문이었습니다. Mip-NeRF논문을 읽지 않았더라면, NeRF 데이터셋이 갖고 있는 특징을 모르고 지나갈뻔했네요. 속도가 개선되었다고 나왔지만, 최근에 나온 논문에 비해서는 느린 속도입니다. NeRF논문은 수학적으로 많이 어렵지 않았는데, NeRF 응용 논문들이 수학적으로 문제들을 해결해서 읽기에 난이도가 있네요. 인코딩을 개선하여 성능을 향상시킨 논문중에 하나라고 보면 될 것 같습니다.

 

 

 

기타 참조

The Multivariate Gaussian Distribution : link

Quadratic Forms : link

 

댓글