이 논문 내용으로 들어가기 전에 Pinhole Camera Model 에 대해서 어느 정도 이해를 하고 가면 좋다.
Abstract
1080p 해상도의 무제한 및 완전한 장면의 렌더링에서는 이전까지는 어떤 방법도 실시간 디스플레이 속도(≥30 fps)를 달성하지 못하고 있다.
이 논문에서는 1080p 해상도에서 고품질 실시간(≥30 fps) 새로운 시점 합성을 가능하게 하는 세 가지 주요 요소를 소개한다.
1. 3D 가우시안 활용: 카메라 캘리브레이션 과정에서 생성된 희소 포인트를 시작으로, 장면을 3D 가우시안으로 표현하여 연속적인 볼륨기반 Radiance Field 의 장점을 유지하면서 빈 공간에서의 불필요한 계산을 피한다.
2. 최적화와 밀도 제어: 3D 가우시안의 비등방성 공분산을 최적화하여 장면을 정확하게 표현하며, 최적화와 밀도 제어를 교차적으로 수행한다.
💡 비등방성 공분산 최적화란?
1. 비등방성(anisotropy)
: 비등방성은 어떤 물체나 구조가 방향에 따라 성질이 달라지는 것. 예를 들어, 공은 모든 방향에서 동일한 모양(등방성, isotropy)이지만, 타원체는 방향에 따라 길이와 폭이 달라지는 비등방성이다.
➡ 3D 가우시안에서 비등방성은 가우시안의 모양이 구형이 아닌 타원체 형태로 나타나며, 각 방향으로 다른 크기와 형태를 가진다.
2. 공분산(covariance)
: 공분산 행렬은 데이터가 서로 다른 방향으로 얼마나 퍼져 있는지를 나타내는 수학적 표현이다. 행렬의 크기와 방향은 3D 가우시안의 타원체 크기와 방향을 결정한다. 예를 들어, 대각선 값은 각 축으로의 분산(퍼짐)을 나타내고, 비대각선 값은 축 간의 상관관계를 나타낸다.
➡ 공분산 행렬을 조정하면 가우시안의 형태를 다양한 방향으로 변형할 수 있다.
3. 비등방성 공분산 최적화
- 3D 가우시안을 장면에 잘 맞게 변형시키기 위해 공분산 행렬을 최적화 하는 과정
- 장면의 세밀한 디테일을 유지하면서 효율적으로 표현
- 불필요한 가우시안을 줄이고, 중요한 영역에 더 정확한 가우시안을 배치
➡ 최적화된 비등방성 가우시안을 사용하면, 건물의 벽처럼 얇고 긴 구조나 복잡한 디테일을 소수의 가우시안으로 효율적으로 표현할 수 있다.
3. 가시성 인식(visibility-aware) 렌더링 알고리즘: 비등방성 Splatting 을 지원하는 빠른 가시성 인식 렌더링 알고리즘을 개발하여 학습 속도를 가속화하고 실시간 렌더링을 가능하게 한다.
Introduction
1. 기존 방법의 한계
- Meshes 와 Points 는 GPU/CUDA 기반의 빠른 래스터화에 적합하지만 연속적인 표현이 아니기 때문에 최적화가 어렵다.
- NeRF 기반의 연속적인 표현은 최적화에 유리하지만, 확률적 샘플링 방식을 계산 비용을 높이고 노이즈를 유발한다.
- 기존 SOTA 방법(Min-NeRF360)은 높은 품질을 제공하지만 최대 48 시간의 학습 시간이 필요하다.
- 빠른 Radiance Field 방법은 학습 시간을 단축하지만, 10-15fps 에서 낮은 품질의 렌더링을 제공한다.
2. 논문 핵심 기여
- 3D Gaussian 표현 도입:
- 카메라 캘리브레이션(SfM) 에서 생성된 희소 포인트 클라우드를 기반으로 3D Gaussian 을 초기화한다.
- Multi-View Stereo(MVS) 데이터 없이도 SfM 포인트만으로 고품질 장면 표현 가능
- NeRF-synthetic 데이터셋에서는 랜덤 초기화만으로도 높은 품질 달성
- 3D Gaussian 은 연속적이고 미분 가능한 볼륨 표현으로, 효율적인 2D 투영 및 표준 𝛼-블렌딩을 지원한다.
- 3D Gaussian 속성의 최적화 및 적응형 밀도 제어:
- 최적화 대상 속성: 3D 위치, 불투명도(𝛼), 비등방성 공분산, 구면 조화 함수(Spherical Harmonics, SH) 계수
- 적응형 밀도 제어: 필요에 따라 3D Gaussian 을 추가하거나 제거하여 장면의 표현을 간결하고 정밀하게 유지
- 결과: 실험 장면에서 평균 1~5백만 개의 Gaussian으로 고품질, 비구조적 장면 표현을 생성한다.
- 실시간 GPU 기반 렌더링:
- GPU 정렬 알고리즘과 타일형 래스터화를 결합한 빠른 렌더링 방법 제안
- 가시성 정렬: 비등방성 splatting 을 사용해 가시성 순서를 유지하며, 𝛼-블렌딩을 통해 정확한 이미지 생성
- 역전파 효율: 정렬된 splat 의 순차적 추적을 통해 빠르고 정확한 역전파 가능
3. 실험 결과 요약 (논문의 데이터셋)
- 기존에 발표된 여러 데이터셋(Barron et al. 2022; Hedman et al. 2018; Knapitsch et al. 2017)에서 테스트를 수행
- 최종적으로, 시각적 품질은 SOTA 인 NeRF 방법에 필적하거나 우수하고 최초로 고해상도에서 실시간 렌더링(1080p, ≥30fps)을 달성
Related Work
기존 뷰 생성 기술(light field, MVS(멀티뷰 스테레오))은 정밀하지만 재구성 오류 문제가 있었음.
NeRF 와 같은 신경 렌더링은 더 나은 품질을 제공하지만 속도 문제가 존재.
본 연구는 3D 가우시안을 활용해 기존 방법의 단점 극복하고, 실시간 렌더링 및 복잡한 장면 표현 실현하고자 한다.
Overview
이 방법은 정적 장면의 보정된 이미지 세트(SfM 을 통해 생성된 sparse point cloud 포함)를 입력으로 사용한다.
이러한 포인트를 위치(평균), 공분산 행렬(covariance), 불투명도(opacity, 𝛼) 로 정의된 3D 가우시안으로 변환한다. 이를 통해 유연하고 압축된 3D 장면 표현이 가능하며, 특히 anisotropy(비등방성) volume splatting 을 사용해 세부 구조를 효율적으로 표현한다.
장면의 radiance field (색상)은 구면 조화 함수(Spherical Harmonics, SH) 를 사용하여 표현하며, 이는 기존 표준 방식을 따른다.
알고리즘은 3D 가우시안 parameter(위치, 공분산, 𝛼, SH 계수)의 최적화와 가우시안 밀도의 적응적 제어를 반복적으로 수행하여 방사 필드 표현을 생성한다.
이 방법의 핵심은 타일 기반 rasterizer 로, anisotropy splatting 의 𝛼-블렌딩을 효율적으로 처리하고 빠른 sorting 을 통해 가시성 순서를 준수한다. 또한, 누적된 𝛼 값을 추적하는 역방향 연산(backward) 을 지원하여 gradient 를 계산할 때 가우시안 개수에 제한이 없다.
Differentiable 3D Gaussian Splatting
목표 : 법선 정보 없이 sparse 한 SfM 포인트를 기반으로 새로운 뷰를 생성할 수 있는 고품질의 장면 표현을 최적화하는 것
가우시안 모델링
: 3D 가우시안은 월드 좌표에서 공분산 행렬 Σ와 평균 𝜇로 정의된다.
이 가우시안은 블렌딩 과정에서 불투명도(𝛼)를 곱해 사용된다.
2D 로의 projection
: 3D 공분산 Σ를 카메라 좌표계로 변환한 Σ′는 다음과 같이 구한다.
여기서 J 는 투영 변환의 아핀 근사에 대한 야코비안이다.
2D 렌더링을 위해 Σ′의 3번째 행과 열을 생략하여 2×2 공분산 행렬로 변환한다.
공분 행렬 최적화 문제
: 공분산 행렬 Σ는 양의 준정 정의(positive semi-definite)이어야 하므로, 이를 직접 최적화하는 것은 어렵다.
이를 해결하기 위해 공분산을 다음과 같이 분해하여 최적화를 한다.
- S : 크기(스케일) 행렬 → 3D 벡터 s 로 표현
- R : 회전 행렬 → 쿼터니언 q 로 표현
효율적 최적화
1. s 와 q 를 독립적으로 저장하여 변환과 조합을 단순화한다.
2. q 를 정규화해 유효한 쿼터니언을 유지.
3. 자동 미분의 계산 비용을 줄이기 위해 명시적으로 파라미터의 기울기를 유도
위의 내용은 논문에 나온 내용 그대로 정리해서 적어본 것인데, 잘 이해가 안되서 부록에 나와있는 algorithm 1을 토대로 정리해보았다.
Optimization with Adaptive Density Control of 3D Gaussians
최적화(Optimization)
- 장면의 3D 가우시안을 최적화하여 자유로운 뷰 생성을 가능하게 한다.
- 가우시안의 위치(𝑝), 불투명도(𝛼), 공분산 행렬(Σ), 색상(SH 계수)를 함께 최적화하여 장면의 뷰 의존적 특성을 캡처
최적화 프로세스
1. 렌더링과 비교
- 렌더링한 이미지와 데이터셋의 트레이닝 뷰를 비교해 최적화 수행
- 3D에서 2D로의 투영 과정에서 발생하는 기하학적 모호성을 해결하기 위해 잘못 배치된 기하학적 요소를 수정하거나 제거
2. 기법
- 확률적 경사 하강법(SGD)을 사용하며, GPU 가속 및 CUDA 커널을 활용해 효율성을 극대화
- 주요 병목현상인 빠른 래스터화를 통해 연산 효율성 확보
3. 활성화 함수
- 𝛼: 시그모이드 활성화 함수로 [0, 1) 범위를 유지
- 공분산 스케일: 지수 활성화 함수(Exponential) 사용
4. 초기화 및 학습
- 공분산 행렬은 초기화 시, 가장 가까운 세 점의 평균 거리로 등방성(isotropic) 가우시안으로 설정
- 손실 함수는 L1과 D-SSIM을 조합:
- 이 논문에서는 λ=0.2로 설정.
3D 가우시안의 밀도 조절 (Adaptive Control of 3D Gaussians)
적응적 밀도 조절의 필요성
- 초기의 희소한 SfM 포인트 세트를 시작점으로 사용해 가우시안 밀도를 점진적으로 증가
- 목표는 기하학적 특성이 부족한 영역(under-reconstruction)과 과잉으로 표현된 영역(over-reconstruction)을 보완한다.
적응적 밀도 증가
1. 밀도 증가 조건
- 뷰 공간에서 위치 기울기(view-space position gradients)가 임계값 𝜏pos(0.0002) 이상인 경우 가우시안을 증식
2. 처리 방식 (fig. 4 참고)
- 작은 가우시안(under-reconstruction): 동일 크기의 복사본을 생성하여 위치 기울기 방향으로 이동한다.
- 큰 가우시안(over-reconstruction): 두 개의 작은 가우시안으로 분할하며, 크기를 1.6(𝜙)으로 나눈다.
불투명도와 가우시안 제거
- 𝛼 값이 임계값 𝜖_𝛼 이하인 가우시안을 주기적으로 제거한다.
- N=3000 반복마다 𝛼 값을 0에 가깝게 설정해 불필요한 가우시안의 증가를 억제한다.
효율적 관리
- 월드 공간에서 너무 큰 가우시안이나 뷰 공간에서 큰 영향을 미치는 가우시안을 주기적으로 제거한다.
- 유클리드 공간의 원시 요소로서 가우시안을 유지하며, 다른 기법에서 사용하는 공간 압축, 왜곡, 투영 전략을 사용하지 않는다.
위의 내용은 논문에 나온 내용 그대로 정리해서 적어본 것인데, 잘 이해가 안되서 부록에 나와있는 algorithm 1을 토대로 정리해보았다.
<알고리즘 간단 요약 총정리>
알고리즘 (Optimization and Densification)
입력: SfM 포인트 (M), 초기 Gaussian 속성 (S, C, A), 반복 횟수 i = 0
1. SampleTrainingView: 카메라 뷰 및 이미지 샘플링.
2. Rasterize: Gaussian을 2D 화면에 투영.
3. Loss 계산:
• L = (1−λ)L1 + λL_D-SSIM
4. Backprop & Step: ADAM 최적화로 파라미터 업데이트.
5. Gaussian 관리:
• Pruning: α < ε 또는 너무 큰 Gaussian 제거.
• Densification:
• Over-reconstruction (과잉 재구성): Gaussian 분할.
• Under-reconstruction (부족 재구성): Gaussian 복제.
6. Iteration 증가 및 반복
Fast Differentiable Rasterizer for Gaussians
목표:
- 빠른 렌더링과 빠른 정렬을 통해 α-blending을 효율적으로 수행한다.
- 이전 문제점 해결
- 정렬 비용을 줄이기 위해 픽셀 단위가 아닌 타일 단위로 정렬
- 동적 메모리 관리를 최소화하여 모든 Gaussian 에 대한 기울기 업데이트를 지원
1. 타일 기반의 정렬 및 래스터화
- 화면을 16 x 16 타일로 분할한다.
- 가우시안 필더링
- 99% 신뢰구간이 뷰 프러스텀과 겹치는 Gaussian 만 유지한다.
- 극단적 위치(near plane 근처)는 Gaurd Band 를 사용해 배제한다. (불안정한 투영 방지)
- 정렬 방식:
- 가우시안을 타일 단위로 중첩되는 개수에 따라 복제
- 각 가우시안에 깊이 값과 타일 ID 를 키로 할당
- GPU Radix Sort 를 통해 빠르게 정렬
2. α-Blending (합성)
- 정렬된 Gaussian을 타일에 할당 → 각 타일당 리스트 생성한다.
- 병렬 처리: 타일 단위로 스레드 블록을 실행한다. 공유 메모리를 활용해 Gaussian 데이터를 불러오고, 각 픽셀에 대해 α와 색상을 누적
- 빠른 종료:
- α 값이 1 (포화) 에 도달한 픽셀의 처리는 중단
- 타일의 모든 픽셀이 포화되면 해당 타일 처리를 종료
3. Backward Pass (기울기 계산)
- 이전 문제 해결: 동적 메모리 할당 없이 전방 패스의 데이터를 재사용
- Gradient 계산 최적화:
- Gaussian의 정렬된 리스트와 타일 범위를 재사용해 뒤에서 앞으로(back-to-front) 반복 탐색한다.
- 각 픽셀은 전방 패스에서 기여한 깊이 값 이하의 Gaussian만 처리
- 중간 α 값 복구:
- 전방 패스에서 누적된 최종 α 값만 저장
- 기울기 계산 시, 최종 α를 각 Gaussian의 α 값으로 나눠서 중간 α 값을 복구
Result