geometry 최적화 없이, feed-forward 한 번으로 3D의 모든 것을. VGGT는 한 장부터 수백 장까지의 이미지에서 camera parameter, depth map, point map, 3D point track을 forward 한 번(1초 이내)에 모두 예측하는 feed-forward transformer다. Bundle Adjustment 같은 후처리 최적화를 쓰는 방법들보다도 대체로 좋은 결과를 내며, camera pose 추정·multi-view depth·dense reconstruction·point tracking에서 state-of-the-art를 달성한다.

논문 정보

항목 내용
제목 VGGT: Visual Geometry Grounded Transformer
저자 Jianyuan Wang, Minghao Chen, Nikita Karaev, Andrea Vedaldi, Christian Rupprecht, David Novotny
소속 / 연도 Visual Geometry Group(University of Oxford), Meta AI, CVPR 2025 (arXiv:2503.11651)
분야 CV / 3D reconstruction, visual geometry
코드 GitHub

1. Introduction

이미지 집합에 담긴 장면의 3D 속성을 feed-forward 신경망으로 추정하는 문제를 다룬다. 전통적으로 3D reconstruction은 Bundle Adjustment(BA) 같은 반복 최적화 기법을 쓰는 visual geometry 방법으로 접근됐다. 머신러닝은 feature matching·monocular depth 예측처럼 geometry만으로 풀 수 없는 과제를 맡는 보완적 역할을 해 왔고, 통합은 점점 긴밀해져 VGGSfM 같은 state-of-the-art SfM은 미분가능 BA로 머신러닝과 visual geometry를 end-to-end로 결합한다. 그래도 visual geometry가 여전히 큰 역할을 맡아 복잡도와 계산 비용을 키운다.

네트워크가 점점 강력해지는 지금, 마침내 geometry 후처리를 거의 배제하고 3D 과제를 신경망만으로 직접 풀 수 있는지 묻는다. DUSt3R와 그 발전형 MASt3R가 이 방향에서 유망한 결과를 보였지만, 이 네트워크들은 한 번에 두 이미지만 처리할 수 있고 더 많은 이미지를 재구성하려면 pairwise 재구성을 융합하는 후처리에 의존한다.

이 논문은 후처리에서 3D geometry 최적화의 필요를 없애는 쪽으로 한 걸음 더 나아가, 한 장·몇 장·수백 장의 입력 view에서 3D reconstruction을 수행하는 feed-forward 신경망 VGGT(Visual Geometry Grounded Transformer)를 제안한다. VGGT는 camera parameter, depth map, point map, 3D point track을 포함한 3D 속성 전체를 forward 한 번, 몇 초 안에 예측한다. 놀랍게도 추가 처리 없이도 최적화 기반 대안들을 앞서는 경우가 많다. 이는 사용할 만한 결과를 얻기 위해 여전히 비싼 반복 후최적화가 필요한 DUSt3R·MASt3R·VGGSfM과의 큰 차이다.

또한 3D reconstruction을 위한 특별한 네트워크 설계가 불필요함을 보인다. VGGT는 (frame별 attention과 global attention의 교대를 빼면) 3D 등의 inductive bias가 없는 상당히 표준적인 large transformer이고, 3D annotation이 있는 공개 데이터셋 다수로 학습된다. 즉 GPT·CLIP·DINO·Stable Diffusion 같은 대규모 모델과 같은 틀로 만들어졌다. 이 모델들이 새로운 과제로 fine-tuning 가능한 다목적 backbone이 된 것처럼, VGGT가 계산한 feature도 동적 비디오의 point tracking과 novel view synthesis 같은 downstream 과제를 크게 개선함을 보인다. DepthAnything·MoGe·LRM 같은 최근의 대규모 3D 신경망들은 monocular depth 추정이나 novel view synthesis 같은 단일 3D 과제에만 집중하는 반면, VGGT는 공유 backbone으로 관심 있는 3D 값 전부를 함께 예측한다. 잠재적 중복이 있는데도 상호 연관된 3D 속성들을 함께 예측하도록 학습하는 것이 전체 정확도를 높이고, inference에서는 따로 예측한 depth와 camera parameter로 point map을 유도하는 것이 전용 point map head를 직접 쓰는 것보다 정확함을 보인다.

기여를 요약하면 다음과 같다. (1) 한 장부터 수백 장까지의 장면 이미지에서 camera intrinsics·extrinsics, point map, depth map, 3D point track 등 핵심 3D 속성 전부를 몇 초 안에 예측하는 large feed-forward transformer VGGT를 제안한다. (2) VGGT의 예측이 그대로 사용 가능하며, 느린 후처리 최적화를 쓰는 state-of-the-art 방법들과 대등하거나 대체로 더 좋음을 보인다. (3) BA 후처리와 결합하면 일부 3D 과제에 특화된 방법들과 비교해도 전반적으로 state-of-the-art를 달성하며 품질이 크게 오르는 경우가 많음을 보인다.

여러 입력 이미지로부터 point cloud와 camera frustum, keypoint track, depth map을 한 번에 예측한 VGGT 결과 [Figure 1] 최소한의 3D inductive bias로 대량의 3D annotation 데이터에 학습돼, 수백 장의 이미지에서 camera·point map·depth map·point track을 1초 이내에 한 번에 예측하는 VGGT

