Free-Viewpoint Videos(FVVs)를 생성하는 연구입니다. 풀어쓰자면, 고정된 카메라 위치에서 촬영한 Video들을 학습해서, 다양한(=자유로운) 카메라 위치에서 Video를 생성하는 연구입니다. 기존 연구 대비 상당히 빠른 속도로 학습한다는 것을 강점으로 내세우고 있습니다.

Overview

Stage 0 : t=0 시점의 정지 영상 대해서, 3D Gaussian Splatting으로 모델링 합니다.
Stage 1 : Instant-NGP(이전글)의 multi-resolution voxel grid 기반 hash encoding 방식을 사용합니다. 3D point 좌표값을 입력하면, 이전 frame 대비 현재 frame의 좌표 변화량(translation transfrom)과 회전 변화량(rotation transform)을 출력하는 MLP를 설계했습니다. 위에서 파란 바탕색에 해당하며, 이 개념을 Neural Transformation Cache라고 합니다.
Stage 2: 이전 frame에 없었던 물체의 경우 추가적인 Gaussian을 생성해줍니다. 주황색 바탕에 해당하며, Adaptive 3DG Addtion라고 합니다.
Related Works
NeRF기반의 Free-Viewpoint Vidoes(FVV) 생성 연구를 5가지로 분류하고 있습니다. Dynamic Scene 연구가 잘 정리되어 있습니다.
Prior-driven methods : human skeleton detection과 같은 prior model을 활용해서 FVV를 생성합니다. 일반화하여 사용하기가 어렵습니다.
Flow-based methods : 1개 카메라로 촬영한 영상에서 연속된 프레임 간의 동일 3D point correspondence를 추적하면서 3D 장면을 생성합니다. 추가적인 정보(depth, optical flow, motion segmentation mask 등)이 요구됩니다.
Warp-based methods : static한 scene을 deformation하여 영상을 생성합니다. static한 scene을 잘못 모델링 할 경우, 성능에 영향을 끼칩니다. (←이부분은 많이 의역했습니다.)
Spatio-temporal inputs : 여러 각도로 동시에 촬영한 영상들의 시간, 공간 정보를 모두 복합적으로 활용해서 3D를 생성합니다. 생성된 scene parameter들을 downstream application에 적용하기가 어렵습니다.
Per-frame training method : 입력 영상 각 frame을 독립적으로 학습하여 3D 영상을 생성합니다. 본 논문이 적용한 방식입니다.
- ReRF는 DVGO를 사용해서 장면을 표현하고 motion grid와 residual grid를 프레임별로 최적화하여 프레임 간의 차이를 모델링 했습니다.
- Dynamic3DG는 3DGaussian을 최적화하고 physically-based prior를 활용했습니다.
- ReRF와 Dynamic#DGS는 적은 수의 객체와 foreground mask가 있는 scene만 처리 할 수 있으며, 학습 시간이 몇 분 걸립니다.
- NeRFPlayer는 decomposition 모듈과 feature streaming 모듈을 통해 FVV을 구현하지만, pre-trained 모델만 생성할 수 있습니다.
- StreamRF는 Plenoxels를 사용해서 장면을 표현하고 최소한의 저장 공간으로 빠른 실시간 학습을 했습니다. StreamRF는 몇 초만에 각 프레임의 학습을 완료하고 압축된 모델로 저장하지만, 렌더링 속도는 부족합니다.
그 외 최신 연구들에서는 3DGS(3D Gaussian Splatting)을 확장한 연구들이 제안되었으며, 그 중
- Deformable3DG 에서는 hexplane기반 encoder와 3D Gaussian들을 deformation하는 MLP 모델을 적용해서 dynamic scene을 표현했습니다.
- 3D Gaussian을 4D Gaussian으로 적용한 몇몇 연구들에서는 offline reconstruction만 가능했고, streamable capabilities가 부족(=실시간 학습 및 랜더링이 부족)했습니다.
Stage 1: Neural Transformation Cache(NTC)

timestep 0에서 3DGS로 학습하여 3D Gaussian 모델이 주어진다는 가정을 갖고 시작합니다. 이 단계에서는 Instant-NGP 개념을 적용해서 Multi-resolution hash enconding와 얕은 깊이의 MLP를 사용합니다.

