[CVPR 2025] VGGT: Visual Geometry Grounded Transformer

안녕하세요. 오늘 리뷰할 논문은 CVPR 2025에서 Best Paper Award를 받은 VGGT(Visual Geometry Grounded Transformer)입니다.

Introduction

본 논문은 3D reconstruction task를 다루고 있습니다. 3D reconstruction은 기본적으로 이미지를 여러장 입력받아 3D를 복원하는 task입니다. 기존에는 전통적인 3D reconstruction은 visual geometry 기반의 반복 최적화(iterative optimization)로 풀어왔습니다. 대표적인 것이 SfM(Structure from Motion)으로 keypoint detection, feature matching, triangulation, bundle adjustment(BA)로 이어지는 다단계 파이프라인입니다. 여기서 BA는 카메라 pose와 3D point를 동시에 최적화하는 단계로 reprojection error를 줄이도록 반복적으로 푸는 비선형 최적화 방법입니다. 이 전통적인 방법은 정확하긴 하지만 느리고, textureless한 벽이나 패턴이 반복되는 경우 그리고 극단적인 viewpoint 상황에서는 정합이 잘 되지 않는다는 단점이 존재합니다. 파이프라인의 각 단계가 hard decision(유알피 때 봐서 친숙한(?) 매칭 알고리즘인 RANSAC과 같은 알고리즘 등)을 내리기 때문에 한 번 버린 정보를 뒤 단계에서 되살릴 수 없고 오차가 누적된다는 구조적 약점도 있습니다. 위와 같은 문제를 해결하기 위해서 최근에는 딥러닝이 각 모듈을 대체하기 시작했습니다. end-to-end로 학습해 속도도 빠르면서 성능도 전통적인 기법에 근접하는 모델들이 많이 공개되었습니다. 하지만, 여전히 visual geometry optimation이 복잡하고 계산비용이 커서 근본적인 단점들이 해결되지는 않았었습니다.

2024년 CVPR에서 네이버 랩스(유럽 지점)이 공개한 DUSt3R은 카메라 calibration이나 pose 정보 없이 두 장의 이미지로부터 곧바로 pointmap을 regression하는 방식을 제안했습니다. visual geometry optimation을 regression으로 해결했다고할 수 있습니다. 성능이 좋은 것은 당연하고 속도면에서 큰 개선을 이뤄낸 연구입니다. 다만 DUSt3R에는 명확한 한계가 있습니다. 한 번에 두 장을 쌍으로 처리하기 때문에 이미지가 N장이면 N(N-1)/2개의 쌍을 각각 네트워크에 통과시킨 뒤 이 쌍들의 결과를 하나의 좌표계로 합치는 global alignment라는 후처리 최적화를 돌려야 합니다. DUSt3R의 global alignment는 이미지를 node, pair를 edge로 하는 connectivity graph를 만들고 pair마다 나오는 부분 3D 복원을 rigid하게 정렬해 하나의 공통 좌표계로 맞추는 최적화입니다. 이 과정이 사실상 geometry optimization이라 볼 수 있기 때문에 입력 이미지의 수가 늘어나게 되면 메모리와 속도가 기하급수적으로 늘어나게 됩니다. DUSt3R의 후속작인 MASt3R는 matching head를 추가해 correspondence를 개선했지만 여전히 2장의 쌍과 global alignment 구조는 그대로입니다. 그래서 DUSt3R의 단점을 공유하여 이미지 수가 늘어나면 forward pass 수가 제곱으로 늘고 DUSt3R는 32장 정도를 넘어가면 메모리가 터집니다. 따라서 MASt3R도 DUSt3R의 근본적인 문제를 해결했다고는 보기 어렵습니다.

본 논문인 VGGT는 후처리 geometry optimization을 아예 없애버리는 것으로 MASt3R의 단점을 개선하고 발전시킨 연구입니다. VGGT는 1장부터 수백 장까지의 이미지를 받아 한 번의 feed forward pass로 그 장면의 모든 핵심 3D 속성을 직접 예측합니다. 여기서 VGGT가 예측하는 핵심 3D 속성은 카메라 파라미터, depth map, point map, 3D point track입니다. 또한, VGGT는 별도의 3D inductive bias를 거의 넣지 않은 그냥 표준 대형 transformer입니다. 대량의 데이터로 학습한 3D 백본 모델이라고 볼 수 있습니다. 저자는 이 VGGT를 활용하여 downstream task들에서 활용한다면 기존 이미지 백본들보다 더 큰 효과를 볼 수 있다고 강조합니다.

Fig 1은 논문의 요약입니다. 여러장의 이미지를 입력으로 받아 카메라 파라미터, depth map, point map, point track을 한번에 출력하는 것을 그림으로 설명하고 있습니다.

Method

