NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
ECCV 2020(oral)에 발표된 논문으로(best paper 수상), 24년 6월 27일 기준 무려 7383회 인용된 논문이다.
일단 NeRF는 Neural Radiance Field의 약어이다. 장면을 표현하는데에 neural radiance field를 사용하겠다는 것.
NeRF는 간단히 말하자면, 공간 재현을 위한 뷰 합성 방법이다.
3D 모델을 바라본 모습, 즉 이미지, 들을 예측할 수 있는 모델을 만드는 것이다.
어떤 물체를, 물체의 어디서 보더라도 알 수 있다면, 이것 자체로 물체를 *3D 렌더링 했다고 보는 것
*3D 렌더링: 3차원 모델을 2차원 이미지로 변환하는 과정
discrete하지 않고, Continuous하다. 따라서 매우 부드러운 장면을 생성할 수 있다.
NeRF의 전체적인 흐름

우선 input image 100여장을 준비한다.
input이미지는 불연속적인 시점에서 찍어둔 rendering된 혹은 학습된 이미지이다.
그리고 NeRF라는 네트워크를 학습시키면 NeRF가 object나 scene 자체를 학습해서, training data에 없었던 새로운 시점에 대해서도 렌더링을 할 수 있다.
NeRF 아키텍쳐

전체적인 네트워크는 간단하게 MLP로 구성된다.
NeRF 아키텍쳐의 입력은 3D 공간 위치 정보(x , y , z)와 물체가 바라보는 방향( 𝛳,𝜙) 이다.
그리고 출력은 해당 좌표에서의 R, G, B 값과 밀도값( 𝜎, 투명도의 역수) 이다. 따라서 특정 위치의 색깔과 투명도를 예측하는 것이다.
이제 ray라는 개념이 나온다.
NeRF과정

* Ray는 물체를 찍은 방향으로 부터 물체를 향하도록 일직선으로 쏜 선들을 의미한다. (a)에서 이미지로부터 물체로 향하게 그은 직선들
공간상에서 점 하나와 각도가 정해지면, 어떤 한 직선을 상정할 수 있다. 학습한 MLP를 통해 그 직선(ray)위에 sampling되어있는 object들의 particle들에 대해서 R,G,B와 density 값을 구할 수 있다. 이때, 객체가 없는 위치의 density는 낮게 나오고 객체가 있는 위치의 density는 높게 나온다.
*density라는 것은 투명도의 역수 개념이다. density가 높을 수록 그 점에서의 color를 더 많이 반영하게 된다.
예측된 R,G,B와 density들을 volume rendering 과정을 통해 하나의 pixel 값으로 만들고 , 이를 실제 이미지의 해당 픽셀과 RGB 값을 비교하여 Loss(RGB)를 구하는 방식으로 학습이 진행된다.
정리하자면, NeRF 모델의 전체적인 구조에서, pose 값들을 input으로 넣고, output으로 예측된 이미지(rgb, density)가 나오면 이를 실제 이미지(GT)와 비교하여 Loss를 구하는 방식으로 학습이 진행된다.
볼륨 랜더링(Volume Rendering)
* Volume Rendering : Model의 Output으로 나온 한 Ray의 Color와 density 값들을 하나의 pixel로 합치는 과정
합쳐진 pixel rgb값은 실제 이미지의 pixel rgb값과 MSE Loss를 거쳐 Back propagation을 통해 학습이된다.
그러면 어떻게 color와 density 값들을 하나의 pixel로 합칠까?
이것은 식으로 아래와 같이 나타낼 수 있다.

Ray 상에서 계산이 시작되는 𝑡𝑛부터 𝑡𝑓까지 연속적으로 적분을 하게된다.
여기서 r()는 ray 정보, 𝜎는 density 정보, T(t)는 합쳐져서 𝑡𝑛부터 t까지 빛이 투사되는 정도(투명성)을 의미한다. C(r)는 최종적으로 예측된 픽셀 값이다.
자세한 수식 이해는 곧 이어서 해볼 예정이다.
'Study Log' 카테고리의 다른 글
| Out-of-distribution Metrics(FPR95, AUROC, AUPR) (0) | 2024.07.22 |
|---|---|
| Softmax 함수 출력의 의미 그리고 NLL loss (2) | 2024.07.22 |
| Normalize flow 설명 | Flow-based deep generative models (0) | 2024.06.26 |
| PCA(Principal Component Analysis) 주성분 분석에 대하여 (0) | 2024.06.24 |
| [pytorch] 모델 파라미터 출력하기 (0) | 2023.10.20 |