Structure from Motion. 정적 장면을 서로 다른 시점에서 찍은 이미지 집합에서 camera parameter를 추정하고 sparse point cloud를 재구성하는 고전적 컴퓨터 비전 문제다. 전통적 SfM pipeline은 image matching, triangulation, bundle adjustment 등 여러 단계로 구성되고, COLMAP이 이 pipeline 기반의 가장 대중적인 framework다. 최근에는 딥러닝이 keypoint 검출과 image matching을 중심으로 SfM pipeline의 여러 구성 요소를 개선했고, end-to-end 미분가능 SfM을 탐구한 방법들 중 VGGSfM은 어려운 phototourism 시나리오에서 전통적 알고리즘을 앞서기 시작했다.

Multi-view Stereo. 여러 겹치는 이미지에서 장면의 geometry를 densely 재구성하는 과제로, 보통 SfM으로 추정한 camera parameter를 안다고 가정한다. MVS 방법은 전통적 handcrafted, global optimization, 학습 기반으로 나뉜다. DUSt3R와 MASt3R는 camera parameter 없이 두 view에서 정렬된 dense point cloud를 직접 추정한다. 일부 동시 연구들이 DUSt3R의 test-time 최적화를 신경망으로 대체하는 것을 탐구했지만 DUSt3R와 비슷하거나 못한 성능에 그쳤다. 반면 VGGT는 DUSt3R와 MASt3R를 큰 격차로 앞선다.

Tracking-Any-Point. Particle Video가 처음 도입하고 딥러닝 시대에 PIPs가 되살린 과제로, 동적 움직임을 포함한 비디오 시퀀스에서 관심 점들을 추적한다. 비디오와 2D query 점들이 주어지면 다른 모든 프레임에서 이 점들의 2D 대응을 예측한다. TAP-Vid가 세 벤치마크를 제안했고 TAPIR가 baseline을 개선했다. CoTracker는 점들 사이의 correlation으로 occlusion을 통과하는 추적을 했고, DOT는 occlusion을 통과하는 dense tracking을 가능하게 했다. 최근 TAPTR는 end-to-end transformer를, LocoTrack은 흔히 쓰는 pointwise feature를 주변 영역으로 확장했다. 이들은 모두 특화된 point tracker인데, 이 논문은 VGGT의 feature를 기존 point tracker와 결합하면 state-of-the-art tracking 성능이 나옴을 보인다.

3. Method

DINO patchify와 camera token 추가, frame별·global self-attention 교대, camera head와 DPT head로 구성된 VGGT 구조 [Figure 2] 입력 이미지를 DINO로 token화하고 camera token을 붙인 뒤 frame-wise·global self-attention을 교대로 적용하며, camera head가 extrinsics·intrinsics를, DPT head가 dense 출력을 예측하는 architecture

3.1 Problem definition and notation

입력은 같은 3D 장면을 관찰하는 \(N\) 장의 RGB 이미지 시퀀스 \((I_i)_{i=1}^{N}\), \(I_i \in \mathbb{R}^{3 \times H \times W}\) 다. VGGT의 transformer는 이 시퀀스를 프레임당 하나씩의 3D annotation 집합으로 mapping하는 함수다.

\[f\left( (I_i)_{i=1}^{N} \right) = \left( \mathbf{g}_i, D_i, P_i, T_i \right)_{i=1}^{N}\]

즉 각 이미지 \(I_i\) 를 camera parameter \(\mathbf{g}_i \in \mathbb{R}^9\)(intrinsics·extrinsics), depth map \(D_i \in \mathbb{R}^{H \times W}\), point map \(P_i \in \mathbb{R}^{3 \times H \times W}\), point tracking용 \(C\) 차원 feature grid \(T_i \in \mathbb{R}^{C \times H \times W}\) 로 mapping한다. camera parameter \(\mathbf{g}\) 는 VGGSfM의 parametrization을 따라 rotation quaternion \(\mathbf{q} \in \mathbb{R}^4\), translation 벡터 \(\mathbf{t} \in \mathbb{R}^3\), field of view \(\mathbf{f} \in \mathbb{R}^2\) 를 이어 붙인 \(\mathbf{g} = [\mathbf{q}, \mathbf{t}, \mathbf{f}]\) 다. principal point는 이미지 중심으로 가정한다.

depth map \(D_i\) 는 각 픽셀 위치 \(\mathbf{y}\) 에 \(i\) 번째 카메라에서 관찰된 depth 값 \(D_i(\mathbf{y}) \in \mathbb{R}^+\) 를, point map \(P_i\) 는 각 픽셀에 대응하는 3D 장면 점 \(P_i(\mathbf{y}) \in \mathbb{R}^3\) 를 연결한다. 중요한 점은 DUSt3R처럼 point map이 viewpoint invariant하다는 것이다. 3D 점 \(P_i(\mathbf{y})\) 는 world 기준 좌표계로 삼는 첫 번째 카메라 \(\mathbf{g}_1\) 의 좌표계에서 정의된다. keypoint tracking은 track-any-point 방법들을 따른다. query 이미지 \(I_q\) 의 고정 query 점 \(\mathbf{y}_q\) 가 주어지면 모든 이미지 \(I_i\) 에서 대응하는 2D 점 \(\mathbf{y}_i \in \mathbb{R}^2\) 로 이뤄진 track \(\mathcal{T}^{\star}(\mathbf{y}_q) = (\mathbf{y}_i)_{i=1}^{N}\) 을 출력한다. transformer \(f\) 는 track을 직접 출력하지 않고 tracking에 쓸 feature \(T_i\) 를 출력하며, tracking은 3.3절의 별도 모듈 \(\mathcal{T}\) 에 맡긴다. 이 모듈은 query 점과 dense tracking feature를 받아 track을 계산하고, 두 네트워크 \(f\) 와 \(\mathcal{T}\) 는 end-to-end로 함께 학습된다.

