AI/컴퓨터비전(CV)

[CV 논문] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

CSE 2026. 2. 11. 14:18

아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.

읽은 논문들 정리

 

읽은 논문들 정리

[목차]지속적으로 업데이트 중, 번호는 모델발전 순서가 아닌 읽은 순서에 따라 정렬.1. Computer Vision 분야 논문Classification 모델들의 발전Detection 모델들의 발전2. Natural Language Processing 분야 논문3.

april2901.tistory.com

 

 


이 논문은 시점 합성에 대한 논문이다.

 

이 논문의 목표는 정적인 장면을 찍은 여러 이미지를 받아서, 카메라가 가본 적 없는 방향에서 봤을 때 어떤 이미지일지를 출력하는 것이다.

 

기존에도 여러 시도가 있었지만 메모리 소모가 너무 크거나, 복잡한 물체의 디테일/광택을 살리는데 한계가 있었다.

 

기존에는 장면을 데이터 덩어리(voxel)로 취급했는데 이 논문은 하나의 연속적 함수로 표현할 것을 제안한다.

 

voxel은 볼륨과 픽셀의 합성어로 부피가 있는 정육면체들을 생각하면 편하다.

더 직관적인 예시로 마인크래프트가 있다.


아주 간단히 요약하자면,

어떤 공간 좌표와 이 좌표를 보는 방향이 주어질 때 최종적으로 어떻게 보일지를 출력한다.

이를 위해 Volume Density(볼륨밀도)와 RGB색상의 두 가지 개념이 필요하다.

 

Volume Density는 해당 3차원 좌표가 얼마나 불투명한지를 나타내고,

RGB색상은 그 좌표를 어떤 방향에서 봤을 때 보이는지를 나타낸다.

따라서 각각 3개, 5개의 입력을 통해 값을 구한다.

 

보고싶은 좌표와 보는 방향이 정해지면, 그 사이에 점을 여러개를 찍어 각 속성(volume density, rgb색)을 통합해 최종 결과를 낸다.


Neural Radiance Field Scene Representation

먼저 5차원 함수를 하나 생각해야한다.

입력으로 공간의 점 위치 ($x,y,z$),보는 방향($\theta, \phi$)를 받아서 색($r,g,b$)와 볼륨밀도($\sigma$)를 출력한다.

다만 일반적으로 방향은 3차원 단위벡터로 나타내기 때문에 실제 입력은 6차원이 된다.

그래도 논문에서 5차원이라고 표기한 이유는 3차원 단위벡터의 자유도는 2이기 때문이다.

 

다중 시점 일관성 (Multiview consistent)

이 개념은 각도를 바꿔서 물체를 봐도 울렁이지 않고 견고하게 보이도록 하는 것이다.

이를 위해 volume density ($\sigma$)는 해당 위치에 의해서만 정해지도록 설계했다.

반면 색은 보는 방향에 따라 바뀔 수 있으므로 위치와 보는 방향에 의해 정해지도록 설계했다.

 

이를 위해서 신경망은 방향정보를 빼고 먼저 위치 정보만을 처리한다.

입력으로 3D좌표를 주고 8개의 FC레이어를 통과해 각 좌표에 물체가 있는지 알려주는 볼륨밀도($\sigma$)와 256차원의 특징벡터를 출력한다.

 

이 256차원 특징 벡터는 카메라가 보는 방향과 합쳐 하나의 데이터로 만든다.

이후 1개의 FC레이어를 추가로 통과하고 최종적으로 방향에 따라 달라지는 RGB값을 출력하게 된다.

 

이 마지막의 방향을 포함하는 과정이 없으면 어떻게 되는지 아래 그림에서 확인할 수 있다.

No View Dependence를 보면 금속 느낌이 없어진 것을 볼 수 있다.


Volume Rendering with Radiance Fields

카메라 시점에서 볼 때 필요한 최종 색을 구하는 식을 설명한다.

