3D Vision Study의 목표는 NeRF를 한번 접해보기 위함이였습니다. NeRF는 ECCV 2020(oral)로서 best paper상을 받은 주인공이며, 그만큼 파급력이 높은 기술임을 알 수 있습니다. 당시에 최고의 complex view synthesizing 기술로서 sparse input과 continuous volumetric function을 이용했습니다. 해당 포스팅에서는 이러한 특징을 가지는 NeRF의 Concept과 Details에 대하여 살펴보겠습니다. (논문에서의 영어 표현이 더 익숙해서, 번역하지 않은 표현이 많은점 양해 부탁드립니다.)
NeRF 논문 링크: https://arxiv.org/pdf/2003.08934
Introduction

해당 논문에서는 static scene(각각의 이미지)를 5D function으로 각각의 방향 정보인
NeRF는 deep fully-connected(MLP) 네트워크만을 사용하여

- camera의 ray를 3D scene으로 marching(접근)시켜 3D의 sampled set을 생성합니다.
- 위에서 생성한 set을 이용하여 MLP에 넣어 output으로서, colors와 densities를 구합니다.
- volume rendering을 통해 colors와 densities를 하나의 2D image로 accumulate합니다.
volume rendering은 미분가능하므로, 우리의 최적화 목표는 GT와 MLP의 결과로서 redering된 2D image의 loss를 최소화하게 학습해나가면 됩니다. 디테일한 부분에 대해 간단히 짚고 가자면, NeRF에서는 position encoding을 통해 MLP가 higher frequency functions의 표현을 가능하게함으로써 해결합니다. 또한, high frequency function을 표현하는데 필요한 query를 확보하기 위해 hierarchical sampling(계층 샘플링)을 활용합니다. 최종적으로 NeRF는 high resolution의 복잡한 장면을 modeling할때 discretized voxel grids방법에서 발생하는 엄청난 storage문제를 해결합니다.
Nerual Randiance Field Scene Representation

입력이 위치

저자들은 volum density
# Ray helpers def get_rays(H, W, K, c2w): i, j = torch.meshgrid(torch.linspace(0, W-1, W), torch.linspace(0, H-1, H)) # pytorch's meshgrid has indexing='ij' i = i.t() j = j.t() dirs = torch.stack([(i-K[0][2])/K[0][0], -(j-K[1][2])/K[1][1], -torch.ones_like(i)], -1) # Rotate ray directions from camera frame to the world frame rays_d = torch.sum(dirs[..., np.newaxis, :] * c2w[:3,:3], -1) # dot product, equals to: [c2w.dot(dir) for dir in dirs] # Translate camera frame's origin to the world frame. It is the origin of all rays. rays_o = c2w[:3,-1].expand(rays_d.shape) return rays_o, rays_d
이를 위해 MLP

non-Lambertian effects란 표면이 빛을 균일하게 반사하지 않는 현상을 의미합니다. non-Lambertian효과는 현실감 있는 렌더링에 필수적입니다. NeRF는 신경망을 통해 각 지점의 색상을 방향에 따라 달리 예측함으로써 non-Lambertian효과를 정확히 모델링할 수 있습니다.

위 그림에서 볼 수 있듯이 view 의존성 없이 학습된 모델은 3번째 그림과 같이 반사를 표현하는데 어려움이 있습니다.
Volume Rendering with Randiance Fields

NeRF에서 5D NeRF 표현은 3D 공간의 모든 지점에서 density와 color로 장면을 나타냅니다. 저자들은 고전적인 volume rendering를 사용하여 redering하고자 하는 장면을 통과하는 모든 Ray의 색상을 rendering합니다. 밀도

위 수식에서
quadrature estimation(구적법)을 사용하여

여기서 적분값을 추정하기 위해 sample들의 이산적인 집합을 사용하지만, stratified sampling을 사용하면 최적화 단계에서 MLP가 평가되면서 연속적인 장면 표현을 나타낼 수 있습니다. 위와같은 sample들을 사용하여 아래와같이

Optimizing a Neural Randiance Field
위에서 NeRF는 고해상도의 복잡한 장면을 rendering하여 SOTA결과를 낼 수 있도록 했던 몇가지 개선사항에 대해 간단히 언급만 했습니다. 그 중 첫번째는 MLP가 고주파 함수를 잘 표현할 수 있도록 하는 input 좌표에 대한 positional encoding이고, 고주파 표현을 효율적으로 샘플링할 수 있는 hierarchical sampling(계층적 샘플링) 절차 입니다.
1. Positional Encoding
Universal Function approximators(보편 근사이론)에도 불구하고, 저자들은
저자들은 이러한 발견을 활용하고