Order of Predictions. 입력 시퀀스의 이미지 순서는 첫 이미지가 기준 프레임으로 선택된다는 점만 빼면 임의다. 네트워크는 첫 프레임을 제외한 모든 프레임에 대해 permutation equivariant하게 설계된다.

Over-complete Predictions. VGGT가 예측하는 값들이 모두 독립은 아니다. 예를 들어 DUSt3R가 보였듯 camera parameter \(\mathbf{g}\) 는 invariant point map \(P\) 에서 PnP 문제를 풀어 유도할 수 있고, depth map도 point map과 camera parameter에서 유도할 수 있다. 그러나 4.5절에서 보이듯, 닫힌 형식의 관계로 이어져 있어도 학습 중 VGGT에 이 값들을 모두 명시적으로 예측하게 하는 것이 상당한 성능 이득을 준다. 한편 inference에서는 독립적으로 추정한 depth map과 camera parameter를 결합하는 것이 전용 point map branch를 직접 쓰는 것보다 더 정확한 3D 점을 만든다.

3.2 Feature Backbone

최근 3D 딥러닝 연구들을 따라 3D inductive bias를 최소화한 단순한 architecture를 설계하고, 모델이 충분한 양의 3D annotation 데이터에서 배우게 한다. 모델 \(f\) 는 large transformer로 구현한다. 각 입력 이미지 \(I\) 는 DINO로 \(K\) 개 token \(\mathrm{t}^I \in \mathbb{R}^{K \times C}\) 로 patchify된다(token 수는 이미지 해상도에 따라 달라진다). 모든 프레임의 image token을 합친 집합이 frame별 self-attention과 global self-attention을 교대하는 주 네트워크 구조를 통과한다.

Alternating-Attention. 표준 transformer 설계를 약간 조정한 Alternating-Attention(AA) 을 도입해, transformer가 각 프레임 안과 전체를 번갈아 보게 한다. frame별 self-attention은 각 프레임 안의 token들에, global self-attention은 모든 프레임의 token 전체에 attend한다. 이것이 서로 다른 이미지 사이의 정보 통합과 각 이미지 안 token들의 activation 정규화 사이에서 균형을 잡아 준다. 기본값으로 global·frame별 attention 각 \(L = 24\) layer를 쓴다. cross-attention layer는 전혀 쓰지 않고 self-attention만 쓴다.

3.3 Prediction heads

각 입력 이미지 \(I_i\) 의 image token \(\mathrm{t}^I_i\) 에 camera token \(\mathrm{t}^{\mathbf{g}}_i \in \mathbb{R}^{1 \times C'}\) 1개와 register token \(\mathrm{t}^R_i \in \mathbb{R}^{4 \times C'}\) 4개를 덧붙인다. 이들의 concatenation이 AA transformer를 통과해 출력 token \((\hat{\mathrm{t}}^I_i, \hat{\mathrm{t}}^{\mathbf{g}}_i, \hat{\mathrm{t}}^R_i)\) 을 낸다. 이때 첫 프레임의 camera token과 register token은 나머지 프레임과 다른 학습 가능한 token 집합으로 설정해, 모델이 첫 프레임을 구별하고 3D 예측을 첫 카메라의 좌표계로 표현할 수 있게 한다. AA transformer에 frame별 self-attention이 있어 camera·register token이 같은 이미지의 token들과 결합하므로, 정제된 token들은 frame별로 특화된다. 관례대로 출력 register token은 버리고 \(\hat{\mathrm{t}}^I_i\), \(\hat{\mathrm{t}}^{\mathbf{g}}_i\) 를 예측에 쓴다.

Coordinate Frame. camera·point map·depth map은 첫 카메라 \(\mathbf{g}_1\) 의 좌표계에서 예측한다. 따라서 첫 카메라의 extrinsics 출력은 항등으로, 즉 첫 rotation quaternion은 \(\mathbf{q}_1 = [0, 0, 0, 1]\), 첫 translation은 \(\mathbf{t}_1 = [0, 0, 0]\) 으로 설정된다.

Camera Predictions. camera parameter \((\hat{\mathbf{g}}^i)_{i=1}^{N}\) 은 출력 camera token에서 self-attention layer 4개와 linear layer 하나를 거쳐 예측한다. 이것이 camera intrinsics·extrinsics를 예측하는 camera head다.

Dense Predictions. 출력 image token \(\hat{\mathrm{t}}^I_i\) 는 dense 출력(depth map \(D_i\), point map \(P_i\), tracking feature \(T_i\)) 예측에 쓴다. 먼저 DPT layer로 dense feature map \(F_i \in \mathbb{R}^{C'' \times H \times W}\) 로 변환하고, 각 \(F_i\) 를 \(3 \times 3\) convolution으로 depth map \(D_i\) 와 point map \(P_i\) 에 mapping한다. DPT head는 tracking head의 입력이 되는 dense feature \(T_i\) 도 출력한다. depth map과 point map 각각에 대해 aleatoric uncertainty \(\Sigma^D_i \in \mathbb{R}^{H \times W}_+\) 와 \(\Sigma^P_i \in \mathbb{R}^{H \times W}_+\) 도 예측한다. uncertainty map은 loss에 쓰이고, 학습 후에는 예측에 대한 모델의 confidence에 비례한다.