카메라 픽셀에서 쏜 광선을 $\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}$라고 하면, 최종 색상 $C(\mathbf{r})$은 아래처럼 계산된다.

$t_n, t_f$는 near, far를 의미한다. 모든 공간을 볼 수 없으므로 이 두 범위 안에 있는 공간만 계산에 포함된다.

 

 

$\sigma(\mathbf{r}(t))$ (볼륨 밀도): 위에서 설명했던 볼륨밀도를 의미한다.

$\mathbf{c}(\mathbf{r}(t), \mathbf{d})$ : 그 지점에서 카메라 방향으로 내뱉는 색상.

$T(t)$ (Transmittance): 광선이 시작점(near)부터 $t$까지 오면서 아무것도 부딪히지 않고 살아남을 확률.

 

$$T(t) = \exp\left( -\int_{t_n}^{t} \sigma(\mathbf{r}(s)) ds \right)$$

이 부분을 보면 가까운 부분에서 특정 지점까지의 누적밀도를 계산한다.

앞에서 이미 밀도가 커서 적분값이 커지면 $T(t)$는 0에 가까워지고 따라서 특정 지점은 이미 가려진 것이라고 해석 할 수 있다.

 

 

식은 이해가 되지만, 실제로 컴퓨터는 연속적인 적분을 할 수 없으므로, 

이산적인 합으로 바꿔야한다.

 

따라서 광선 상의 여러 지점을 고르게 된다.

그러나 일정한 간격으로 점을 뽑게 되면 그 격자들에 대해서만 학습이 일어날 수 있기 때문에,

광선을 여러 구간으로 쪼개고 그 구간 안에서 무작위로 점을 뽑게 된다.

 

이산화된 점을 사용해 최종 색을 구하는 식은 아래와 같다.

총 $N$개의 샘플 지점이 있을 때, $c_i$는 i번째 샘플 지점에서 모델이 예측한 색깔 값이다.

$\delta_i$는 $t_{i+1}-t_i$로 인접한 두 샘플 사이의 거리를 의미한다.

 

$T_i$는 위의 $T(t)$와 같은 개념이다.

$1-exp(-\sigma_i \delta_i)$부분을 보면 해당 구간의 밀도가 높거나 구간의 길이가 길면 이 전체 값은 1에 가까워진다.

따라서 이 값이 최종 값에 많이 더해진다.

이 말은 해당 부분이 밀도가 높고 투과되지 않는 부분이라는 의미이므로 이 곳의 색이 많이 반영되고 이 뒤의 색은 가려져 비중이 낮아짐을 의미한다.


Optimizing a Neural Radiance Field

Positional encoding

위 방법들을 봤을 떄 의문이 드는 점이 있었다.

미분가능한 5차원 함수를 얘기하는데, 만약 물체가 책상 모서리처럼 각지고 갑자기 그 부분에서 성질이 확 달라진다면 어떻게 되는지 의문이었다.

따라서 도입된 방법이 이 Positional encoding이다.

이 방법은 더 고차원의 고주파 공간으로 매핑해 세밀한 디테일을 학습할 수 있도록한다.

 

$$\gamma(p) = \left( \sin(2^0\pi p), \cos(2^0\pi p), \dots, \sin(2^{L-1}\pi p), \cos(2^{L-1}\pi p) \right)$$

 

먼저 위 식을 이용해 입력으로 들어오는 6차원의 값들을 변환한다.

이때 위치는 $L=10$으로, 방향은 $L=4$를 사용해 바꾼다.

따라서 3차원이었던 위치는 60차원이 되고, 3차원이었던 방향은 24차원이 되어 총 84차원이 된다.

 

우리가 학습시킬 5차원 -> 4차원으로 바꿔주던 함수는 이제 84차원 -> 4차원으로 바뀌게 되었다.

 


Hierarchical volume sampling

또 다른 생각거리가 있다.