논문에서

이러한 positional encoding은 Transformer 구조에서도 사용되는데, 이는 순서 개념이 포함되지 않은 아키텍처에 대한 입력으로 sequence에서 이산적인 위치를 제공하기 위함으로서 사용됩니다. NeRF에서는 positional encoding을 연속적인 입력 좌표를 더 높은 차원으로 mapping하여 MLP가 더 높은 주파수의 변화에도 피팅이 되도록 하는데에 차이점이 있습니다.
2. Hierarchical volume sampling
Eqns. 2, 3에서 봤던 수식처럼 각 카메라 Ray를 따라 N개의 쿼리 지점에서 NeRF를 평가하는 방법은 비효율적입니다. 이러한 방법은, 렌더링된 이미지에 기여하지 않는 free-space, occluded space가 반복적으로 샘플링되기 때문입니다. 저자들은 volume-rendering의 초기 방법에 영감을 받아 최종 렌더링의 예상 효과에 비례한 샘플을 할당한 계층적 샘플링을 제안합니다.
NeRF에서는 이를 위해 하나의 신경망을 사용하는 대신 "coarse"와 "fine"네트워크 두 개를 동시에 학습합니다. 먼저 stratified sampling을 통해

위에서 다시쓴 가중합
이는 각 샘플을 적분의 독립적인 확률추정으로 처리하는 대신, 샘플링된 값을 적분 전체 영역의 nonuniform discretization으로 사용하여 volume이 포함될 것으로 예상되는 영역에 더 많은 샘플을 할당한다고 보면 됩니다.
3. Implementation details
NeRF는 각 장면에 대해 연속적인 volume rendering network를 최적화 합니다. 이를 위해서는 장면의 캡쳐된 GT, 카매라 pose, intrinsic parameter, 장면 경계로 구성된 데이터셋이 필요합니다(COLMAP 활용하여 수집). 각 최적화 단계에서 모든 픽셀 집합에서 camera ray의 batch를 샘플링 한 다음, Coarse 네트워크로부터 계층적 샘플링을 통해

실험에서는 4096개의 ray 집합으로 이루어진 batch를 사용했고,
NeRF논문에서 말하는 training set은 특정 장면에 대해 학습을 진행할 때 사용하는 여러 시점에서 촬영된 이미지 집합을 의미합니다. 즉, 하나의 장면을 학습하기 위해 다양한 각도에서 촬영된 이미지들이 training set으로 사용되는 것입니다. NeRF에서 새로운 시점에서의 렌더링 품질을 평가하기 위해 일부 이미지는 test set으로 분리되기도 합니다.
또한, NeRF는 새로운 장면이 주어질 때마다 그 장면에 대해 학습을 진행하고, 학습된 모델을 통해 테스트 시 다양한 시점의 이미지를 생성하는 방식입니다. 즉, 사전에 일반화된 모델을 학습해 두는 것이 아니라, 특정 장면에 특화된 신경망을 학습하는 개념입니다.
Results
1. Datasets
NeRF 모델의 성능을 평가하기 위해 아래와 같은 데이터셋을 사용합니다.
- Diffuse Synthetic 360˚ (DeepVoxels 데이터셋)
- 내용: 단순한 기하학적 형태를 가지며, 람베르트 반사(Lambertian)를 따르는 4개의 물체로 구성됩니다.
- 이미지 해상도: 각 이미지의 해상도는 512 x 512 픽셀입니다.
- 시점: 물체들은 상부 반구(upper hemisphere)에서 촬영한 여러 시점에서 렌더링됩니다.
- 학습용 이미지: 479장
- 테스트용 이미지: 1000장
- Realistic Synthetic 360˚ (자체 생성 데이터셋)
- 내용: 복잡한 기하학적 구조와 비-람베르트 반사(non-Lambertian) 특성을 가진 8개의 물체로 구성됩니다.
- 이미지 해상도: 각 이미지의 해상도는 800 x 800 픽셀입니다.
- 시점:
- 6개의 물체는 상부 반구(upper hemisphere)에서 촬영한 시점에서 렌더링됩니다.
- 2개의 물체는 전체 구(sphere)에서 촬영한 시점에서 렌더링됩니다.
- 학습용 이미지: 각 장면당 100장
- 테스트용 이미지: 각 장면당 200장
2. Comparisons