Tracking. tracking 모듈 \(\mathcal{T}\) 는 dense tracking feature \(T_i\) 를 입력받는 CoTracker2 architecture로 구현한다. query 이미지 \(I_q\) 의 query 점 \(\mathbf{y}_j\) 가 주어지면(학습 중에는 항상 \(q = 1\) 이지만 다른 이미지도 query로 쓸 수 있다), \(\mathcal{T}\) 는 \(\mathbf{y}_j\) 와 같은 3D 점에 대응하는 2D 점들을 모든 이미지에서 예측한다. query 이미지의 feature map \(T_q\) 를 query 점에서 bilinear sampling해 feature를 얻고, 이를 다른 모든 feature map \(T_i\)(\(i \neq q\))와 correlate해 correlation map 집합을 만든 뒤, self-attention layer들로 처리해 최종 2D 점들을 예측한다. VGGSfM처럼 이 tracker는 입력 프레임의 시간 순서를 가정하지 않아 비디오가 아닌 임의의 이미지 집합에도 적용할 수 있다.

3.4 Training

Training Losses. VGGT 모델 \(f\) 는 multi-task loss로 end-to-end 학습한다.

\[\mathcal{L} = \mathcal{L}_{\text{camera}} + \mathcal{L}_{\text{depth}} + \mathcal{L}_{\text{pmap}} + \lambda \mathcal{L}_{\text{track}}\]

camera·depth·point map loss는 범위가 비슷해 서로 가중치를 둘 필요가 없었고, tracking loss는 \(\lambda = 0.05\) 로 낮춘다. camera loss는 예측 camera \(\hat{\mathbf{g}}_i\) 와 ground truth \(\mathbf{g}_i\) 를 Huber loss로 비교한다.

\[\mathcal{L}_{\text{camera}} = \sum_{i=1}^{N} \left\| \hat{\mathbf{g}}_i - \mathbf{g}_i \right\|_{\epsilon}\]

여기서 \(\| \cdot \|_{\epsilon}\) 는 Huber loss다. depth loss는 DUSt3R를 따라 aleatoric-uncertainty loss를 구현하는데, 예측 depth \(\hat{D}_i\) 와 ground-truth depth \(D_i\) 의 불일치를 예측 uncertainty map \(\hat{\Sigma}^D_i\) 로 가중한다. DUSt3R와 달리 monocular depth 추정에서 널리 쓰는 gradient 기반 항도 적용한다.

\[\mathcal{L}_{\text{depth}} = \sum_{i=1}^{N} \| \Sigma^D_i \odot (\hat{D}_i - D_i) \| + \| \Sigma^D_i \odot (\nabla \hat{D}_i - \nabla D_i) \| - \alpha \log \Sigma^D_i\]

여기서 \(\odot\) 는 channel-broadcast 원소별 곱, \(\nabla\) 는 공간 gradient다. 첫 항은 depth 오차, 둘째 항은 depth gradient 오차를 uncertainty로 가중하고, 마지막 \(-\alpha \log \Sigma^D_i\) 항은 uncertainty를 무한정 키워 loss를 회피하는 것을 막는 정규화다. point map loss \(\mathcal{L}_{\text{pmap}}\) 은 point map uncertainty \(\Sigma^P_i\) 를 써서 같은 형태로 정의한다. tracking loss는

\[\mathcal{L}_{\text{track}} = \sum_{j=1}^{M} \sum_{i=1}^{N} \| \mathbf{y}_{j,i} - \hat{\mathbf{y}}_{j,i} \|\]

이다. 바깥 합은 query 이미지의 모든 ground-truth query 점 \(\mathbf{y}_j\) 에 대해 돌고, \(\mathbf{y}_{j,i}\) 는 이미지 \(I_i\) 에서 \(\mathbf{y}_j\) 의 ground-truth 대응, \(\hat{\mathbf{y}}_{j,i}\) 는 tracking 모듈의 예측이다. 추가로 CoTracker2를 따라 점이 프레임에서 보이는지 추정하는 visibility loss(binary cross entropy)를 적용한다.

Ground Truth Coordinate Normalization. 장면의 scale을 바꾸거나 전역 기준 좌표계를 바꿔도 이미지는 전혀 달라지지 않으므로, 그런 어떤 변형도 3D reconstruction의 정당한 결과다. 데이터 정규화로 이 모호성을 제거해 표준 선택을 만들고 transformer가 그 특정 변형을 출력하게 한다. DUSt3R를 따라 먼저 모든 값을 첫 카메라 \(\mathbf{g}_1\) 의 좌표계로 표현하고, point map \(P\) 의 모든 3D 점에서 원점까지의 평균 유클리드 거리를 계산해 그 scale로 camera translation \(\mathbf{t}\), point map \(P\), depth map \(D\) 를 정규화한다. 중요한 점은 DUSt3R와 달리 transformer의 예측 출력에는 이 정규화를 적용하지 않고, 학습 데이터에서 선택한 정규화를 모델이 배우게 강제한다는 것이다.