물체가 없는 빈 공간이 많은 텐데 이 빈공간을 처리하느라고 컴퓨팅파워가 손실되는 것은 조금 아깝다는 생각이 든다.

따라서 물체가 있는 곳에만 집중하자는 방법이 Hierarchical volume sampling이다.

 

이 방법을 간단히 설명하면 아래와 같다.

1. 먼저 대강 훑어서 물체가 어디쯤 있는지 알아본다.

2. 그 이후 대략 물체가 있다고 생각되는 지점에 샘플을 더 추가한다.

 

1번처럼 대략적인 구조를 학습하는 Coarse MLP와 2번처럼 고화질의 정보를 담는 Fine MLP가 같이 학습된다.

이 두 MLP모두 위에서 얘기한 84차원 함수이다.

 


Details

Loss Function : $L = \sum_{r \in \mathcal{R}} [ \| \hat{C}_c(r) - C(r) \|_2^2 + \| \hat{C}_f(r) - C(r) \|_2^2 ]$

위에서 얘기한 두 가지 네트워크가 같이 학습된다.

 

그 외로

adam optimizer를 사용했고,

learning rate는 지수적 감소로 적용했으며,

batch size는 iteration마다 4096개의 광선을 뽑아 학습시켰다.

 

Coarse에 사용하는 점의 개수는 64개, fine에는 추가로 128개의 점을 더 사용한다.

최종적으로 fine에는 192개의 점이 입력으로 들어간다.

 

NVIDIA V100 GPU 1대를 사용했다.

한 장면 학습에 10만~20만번의 iteration이 필요했고, 1~2days가 소요되었다.

 


NeRF 요약

복잡한 3D 장면을 인공신경망(MLP)의 가중치 안에 저장하고, 볼륨 렌더링 기법을 결합하여 추가적인 기하학적 정보 없이도 여러 장의 2D 사진만으로 초실사 3D 복원을 달성한 논문


핵심 포인트

1. 기존 3D 표현 방식의 문제

기존의 메쉬(Mesh)나 복셀(Voxel) 방식은 저장 공간을 너무 많이 차지하거나, 해상도가 낮아 세밀한 디테일과 복잡한 질감을 표현하는 데 한계가 있었으며, 미분 불가능한 특성 때문에 딥러닝 최적화가 어려웠다.

 

2. 해결 아이디어: 5D Neural Radiance Fields

장면을 공간상의 좌표($x, y, z$)와 바라보는 방향($\theta, \phi$)을 입력하면 해당 지점의 밀도($\sigma$)와 색상($RGB$)을 뱉어내는 연속적인 5차원 함수로 정의했다.

이를 통해 불연속적인 격자 구조 없이 무한한 해상도의 장면 표현이 가능해졌다.

 

3. 핵심 기술: Positional Encoding & View Dependence

신경망의 고질적인 문제인 '저주파 뭉개짐(Spectral Bias)'을 해결하기 위해 입력 좌표를 고주파 사인/코사인 함수로 매핑하는 Positional Encoding을 도입했다.

또한, 색상을 계산할 때 방향 정보를 결합하여 금속의 반짝임 같은 시점 의존적(View-dependent) 효과를 완벽히 재현했다.

 

4. 구현: Hierarchical Volume Sampling

연산 효율을 위해 빈 공간은 대충 훑고 물체 표면 근처만 정밀하게 조사하는 2단계(Coarse-Fine) 전략을 채택했다.

 물체가 있을 확률이 높은 지점에 계산 자원을 집중시킴으로써 선명도를 획기적으로 높였다.

 

5. 성능 및 의의

복잡한 수작업 없이 2D 이미지와 카메라 포즈만으로 미세한 털이나 투명한 물체까지 복원해냈으며, 합성 데이터 및 실세계 장면에서 기존 최고 수준(SOTA) 모델들을 압도하며 오늘날 'Neural Rendering'이라는 거대한 연구 분야를 개척했다.