1. Introduction

3D view synthesis 태스크는 딥러닝이 해결하지 못했던 대표적인 태스크 중 하나입니다. 관찰 각도와 시점이 바뀜에 따라 보이지 않던 부분을 예측해야 하기 때문에 extrapolation, interpolation 등으로 해결할 수 없는 태스크입니다. 그러나 본 NeRF 방법론은 기존 3D 비전 분야에서 사용되어 왔던 수식들을 잘 옮겨와서, 딥러닝 방식으로 해결해내어 딥러닝에 새로운 활기를 불어넣은 논문이라고 할 수 있습니다.

위 논문의 기여(contribution)은 크게 아래와 같이 요약될 수 있습니다.

  1. Continuous volumetric scene function을 sparse set of input views를 이용해서 적절히 근사해낸 점
  2. 5D coordinates를 인풋으로 주어줬을 때 상응하는 view가 합성되는 점 (그리고 해당 성능이 매우 좋은 점)
  3. 이를 일종의 function으로 간주하고, 딥러닝으로 구현하여 최적화를 하는 데 성공한 점

2. Methods

Screen Shot 2022-03-29 at 23.07.18.png

NeRF의 input으로는 xyz 좌표값과 각도가 들어가게 되고, 이는 $(x, y, z, \theta, \phi)$로 표현됩니다. 즉, 카메라의 위치와 각도 정보를 이용해서 $(RGB\sigma)$의 color + density 정보를 표현하게 됩니다. 이때, 일반적인 3d view modeling에서는 transparancy가 있다고 가정하기 때문에, opacity의 역수라고 할 수 있는 density 정보를 통해 빛을 누적 및 차단하게 됩니다. 예를 들어, 앞에 density가 높은 물체가 위치한다면, 뒤의 물체는 일반적으로 보이지 않을 것입니다. 이러한 모델링 방식이 의문이 들지만, 3D 모델링에서는 매우 일반적으로 사용되기도 하며 이러한 sampling 기법들을 해소하는 방법도 존재한다고 합니다.

그리고 이러한 카메라 레이(ray) $\mathbf r(t) = \mathbf o + t\mathbf d$의 expected color $C(\mathbf r)$는 아래와 같이 쓸 수 있습니다.

$$ C(\mathbf r) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf r(t)) \mathbf c(\mathbf r(t), \mathbf d) dt \text{,}\\ \text{where } T(t) = \exp \left( - \int_{t_n}^{t} \sigma(\mathbf r(s)) ds \right) $$

여기서 $T(t)$는 시작지점 $t_n$부터 위치 $t$까지 누적된 density값 $\sigma(\mathbf r(t))$입니다. 이때, negative exponential을 취해서 누적된 값이 적으면 빛을 투과하고, 누적된 값이 많으면 빛을 투과하지 않도록 하는 weight 혹은 gate 역할을 수행합니다. 이를 통해서 사물이 겹쳐보이는 것을 방지할 수 있습니다. 그리고 ray에서 direction은 $\mathbf d$로 나타내어져 있고, 원점은 $\mathbf o$로 표현되어 있습니다. 그리고 color는 ray의 지점 $\mathbf r$과 direction $\mathbf d$의 함수로 나타내어지고, 이를 가중합한 형태로 표현됩니다.

이때, continuous한 function을 approximation하기 위해서 기본적으로는 구간별로 uniform sampling을 수행합니다.

$$ t_i \sim \mathcal U \left[ t_n + \frac{i-1}{N}(t_f - t_n), t_n + \frac{i}{N}(t_f - t_n) \right] $$

따라서 $C(\mathbf r)$ 값은 나머지 값들을 weight로서 단순히 간주했을 때 아래와 같이 근사될 수 있습니다. 여기서 $T_i = \exp(-\sum \sigma_j \delta_j)$입니다.

$$ \hat C(\mathbf r) = \sum_{i=1}^N T_i (1 - \exp(-\sigma_i \delta_i)) \mathbf c_i $$

3. Implementation

NeRF는 일종의 function approximator로 사용되며, 전체 모든 장면(scene)에 대해서 훈련하는 것이 아니라 특정 장면별로 다양한 앵글(angle)을 오버피팅 시킨다고 합니다. 이것이 가능한 이유는 모델의 weight의 용량이 5MB에 불과하기 때문입니다. 오버피팅을 시켜야 더 선명하고 정확한 이미지가 도출된다고 합니다.

한편, 위에서 uniform random sampling은 한계가 존재하기 때문에 추가적으로 inverse transform sampling을 이용해서 density가 높은 지점을 더 많이 sampling하여 정확도를 높입니다. 또한, positional encoding을 이용해서 high-frequency variation을 잡아내도록 설계합니다. 즉, 차원을 $\sin, \cos$ 함수를 이용하여 확장시켜서 더욱 더 세밀한 묘사를 가능하게 만드는데, 이는 기존의 발견과 유사하다고 합니다.

네트워크 아키텍처 자체는 중요하지는 않고, 단순히 function approximator 역할로서만 사용됩니다.