Implementation Details. 기본값으로 global·frame별 attention 각 24 layer를 쓰고, 전체 파라미터는 약 12억 개다. AdamW로 160K iteration 학습하고, peak learning rate 0.0002·warmup 8K의 cosine schedule을 쓴다. batch마다 무작위 학습 장면에서 2~24 프레임을 sampling한다. 입력 프레임·depth map·point map은 최대 변이 518픽셀이 되게 resize하고 종횡비를 0.33~1.0에서 무작위화하며, color jittering·Gaussian blur·grayscale augmentation을 무작위로 적용한다. 학습은 A100 GPU 64개로 9일 걸린다. 안정성을 위해 gradient norm clipping(threshold 1.0), 효율을 위해 bfloat16과 gradient checkpointing을 쓴다.

Training Data. Co3Dv2, BlendMVS, DL3DV, MegaDepth, Kubric, WildRGB, ScanNet, HyperSim, Mapillary, Habitat, Replica, MVS-Synth, PointOdyssey, Virtual KITTI, Aria Synthetic Environments, Aria Digital Twin, 그리고 Objaverse와 비슷한 artist 제작 asset의 synthetic 데이터셋 등 크고 다양한 데이터셋 모음으로 학습했다. 실내·실외, synthetic·실사를 아우르고, 3D annotation은 직접 센서 캡처·synthetic 엔진·SfM 등 여러 출처에서 나온다. 데이터셋 조합의 규모와 다양성은 MASt3R와 대체로 비슷하다.

4. Experiments

4.1 Camera Pose Estimation

CO3Dv2와 RealEstate10K 데이터셋에서 camera pose 추정을 평가한다(Table 1). 장면마다 무작위 10장을 골라 표준 지표 AUC@30으로 평가한다. RRA(Relative Rotation Accuracy)와 RTA(Relative Translation Accuracy)는 각 이미지 쌍의 rotation·translation 상대 각오차를 계산하고 threshold를 적용해 정확도를 구하며, AUC는 threshold를 바꿔 가며 구한 RRA·RTA 중 최솟값의 accuracy-threshold 곡선 아래 면적이다. Table 1의 학습 기반 방법들은 Co3Dv2로 학습됐고 RealEstate10K로는 학습되지 않았다.

Methods Re10K (unseen) AUC@30 ↑ CO3Dv2 AUC@30 ↑ Time
Colmap+SPSG 45.2 25.3 ~15s
PixSfM 49.4 30.1 >20s
PoseDiff 48.0 66.5 ~7s
DUSt3R 67.7 76.7 ~7s
MASt3R 76.4 81.8 ~9s
VGGSfM v2 78.9 83.4 ~10s
MV-DUSt3R ‡ 71.3 69.5 ~0.6s
CUT3R ‡ 75.3 82.8 ~0.6s
FLARE ‡ 78.8 83.3 ~0.5s
Fast3R ‡ 72.7 82.5 ~0.2s
Ours (Feed-Forward) 85.3 88.2 ~0.2s
Ours (with BA) 93.5 91.8 ~1.8s

[Table 1] RealEstate10K·CO3Dv2에서 무작위 10 프레임의 camera pose 추정(굵게 최고, 밑줄 차선). 어느 방법도 Re10K로 학습되지 않았고, 실행 시간은 H100 GPU 기준. ‡는 동시(concurrent) 연구

feed-forward 모델인 VGGT는 DUSt3R/MASt3R의 Global Alignment나 VGGSfM의 BA처럼 보통 10초 이상 걸리는 비싼 후최적화를 쓰는 방법들을 포함해, 두 데이터셋의 모든 지표에서 경쟁 방법들을 일관되게 앞선다. VGGT는 같은 하드웨어에서 0.2초의 feed-forward만으로 더 나은 성능을 낸다. 동시 연구들(‡)과 비교해도 성능 우위가 뚜렷하고 속도는 가장 빠른 Fast3R와 비슷하다. 어느 방법도 학습하지 않은 RealEstate10K에서 우위가 더 커서 VGGT의 뛰어난 일반화가 확인된다. BA와 결합하면 정확도가 더 오른다. VGGT는 이미 정확에 가까운 point/depth map을 직접 예측해 BA의 좋은 초기화가 되므로, VGGSfM처럼 BA 안에서 triangulation과 반복 정제를 할 필요가 없어 BA를 붙여도 약 2초로 훨씬 빠르다.

4.2 Multi-view Depth Estimation

MASt3R를 따라 DTU 데이터셋에서 multi-view depth 추정을 평가한다. 표준 DTU 지표인 Accuracy(예측에서 ground truth까지의 최소 유클리드 거리), Completeness(ground truth에서 예측까지의 최소 유클리드 거리), 둘의 평균인 Overall(Chamfer distance)을 보고한다.

Known GT camera Method Acc. ↓ Comp. ↓ Overall ↓
Gipuma 0.283 0.873 0.578
MVSNet 0.396 0.527 0.462
CIDER 0.417 0.437 0.427
PatchmatchNet 0.427 0.377 0.417
MASt3R 0.403 0.344 0.374
GeoMVSNet 0.331 0.259 0.295
DUSt3R 2.677 0.805 1.741
Ours 0.389 0.374 0.382

[Table 2] DTU 데이터셋의 dense MVS 추정(부문별 굵게 최고). 위쪽은 ground-truth camera를 아는 방법, 아래쪽은 모르는 방법

