본문 바로가기
NeRF

[논문 리뷰] Plenoxels (CVPR 2022) : 학습 속도 개선 논문

by xoft 2022. 10. 20.

논문명 : Plenoxels: Radiance Fields without Neural Networks

 

Scene Optimization(학습) 속도를 대폭 향상시킨 연구중 하나입니다.

저자 메인 사이트 공개된 영상을 보면 6초만에 어느 정도의 윤곽을 보이고, Point-NeRF 같이 2분이면 선명한 결과를 보입니다.

 

 

최초 NeRF에서는 1.6일간 PSNR 31.15 달성했던 것을 Ploenoxel에서는 11분만에 PSNR 31.83 달성합니다.

 

Main Approach 크게 2가지 입니다.

  1. 기존 NeRF논문들과 다르게 Neural Network 쓰지 않았고 Voxel Grid Trilinear Interpolation기법으로 Direct Optimization하였습니다.
  2. Regularization 통해 퀄리티를 향상시켰습니다.

글에서 Plenoxels 논문에 대해 상세하게 다뤄보겠습니다.

 

 

Algorithm

Plenoxels 전체구조는 다음과 같습니다.

 

256^3해상도의 Voxel Grid 구성합니다. voxel 3차원 좌표 index(key)으로 Spherical Harmonics coefficient Volume Density(value)으로 구성된 3D index array 설계합니다.

설명을 위해 PlenOctree 참조하자면, Ray위에 샘플링한 voxel 대해 Volume Desity σ Coefficient k , View direction (θ, Φ)으로 pixel color 계산 있었습니다. 자세한 내용은 PlenOctree 논문 이전 포스트 글 확인바랍니다.

 

Plenoxels에서는 Network 사용하지 않고, σ와 k 직접적으로 Optimize합니다.

Network 사라지면서 Weight 없는데 Optimization 가능한가?라고 의문이 될텐데, 일단 Index Array의 Value인 SH coefficient와 volume density가 학습 paprameter가 됩니다. 추가적인 기법에 대해서는 세부적으로 어떻게 설계 하였는지 소개 드리겠습니다.

 

 

Trilinear interpolation

2D plane에서 3D영역으로 Ray 그리면, ray voxel grid voxel들을 정확히 지나가지 않습니다. Ray위에 샘플링한 voxel들을 3D index array index (key) 좌표값을 갖고 있는 주변 8개의 voxel 위치(x,y,z) 대한 (σ, k)으로 부터 interpolation합니다.

논문에서는 Interpolation 기법을 적용한 근거로 nearest neighbor기법과 Interpolation기법을 비교하였습니다. 1) Optimization 위해 Continous function 사용하고 2) Learning rate variation관점에서 좀더 안정적이고, 3) 효과적으로 resolution 증가 가능하기 때문에, Interporlation 방법을 사용했다고 합니다.

 

 

Optimization

Predicted된 이미지의 pixel color GT 이미지간 MSE(Mean Squared Error)값과 total variation(TV) regularization값으로 Loss Function 설계하였습니다. λTV 상수값입니다.

Reconstruction Loss 최초 NeRF 동일하게 Rendering 결과 pixel간의 차이 값입니다.

TV regularization Loss는 다음과 같습니다.

아래식에서 Vd의 인자인 i,j,k 각각 x,y,z 나타내고, Vd의 출력값은 위에서 언급한 3D index array 저장하고 있는 density(σ), SH coefficient(k) 값입니다. Δx는 x에 관한 식이라서 왼쪽 Vd의 인자가 (i+1, j, k) 이고, y에 관한식이라면 Vd의 인자는 (i, j+1, k) 가 될 것입니다. 옆 voxel값과의 차이를 나타내는 식이라 보면 됩니다. D dimension grid 해상도를 나타내며, 이미지 크기로 normalization 됨을 의미합니다. d Vd 저장하고 있는 차원크기입니다. Density 경우 1 것이고, Sh coefficient 9개가 됩니다(SH degree 2이기 때문). Δx 특정 좌표에서 x dimension 인접한 voxel간의 (σ, k) 차이를 나타냅니다.

결과적으로 LTV는 샘플링 voxel 대해, dimension각각의 인접한 voxel간의 차이값으로 표현됩니다

 

빠른 itertation 위해서 optimization step시에, Recon term evaluation하기 위해 ray R stochastic sampling하고, TV term evaluation하기 위해 voxel V stochastic하게 sampling하였다고 합니다. JAXNeRF, Mip-NeRF 같은 learning rate 스케쥴링을 사용하였습니다. 초기 learning rate opacity harmonic coefficient 따로 분리하고, main 실험에서는 고정된 learning rate 사용하였습니다.

 