위 Instant-NGP를 복습하자면, 이미지 plane의 각 pixel은 view direction으로 ray를 그리고 ray위에 point 좌표를 샘플링합니다. 해당 샘플링된 좌표값은 multi-resolution으로 구성된 grid의 인접 voxel을 참조하게 되는데, 이를 voxel좌표를 hash table로 구성하며, 샘플링된 좌표는 voxel좌표들의 hash key값인 feature vector들로 interpolation되고 이 값을 MLP에 통과시켜 color와 opacity를 획득합니다. 이러한 방법을 통해, 메모리를 절약하면서 빠르게 수렴하도록 만들었었습니다. 자세한 내용은 이전글 참조 바랍니다.
본 논문에서는 3D 좌표는 Gaussian의 중점을 나타내며, MLP의 출력값이 color와 opacity가 아닌, 이전 프레임에서 현재 프레임의 좌표 변화량인 translation transformation과 회전 변화량인 rotation transformation을 출력하도록 설계합니다.

3D Gaussin의 mean을 업데이트하는 공식은 단순히 덧셈이지만, rotation의 경우 기존 quaternion에 변화량 quaternion을 곱하는 형태로 설계했습니다.

SH 경우에도 회전이 되어지는데, projection(P)에서 normal vector(N)를 계산하고, quaternion을 rotation matrix(R)로 변환하여, SH를 회전했다고 Appendix에 소개되어 있습니다.
해당 MLP를 학습시키기 위한, Loss function은 L1 loss와 D-SSIM Loss가 0.8 : 0.2 비율(λ=0.2)로 적용됬습니다.

학습 과정중에 너무 값이 벗어나지 않기 위해, normalization term도 추가됩니다.

Stage 2 : Adaptive 3DG Addition

불꽃이라던가, 연기, 흐르는 물과 같이 이전 frame에서 볼 수 없는 경우 3D Gaussian을 생성하는 작업이 필요합니다. 많은 수의 3DGaussian을 생성하거나 이후 프레임에서 계속 사용하게 된다면 3D Gaussian이 계속 쌓이므로 문제가 됩니다. 때문에 프레임별로 제한된 수의 3D Gaussian을 빠르게 생성이 필요합니다.
이 부분은 상당히 디테일하고 복잡하게 설계가 되어 있습니다.
저자는 새롭게 생성되는 객체의 경우, 그 근처에 있는 3DGaussian들의 view-space positional gradient가 큰 값을 보였다는 점에 착안해서, 해당 gradient가 크게 나타날 경우 추가 3DGaussian을 생성합니다. 이전 1단계(NTC)에서 학습하는 동안 view space의 positional gradient를 추적합니다. 그리고 해당 gradient가 특정 threshold(=0.00015)를 초과하는 3DGaussian을 선택합니다. 선택된 3D Gaussian 각각에 대해 추가 3D Gaussian의 위치는 X ~ N(μ, 2Σ)에서 샘플링합니다. μ는 3D Gaussian의 평균이고 Σ는 공분산행렬입니다.
해당 Gaussian의 SH와 scaling vector의 경우 잘못 초기화 할 경우 opacity를 줄이는 쪽으로 최적화되기 때문에, SH와 scaling vector의 초기값의 경우 기존 3DGaussian값을 사용합니다. rotation은 [1,0,0,0], opacity는 0.1로 초기화 되고, 3D Gaussian이 초기화된 후에는 1단계에서 적용한 Loss를 사용해서 3D Gaussian이 업데이트 됩니다. 1단계에서 학습된 3D Gaussian의 경우에는 업데이트 되지 않습니다.
local minima에 빠지는 것을 방지하고 생성되는 3D Gaussian 갯수를 관리하기 위해서, adaptive 3DG quantity control strategy를 사용합니다. 구체적으로 각 학습 epoch가 끝날 때, view-space positional gradient가 τ grad을 초과하는 3D Gaussian에 대해서는 불완전하게 복원된 영역을 보완하기 위해 그 근처에 추가적인 3D Gaussian을 생성합니다. 이 3D Gaussian의 경우 기존 3D Gaussian의 rotation, SH 계수를 상속받지만 scaling vector는 기존의 80%로 사용됩니다. 이후 불투명도 값이 τα(=0.01) 보다 적을 경우 제거합니다.
Experiments
N3DV Dataset, Meet Room Dataset 두가지 데이터셋으로 실험을 진행했습니다.
stage0에서 densification은 5000iteration까지만 진행하였고, N3DV데이터셋은 15000 iteration, Meet Room 데이터셋은 10000 iteartion 학습했습니다. stage1은 150 iteration을 학습하고 stage2는 100 iteration을 학습했습니다. RTX 3090 1개로 실험을 했습니다.
N3DV Dataset : 2704x2028해상도로 30FPS의 영상을 다양한 각도의 21개 카메라로 촬영했습니다. 다른 연구와 동일하게 2배 해상도를 낮춰 training하고 validation 했습니다.