Table 2에서 DUSt3R와 VGGT만 ground-truth camera 없이 동작한다. MASt3R는 ground-truth camera로 match를 triangulate해 depth map을 유도하고, GeoMVSNet 같은 딥 MVS 방법은 ground-truth camera로 cost volume을 만든다. VGGT는 DUSt3R를 크게 앞서 Overall을 1.741에서 0.382로 줄이고, test에서 ground-truth camera를 아는 방법들과도 비슷한 결과를 낸다. 이 큰 성능 이득은 pairwise camera triangulation 여러 개를 평균하는 DUSt3R의 임시방편적 정렬 절차에 기대지 않고, multi-view triangulation 추론을 원생적으로 가르치는 multi-image 학습 방식 덕분으로 보인다.

4.3 Point Map Estimation

ETH3D 데이터셋에서 예측 point cloud의 정확도를 DUSt3R·MASt3R와 비교한다. 장면마다 10 프레임을 무작위 sampling하고, 예측 point cloud를 Umeyama 알고리즘으로 ground truth에 정렬하며, 공식 mask로 유효하지 않은 점을 거른 뒤 Accuracy·Completeness·Overall(Chamfer distance)을 보고한다.

Methods Acc. ↓ Comp. ↓ Overall ↓ Time
DUSt3R 1.167 0.842 1.005 ~7s
MASt3R 0.968 0.684 0.826 ~9s
Ours (Point) 0.901 0.518 0.709 ~0.2s
Ours (Depth + Cam) 0.873 0.482 0.677 ~0.2s

[Table 3] ETH3D의 point map 추정(굵게 최고, 밑줄 차선). DUSt3R·MASt3R는 global alignment를 쓰고 VGGT는 feed-forward. Ours (Point)는 point map head 직접 사용, Ours (Depth + Cam)은 depth map head와 camera head의 결합

DUSt3R와 MASt3R가 장면당 약 10초의 비싼 최적화(global alignment)를 수행하는데도, VGGT는 재구성당 0.2초의 단순한 feed-forward만으로 이들을 크게 앞선다. 또 추정 point map을 직접 쓰는 것보다 depth·camera head의 예측(예측 depth map을 예측 camera parameter로 3D에 unprojection)이 더 정확했다. 복잡한 과제(point map 추정)를 더 단순한 하위 문제(depth map·camera 예측)로 분해하는 이득으로 보인다(학습 때는 camera·depth map·point map이 함께 supervise되는데도 그렇다). in-the-wild 장면의 정성 비교(Figure 3)에서 VGGT는 유화, 겹치지 않는 프레임, 사막처럼 반복적·균질한 texture 같은 어려운 out-of-domain 예제에서도 고품질 예측을 내고 잘 일반화한다.

유화, 겹침 없는 두 이미지, 반복 texture 장면에서 VGGT와 DUSt3R의 point map 예측 비교 [Figure 3] in-the-wild 이미지에서 DUSt3R와의 정성 비교. 유화의 기하 구조를 복원하고(윗줄), 겹침 없는 두 이미지에서 3D 장면을 복원하며(가운데), 반복 texture(아랫줄)에서도 고품질 예측

4.4 Image Matching

two-view image matching은 두 view로 제한된 rigid point tracking의 특수한 경우라서, 모델이 이 과제에 특화되지 않았어도 tracking 정확도를 재는 적절한 벤치마크다. ScanNet-1500의 표준 protocol을 따라, 이미지 쌍마다 match를 추출해 essential matrix를 추정하고 상대 camera pose로 분해한 뒤 AUC로 잰 상대 pose 정확도를 보고한다. 평가에서는 ALIKED로 keypoint를 검출해 query 점으로 삼고 tracking branch \(\mathcal{T}\) 로 둘째 프레임의 대응을 찾으며, 평가 hyperparameter(match 수, RANSAC threshold 등)는 Roma를 따른다.

Method AUC@5 ↑ AUC@10 ↑ AUC@20 ↑
SuperGlue 16.2 33.8 51.8
LoFTR 22.1 40.8 57.6
DKM 29.4 50.7 68.3
CasMTR 27.1 47.0 64.4
Roma 31.8 53.4 70.9
Ours 33.9 55.2 73.4

[Table 4] ScanNet-1500의 two-view matching 비교(굵게 최고). two-view 설정에 특화되지 않은 tracking head가 state-of-the-art matching 방법 Roma를 능가

정적 장면의 unordered 이미지에서의 keypoint track과 CoTracker 결합 후 동적 장면 tracking 시각화 [Figure 5] rigid·dynamic point tracking 시각화. 위는 정적 장면의 unordered 이미지 집합에 대한 VGGT tracking 모듈 \(\mathcal{T}\) 의 keypoint track, 아래는 VGGT backbone을 fine-tuning해 강화한 동적 point tracker CoTracker의 순차 입력 처리

4.5 Ablation Studies

Feature Backbone. Alternating-Attention 설계의 효과를 두 대안 attention 구조와 비교해 검증한다. (a) global self-attention만 쓰는 구조, (b) cross-attention을 쓰는 구조다. 공정한 비교를 위해 모든 변형이 총 \(2L\) 개 attention layer로 파라미터 수를 동일하게 유지하고, hidden 차원·head 수 같은 hyperparameter도 같게 한다. 장면 geometry와 camera parameter의 종합적 이해를 반영하는 point map 추정 정확도를 평가 지표로 쓴다.

