[논문리뷰] NeRF: Representing Scene as Neural Radiance Fields for View Synthesis

염지현·2024년 5월 11일

논문 리뷰

목록 보기
1/4

NeRF(Neural Radiance Fields)

  • NeRF는 객체의 3D 모델을 생성하는 기술이 아니라 객체를 바라보는 모든 장면을 생성하는 Novel View Synthesis 기술
  • 특정 객체나 장면을 여러 뷰에서 촬영한 결과로 실제 촬영하지 않은 각도에서 view를 만들어냄으로써 3D 렌더링된 것처럼 볼 수 있는 기술
  • 새로운 뷰로 관측될 때마다 MLP 네트워크를 인퍼런스하여 결과 생성(미리 저장 x)
  • 장점
    1. 연속적인 공간에 대한 표현을 사용하기 때문에 view 이동이 자연스러움
    1. 3D 모델 정보를 가지고 광선과 물체의 관계를 계산하여 렌더링 하는 기존 방식에 비해 저장 공간에 대한 부담이 적음(그러나 view가 이동할 때마다 MLP inference는 지속됨)
    2. 컬러값 뿐만 아니라 volume density까지 추정하기 때문에 더욱 리얼한 결과 생성
  • 현재: NeRF 결과를 3D mesh 형태로 변환하거나 editing 하는 등 여러 응용 가능하며 NeRF 결과를 기반으로 장점을 유지하면서 3D mesh 모델을 생성하는 시도가 이루어짐
    x, y, z, Φ, θ

NeRF: Representing Scene as Neural Radiance Fields for View Synthesis

요약

  • 적은 입력 데이터(위치 정보, 방향 정보)를 통해 새로운 뷰를 합성하는 논문
    - x, y, z, θ, φ 를 MLP에 입력하면 RGB와 density 값을 추출
    - x,y,z는 위치, θ, φ는 방향 정보를 의미(viewing direction 검색 ㄱㄱ)
  • 객체를 바라보는 모든 장면을 새로 합성하기 때문에 마치 3D 렌더링한 것과 같은 결과물을 도출
  • 새로운 시점에 대한 이미지를 생성할 때 MLP를 통해 생성
  • 계층적 샘플링(hierarchical sampling) 전략 사용을 통해 MLP 용량 할당
  • 각 입력 5D 좌표를 positional encoding을 통해서 최적화

NeRF

1. 방법론

  • 입력(5D): 3D location x = (x, y, z) and 2D viewing direction (θ, φ)
  • 출력: color c = (r, g, b) and volume density σ
  • 방법론
    a. camera rays를 따라 5D 좌표 샘플링
    b. 5D 좌표를 MLP에 입력하여 color와 density 정보 추출
    c. volume rendering 기술을 사용하여 값 생성
    d. volume rendering 기술은 미분이 가능하기 때문에 합성된 이미지와 GT간의 잔차를 최소화하면서 장면 최적화
  • FΘ : (x, d) → (c, σ)를 목표로 가중치를 최적화 해야한다.
    - x는 위치 정보, d는 방향 정보인 입력을 의미
    • c는 RGB 정보, σ는 density 인 출력을 의미
      • c는 x와 d 모두 사용해서 값을 예측한다. 왜냐하면 색상 정보 c는 시점(방향 정보)에 따라서 빛이 반사하는 정도 등 색상 정보가 달라지기 때문에 x, d 모두를 통해 예측한다.
        • σ는 x만 사용해서 값을 예측한다. 왜냐하면 σ는 해당 좌표에 물체가 있는지 없는지 정보만 파악하면 되고 방향 정보는 불필요하기 때문이다.


