상세 컨텐츠

본문 제목

[이런 논문] 한 장으로 이해하는 NeRF 구조

헬스케어 딥러닝

by 집필진 2024. 10. 9. 19:53

본문

NeRF 논문은 2020년에 발표되었지만, 2024년 현재 다양한 방식으로 진화를 거듭하며 아직까지도 3D Reconstruction에서 최정상급의 성능을 보여주고 있다. 이 정도로 오랫동안 정상을 유지한다면, 어쩌면 언어모델에서 Transformer가 그렇듯 (GPT로 발전했다) 실용화 단계로도 곧바로 발전하지 않을까 기대가 된다. 최근에 나오는 NeRF를 이해하기 위해 Basic NeRF를 들여다봤다. 근데 너무 어려워서, 핵심만 정리해볼까 한다. 어차피 다음 NeRF 모델들을 읽으려면 한참 더 읽어야 한다.

[2003.08934] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis (arxiv.org)

 

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

We present a method that achieves state-of-the-art results for synthesizing novel views of complex scenes by optimizing an underlying continuous volumetric scene function using a sparse set of input views. Our algorithm represents a scene using a fully-con

arxiv.org

 

0. NeRF로 할 수 있는 일

NeRF를 처음 접하는 사람을 위해 설명하자면, 아래와 같은 일을 수행하는 것이 NeRF다.

 

Fig. 1 장난감 포크레인

장난감 포크레인이 있다고 하자. 이 장난감을 사진찍은 결과가 Fig. 1이다. 이 장난감을 3D로 보고 싶다. 

Fig. 2 사진을 찍은 위치

장난감 사진을 위치를 바꿔가면서 여러 번 찍게 되면 다양한 각도에서 장난감의 모습을 알 수 있다. Fig. 2에서처럼, 가운데 파란 점이 장난감의 위치, 주변 빨간색 점이 사진을 찍은 위치다. 총 100군데에서 사진을 찍었다. 이제 준비는 끝났다.

Fig. 3 재구성해서 보려는 궤도

 장난감을 3D상에서 보고 싶은 위치를 정해준다. 고개숙인 8자를 그리며 카메라를 움직인 형태로 장난감을 보고 싶다. 이제 NeRF 알고리즘을 돌리면...

Fig. 4 재구성 결과물, 고개숙인 8자를 그리며 카메라가 움직인다

짜잔! 장난감 포크레인을 원하는 궤도로 다시 그려볼 수 있다.

 

직접 구현해보려면 튜토리얼(링크) 참고

1. Radiance Field란 무엇인가

Radiance는 빛의 방사를 뜻한다. 좀 더 풀어서 쓰자면, 한 지점에서 특정 방향으로 뻗어나가는 빛의 양이다. 3D 재구성은 물체를 보는 각도를 다르게 한다는 것을 의미하는데, 이 때 보는 각도에 따라 물체의 색상이 미묘하게 바뀐다. Neural Radiance Field란, 한 지점에서 물체를 봤을 때 어떤 색상과 어떤 밝기를 띠고 있을 것인지 학습시키는 방법이라고 볼 수 있다.

 

 

설명이 잘 와닿지 않는다면, point cloud와 혼동하기 쉽기 때문이다. point cloud는 색상은 필요 없이, 물체의 형상을 따라 점을 찍은 것을 의미한다. 아이언맨에서 3D 재구성한 기술이 point cloud이다. 색상까지 표현하는 것보다 간단하고, 밝기를 활용하면 적절히 형상을 직관적으로 표현해낼 수 있다. 하지만 실제 세상과는 거리가 있다. 어쨌든 이해가 가지 않더라도, 일단 그러려니 하고 넘어가도 좋다. 읽어야할 NeRF 논문은 차고 넘친다.

2. NeRF의 구조

기본적인 구조는 5D input -> 2D output이다. 5개의 입력인자를 받아 2개의 출력인자를 내놓는다. 5개의 입력인자는 (보는 방향 + 물품의 좌표)이다. 보는 방향은 2개 변수로 표현 가능하고 (경도와 위도를 생각하면 쉽다), 물품의 좌표는 3차원이니 세 개로 표현 가능하다. 합해서 5개다. 

 