ETH3D Dataset Acc. ↓ Comp. ↓ Overall ↓
Cross-Attention 1.287 0.835 1.061
Global Self-Attention Only 1.032 0.621 0.827
Alternating-Attention 0.901 0.518 0.709

[Table 5] ETH3D에서 transformer backbone ablation(굵게 최고, 밑줄 차선)

Table 5에서 AA architecture가 두 baseline 변형을 뚜렷한 격차로 앞선다. 다른 예비 실험들에서도 cross-attention을 쓰는 구조가 self-attention만 쓰는 구조보다 일관되게 못했다.

Multi-task Learning. 출력들이 겹칠 수 있는데도(예: depth map과 camera parameter로 point map을 만들 수 있다) 단일 네트워크가 여러 3D 값을 동시에 배우는 이득을 검증한다.

w. \(\mathcal{L}_{\text{camera}}\) w. \(\mathcal{L}_{\text{depth}}\) w. \(\mathcal{L}_{\text{track}}\) Acc. ↓ Comp. ↓ Overall ↓
1.042 0.627 0.834
0.920 0.534 0.727
0.976 0.603 0.790
0.901 0.518 0.709

[Table 6] multi-task 학습 ablation(굵게 최고, 밑줄 차선). camera·depth·track 추정을 함께 학습할 때 ETH3D point map 추정 정확도가 최고

Table 6에서 보듯 camera·depth·track 추정 없이 학습하면 point map 추정 정확도가 눈에 띄게 떨어진다. 특히 camera parameter 추정을 넣는 것이 point map 정확도를 뚜렷이 높이고, depth 추정의 기여는 상대적으로 작다.

4.6 Finetuning for Downstream Tasks

Feed-forward Novel View Synthesis. 기존 방법 대부분은 camera parameter를 아는 이미지들을 입력받아 새 시점의 target 이미지를 예측한다. 명시적 3D 표현에 기대는 대신 LVSM을 따라 VGGT가 target 이미지를 직접 출력하게 수정하되, 입력 프레임의 camera parameter를 가정하지 않는다. LVSM의 학습·평가 protocol을 그대로 따라 입력 4개 view를 쓰고 target 시점을 Plücker ray로 표현한다. 수정은 단순하다. 입력 이미지는 그대로 DINO로 token화하고, target view는 Plücker ray 이미지를 convolution layer로 token화한다. 두 token을 이어 붙여 AA transformer로 처리하고 DPT head로 target view의 RGB를 regression한다. source 이미지에는 Plücker ray를 입력하지 않으므로 모델은 입력 프레임의 camera parameter를 받지 않는다.

Method Known Input Cam Size PSNR ↑ SSIM ↑ LPIPS ↓
LGM 256 21.44 0.832 0.122
GS-LRM 256 29.59 0.944 0.051
LVSM 256 31.71 0.957 0.027
Ours-NVS* 224 30.41 0.949 0.033

[Table 7] GSO 데이터셋의 view synthesis 정량 비교. *는 작은 학습 데이터(Objaverse의 약 20% 크기) 사용

LVSM은 Objaverse로 학습됐고, 이 실험은 그 약 20% 크기의 비슷한 내부 데이터셋을 쓴다. Table 7에서 보듯 입력 camera parameter가 필요 없고 학습 데이터도 적은데 GSO 데이터셋에서 경쟁력 있는 결과를 낸다. 더 큰 학습 데이터셋이면 더 나은 결과가 기대된다.

Dynamic Point Tracking. 학습된 feature의 또 다른 downstream 응용이다. 표준 point tracking 지표를 보고한다. OA(occlusion 예측의 이진 정확도), \(\delta_{\text{avg}}^{\text{vis}}\)(보이는 점 중 픽셀 threshold 안에서 정확히 추적된 평균 비율), AJ(tracking과 occlusion 예측 정확도를 함께 재는 Average Jaccard)다. state-of-the-art CoTracker2 모델의 backbone을 VGGT의 사전학습 feature backbone으로 교체해 적응시킨다(VGGT는 순차 비디오가 아니라 unordered 이미지 모음으로 학습됐기 때문에 필요한 조치다). VGGT backbone이 예측한 tracking feature \(T_i\) 가 기존 feature extractor의 출력을 대체해 CoTracker2 architecture의 나머지로 들어가고, 수정된 tracker 전체를 Kubric에서 fine-tuning한다.

Method Kinetics AJ \(\delta_{\text{avg}}^{\text{vis}}\) OA RGB-S AJ \(\delta_{\text{avg}}^{\text{vis}}\) OA DAVIS AJ \(\delta_{\text{avg}}^{\text{vis}}\) OA
TAPTR 49.0 64.4 85.2 60.8 76.2 87.0 63.0 76.1 91.1
LocoTrack 52.9 66.8 85.3 69.7 83.2 89.5 62.9 75.3 87.2
BootsTAPIR 54.6 68.4 86.5 70.8 83.0 89.9 61.4 73.6 88.7
CoTracker 49.6 64.3 83.3 67.4 78.9 85.2 61.8 76.1 88.3
CoTracker + Ours 57.2 69.0 88.9 72.1 84.0 91.6 64.7 77.5 91.4

[Table 8] TAP-Vid 벤치마크의 dynamic point tracking 결과(굵게 최고, 밑줄 차선). 동적 장면용으로 설계되지 않았는데도 사전학습 가중치로 CoTracker를 fine-tuning하면 성능이 크게 향상