(출처: https://www.youtube.com/watch?v=dyGCqLLBz50&t=185s)

  • 위 수식은 복잡해보이지만 목적이 한 픽셀에 해당하는 값인 C(r) 구하기인 volume rendering 과정이다.
  • 한 픽셀값을 구하기 위해서는 camera ray를 쐈을 때 해당 ray에 위치하는 sample point인 t에 대한 정보를 통해 값을 구한다. 쉽게 생각해서 ray 위에 있는 sample point t이 있을 것이고, 해당 t의 색상값과 t 위치에 가려진 게 없고(1)/많고(0)에 따라서 C(r)을 구하면 된다. 즉,
  • (앞에 가려진 부분이 적고(투과도) x 물체가 있고(density) x 색상값(r))이면 해당 색상 정보가 강하게 들어갈 것이고
  • (앞에 가려진 부분이 많고(투과도) x 물체가 없고(density) x 색상값(r))이면 해당 t에 대한 색상 정보가 약하게 들어갈 것이다
  • T(t): camera로부터 쏜 ray가 현재 물체가 있는 지점까지 도달할 확률. 즉, 어느 시점까지 누적된 density 값이 크다는 것은 가려진다!는 것이기 때문에 T(t)가 작아짐. density가 클수록 weight가 작아짐
  • σ(r(t)): t 지점의 색상 정보를 통해 얻은 density(말이 길어서 그렇지 이미 위에서 한 번 언급한 내용을 식으로 썼을 뿐)
  • c(r(t)),d): t 지점의 색상 정보와 viewing direction을 통해 얻은 rgb 값(위에서 언급한 내용 맞음)
  • 위 세 값을 곱하고 t_near~t_far까지의 적분을 통해 픽셀 값을 구하는 것
  • 하단 식은 코드로 일정하게 ray를 쪼개서 t를 sampling 하면 continueous하지 못하기 때문에 random sampling을 통해 t를 sampling 함.

2. Optimizing

  • 위 방법론처럼 진행하면 고차원 정보를 잃어버리거나 view에 따른 시점 변화(조명 변화 등)가 잘 포착되지 않음
  • 이를 해결하기 위해 positional encoding과 hierarchical volume sampling 방법 제안

2.1. Positional encoding

  • 기존 5D 정보만 이용하면 low frequency에만 집중하게 된다.
    - 쉽게 생각해서 C(r)을 정할 때 t_near부터 t_far의 x, y, z, θ, φ 값을 통해 구하게 되는데 픽셀(시점)이 바라보는 값이 크게 다르지 않을 것이다.(==고주파 정보를 못 찾을 가능성이 크다.)
  • 위치 정보의 차원은 10차원으로 늘려서 3(x,y,z) 10(차원) 2(sin,cos) = 60개의 데이터로 늘림
  • viewing direction은 4차원으로 늘려서 3(직각 좌표계) 4(차원) 2(sin, cos) = 24개의 데이터로 늘림
  • 이렇게 positional encoding을 통해 차원의 수를 늘림으로써 더 높은 차원 공간의 매핑하여 고차원 정보 추출에 더 쉽게 접근할 수 있도록 유도

2.2. Hierarchical volume sampling

  • 이 전략은 쉽게 말해 density가 높은 값을 위주로 point를 다시 sampling 하는 전략이다.
  • 왜냐하면 density가 높을수록 point가 의미있을 확률이 높기 때문이다.
  • sampling 방법을 다시 돌아보면, ray가 있고 아래와 같은 deterministic sampling을 진행할 경우 매 iteration마다 같은 point들만 sampling 되기 때문에 point와 point 사이는 학습이 이루어지지 않는다.
    Deterministic sampling: ----ㅇ----ㅇ----ㅇ----ㅇ----ㅇ-->
  • 그래서 NeRF에서는 각 bin 마다 sampling을 하지만 bin 내부에서는 random하게 sampling하여 학습 효율을 높인다.
    Stratified sampling: ----|-ㅇ---|ㅇ----|--ㅇ--|---ㅇ-|-->
  • Hierarchical volume sampling
  1. coarse 단계: 먼저 Stratified sampling을 통해 64개의 sampling point를 찾는다.
  2. fine 단계: 다음으로 object가 가까울수록 density가 높아지는 weight를 사용하여 추가적으로 sampling을 128개 더 한다.

3. Loss


최종적으로 왼쪽은 coarse 단계에서 얻은 RGB 값과 GT 간의 차이를, 오른쪽은 fine 단계에서 얻은 RGB 값과 GT 간의 차이를 구하고 두 값을 더하여 Loss를 계산한다.

[참고]
https://mvje.tistory.com/158
https://www.youtube.com/watch?v=dyGCqLLBz50&t=185s
https://nuggy875.tistory.com/168

0개의 댓글