3D reconstruction의 입력은 같은 장면을 찍은 N개의 RGB 이미지 시퀀스 i=1..N 입니다. VGGT는 이 이미지들을 받아서 각 프레임 i마다 네 가지 output을 냅니다. 표기하면 f((I_i)) = (g_i, D_i, P_i, T_i) 입니다. 여기서 g_i는 카메라 파라미터, D_i는 depth map, P_i는 point map, T_i는 tracking을 위한 dense feature입니다.

카메라 파라미터 g_i는 9차원 벡터입니다. rotation을 나타내는 quaternionq(4차원), translation t(3차원), 그리고 field of view f(2차원)로 구성됩니다. 카메라의 extrinsic, intrinsic 파라미퍼 모두를 calibration 입력 없이 예측합니다. depth map D_i는 그 카메라 시점에서의 픽셀별 깊이이고, point map P_i는 픽셀별 3D 좌표(x, y, z)입니다. 여기서 중요한 제약이 하나 있는데 모든 3D output은 첫 번째 카메라(프레임 1)의 좌표계를 reference frame으로 표현합니다. 즉 첫 프레임의 카메라를 world 좌표계의 원점으로 잡는 것을 의미합니다(첫 카메라는 항상 identity: q_1=[0,0,0,1], t_1=[0,0,0]).

사실 depth map D_i와 카메라 파라미터 g_i만 있어도 point map P_i은 unprojection으로 계산해서 유도할 수 있다고 합니다. 하지만 저자는 학습 시에 전부 명시적으로 예측하도록 학습합니다. 이렇게 전부 명시적으로 예측하는 것이 모델의 전체적인 성능이 더 좋아진다고 합니다. 근데 또 신기한 것이 point map을 얻고 싶을 때 point map head를 직접 쓰는 것보다 depth map head와 camera head의 결과를 조합해서 point map을 만드는 게 오히려 더 정확했다고 합니다. 복잡한 task를 더 단순한 문제로 쪼개는 게 도움이 된다는 건데, 개인적으로는 이 부분이 논문에서 좀 재밌는 점이라고 생각합니다.

Fig 2는 VGGT의 구조도입니다. 구조는 꽤 간단한 편입니다. 먼저 입력 이미지는 DINOv2로 토큰화합니다. DINOv2는 freeze하여 사용하며 DINOv2가 다른 모델들에 비해 학습도 안정적이고, 성능도 높다고합니다. 그렇게 패치단위로 토큰화한 이후에는 각 프레임마다 camera 토큰 1개와 register token을 4개 추가합니다. camera 토큰은 나중에 카메라 파라미터로 refine되고 register 토큰은 scratch space 역할을 수행합니다. 그리고 첫번째 토큰만 나머지 프레임들과 다른 토큰을 부여해서 어떤 프레임이 reference frame인지를 구분할 수 있도록 설계합니다.

가운데 global attention과 frame attention을 저자는 alternating attention이라고 표현합니다. 대부분의 표준 transformer는 global attention만 수행하는데, VGGT는 두가지의 attention을 번갈아서 수행합니다. 하나는 frame attention으로 한 프레임의 내부 프레임들 사이의 attention입니다. 이 frame attention은 각 이미지 내분의 정보를 정리하는 역할을 수행합니다. global attention은 모든 프레임의 모든 토큰을 서로 attention을 수행합니다. 프레임 사이의 correspondence를 찾고 3D에 대한 이해를 학습하는 역할을 수행합니다. 이 두가지 attention을 번갈아서 수행하기에 각 프레임에서 보이는 정보를 찾고, 정보를 토대로 correspondence를 찾고 다시 그 correspondence를 통해 이미지를 이해하는 과정을 반복하게 됩니다. 이렇게 번갈아 학습하는 것이 학습 최적화에도, 성능에도 더 도움이 된다고 저자는 설명하고 있습니다. 저자는 epipolar나 depth 제약과 같은 handcrafted 하나 없이 오로지 attention을 번갈아 수행하는 것만으로 학습했습니다. RANSAC 같은 outlier 제거도 transformer가 내부적으로 처리할 수 있다고 합니다.

그렇게 학습된 토큰들은 head에 입력됩니다. Camera Head는 camera 토큰을 입력받아서 self attention과 fc layer를 통해 프레임 별 9차원의 카메라 파라미터를 예측합니다. Dense Prediction Transformer Head는 refine된 image 토큰을 dense feature map으로 변환한 뒤에 depth map, point map, tracking을 생성합니다.