Table 8에서 보듯 사전학습 VGGT의 통합은 TAP-Vid 벤치마크에서 CoTracker의 성능을 크게 높인다. 예를 들어 TAP-Vid RGB-S에서 \(\delta_{\text{avg}}^{\text{vis}}\) 가 78.9에서 84.0으로 오른다. TAP-Vid에 다양한 출처의 빠른 동적 움직임 비디오가 포함되는데도 강한 성능을 내는 것은, 명시적으로 설계되지 않은 시나리오에서도 feature가 일반화됨을 보여준다.

5. Discussions

Limitations. 다양한 in-the-wild 장면에 강하게 일반화하지만 몇 가지 한계가 남는다. 현재 모델은 fisheye나 panorama 이미지를 지원하지 않고, 극단적인 입력 rotation에서는 재구성 성능이 떨어진다. 또 가벼운 non-rigid 움직임은 다루지만 큰 non-rigid 변형이 있는 시나리오에서는 실패한다. 다만 이 접근의 중요한 장점은 유연성과 적응 용이성이다. 이런 한계는 최소한의 구조 수정으로 해당 데이터셋에 fine-tuning하면 바로 해결할 수 있는데, test-time 최적화를 특수 시나리오에 맞게 대대적으로 재설계해야 하는 기존 접근과 뚜렷이 구별되는 점이다.

Runtime and Memory. 입력 프레임 수에 따른 feature backbone의 inference 시간과 peak GPU 메모리를 평가한다(Table 9). 측정은 flash attention v3를 쓰는 NVIDIA H100 GPU 1개, 해상도 \(336 \times 518\) 기준이다.

Input Frames 1 2 4 8 10 20 50 100 200
Time (s) 0.04 0.05 0.07 0.11 0.14 0.31 1.04 3.12 8.75
Mem. (GB) 1.88 2.07 2.45 3.23 3.63 5.58 11.41 21.15 40.63

[Table 9] 입력 프레임 수에 따른 실행 시간(초)과 peak GPU 메모리(GB)

사용자가 요구 사항과 자원에 따라 branch 조합을 고를 수 있어 feature backbone 비용에 집중한다. camera head는 가벼워서 backbone 대비 시간 약 5%·메모리 약 2%를 쓰고, DPT head는 프레임당 평균 0.03초·0.2GB를 쓴다. GPU 메모리가 충분하면 여러 프레임을 forward 한 번에 효율적으로 처리할 수 있다. 프레임 간 관계는 feature backbone 안에서만 처리되고 DPT head는 프레임별 독립 예측이므로, GPU 자원이 부족한 사용자는 프레임 단위로 예측할 수도 있다. token이 많을 때 global self-attention의 naive한 구현은 메모리 소모가 큰데, LLM 배포에 쓰이는 기법들로 절감·가속할 수 있다(예를 들어 Fast3R가 쓴 Tensor Parallelism은 이 모델에도 바로 적용 가능하다).

Patchifying. 이미지를 token으로 patchify하는 방법으로 \(14 \times 14\) convolution layer와 사전학습 DINOv2를 실험했다. DINOv2가 성능이 더 좋았고 특히 초기 학습이 훨씬 안정적이며 learning rate·momentum 같은 hyperparameter 변화에도 덜 민감해서, DINOv2를 기본 patchify 방법으로 택했다.

Differentiable BA. VGGSfM처럼 미분가능 bundle adjustment를 쓰는 아이디어도 탐구했다. 소규모 예비 실험에서 유망한 성능을 보였지만 병목은 학습 중 계산 비용이다. Theseus로 PyTorch에서 미분가능 BA를 켜면 학습 step이 보통 4배 느려져 대규모 학습에 비싸다. 그래서 이 논문에는 포함하지 않았지만, 명시적 3D annotation이 없는 시나리오에서 효과적인 supervision 신호가 될 수 있어 대규모 비지도 학습의 유망한 방향으로 인식한다.

Single-view Reconstruction. 쌍을 만들기 위해 이미지를 복제해야 하는 DUSt3R·MASt3R와 달리, 이 architecture는 단일 이미지 입력을 본질적으로 지원한다. 이 경우 global attention이 단순히 frame별 attention으로 바뀐다. single-view reconstruction용으로 명시적으로 학습되지 않았는데도 놀랍도록 좋은 결과를 보인다.

Normalizing Prediction. ground truth는 3D 점들의 평균 유클리드 거리로 정규화하지만, DUSt3R처럼 네트워크 예측에도 정규화를 적용하는 것은 수렴에 필요하지도 최종 성능에 유리하지도 않았고 오히려 학습에 추가 불안정을 들여왔다.

6. Conclusions

수백 장의 입력 view에 대해 핵심 3D 장면 속성 전부를 직접 추정할 수 있는 feed-forward 신경망 VGGT(Visual Geometry Grounded Transformer)를 제안했다. camera parameter 추정, multi-view depth 추정, dense point cloud reconstruction, 3D point tracking을 포함한 여러 3D 과제에서 state-of-the-art를 달성한다. 이 단순한 neural-first 접근은 정확하고 과제별로 특화된 결과를 얻기 위해 최적화와 후처리에 의존하는 전통적 visual geometry 기반 방법에서 벗어난다. 접근의 단순함과 효율성은 실시간 응용에 적합하며, 이 역시 최적화 기반 접근 대비 장점이다.