https://dl.acm.org/doi/pdf/10.1145/3503250
Introduction
3d 객체의 view를 생성
(주의할 점: 객체를 바라보는 ‘view’ 자체를 생성하므로, 3D로 렌더링 되는 것처럼 보이나 객체 자체를 만드는 것은 아님.)
non-convolutional fully-connected network를 사용 (MLP)
- Input: 다양한 각도에서 찍은 single continuous 5D coordinate (물체의 위치(x, y, z)과 물체가 바라보는 방향인 viewing direction(θ, Φ))
- Output: volume density(1)와, 그 spatial location에서의 view-dependent emitted radiance(2)
- Neural Radiance Field
특정 viewpoint에서의 neural radiance field를 랜더링 하기 위해서 일련의 과정을 거침
1. 카메라 ray를 따라 sampled 3d points를 생성
2. 그 points - 매칭되는 2d viewing direction을 nn의 input으로 하여 color와 density를 output으로 냄
3. output color와 density를 축적하여 2D image로 변환; 이때 classical volume rendering technique를 사용
loss) 이 과정이 미분 가능하기 때문에, observed image와 대응하는 rendered view간의 에러를 최소화하는 방향으로 gradient descent가 가능
Neural Radiance Field Scene Representation
1. Input: 5D (location (x,y,z. 위치)과 viewing direction(θ, Φ) along camera rays)
2. Input을 MLP에 넣음 (구하고자 하는 것: MLP의 파라미터. 여기서 MLP는 단순 fully connected layer를 의미.)
3. Output: input view에서의 color c(RGB)와 volume density(σ)
4. 한 ray를 따른 output sequence을 volume rendering technique를 사용하여 하나의 이미지로 합성
5. 실제 이미지와의 rendering loss를 계산하여 최종 loss를 얻어냄
※ Positional Encoding
MLP로 하여금 input(xyzθΦ)과 직접적으로 연산하는 것은 high-frequency variation에 대해서 매우 안좋은 rendering을 야기함. (~ deep neural network는 lower frequency function에 bias 되어있음과 연결)
⇒ 5차원(xyzθΦ) 의 input을 network에 넣기 전에, 이를 higher dimensional space로 변환해주어, 데이터의 high frequency variation에 robust하게 학습하도록 유도. 이를 두고 positional encoding이라고 일컫고 있음.
다시, 구하고자 하는 MLP는 아래와 같이 나타냄
$$ F_{\Theta}: (x, d) \rightarrow (c, \sigma) $$
MLP인 F_θ를, 두 개의 함수의 합성으로 reformulate
$$ F_{\Theta} = F'_{\Theta} \circ \gamma $$
F’_θ : 학습한 함수. 보통의 MLP를 의미.
γ : 학습하지 않은 함수. positional encoding.
$$ \gamma(p) = (sin(s^{0}\pi p), cos(2^{0}\pi p), ... \ ,sin(2^{L-1}\pi p), cos(2^{L-1}\pi p)) $$
positional encoding γ은 input인 x(location, xyz를 모두 일컫.)와 d(viewing direction) 각각에 모두 적용.
⇒ 정리하면, 총 5차원인 input을 그대로 사용했을 때 알 수 없는 디테일한 정보(high-frequency info)의 차이를 positional encoding을 통해 고차원으로 올려주면서 잡아낼 수 있도록 하는 것에 목적이 있음.
+) Transformer에서 사용하는 positional encoding과 유사해보이나, 트랜스포머의 positional encoding은 order에 대한 정보가 아예 없는 token에 discrete한 position을 제공하기 위해 사용 ↔ NeRF의 그것은 continuous input coordinate를 higher dimensional space로 매핑하여 higher frequency function을 더 쉽게 근사하기 위함.
Volume Rendering with Radiance Fields
4번 단계에서 어떻게 output을 rendered image로 합성하는지에 대한 내용.
특정 camera ray r(t)에 대한 expected color C(r)은 아래와 같이 구함.
$$ C(r) = \int^{t_{f}}{t{n}}T(t)\sigma(r(t))c(r(t),d)dt $$
- T: Accumulated transmittance along the ray (How much light is blocked; 카메라와 물체 사이를 가로막고 있는 정도. 물체가 없는 ray에서는 T가 낮을 것. 가로막고 있는 물체가 없을 것이기 때문에.)
- σ: 물체의 transparency. function of density.
- c: Colors of Point Cloud (RGB)
- t_f ~ t_n : ray t의 범위로 이해.
⇒ 특정 ray를 따라 positional point의 color와 density 정보를 합하여 최종 color(image)를 랜더링하는 것.
※ Hierarchical Volume Sampling
continuous integral을 근사하기 위해, voxel grid에 주로 사용되는 quadrature를 사용하게 되면
→ representation의 resolution에 제한이 걸리는 단점이 존재 (MLP는 고정된 discrete set of location에만 querify될 수 있기 때문.)
⇒ Hierarchical Volume Sampling 방식을 사용하여 continuous scene representation에 유사하게 근사되도록 처리함
- 한 ray의 범위 [t_n, t_f]를 N개의 동등한 bin으로 나눌 때는 stratified sampling approach를 적용 (discrete;)
- 그리고 나서 한 bin에 대해서 point를 sampling할때는 uniformly at random 방식을 적용 (continuous;)