Loss는 multi task loss로 L = L_{camera} + L_{depth} + L_{pointmap} + \lambda \cdot L_{track} 형태입니다. camera, depth, pointmap loss는 magnitude가 비슷해서 따로 balancing이 필요 없고 tracking loss만 down weight(\lambda=0.05)합니다. camera loss는 예측 카메라 파라미터에 대한 Huber loss입니다. depth와 point map loss에는 aleatoric uncertainty 가중치가 들어가는데, 쉽게 말해 모델이 스스로 “이 픽셀은 불확실하다”고 판단하면 그 부분의 loss 가중을 줄여주는 방식입니다. 다만 아무 데나 “다 불확실해”라고 예측해서 loss를 회피하지 못하도록 uncertainty에 대한 log 항으로 regularize합니다. 또한 depth, point map loss에는 gradient 기반 항이 들어가서 절대 depth값뿐 아니라 depth의 gradient도 맞추도록 합니다. tracking loss는 대응점 위치에 대한 L1 loss, visibility에 대한 binary cross entropy입니다.

Fig 3, 4는 VGGT의 정성적 결과를 보여줍니다.

Fig 5는 Tracking에 대한 정성적 결과입니다.

Experiments

Tab 1은 CO3Dv2와 RealEstate10K(Re10K) 데이터셋에서의 카메라 pose 추정 결과입니다. 각 scene에서 10장을 랜덤 샘플하고 RRA(Relative Rotation Accuracy)와 RTA(Relative Translation Accuracy)의 최솟값에 대한 AUC@30 성능입니다. 학습할 때는 Re10K 데이터셋을 본적이 없기 때문에 저자는 Re10K의 성능을 통해 일반화 성능을 확인할 수 있다고 합니다. 학습에 쓰지도 않은 Re10K에서 성능도 높은데 시간도 빠른 것을 확인할 수 있습니다.

Tab 2는 DTU 데이터셋에서의 dense MVS 추정 결과입니다.

Tab 3은 ETH3D에서의 point map 추정 결과, Tab 4는 ScanNet-1500에서의 two-view matching 결과입니다.

Tab 5와 Tab 6은 ablation study입니다. Tab 5는 attention에 대한 실험으로  alternating attention이 cross attention이나 global only보다 확실히 좋습니다. 특히 cross attention이 self attention보다 성능이 낮다는 점에서 단순한 설계가 오히려 성능이 더 높다는 것을 확인할 수 있습니다. Tab는 loss에 대한 실험입니다. over complete 설계와 multi task 학습의 효과를 정량적으로 뒷받침하는 표입니다.

Fig 6과 Tab 7은 downstream task에 파인튜닝 했을 때의 효과입니다. 성능이 좀 낮아보이지만, 다른 모델들과 다르게 입력 카메라 정보도 없고, 학습 데이터의 규모도 LVSM의 약 20퍼센트라고 합니다. 적은 데이터와 적은 정보로 학습했음에도 높은 성능을 보이고 있다는 것을 확인할 수 있습니다.

감사합니다.

Author: 박 성준

4 thoughts on “[CVPR 2025] VGGT: Visual Geometry Grounded Transformer

  1. 안녕하세요 성준님 리뷰 감사합니다!

    3D reconstruction task를 잘은 모르지만 VGGT는 간단하게 말하자면 기존처럼 복잡한 후처리 최적화를 거치지 않고 여러장의 이미지에서 3D정보를 한방에 예측하는 모델!이라고 이해했습니다!

    한가지 궁금한점은 논문과는 별개로 평소에 다루시던 주제와는 쪼금 다른 3D reconstruction task을 가지고 오셨길래 혹시 계기(?)가 따로 있었는지 궁금합니다~!

  2. 안녕하세요 성준님 좋은 리뷰 감사합니다!

    VGGT는 이전의 2장씩 처리하는 방법론(Mast3r, Dust3r)들에 비해 메모리 측면에서 효율적이라고 이해했습니다
    그러나 global attention 과정은 전부 모아서 attention을 하기 때문에 메모리가 상당히 들것이라고 생각되는데
    이러한 global attention이 연산적으로 무겁거나 메모리를 많이 먹지 않는 것인가요?

    그리고 Figure 2에서 보면, camera head를 통해 pose를 예측하고, DPT 모듈을 통해 depth map을 내놓는 것으로 보입니다. 서로 다른 head를 통해 나온 pose와 depth map이 같은 좌표계로 표현될 수 있는 이유가 궁금합니다.

    감사합니다.

  3. 안녕하세요 성준님 좋은 리뷰 감사합니다.
    VGGT를 간단하게만 쓱 훑어본 정도라 자세하게는 몰랐는데 덕분에 도움이 많이 되었습니다.
    VGGT가 절대적인 metric scale을 예측하는 모델은 아닌 것으로 보이는데 학습할 때 depth, point map, camera translation의 스케일은 어떻게 정규화하고 평가할 때는 GT와의 스케일을 어떻게 맞춰서 평가했는지 궁금합니다.
    감사합니다.

  4. 안녕하세요 성준님 좋은 리뷰 감사합니다.

    혹시 Depth 예측은 affine invariant depth인건가요 ? 아니면 real metric depth인건가요 ? 혹시나 vggt에서 만든 카메라 포즈의 기준은 어떤건지 궁금합니다

    감사합니다

Leave a Reply