Nerf ?
NeRF란 새로운 연속적인 이미지 뷰를 만들어 내는 것을 말합니다. 기본적으로 하나의 객체를 다양한 시점에서 촬영한 이미지들을 가지고 3D로 해당 객체를 살펴볼 수 있는 것을 말합니다. 아래는 NeRF에서 처음으로 확인할 수 있는 이미지 입니다. 매우 요약적으로 잘 설명하고 있는 그림인데 아래와 같이 좌측에서 찍은 다양한 각도에서의 이미지를 제일 오른쪽에 보이는 3D 이미지로 변경하는 것을 말합니다.
- Discrete한 이미지들을 통해서 Continuous한 View를 만들어내어 입체적으로 확인하는 것을 말합니다.
- 각 포인트의 점을 말하는 (x, y, z) 관련한 값과 시점을 표현하는 ( $\theta$, $\phi$ ) 를 통해 간단한 MLP의 입력을 구성하고, 출력은 Density와 RGB 값을 사용합니다.
- NeRF는 3D로 표현되는 함수를 구성하는 것을 말하며 이는 Implicit Representation이라고 말하기도 합니다.
- Implicit
- NeRF와 같이 MLP(function)을 구성해서 3D 등의 원하는 값을 출력하는 것에 구성해둔 함수가 사용되는 것
- Explicit
- 명시적인 데이터 구조를 사용해서 데이터를 표현하는 방법
- PointNet, Mesh 등등
Related Work
본격적으로 NeRF 소재들을 살펴보기 이전에 저또한 3D 논문을 살펴보는 것이 처음이기 때문에 Related Work에서 얻을 수 있는 정보들을 모아봤습니다.
Neural 3D shape representation
최근 continuous한 novel view를 만들기 위해 많은 노력들이 진행되었지만 특히나 Signed Distance Function과 Occupancy Fields란 분야를 통해 많이 발전되었다고 합니다.
- SDF
- SDF는 3D 포인트를 표면까지의 최단 거리로 매핑하는 함수입니다. 양의 값은 점이 표면 밖에 있음을 의미하고, 음의 값은 점이 내부에 있음을 의미합니다. 0 값은 점이 표면 상에 있음을 의미합니다. SDF는 명시적 인 메시나 복셀을 사용하지 않고 암시적으로 3D 모양을 표현하는 데 사용될 수 있습니다.
- 3D 딥 러닝에서는 SDF를 신경망을 사용하여 데이터로부터 학습 할 수 있습니다. 이를 통해 부분적이고 노이즈가 있는 3D 입력 데이터에서 고품질 모양 표현, 보간 및 완성이 가능합니다. 예를 들어, DeepSDF는 의자나 비행기와 같은 클래스의 모양에 대해 연속적인 SDF를 학습하는 방법입니다. 이는 잠재적인 코드와 3D 위치를 입력으로 사용하고 해당 서명 된 거리 값을 출력합니다.
- 하지만 큰 단점들도 있는데 하나는 표면을 추출하거나 렌더링하기 위해 3D 공간에서 밀도 높은 샘플링이 필요하다는 것입니다. 또한 SDF 함수를 근사하기 위해 대규모 신경망이 필요하며, 이는 메모리 집약적이고 학습 또는 추론이 느릴 수 있습니다. 또한 데이터를 구성하는데 많은 자원이 필요하다고 합니다. (3D로 된 데이터가 필요하기 때문에)
따라서 그 이후로 NeRF와 같은 2D 이미지를 기반으로 3D 이미지를 렌더링 하는 작업들이 많이 이루어졌는데 기본적으로 복잡한 NN(Deep Conv, RNN 등)을 사용해서 표현력을 높이려는 방법들이 많이 제안되었다고 합니다. 하지만 이러한 방법에도 단점이 있었는데 복잡한 표면 혹은 높은 해상도의 이미지들을 과하게 부드럽게 랜더링해서 상세한 정보들을 모두 잃어버리게 만들었습니다.
→ 결국 이러한 단점들을 해소함으로서 복잡한 정보도 표현이 가능하하게 하는 것이 NeRF의 주된 Goal 이였다고 합니다.
View synthesis and image-based rendering
3D로 이미지를 합성해서 새로운 뷰를 만들어낼 때 사용한 방법에 대해 이야기 합니다. 다양한 방법이 있지만 NeRF는 Volumetic 표현방법을 사용했다고 합니다.
- Volumetic representation
- Volumetic representation은 3D 공간을 고정된 그리드의 보크셀로 이산화하는 방법으로, 2D 이미지의 픽셀에 해당합니다. 그리드의 각 보크셀은 하나의 부피를 나타내며, 점유 여부(보크셀에 물체가 있는지 여부) 또는 특정 속성(예: 색상, 질감 등)과 같은 값을 할당할 수 있습니다. 이 접근 방식은 연속적인 3D 기하 데이터를 이산화된 구조화된 형식으로 효과적으로 변환하여 딥러닝 알고리즘에서 더 쉽게 처리할 수 있도록 합니다. 보통 Volumetic representation 방법은 기존에 진행되던 방법인 mesh-based 방법보다 섬세한 표현이 가능하고, 이미지의 퀄리티를 좋지 않게 만드는 artifacts들이 적다는 장점이 있었습니다.
- 다만 단점으로는 좋은 표현력에 반비례해 3D 위치에 존재하는 부피 하나하나를 계산해야 하기 때문에 엄청난 양의 계산량이 필요되었습니다. 이러한 문제는 지속적으로 해당 분야의 발전을 더디게 만들었고, 기본적으로 어떤 2D픽셀의 위치를 통해 3D 객체를 구성할지에대한 방법인 Sampling 방법에 많은 영향을 받았기에 제한적인 요소가 더러 있었습니다. NeRF의 저자들은 이러한 문제를 해결하기 위해서 본문에서 새로운 ray point를 샘플링 하는 방법도 제안합니다.
Volume Rendering with Radiance Fields