MipNeRF

A Multiscale Representation for Anti-Aliasing Neural Radiance Fields

Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields

Jonathan T. Barron, Ben Mildenhall, Matthew Tancik, Peter Hedman, Ricardo Martin-Brualla, Pratul P. Srinivasan

paper :
https://arxiv.org/abs/2103.13415
project website :
https://jonbarron.info/mipnerf/
pytorch code :
https://github.com/bebeal/mipnerf-pytorch
https://github.com/google/mipnerf

핵심 요약 :

  1. scale 잘 반영하도록 sample(region)을 pre-filtering!!
  2. ray-tracing하여 point-encoding 대신
    cone-tracing하여 region-encoding 이므로
    frustum의 모양과 크기 정보를 encode할 수 있어서 scale 반영 가능
  3. IPE 단계에서
    high variance (구간 길이가 일정하다면 distant view)일 때
    high freq.를 attenuate (pre-filtering) 하여
    임의의 continuous-space scale을 가지는 scene에 대해 anti-aliased representation 학습 가능
    \(\rightarrow\) multi-resolution dataset에 대해 성능 대폭 향상
    \(\rightarrow\) scale-aware하므로 single MLP 하나만으로 충분하여 빠르고 가벼움
  4. camera center로부터 각 pixel로 3D cone을 쏜 다음,
    frustum을 multi-variate Gaussian으로 근사한 뒤,
    Gaussian 내 좌표를 positional encoding한 것 (PE-basis-lifted Gaussian)에 대해
    expected value \(E \left[ \gamma (x) \right]\) 계산
    주의 : frustum이 Gaussian 분포를 따르는 게 아니라, frustum 내부의 mean, variance 값을 먼저 구한 뒤 해당 mean, variance 값을 갖는 Gaussian으로 frustum을 대신(근사)할 수 있다고 생각!

Introduction

ray 대신 cone을 쏘고, point-encoding 대신 frustum region-encoding
사진 출처 : https://xoft.tistory.com/16

Anti-aliasing in Rendering

anti-aliasing을 위한 고전적인 방법으로는 두 가지가 있다.

  1. supersampling :
    • rendering할 때 multiple rays per pixel을 쏴서 Nyquist frequency에 가깝게 sampling rate를 높임 (super-sampling)
    • expensive as runtime increases linearly with the super-sampling rate, so used only in offline rendering
  2. pre-filtering :
    • target sampling rate에 맞춰서 Nyquist frequency를 줄이기 위해 scene에 lowpass-filter를 씌운 버전 사용
    • scene을 미리 downsampling multi-scales (sparse voxel octree 또는 minmap)로 나타낸 뒤, ray 대신 cone을 추적하여 cone과 scene이 만나는 곳의 cone’s footprint에 대응되는 적절한 scale을 골라서 사용 (target sampling rate에 맞는 적절한 scale)
    • scene에 filter 씌운 버전을 한 번만 미리 계산하면 되므로, better for real-time rendering

그런데 아래의 이유로 고전적인 multi-scale representation은 적용 불가능

  • input scene의 geometry를 미리 알 수 없으므로 pre-filtering 할 수가 없어서
    대신 pre-filtering 방식 자체를 training할 때 학습해야 한다
  • input scene의 scale이 continuous하므로 a fixed number of scales (discrete)과 상황이 다르다

\(\rightarrow\) 결론 : 따라서 Mip-NeRF는 training하는 동안, 임의의 scale에 대해 query 받을 수 있는, scene의 pre-filtered representation을 학습한다.

Scene Representations for View Synthesis

Method

Cone Tracing and Positional Encoding

NeRF에서는 L이 너무 크면 overfitting, Mip-NeRF에서는 IPE 단계 자체에서 high freq.를 attenuate하므로 L 커도 상관 없음

Conical Frustum Integral Derivation

Architecture

single MLP 쓰니까 coarse loss와 fine loss 간의 balance 맞추기 위해 hyperparam. gamma = 0.1로 설정
MaxBlur on sample weight / plot reference : https://charlieppark.kr/

Result

Question

Appendix

TBD

Code Review

IPE (integrated positional encoding)

jax ver.

MaxBlur filter

jax ver.