Deep Learning
[논문리뷰] VGGT: Visual Geometry Grounded Transformer
수달토끼
2025. 7. 5. 18:12
문제 정의
3D 재구성(3D Reconstruction)은 컴퓨터 비전에서 오랫동안 중요한 주제였다.
전통적으로는 Structure-from-Motion(SfM)이나 Multi-View Stereo(MVS)와 같은 파이프라인을 통해
- 여러 장의 이미지에서
- 카메라 파라미터(위치, 방향, 시야각)와
- 깊이(Depth), 3D 포인트(좌표)
를 복잡한 최적화를 통해 계산해왔다.
하지만 이런 기존 방법들은
- 단계가 매우 많고 (특징 추출 → 매칭 → 삼각측량 → BA → MVS 등)
- 속도가 느리며
- 많은 hand-crafted 요소에 의존한다는 한계가 있었다.
VGGT가 풀고자 하는 문제
VGGT는 이 복잡한 파이프라인을 단일한 거대한 Transformer로 대체하려 한다.
즉, 여러 장의 이미지를 한꺼번에 넣으면,
Transformer가 end-to-end로
- 카메라 파라미터
- 깊이 맵(Depth Map)
- 포인트 맵(Point Map: 픽셀별 3D 좌표)
- 포인트 트랙(비디오 프레임 간 동일 지점 추적)
을 한꺼번에 예측한다.
이 과정을 딱 한 번의 feed-forward만에 수행해서
기존의 느리고 복잡한 시각적 기하(geometry) 파이프라인을 대체하겠다는 것이다.
VGGT의 전체 파이프라인
1) input: 여러 장의 이미지
- 동일한 3D 장면을 찍은 여러 장의 RGB 이미지 (I₁, I₂, ..., I_N)를 입력으로 받는다.
- 이 이미지들은 보통 서로 다른 위치나 각도에서 촬영된 것이다.
- 첫 번째 이미지는 항상 기준 좌표계(reference frame) 로 사용
2) 토큰화 (Patch Embedding)
- 각 이미지를 작은 패치(조각)로 나눈 뒤,
- DINO-style Vision Transformer를 이용해 각 패치를 토큰(벡터)으로 변환한다.
- 즉 각 이미지 Iᵢ → 패치 토큰 tᴵᵢ.
추가로 각 프레임에 대해
- 카메라 토큰 tᵍᵢ ∈ R^{1×C'}
- 4개의 register 토큰 tᴿᵢ ∈ R^{4×C'}
을 붙여 Transformer 입력을 만든다.
첫 번째 프레임의 카메라 토큰과 register 토큰은 다른 프레임과 완전히 다른 특별한 학습 가능한 파라미터를 사용해 Transformer가 이 프레임을 기준 좌표계로 삼도록 유도한다.
3) Alternating-Attention Transformer
- 토큰들을 Transformer에 넣어 self-attention을 돌린다.
- 이때 Alternating-Attention(AA) 구조를 사용:
- 하나의 레이어는 같은 프레임 내 토큰들끼리만 self-attention (frame-wise)
- 그 다음 레이어는 모든 프레임의 토큰들이 서로 self-attention (global)
- 이렇게 교차로 번갈아 쌓으면서
각 이미지 내부 특징과 여러 이미지 간 관계를 동시에 학습한다.
4) Prediction Heads
Transformer를 거쳐 나온 토큰들을 각각의 예측 헤드에 넣어
아래를 동시에 예측한다:
Camera Head | 각 이미지의 카메라 파라미터 gᵢ (회전 q, 위치 t, 시야각 f) |
Depth Head | 각 이미지의 깊이 맵 Dᵢ (픽셀마다 거리) |
Point Head | 각 이미지의 포인트 맵 Pᵢ (픽셀마다 3D 좌표) |
Tracking Head | 추적 feature Tᵢ (다른 프레임에서 동일 포인트 찾기 위한 feature map) |
- Depth, Point 예측에는 DPT-style upsampling decoder를 사용한다.
- Tracking은 CoTracker2 구조를 차용해, 쿼리 포인트를 넣으면
다른 프레임에서 해당 지점을 자동으로 찾아준다.
5) Uncertainty + Multi-task Loss
- 각 깊이와 포인트 예측에서 불확실성(uncertainty) 맵도 함께 예측해
loss에 aleatoric uncertainty를 반영. - Camera, Depth, Point, Tracking, BA loss를 모두 조합해 end-to-end로 학습한다.
핵심 기여
1. 복잡한 SfM & MVS 파이프라인을 하나의 Transformer로 통합
- VGGT는 기존의 수많은 단계(SIFT 매칭 → Triangulation → BA → MVS → Meshing …)로 이루어진 3D 재구성 과정을
- 하나의 거대한 feed-forward Transformer로 완전히 대체.
- 이를 통해 수십 초~수 분 걸리던 3D 재구성을 몇 초 이내로 단축
2. Alternating-Attention으로 프레임 간 & 프레임 내 관계를 동시에 학습
- Transformer 내부에 Alternating-Attention(AA) 구조를 설계.
- 한 레이어는 같은 프레임 안에서만 self-attention (로컬 관계 학습)
- 그 다음 레이어는 모든 프레임끼리 global self-attention (다중 뷰 관계 학습)
- 이 단순한 설계만으로 Cross-Attention 구조 없이도 다양한 뷰 간 정합과 정보 통합을 효과적으로 수행.
3. 단일 네트워크로 카메라, 깊이, 포인트, 트래킹을 동시에 예측
- VGGT는 하나의 네트워크에서
- 카메라 자세 (gᵢ)
- 깊이 맵 (Dᵢ)
- 포인트 맵 (Pᵢ)
- 트래킹 feature (Tᵢ)
을 모두 동시에 예측하도록 설계했다.
- 사실 이들은 수학적으로 서로 유도 가능(over-complete)한 관계, 하지만 이를 굳이 다 예측하도록 하여 정확성을 대폭 향상.
4. 첫 프레임만 별도의 기준 토큰을 넣어 자동으로 기준 좌표계를 학습
- 첫 번째 프레임에만 별도의 learnable parameter 토큰(t̄ᵍ, t̄ᴿ)을 넣어 Transformer가 이 프레임을 기준(세계 좌표계)으로 삼도록 유도.
- 이를 통해 추가적인 explicit constraint 없이도 자동으로 좌표계를 정렬.
5. 다양한 벤치마크에서 기존 최첨단(SOTA) 기법을 능가
- Phototourism(카메라 자세), DTU/ETH3D(MVS), TAP-Vid(트래킹) 등에서
COLMAP, DUSt3R, MASt3R, VGGSfMv2 등을 뛰어넘는 성능을 달성. - 특히 feed-forward만 돌린 VGGT가 COLMAP보다 훨씬 빠르면서도 더 정확한 경우 다수.
VGGT 논문을 통해 배운 점
- register token을 추가하는 이유
모든 토큰이 입력 이미지나 카메라 정보에만 의존하면, 표현력이 제한되어 복잡한 관계를 충분히 학습하기 어렵다.
register token은 다른 토큰들로부터 자유롭게 정보를 모았다가 다시 나눠주는 중간 허브, 일종의 공책 역할을 한다.
이처럼 의도적으로 중간 계산 노드를 두어 네트워크가 더 풍부한 표현을 학습하도록 하는 방식은 비전 Transformer에서 흔히 사용된다. - 첫 번째 이미지의 카메라 및 레지스터 토큰을 별도로 optimize할 파라미터로 두는 이유
첫 번째 프레임의 카메라 토큰과 레지스터 토큰은 입력 데이터와 무관하게 항상 같은 값을 가진 learnable parameter로 지정된다.
이렇게 하면 Transformer가 학습을 통해 이 토큰이 항상 고정된 기준 역할을 수행해야 loss가 최소화된다는 것을 자연스럽게 인식하게 된다.