이게 학습된 Weight(Volume Desity σ  Coefficient k)는 Scene type(bounded, forward-facing, 360도)마다 고정됩니다.

 

 

Direct Optimization Issue & Solution

Voxel coefficient 직접적으로 optimizing하는 것은 아래와 같은 문제가 있었습니다.

Pooly conditioning은 2차 미분함수를 사용하는 second-order optimization algorithm으로 해결됩니다. (일반적인 gradient descendent는 1차 미분함수입니다, https://iopscience.iop.org/article/10.1088/1757-899X/495/1/012003/pdf)

하지만 이 문제는 Hessian(2차 미분 행렬)이 너무 커서 각 step에서 쉽게 계산되지 않고, 역함수를 만들기가 쉽지 않기 때문에, high-dimensional problem을 해결하는 것이 어려웠습니다.

 

이러한 ill-conditioning problm을 Plenoxels에서는 RMSProp Optimization 사용해서 second-order 함수의 full computational complexity없이 해결 하였습니다. RMSProp Optimization는 복잡한 다차원 곡면 함수를 잘 탐색하도록, 기울기를 단순 누적하지 않고 지수 가중 이동 평균 Exponentially weighted moving average 를 사용하여 최신 기울기들이 더 크게 반영되도록한 Optimization 방법입니다. (RMSProp : https://light-tree.tistory.com/141)

 

 

Regularization

 

다음으로 Regularization 효과와 Scene type별 Regularization에 대해 소개하겠습니다.

TV(total variation) regularization은 Rendering 결과를 smooth하게 만들어줍니다. 

위 이미지는 TV regularization 넣었을 경우(Full), SH TV 제외하였을 경우(No SH TV), density TV 제외하였 경우, TV 모두 제외 하였을 경우를 비교하는 결과입니다. (PSNR평가지표를 통해서는 이러한 차이를 못잡아 낸다고 합니다.)

 

모든 scene에서 사용되는 TV regularization 추가적으로 특정 scene type에서 regularizer 사용했습니다.

Real, forward-facing, 360 scene에서, SNeRG논문의 Cauchy loss 기반한 saprsity prior 사용했습니다.

Σlog(  )부분은 training ray i 위에 샘플링된 k번째 voxel opacity 나타냅니다.

Forward-facing scene에서 optimization 위한 minibatch 대해, active ray 위의 sample에서 loss term 평가하였습니다.

PlenOctrees에서 사용한 sparsity loss 유사하게, voxel empty 되도록 해줍니다.

Upsampling , Memory 절약하고 quality loss 줄여주도록 도와줍니다.

 

Real 360 scene에서는, minibatch ray accumlate foreground transmittance위에서 beta distribution regularizer 사용했습니다.

r Training ray이고, Tfg(r) ray r accumulated foreground transfittance (0~1사이값)입니다.

(Neural Volumes 따르는) beta loss term foreground fully opaque 또는 empty 있도록 함으로써, clear하게 forground background분해를 있도록 만들어 줬습니다.

두번째는 background 랜더링, 세번째는 forground 랜더링했을 이미지입니다.

 

여기까지가 메인 아이디어인 Trilinear interpolation 사용한 Optimization기법과 Regularization기법에 대한 컨셉을 설명하였고, 아래에서 High Resolution 만들기 위한 상세 기법, Unbounded scene생성 방법에 대해 소개합니다.

 

 

Coarse to Fine

  • 256^3해상도의 dense grid 만듭니다.
  • PlenOctree Voxel Pruning(Filtering)기법과 유사한 방법으로 Voxel 제거 합니다. ( Ray voxel들의 불투명도(=Ti(1-exp(σiδi))) 최대값을 유지하면서, Threshould보다 낮은 weight를 가진 voxel grid을 제거합니다.)
  • dimension 반으로 나눠서 남아있는 voxel refine합니다.
  • 512^3해상도로 upsampling됩니다. (임의의 해상도로도 변경 가능합니다.)
  • 공간들을 Trilinear interpolation합니다.

학습 과정엔 한가지 문제가 있는데, Pruning point들은 surface내부의 가장 가까운 voxel들과 interpolation , surface 주변의 color density 영향을 미칠 있습니다. 이를 위해서, pruning 대상 voxel 이웃이 unoccupied되어 있을 때만, voxel pruning 합니다.

 

 

Unbounded Scenes

최초 NeRF synthetic scenes 넘어 wide range 환경에서도 optimize 있었습니다. Minor 변형을 통해, real, unbounded scene, forward-facing, 360 scene으로 확장했습니다. Forward Facing Scene에서는 normalized device coordinates에서 sparse voxel grid structure 사용하였습니다.

 

360 Scene 위해, MSI(Multi-Sphere Image) background model을 사용하여 sparse voxel grid foreground representation augment하였습니다. MSI model은 360도 이미지가 겹겹히 쌓인 모델로써, 원점이 같고 반지름이 다른 구에 맺히는 360도 이미지들 이라고 생각하면 됩니다.(https://visual.cs.brown.edu/projects/matryodshka-webpage/)

sphere들 내부 또는 sphere들 간의 voxel color와 opacity값으로 trilinear interpolation 합니다. Simple equirectangular projection 사용해서 voxel들이 sphere으로 warp(변형)되는 것을 제외하면, 이것은 Forground Model 같습니다. (Simple equirectangular projection 지구(Sphere) 지도(image) 표현할 사용하는 projection입니다.)

equirectangular projection (출처 : wikipedia.org)


64 sphere linearly하게 단위 벡터인 1부터 1/무한대까지 radius 위치하게 됩니다. (sphere안의 inner scene에 대해 scale을 조절하였습니다.) Memory 위해, color rgb channel 저장하고, Main model과 동일하게 opacity thresholding을 사용함으로써 모든 레이어를 sparsely하게 저장하였습니다. 이러한 방법은 NeRF++ background model 유사합니다.

위에 글은 논문 내용을 최대한 풀어 옮긴 내용이고, 아래는 그 의미를 개인적으로 재해석한 의견입니다.

64개의 겹겹히 쌓여져 있는 구를 가상으로 만들고, 그 구의 표면에 있는 voxel들의 color와 density값을 interpolation을 통해 계산합니다. 이를 통해, foreground 이미지는 구 내측의 voxel들의 값으로 랜더링하고, background이미지는 구 외측의 voxel들의 값으로 랜더링 하지 않을까 싶습니다.

 

 

Implementation

Plenoxel model gradient 매우 sparse하고 빠르기 때문에 large part안에서 possible한(납득 가능한) 속도를 보였습니다. 1-2분의 Optimization 하면 10%이하의 voxel이 nonzero gradient 갖게 됩니다.

 

 

Results

Synthetic Scenes(상단)

(NeRF에서 공개한 Blender로 생성한) 8Scene 대해 800x800 해상도 100개의 이미지로 학습했습니다.

Scene마다 평균 11 소요 되었습니다.

 

Forward-facing scene (중간)

NDC(normalized device coordinates) 사용해서 unbounded forward-facing scene 확장했습니다.

Optimization 통해 (강한 weight) TV regularization 사용한 것을 제외하고 bounded synthetic scene 동일한 방법을 사용했습니다적은 수의 Training view 때문에 이러한 변화는 필수적이었습니다.

SCene 1008x756해상도로, 20~60개의 forward-facing image 구성되었습니다. 7/8 학습데이터, 나머지는 트레이닝 데이터 셋입니다. input view grid predict하는 3D CNN 사용한 방법인 LLFF(Local Light Field Fusion)방법과 비교하였습니다.

 

Real 360 Scenes(하단)

MSI(multi-sphere image) sparse voxel grid surrounding 함으로써 real unbunded 360 scene 확장했습니다. ( background sphere trilinear interpolation 가진 simple voxel grid입니다.)

Tank&Temple dataset으로 4 Scene 사용했습니다.

Unbounded scene 표현하기 위해 background model 증강시킨 NeRF++ 비교하였습니다.

 

 

저자가 올린 영상 결과물입니다.

 

 

 

Ablation Studies

Training image 수를 100에서 25 줄였을 실험 결과를 비교하였습니다.
(평가지표 의미 : PSNR/SSIM/LPIPS 글 참조)

Real scene 적은 training image 가지고 Higher TV regularization optimization sparsely-supervised regions 확장을 도울 있었기 때문에, real forward-facing scene에서 좋은 성능을 보였습니다.

Plenoxel grid resolution 따른 결과 입니다.

Rendering formular를 비교하였습니다.

NeRF를 사용하고 Plenoxel의 main method를 사용한 Max와 Relative transmittance 대신에 absolute를 사용한 Neural Volumes를 비교하였습니다.

 

 

Closing..

Neural Network를 사용하지 않고, 직접적으로 coefficient와 volume density를 학습하는 모델을 만들었습니다. Optimization 속도가 빠르니, 입력으로 필요한 이미지 갯수가 많아야 한다는 것이 아쉽게 느껴지네요. 필요 입력 이미지 수를 1~3장으로 줄이면서, 속도까지 개선된 논문이 나오기를 기대해봅니다.

댓글