위 표에 등장하는 LLFF 데이터셋은 다양한 실제 장면을 촬영한 멀티뷰 이미지 데이터셋으로서, 전방을 바라보는 시점(Forward-facing views)에서 장면을 촬영하여, 현실적인 환경에서의 3D 구조를 복원하는데 사용됩니다. LLFF방법론은 다수의 이미지 시점(localized light field)을 결합하여 장면을 복원하는 기법중에 하나입니다.
위 표의 평가지표는 PSNR(신호 대 잡음비)와 SSIM(구조적 유사도)로 높을수록 좋은 결과를 의미하며, LPIPS(지각적 유사도)는 낮을수록 좋은 결과를 의미합니다. 또한, NV(New View Synthesis)는 LLFF에 대해서는 평가되지 않았는데, NV는 장면 경계를 벗어난 물체까지 복원하지 못하기 때문입니다.
결과를 보면, NeRF의 방법이 PSNR, SSIM 면에서 기존 방법인 SRN, NV, LLFF를 능가합니다. LLFF가 LPIPS에서 약간 더 나은 결과를 보였지만, NeRF는 더 나은 멀티뷰 일관성을 달성했고, 시작적 오류(artifact)가 적게 발생했습니다.

위 그림은 new synthetic dataset의 test-set view에서의 대해 NeRF와 LLFF, SRN, NV를 통해 렌더링 결과를 qualitatively하게 비교한 결과입니다. NeRF가 다른 방법에 비해 non-Lambertian 반사나, artifacts, ghost등이 나타나재 않고 정교하게 GT와 비슷한 것을 볼 수 있습니다.

이는 real world scene에 대한 결과입니다.
3. Disccusion
저자들은 NeRF는 SRN, NV, LLFF와 비교해 더 높은 품질의 시점 합성을 제공하며, LLFF 대비 매우 적은 메모리로 장면을 표현할 수 있다고 합니다. SRN과 NV는 해상도 및 표현력 한계가 있고, LLFF는 시차가 큰 데이터셋에서 형상을 정확하게 추정하지 못하는 문제점을 가진다고 합니다.
4. Ablation studies

Row 1은 가장 미니멀한 버전입니다. Row 2~4는 PE(Positional-Encoding), VD(View-Dependence), H(Hierarchical sampling)중 하나씩을 Ablation한 결과입니다. Row 2~4에서 알 수 있는 점은, PE, VD가 H보다 quantitative benefit을 더 가져다 준다는 점입니다. Row 5~6은 input image를 줄이면 어떨까에 대한 결과입니다. 저자들은 오직 25개의 input image(train-set)만으로 NV, SRN을 모든 메트릭에서 높고, 100개의 이미지로 LLFF과 모든 메트릭에 대해 견줄 수 있다고 합니다. Row 7~8은 maximum frequencies를 조절합니다.
Concluison
NeRF가 discretized voxel representation을 output으로하는 convolution network을 보충하여 더 좋은 결과를 낼 수 있었다고 합니다. 저자들은 계층적 샘플링 전략을 통해 효율성을 높일려고 했지만, 여전히 Neural Randiance Field를 더 효율적으로 최적화하고 렌더링하기 위한 추가 연구의 필요성이 여전히 존재한다고 지적합니다. 또한, interpretability(해석 가능성)도 중요한 미래 연구 방향으로 제안합니다. Voxel grid나 meshes와 같은 샘플링 표현 방식은 렌더링 품질이나 오류를 예측하고 분석하는데 유용합니다. 반면, 신경망 가중치에 장면을 인코딩하는 방식은 이러한 해석이 어려워 NeRF의 실패 요인(failure point)이나 렌더링 품질을 분석하기 위한 방법론이 부족하다고 합니다.
E. NDC ray space derivation
NDC(Normalized Device Coordinate)는 공간 스펙트럼에 대한 모양을 normalize시켜주는 것입니다. NDC는 NeRF에서 장면의 특정 카메라 설정과 장면 범위에 맞춰 좌표를 정규화하여 효율적으로 학습하기 위해 사용하는 좌표계입니다. 이는 특히, llff와 같이 forward-facing(전방을 바라보는)장면을 렌더링할 때 사용됩니다.

NeRF의미지는, COP(카메라)에서 World를 관찰하는 unbounded frustrum형태입니다. NeRF는 input으로 3D 위치를 사용하기 때문에, 공간 전체를 효율적으로 표현할 방법이 필요합니다. 그렇기 때문에 ubounded frustrum형태로 관찰한 real world를

구해진