본문 바로가기
NeRF

[논문 리뷰] TensoRF (ECCV 2022) : 메모리/속도 개선

by xoft 2023. 7. 30.

TensoRF: Tensorial Radiance Fields, Anpei Chen, ECCV2022

 

주어진 (Radiance Field) Scene에 대해 Tensor Decomposition 모델링을 Main Idea로 가져가는 연구입니다.

빠른 속도로 학습(10분)하고, 메모리를 적게 사용(75MB) 합니다.

 

 

 

Tensor Decomposition 이란?

Tensor는 차원을 의미합니다. n차원의 데이터를 적은차원으로 표현하는 것을 Tensor Decomposition이라고 합니다.

2차원인 X는 1차원인 A와 B의 외적으로 표현 될 수 있습니다. X에 비해 A와 B에서 정보량이 줄어들기 때문에, 데이터 손실이 발생 할 수 있습니다. 때문에 Rank 라는 개념이 들어갑니다.

n-1차원 vector의 외적이 1개의 Rank를 구성하고, r개의 Rank들의 합이 n차원의 데이터를 근사합니다.

3차원인 경우, A*B*C의 외적으로 구성됩니다. (그림 출처: link) Decomposition이 되면, 새로운 데이터가 들어왔을 경우, 1차원 vector들로 고차원의 데이터를 구성 할 수 있게 됩니다. 위에서 설명한 방법이 CP(CANDECOMP/PARAFAC) decomposition이라고 하며, 그 외 Tucker Decomposition(참조: link) 와 Block Term Decomposition등이 있습니다.

 

위 예시에서는 적은 데이터로 설명했지만, 실제로 차원이 증가하고, vector의 길이가 수천 수만개가 되면, decomposition는 적은 데이터로 표현함으로써 압축률이 올라가지만, 그만큼 데이터 손실율이 증가하게 됩니다. 때문에 많은 Rank가 필요하게 됩니다.

 

다음으로는 논문에서 Tensor Decomposition에 Trilinear Interpoloation을 사용 했었습니다. 해당 개념에 대해선 설명을 위해 제가 이해한대로 2차원인 Bilinear에 대해 그림을 그려 보았습니다.

A와 B vector의 중간 값으로 vector의 길이를 증가시킬 수 있고, 그 값으로 원본 X또한 표현 할 수 있습니다.

 

 

 

TensoRF의 Tensor Decomposition

CP(CANDECOMP/PARAFAC) Decomposition

v는 vector를 의미하고, 우상단은 차원(=Tensor) 번호를 의미합니다. 1을 x, 2를 y, 3을 z로 봐도 되겠네요. r은 rank를 의미하고, i,j,k는 각 차원의 길이를 의미합니다. 위에서 설명한 것과 같이, 1차원 vector 3개에 대한 Outer Product(외적)의 합으로 3차원 T를 표현합니다.

 

 

VM(vector-matrix) Decomposition

 CP방법은 vector-vectorouter product의 합을 계산하고 VM방법은 vector-matrixouter product의 합을 계산하게 됩니다. VM방법은 선*선*선의 외적이 아닌 면*선의 외적으로 계산합니다. linear한 특성을 갖고 있기 때문에, 이렇게 모델링 해도 같은 결과를 보였다고 합니다.

Time Complexity면에서는 VM방법이 O(N^3) CP방법이 O(N^2)이기 때문에 보다 더 적은 연산이 가능합니다. 그리고 Rank수도 줄일 수 있는 장점이 있습니다

Space Complexity면에서는 VM방법이 O(N^2) CP방법이 O(N)이 됩니다.

Evaluation파트에서 언급하겠지만, VM이 적은 Rank수를 사용해서 이미지 퀄리티가 더 높습니다. 

 

 

 

Related Works

최근의 grid기반 연구들이 학습 속도를 대폭 줄여주고 있기 때문에, grid 연구들과 비교하고 있습니다.

Grid 기반 연구는 속도를 개선하지만 해상도가 증가하면 GPU메모리가 많이 필요로 합니다. 기존 연구들은 O(N^3)의 Space Complexity를 가집니다. TensoRF에서는 이를 O(n^2) 로 줄이게 됩니다.

 

 

 

Algorithm

우선 Scene은 큐빅형태의 공간으로 제약됩니다. 이미지 각 pixel에서 주어진 view direction으로 ray를 그려 point를 sampling하고, sampling된 point에 대해, 각 Rank의 선과 면으로 projection하고 이에 대한 외적한 값들을 Summation하여 Color와 Volume Density를 계산합니다.

Volume Density는 별도의 MLP없이 바로 사용되지만, Color값은 두개의 Function을 거칩니다. 첫번째 Function B는 1개의 Fully Connected Layer로 구성된 MLP입니다. (전체 scene에 걸쳐 apperance commonalities를 추상화하는 Global Apperance Dictionary로써) global apperance correlation을 표현하기 위해 사용되었다고 합니다. 두번째 Function S는 Shading Function으로써, 기본적으로 MLP를 사용하지만, MLP를 사용하지 않는 SH(Spherical Harmonics) 함수로 사용 할 수 있다고 합니다. SH 함수에 대한 설명은 PlenOctrees 연구(이전글 link)를 참조바랍니다. InstantNGP(이전글 link)에서도 사용한 기법이기도 합니다. 