2개의 출력인자는 물품의 좌표에서 발산하는 색상과 투명도이다. 색상은 그렇다 쳐도 투명도가 필요하다는 것이 살짝 이해하기 어렵다. 연기나 반투명한 유리창 같은 특수한 상황에서만 필요한 정보가 아닌가 싶기도 하다. 입체감 형성에 중요하다고는 하지만, 논문의 저자들이 색상과 투명도라는 것을 콕 집어서 설정한 이유가 궁금하다. 포크레인처럼 웬만한 지점이 불투명한 물체라면, 투명도가 모두 0으로 설정되어서 나오는지도 궁금하다.


초기 NeRF는 Fully Connected Network를 사용한다. 네트워크를 학습시키는 과정에는 세부적으로는 크게 세 가지 기술들이 사용되었다. 1) Positional Encoding, 2) Hierarchical Volume Sampling, 그리고 3) Differentiable Volume Rendering인데, 세부 의미는 아래와 같다.

 

2- 1) Positional Encoding (위치 인코딩)

오래된 스마트폰에 비해 최신 스마트폰은 화소 수가 늘어나면서 보다 세밀한 부분까지 사진으로 담아낼 수 있다. Positional Encoding은 화소 수가 적은 구형 스마트폰에서 화소 수가 많은 최신 스마트폰으로 옮겨가는 것과 비슷한 효과를 만들어낸다. 한 픽셀에 담긴 정보를 여러 방향으로 나눠주면서 한 픽셀이 네 픽셀 정도의 정보를 포함하게끔 바꿔주는 기술이다.

2-2) Hierarchical Volume Sampling (계층적 샘플링)

3D 재구성 단계에서 실행 시간을 줄이기 위한 기법이다. 먼저 큼직큼직한 덩어리들을 재구성한 뒤에, 뭔가 변화가 많은 덩어리, 즉 정보가 많이 포함된 덩어리를 우선적으로 세밀화해나가는 것이다. 덩어리를 (volume) 재구성하는 것에 (sampling) 우선순위를 준다는 (hierarchical) 의미이다.

2-3) Differentiable Volume Rendering (미분 가능한 볼륨 렌더링)

 

볼륨 렌더링을 알기 위해서는 "서피스 렌더링"의 개념부터 알아야 한다. 물체의 표면(surface)만을 형상화한다는 의미로 이전 세대에서 많이 봐왔던 3D 재구성 방식이다. 하지만 유리창, 안개 같은 반투명한 물체를 구현할 수 없다는 단점이 있다. 그것만 빼면 직관적이고 간단한 방법이다. 

 

볼륨 렌더링은 물체의 표면을 재구성하는 것이 아니라 밀도와 색상으로 재구성한다. 당연히 더 복잡하고 오래걸리는데, 보다 실감나는 3D 표현이 가능하다. 미분 가능한 볼륨 렌더링이란, Neural Network를 통해 학습이 가능한 볼륨 렌더링을 사용했다는 뜻이다.

 

3. NeRF의 발전 방향

처음 발표됐던 NeRF는 Deep Learning이 쓰이지 않았다고 봐도 무방하다. Fully Connected Layer만을 적용하여, 경사하강법을 이용한 학습을 사용했으니, 따지고 보면 최소자승법(least squares method)에 더 가깝다고 봐도 되지 않을까 싶다. 하지만 초등학생에게 집의 앞면과 옆면을 그려보라고 해도 대충은 그려낸다. 집 모양에 대한 사전 지식이 있기 때문이다.

 

이후에 NeRF가 발전한 방향은 모두 우리가 알고 있는 사전 정보를 어떻게 NeRF에 활용할 수 있는지였다. NeRF의 기본적인 구조는 변하지 않았던 것이다. 그만큼 잘 짜여진 기법이라고 봐도 될 것 같다. 정확히 논문을 이해할 수 있다면 좋겠지만, 처음부터 그걸 바라는 것은 아무래도 욕심이다. 차근차근 논문을 더 읽어가면서 익혀나가야 할 일이다.

관련글 더보기