학습속도가 0.2분(=12초)로 상당히 빠릅니다. StreamRF에 비해 모든 지표가 좋은 값을 보입니다. 다른 연구에 비해서 rendering속도가 압도적으로 빠릅니다. 3DGS에 비해서는 3DGStream(=Ours) 연구의 랜더링 속도가 느리지만 학습속도가 훨씬 빠릅니다.

Meet Room Dataset : 1280x720해상도로 30FPS의 영상을 다양한 각도의 13개 카메라로 촬영했습니다.

N3DV Dataset과 유사한 경향을 보이고 있습니다.
Ablation Study
stage1(NTC)에 관한 실험입니다.

NTC를 모두 적용한 경우, hash encoding을 뺀 경우, warm-up loss를 뺀경우, 이전 frame의 3DGaussin을 직접적으로 optimization 한경우에 대해 각가 실험 한 결과입니다. stage1의 경우 150iteration을 한다고 되어 있는데, 2000 iteration까지 수행해 본 것으로 보입니다. hash encoding이 없는 경우 성능 하락이 큰 것을 볼 수 있습니다.
stage2에 관한 실헝입니다.

baseline은 stage1만 적용한 경우이고, Rnd. Spawn은 random으로 Gaussian을 추가하였을 경우, w/o Quant. Ctrl은 quantity control strategy를 적용하지 않았을 경우를 보여줍니다. PSNR의 경우 큰 차이는 없으며, w/o Quant. Ctrl의 경우 필요하지 않는 많은 갯수의 Gaussian을 생성하는 것을 볼 수 있습니다.
다음은 inference 소요시간을 세부적으로 측정한 표입니다.

3DGS모델을 그대로 쓴 경우 2.56ms가 소요되고, NTC, Transformation, SH Rotation각각을 적용했을 때의 추가 시간을 표기하였습니다. SH Rotation의 경우 가장많은 시간이 소요되는 것을 볼 수 있습니다. 3DGS 랜더링을 그대로 썼을 경우 390FPS이고, 본 연구 기법을 모두 적용했을 때 215FPS임을 볼 수 있습니다.
Closing..
CVPR2024 highlight paper이면서, 상당히 높은 학습속도를 가졌다는 abstract를 보고 놀라서 읽었다가 Stage 0을 제외한 것을 알고 약간 실망했습니다. Stage 0시간이 상당히 오래걸릴텐데 왜 학습시간에 포함시키지 않는건지 모르겠네요. 전체 학습과정이 초단위인 논문이 언제 나올지 모르겠지만 기대해보겠습니다.
'3D-GS' 카테고리의 다른 글
[논문 리뷰] MesonGS (ECCV 2024) : 3D Gaussian 경량화 (1) | 2024.10.06 |
---|---|
[논문 리뷰] TransGS (arXiv 2024) : 실시간 얼굴 editing (0) | 2024.09.22 |
[논문 리뷰] Scaffold-GS (CVPR 2024) : MLP기반 3DGS (4) | 2024.08.25 |
[논문 리뷰] Grendel-GS (arXiv2024) : Multi GPU로 3DGS (0) | 2024.08.10 |
[논문 리뷰] Mip-Splatting (CVPR2024) : Anti-aliasing 기법 (0) | 2024.07.28 |
댓글