본문 바로가기

Paper Review/NeRF

[Paper Review] Plenoxels: Radiance Fields without Neural Networks ( CVPR' 22 Oral )

최근 NeRF의 renerding 및 training 속도를 높이기 위해서 explicit representation 혹은 hybrid representation ( 더 나아가서 효율적인 자료구조를 함께 ) 사용하고 있습니다. 가장 유명한 것 중 하나가 hash table을 활용하는 InstantNGP일 것입니다. 오늘은 plenoptic volume element를 뜻하는 Plenoxel을 활용해 Rendering을 하는 Plenoxels: Radiance Fields without Neural Networks를 살펴보도록 하겠습니다.

1. Introduction

기존의 NeRF는 Training 과 Rendering에서 모두 extensive computation time을 요구했다. 다양한 연구들에서 이러한 computational cost를 줄이기 위해 노력했고, Plenoxels 또한 이러한 관점에서 접근한 연구 중 하나이다. Plenoxels는 radiance field를 scratch부터 학습시키며 neural network를 사용하지 않는다. 그럼에도 기존의 NeRF만큼의 rendering quality를 유지하면서 two order of magnitude 즉 제곱만큼 optimization time ( 본 논문에서는 training보다는 optimization이 더 어울리는 표현이다. )을 감소시킨다.

여기서 저자들이 말하고자하는 Neural Rendering에 대한 핵심은 'NeRF의 성공은 Neural Network때문이 아닌 differentiable volume renderer 덕분'이라는 것이다. 즉, explicit representation을 사용하는 것 또한 novel한 아이디어임은 분명하다. 다만, 그 뿐이라면 사실 저자들의 선행 연구인 PlenOctree와 크게 차별점이 없다. Neural Network를 사용했던 PlenOctree에서 Plenoxels로 넘어오면서 저자들이 주목한 것은 Neural Network의 필요성이었고, 저자들은 핵심은 differentiablity에 있지 implicit 3d model의 학습에 있지 않다는 것을 본 연구에서 입증한다.
이를 위해서 선행 연구였던 PlenOctree의 plenoptic representation을 가져오게 된다. 다만, Octree 자료구조를 사용하지 않고 voxel에 기반한 explicit representation을 사용하기에 Plenoxel이라고 지칭하고 있다.

2. Plenoptic Representation

https://ettrends.etri.re.kr/ettrends/142/0905001851/28-4_097-106.pdf

Plenoptic은 Adobe에서 개발한 기술로 모든 점에서 반사되는 빛의 모든 방향과 세기를 인식해 평면 정보가 아닌 공간 정보로 빛을 받아들이는 기술이다. 즉 빛의 방향과 양까지 기록하는 것이다. Plenoptic 혹은 Light Field에서 중요한 개념은 plenoptic function이다. 공간상의 한 점을 통과하는 빛의 정보를 공간상의 위치, 각도 시간 등의 변수로 표현하는 것이다. 이때 2d multi view로부터 novel view synthesis를 하는 일반적인 NeRF의 세팅상 빛의 파장과 시간등은 고정적이니 무시된다. 즉 이 plenoptic function을 알고 있다면 공간상의 특정 위치의 빛의 정보(여기서는 radiance or color)를 알 수 있다는 것이다. 이러한 plenoptic function의 역할을 하고 있다는 점에서 plenoptic representation이라고 표현한다.
이 말은 plenoptic representation이 어떻게 구성되어있는지를 확인하고 다시 복기해보도록 하자. 그제서야 이해될 말이다. Plenoctree에서는 Spherical Harmonics를 활용해서 plenoptic representation을 구성한다. 우선 Spherical Harmonics란 무엇일까?

2.1. Spherical Harmonics

Spherical Harmonics를 이해하기에 좋은 유사 개념(?)은 테일러 급수 혹은 자코비안 매트릭스다. 자코비안 매트릭스에 대해서는 StyleGAN2 Review 3.2에 충분히 적어놨다. 핵심은 다변수 함수에서의 편도함수라는 것은 각각의 입력변수에 대해서 동작하게 된다. 따라서, 모든 입력변수에 대한 gradient를 모아둔 것이 Jacobian Matrix로 가장 기본적이고 대표적인 입력변수들에 대해서 변화량을 미리 구해두면 이들의 선형결합을 통해서 새로운 basis에 대한 변화량도 구할 수 있다는 것이다. 테일러 급수도 이러한 맥락에서 적었다. 어떤 임의의 함수를 Polynomial하게 테일러 급수를 통해서 이들의 조합으로 표현할 수 있게 된다. 이때 어떤 degree로 표현하느냐에 따라서 해당 함수를 더 정확하게 나타낼 수 있게 되는데, spherical harmonics또한 degree를 유연하게 조절할 수 있다.

https://alexyu.net/plenoctrees/

Spherical Harmonics는 구면좌표계에 특화된 basis들을 설정하고 이러한 basis들의 선형결합을 통해서 임의의 spherical function을 표현할 수 있다는 개념이다. 앞서 본 것처럼 편평한 좌표 공간에 대해서는 자코비안 혹은 편미분을 활용해서 특정 basis를 설정할 수 있다. 그러나 편평한 공간이 아닌 곡면의 공간이라면 이러한 방식으로 표현하게 될 경우 심한 오차가 생긴다. 따라서 구면 공간에 적합한 basis가 필요하고 이것들이 spherical harmonics다. ( 이때 l을 orbital quantum number라고 하고 m을 azimuthal quantum number라고 한다. 즉, l=1일때 m=-1,0,1인 것이고 l=2일때 m=-2,-1,0,1,2 인 것이다. 그리고 m에대해서 band를 형성하는 것이다. 즉, band는 fixed value l에 대해서 m의 values의 range를 의미한다.

따라서 Spherical Harmonics Function은 위와 같이 표현되고 이는 view direction을 입력으로 받아서 basis 즉 sperical harmonics를 아웃풋으로 뱉는 함수이다. 즉 spherical harmonics를 구하는 함수라고 생각할 수 있겠다. 실제로 spherical harmonics의 basis는 다음과 같이 degree별로 표현할 수 있다. 각 흑색과 백색은 음수인 영역과 양수인 영역을 뜻하는 것으로 표현법을 바꿔 다음과 같이 Unit Sphere위에 표현할 수도 있다.

https://en.wikipedia.org/wiki/Spherical_harmonics

 

2.2. Plenopotic representation with spherical harmonics

 

https://alexyu.net/plenoctrees/
https://alexyu.net/plenoctrees/

다시 돌아와서 Plenoptic Representation을 Spherical Harmonics로 표현한다는 것은 무슨 말일까? PlenOctree 그리고 Plenoxels에서는 모두 3차원 공간 상의 점의 color를 spherical harmonics를 활용해서 구하게 된다. 구체적으로는 이러한 spherical harmonics 즉 basis들의 선형 결합을 통해서 ( k라는 coefficients를 가진 ) 특정 위치에서의 color값을 표현한다. 즉, 이 basis들의 k로 weighted linear combination을 함으로써 full radiance distribution over sphere를 표현하는 것이다. 

Spherical harmonics are a standard basis for functions over the sphere,
and have been used previously to represent view dependence.

https://alexyu.net/plenoctrees/

앞서 Spherecal Harmonics가 구면 좌표계의 basis를 의미함을 살펴봤다. 저자들은 이 basis들을 linear combination함으로써 3차원 공간의 특정 점 하나의 radiance distribution을 표현한다. 즉 특정 위치에는 다 방면에서 빛이 들어올 것이고 이전 NeRF에서 적었듯 이에 따라 radiance가 달라지게 될 것이다. 이를 모델링하기 위해서 sphereical space로부터의 빛이 들어옴을 가정하고 특정 위치마다 각각 radiance distribution을 저장해두는 것이다. 이를 sphere cooridnates의 정보를 표현할 수 있는 spherical harmonics를 활용해 coefficients값을 조절함으로써 radiance 혹은 color값을 view dependent appearance로 표현하는 것이다.

https://alexyu.net/plenoctrees/

3차원 공간상의 한 점을 보자 여기에는 coefficients들이 저장되어 있다고 가정해보자. 그러면 나중에 view direction을 주면서 특정 view에서의 radiance값을 얻고자 한다면, spherical harmonics를 즉 basis를 이 view direction에 맞게 설정해주고 ( 즉, view direction이 spherical harmonics function의 input으로 들어감 ) 저장된 coefficients를 활용해 계산해주면 해당 위치의 radiance 값을 얻을 수 있게 된다. 즉, 해당 위치에서 view dependent appearance 혹은 radiance distribution을 이해하고 있는 것이고 그렇기에 새로운 view direction이 주어질 때마다 rendering하고 evaluation하는 것이 가능한 것이다. 이러한 이유로 PlenOctree에서는 view-dependent radiance를 encdoing하고 있다고 표현한다. 이는 다시 표현하자면 view-dependent appearance를 Spherical Harmonics basis들로 factorize한다고 할 수 있다. 이런 구조를 가지기에 inference혹은 rendering에서 효율적으로 임의의 view direction에 대해서 color를 query할 수 있게 된다.

3. Plenoxel

Plenoxel은 이러한 Plenoptic Representatoin을 Voxel Grid와 함께 사용하는 representation이다. 기존에도 Voxel Grid는 arbitary topologies representing할 수 있기에 high resolution에서 제한된 메모리 사용을 가능하게 하기 위해 사용되었다. 저자들은 이러한 grid based representation과 interpolation을 적절히 사용하여 high resolution 3d scene을 얻을 수 있 continous representation을 효율적으로 구성한다. 정리하자면 Plenoxel이란 Voxel Grid의 corner 위치에 각각 Spherical Harmonics Coefficients와 Opacity를 저장해두고 있는 representation이고 opacity와 spherical harmonics의 combination을 통해서 구해지는 color를 기존의 differentaible volume rendering에 넣어 rendering을 하는 것이다.

3.1. Overall Pipeline

이러한 Plenoxel이 어떻게 이용되는지 전체 파이프라인을 살펴보도록 하겠다. 우선 Plenoxel 이전에도 사용되었던 Voxel Grid based representation과 유사하게 scene을 sparse voxel grid로 표현하게 된다. 해당 voxel grid의 각 corner는 plenoptic representation 즉 각 위치에 해당되는 Spherical Harmonics Coefficients와 Opacity가 담겨있다. 각 Ray상의 점은 이러한 Sparse Voxel Grid에 담겨있는 정보로부터 유추할 수 있게 된다.

https://alexyu.net/plenoxels/

NeRF와 유사하게 Ray의 각 marching point에서의 radiance 값을 얻기 위해서 Plenoxels에서는 Plenoxel들에 담겨있는 정보를 tri-linear interpolation함으로써 우리가 원하는 3차원 공간상의 marching point에서의 plenoptic representation 즉 SH coefficients와 opactity를 얻게 된다.

https://alexyu.net/plenoxels/

그렇게 얻게 된 각 sampling point에서의 plenoptic representation은 주어진 view direction과 함께 view-dependent radiance를 계산하는데에 사용된다. 즉 각 point에서의 color값을 SH coefficients를 통해서 계산할 수 있고 opacity 또한 tri-linear interpolation을 통해서 구해졌으니, 이들을 volume rendering을 걸어 view-dependent color값을 계산할 수 있다는 것이다. 즉 sample image의 pixel color가 되는 것이다. 이렇게 Rendering을 하는 방식이 Plenoxels이다.

https://alexyu.net/plenoxels/

이때 위의 Figure에서는 표현되어 있지만, 각 plenoptic representation에서 SH Coefficients는 R,G,B 각 채널에 대해서 다르게 구성된다. 즉 coefficients가 3 channel을 가지고 있다는 것이다. 이때 SH 의 degree는 default로 2 ( 0,1,2 ) 를 사용한다. low degree SH는 smooth 즉 더 Lambertain surface에 가까운 결과를 만들어낼 것이고, high degree SH는 higher frequency 즉 more specular한 결과를 만들어낼 것이다. 저자들은 default로 2를 사용하고 있다. 

실제 plenoxel의 optimization 과정에서 이러한 voxel grid representation은 ( SH coefficients and opacity ) directly optimization된다. 즉, 전체적인 Pipeline이 Differentiable하니 Coefficients와 Opacity를 first order optimizer에 의해 directly optimization한다는 것이고, 이렇게 optimize된 plenoptic representation을 활용해 view direction에 대해서 evaluation이 가능한 것이다. evaluation이라는 표현을 주로 쓰는데, 결국 우리가 가지고 있는 2d image를 통해 loss를 걸고자 한다면 해당 이미지의  view direction을 줘야하고 그때 rendering된 결과와 gt 사이의 loss를 measure해야하기 때문에 evaluatoin at appropriate viewing direction이라는 표현이 논문에 자주 등장한다. 그냥 위와 같은 맥락에서 사용되었다는 것을 알기만 해두자.

3.2. Interpolation

위에서 전체 파이프라인을 살펴보면서 언급했듯 efficiency를 위해서 Sparse Voxel Grid를 사용하는 Plenoxel에서 Ray위의marching point의 정보를 얻는 효율적인 방법은 interpolation이다. sparse voxel grid에 저장된 정보들을 interpolation함으로써 continuous representation을 즉 어떤 포인트에서도 SH coefficients와 opacity를 얻을 수 있기에 무척 효율적인 방법이라는 것이다. 이것이 가능한 또 한가지 이유는 interpolation이 differentiable하기 때문이다. 논문에서는 결국 이러한 tri-linear interpolation이 임의의 위치들에서의 정보를 표현한다는 관점에서 continuous plenoptic function의 역할을 한다고 표현하고 있다. plenoptic function이 임의의 위치와 view direction을 입력으로 받아 현재의 상황에서는 radiance or color를 output으로 리턴한다는 것을 복기해보자. continuous하게 임의의 위치에 대해서 view-dependent color값을 얻기 위해서 tri-linear interpolation을 사용하기에 continuous plenoptic function이라고 지칭하고 있다.

3.3. Optimization

optimization은 앞서 지속적으로 이야기했듯 Neural Network없이 directly optimization으로 이루어진다. Objective Function은 NeRF와 동일하게 pixel color에 대한 MSE와 smoothness를 위한 regularization term으로 이루어진다. total variation regularization ( 이하 TV regularization )이라고 하며 인접한 Voxel간의 opacity와 SH coefficients의 변화량들을 줄이는 방향으로 규제를 부여한다.

3.3.1. TV Regularization

조금 더 자세히 살펴보게 되면, 각각의 델타값은 x,y,z 축 별로 계산된다. 이때 (i,j,k)는 x,y,z축별로 각 voxel grid의 인덱스 정도로 생각하면 된다. V의 경우 특정 위치의 plenoptic representation을 의미다. 즉 SH coefficients와 opacity값을 의미한다. 따라서 Regularization Term은 앞서 언급했던 것 처점 인접한 voxel들간의 plenoptic representation의 variation을 줄이는 방향으로 규제를 하게 된다.

이러한 TV Regularization의 효용은 PSNR상으로는 나타나지는 않지만 실제 렌더링된 결과를 정성적으로 살펴보게 될 경우 훨씬 일관적으로 좋은 퀄리티의 결과를 내는 것을 확인할 수 있다.

3.3.2. No Neural Network

이렇게 저자들은 neural network없이도 explicit representation을 효율적으로 활용해 NeRF와 유사한 퀄리티의 결과를 단 시간내에 만들어냈다. 그렇기에 저자들은 NeRF의 성공이 Neural Network때문이 아닌 differentiable volume renderer덕분에 optimization이 가능하기 때문이라고 주장한다. 필자또한 상당히 설득력 있는 주장이라고 생각하고 어떻게 보면 기존의 NeRF의 Implicit Representation이 이해하고 있는 것을 효과적으로 Modeling ( SH & Tri-interpolation등 )한 저자들의 통찰력에 대단함을 느낀다.

4. Results

저자들은 Synthetic Scene부터, Real World의 Foward-Facing Scene 그리고 Real 360' scene까지 다양한 Scene들에 대해서 결과를 비교하고 있다. 대부분의 Scene에 대해서 추가적인 설명은 필요 없어보이지만, Forward-Facing Scene이란 뭔지와 Real 360 scene이란 뭔지 그리고 어떻게 rendering했는지 정도만 추가적으로 살펴보도록 하겠다.

bounded scene / unbounded scene

이 둘을 먼저 구분해야하는데, 기존의 NeRF는 scene으로부터 찍힌 view 들이 대부분 비슷한 거리 상에 위치할 때 잘 동작했다. 따라서 합성 데이터와 같이 bounded scene에서 잘 동작했는데, Real Scene으로 확ㅈ아하더라도 Scene의 bounded된 ( 일정 부분 )에 대해서는 잘 동작했지만, Background같은 unbounded 부분에서는 성능이 떨어졌다.

우선 Foward-Facing Scene 말 그대로 정면에서 찍힌 sparse view들을 통해 Reasl Scene을 Rendering한 것으로 NeRF에서 유명한 공룡의 화석 scene이나 분홍 꽃 scene을 생각하면 된다.

https://alexyu.net/plenoxels/

Real 360 Scene의 경우 Multi Sphere Image ( 이하 MSI )를 활용해서 각각의 다른 radius에 위치한 sphere의 Plenoxel들을 interpolation해가면서 계산해내고 이를 통해 bounded scene 즉 foreground부분은 MSI의 inner sphere들을 활용해 rendering하고 unbounded scene 즉 background 부분은 outer sphere를 활용해서 rendering하는 NeRF++의 아이디어를 따라가는 방식을 택했다.

https://alexyu.net/plenoxels/

본 논문 리뷰의 시작에서도 언급했지만, Plenoxels에서 주목해야할 점은 Plenoxel이라는 representation을 활용해 Neural Network없이도 좋은 퀄리티를 효율적으로 얻을 수 있다는 데에 있다. Plenoxels는 대략 Scene마다 11분 정도의 optimization time을 가지는데, 하루가 넘게 걸렸던 기존의 NeRF에 비하면 상당히 효율적인 것을 볼 수 있다. 또한, 다양한 정량적 지표에서 그리고 정성적으로 보더라도 performance를 거의 잃지 않으면서 효율적인 모델이라는 점에 의의가 있다.

 

References

- https://alexyu.net/plenoxels/

 

Plenoxels: Radiance Fields without Neural Networks

Concurrent Works Please also check out DirectVoxGo, a similar work which recently appeared on arXiv. They use a neural net to fit the color, but do not make use of TV regularization, SH, or sparse voxels. Additionally, their implementation does not require

alexyu.net

- https://alexyu.net/plenoctrees/

 

PlenOctrees for Real-time Rendering of Neural Radiance Fields

Real-time performance is achieved by pre-tabulating the NeRF into an octree-based radiance field that we call PlenOctrees. In order to preserve view-dependent effects such as specularities, we propose to encode appearances via closed-form spherical basis f

alexyu.net

- https://xoft.tistory.com/9

 

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

논문명 : Plenoxels: Radiance Fields without Neural Networks Scene별 Optimization(학습) 속도를 대폭 향상시킨 연구중 하나입니다. 저자 메인 사이트에 공개된 영상을 보면 6초만에 어느 정도의 윤곽을 보이고, Poi

xoft.tistory.com