이렇게 획득한 point좌표에 대한, volume density값과 color값은 Volume Rendering공식을 통해, 최종적인 Pixel Color로 계산됩니다. Δq는 ray위의 점과 점사이의 거리입니다. 자세한 설명은 최초 NeRF(이전글 link)를 참조 바랍니다.

 

Loss Function

multi-view input image에 대해서는 Pixel값에 대한 L2 Loss를 계산합니다. 하지만 Sparse한 input image에 대해서는 적게 관측된 region에서 outlier나 noise가 발생 할 수 있기 때문에, overfitting 또는 local minima 문제가 있을 수 있다고 합니다. 때문에 L1 norm loss와 TV(total variation) Loss와 같은 (일반적으로 compressive senseing에 사용되는) standard regularization term을 사용했다고 합니다. 실제로 실험해보았을 때, 적은 입력 이미지 또는 imperfect한 촬영 조건일 경우에 TV Loss가 L1 loss보다 더 효과적인 것을 확인했다고 합니다.

 

Coarse-to-fine

Local minima를 피하고 quality를 향상시키기 위해 coarse-to-fine기법을 사용했습니다. 최초 NeRF의 coarse-to-fine 기법은 ray위의 volume density 값의 분포에 따라 일부 구간을 더 샘플링하였지만, TensoRF에서는 단순히 grid의 크기를 upsampling하는 방법으로 coarse-to-fine 기법을 구현했다고 되어있습니다.

 

 

Implementation Detail

Rank Components 총 48개 : RGB Rank 16, 4, 4 + Density Rank 16, 4, 4

Grid 사이즈 N_0^3에서 N^3까지 점점 증가시키면서 학습 (N0 = 128 , N=300)

이 때, 2000, 3000, 4000, 5500, 7000 step에서 점차적으로 증가

Batch size는 4096 pixel, Adam Optimizer 사용, V100 GPU (16GB) 로 학습

 

 

 

Evaluation

기존 Grid-based 연구와 학습 속도는 유사하였지만, 높은 PSNR을 보였고, 무엇보다 적은 모델 사이즈라고 강조하고 있습니다.

800x800해상도의 이미지를 V100(16GB)으로 실험하였을 때의 결과입니다.

Our-CP-384는 CP decomposition으로 384 rank components를 가져갔을 때의 결과, VM-192-SH는 VM Decomposition으로 192개의 rank components를 갖고 가고 MLP가 아닌 Spherical Harmonics함수를 사용했을 경우를 나타냅니다. VM-192는 MLP를 사용한 케이스에 해당되며, 모든 평가 데이터셋에 대해 가장 높은 PSNR을 갖고갑니다. VM-192에 대해서 15,000 iteration만 진행했을 경우에 8분이 소요되는데, 기존 연구보다 높은 PSNR을 보이고 있습니다. 그리고 TensoRF 논문에서 가장 강조하였던 Memory 부분을 보면, 다른 연구들 대비 확연히 다른 크기의 적은 사이즈를 확인 할 수 있습니다. 아래는 Synthetic-NeRF 데이터셋에 대한 결과 이미지입니다.

다음으로 기타 Parameter 실험들입니다.

Grid 사이즈 N_0^3에서 N^3까지 점점 증가시키면서 학습 (N0 = 128 , N=300)이라고 했었는데, N을 조절하였을 경우, rank components 갯수를 조절하였을 경우의 실험 결과입니다. Grid사이즈를 증가시킬 경우에 성능이 더 좋은 것을 볼 수 있으며, CP보다 VM이 성능이 더 좋고, rank components의 갯수가 증가 할 수록 성능이 향상 되는 것을 볼 수 있습니다.

iteration이 5k만 되더라도 PSNR이 30에 근접합니다. 그리고 증가할수록 PSNR이 상승되는데 30k~60k에서는 변동폭이 적습니다. 

 

 

 

Closing..

논문에서 언급된 Limitation은 unbounded scene을 다룰 수 없다는 점 입니다. 때문에 Scene이 확장되는 경우엔 사용할 수 없습니다. 고정된 크기의 사물을 높은 해상도로 빠른 시간에 reconstruction하기에 적합하다고 생각이 됩니다.

TensoRF는 이번 ICCV 2023 To NeRF or not to NeRF Competition(link) 의 baseline으로 사용되었습니다. 저도 대회에 참여하였으며, 수상은 못했지만 10위권 안에 들었습니다. 때문에 대회 종료 후 간만에 작성하는 리뷰글을 이 논문으로 택하게 되었습니다. 좋은 팀원을 만나서 의욕있고 즐겁게 프로젝트를 진행했었습니다. 다른 NeRF 대회가 생기면 상위권을 목표로 또 도전해 볼 생각입니다.

댓글