[논문리뷰] DUSt3R: Geometric 3D Vision Made Easy (CVPR 2024)
카메라 파라미터를 모르는 사진 뭉치에서, calibration → 매칭 → pose → triangulation의 파이프라인 없이 곧바로 3D를 얻을 수 있을까? DUSt3R는 이미지 쌍에서 pointmap(픽셀별 3D 점의 dense field)을 직접 회귀하는 것으로 답한다. 그 하나의 출력에서 depth, 대응, intrinsics, pose, 3D 복원이 전부 흘러나온다.
논문 정보
| 항목 | 내용 |
|---|---|
| 제목 | DUSt3R: Geometric 3D Vision Made Easy |
| 저자 | Shuzhe Wang, Vincent Leroy, Yohann Cabon, Boris Chidlovskii, Jérôme Revaud |
| 소속 / 연도 | Aalto University · Naver Labs Europe, CVPR 2024 (arXiv:2312.14132) |
| 분야 | CV / 3D reconstruction |
| 코드 | GitHub |
1. Introduction
in-the-wild의 multi-view stereo(MVS)는 먼저 카메라의 intrinsic·extrinsic 파라미터를 알아내야 한다. 대응 픽셀을 3D에서 triangulation하는 모든 고성능 MVS의 전제이기 때문이다. 그런데 이 파라미터를 얻는 전통 SfM 파이프라인은 매칭 → 기하 검증 → pose 추정 → triangulation/BA의 순차적 하위 문제들의 연쇄라, 각 단계의 오류가 다음 단계로 누적되고, 단계마다의 핵심 계산(매칭, triangulation)이 정작 최종 최적화에서 함께 풀리지 않는다.
DUSt3R는 반대 방향인 Dense and Unconstrained Stereo 3D Reconstruction을 택한다. 카메라 calibration도 시점 pose도 모르는 상태에서, 이미지 쌍의 복원 문제를 pointmap의 회귀(regression) 로 정식화한다.
[Figure 1] 제약 없는 이미지 컬렉션에서 pointmap을 회귀하고, 그로부터 calibration·depth·대응·pose·3D 복원을 모두 얻는 DUSt3R 개요
- pointmap은 픽셀마다 3D 점 하나를 대응시키는 표현이라, 통상적인 projective 카메라 모델의 딱딱한 제약을 느슨하게 풀어 버린다
- 이 정식화는 단안(monocular)과 양안(binocular) 복원을 매끄럽게 통합한다. 이미지가 하나면 같은 이미지를 쌍으로 넣으면 된다
- 셋 이상의 이미지에는 모든 쌍별 pointmap을 공통 좌표계로 정렬하는 global alignment를 제안한다
- 구조는 표준 Transformer encoder/decoder라 CroCo 같은 강력한 사전학습을 그대로 활용한다
결과적으로 하나의 모델이 단안/다중 시점 depth 추정과 상대 pose 추정에서 새 SoTA를 세우고, visual localization까지 잘 된다. 논문 제목 그대로 “여러 기하 3D 비전 과제를 쉽게” 만든다.
2. Related Work
- SfM과 MVS: 전통 파이프라인은 keypoint 매칭과 카메라 파라미터에 의존하고, 학습 기반 개선(SuperPoint·SuperGlue, 학습형 MVS)도 파이프라인의 부품 교체에 머물렀다. end-to-end로 전 과정을 함께 푸는 시도는 드물다
- pointmap: 픽셀 정렬 3D 표현은 시점 합성·시각 측위 등에서 쓰였지만, DUSt3R처럼 카메라 정보 없는 쌍 복원의 출력 표현으로 삼은 것은 새롭다
- CroCo: cross-view completion(한 시점의 마스킹된 패치를 다른 시점을 참고해 복원하는 MAE류 사전학습). 기하 대응을 암묵적으로 배우므로 이 과제에 특히 잘 맞는다
3. Method
3.1 Overview
Pointmap. pointmap \(X \in \mathbb{R}^{W \times H \times 3}\) 은 해상도 \(W \times H\) 이미지의 각 픽셀 \((i,j)\) 에 3D 점 \(X_{i,j}\) 를 1:1 대응시키는 dense한 2D field다. 카메라 intrinsics \(K \in \mathbb{R}^{3\times3}\) 와 depthmap \(D \in \mathbb{R}^{W \times H}\) 가 있으면 pointmap은
\[X_{i,j} = K^{-1}\left[\, i\,D_{i,j},\ j\,D_{i,j},\ D_{i,j} \,\right]^\top\]로 얻어진다. 픽셀 좌표에 depth를 곱해 역투영한 것으로, 해당 카메라 좌표계로 표현된다. 카메라 \(n\) 의 pointmap \(X^n\) 을 카메라 \(m\) 의 좌표계로 옮긴 것을 \(X^{n,m}\) 이라 쓴다.
\[X^{n,m} = P_m P_n^{-1} h\!\left(X^n\right)\]- \(P_m, P_n \in \mathbb{R}^{3\times4}\): 각 이미지의 world-to-camera pose, \(h\): \((x,y,z) \to (x,y,z,1)\) 동차 좌표 변환
네트워크 \(\mathcal{F}\). 두 RGB 이미지 \(I^1, I^2 \in \mathbb{R}^{W \times H \times 3}\) 를 받아 pointmap 두 장 \(X^{1,1}, X^{2,1} \in \mathbb{R}^{W \times H \times 3}\) 과 confidence map \(C^{1,1}, C^{2,1}\) 을 출력한다. 표기가 말해 주듯 두 pointmap 모두 첫째 이미지 \(I^1\) 의 좌표계로 표현된다. 각 카메라 기준으로 출력하는 기존 접근과 근본적으로 다른 선택이고, 이것이 이후 모든 것의 기반이 된다.
[Figure 2] 네트워크 \(\mathcal{F}\) 의 구조. Siamese ViT encoder, 정보를 교환하는 두 decoder, 카메라 1 좌표계로 정렬된 두 pointmap 출력
- 공유 ViT encoder: 두 이미지를 같은 가중치로 인코딩한다: \(F^1 = \text{Encoder}(I^1),\ F^2 = \text{Encoder}(I^2)\)
-
cross-attention decoder: 두 decoder 갈래가 블록마다 서로의 token을 참조한다
\[G^1_i = \text{DecoderBlock}^1_i\!\left(G^1_{i-1},\, G^2_{i-1}\right), \qquad G^2_i = \text{DecoderBlock}^2_i\!\left(G^2_{i-1},\, G^1_{i-1}\right)\]- \(G^v_i\): 갈래 \(v\) 의 \(i\) 번째 블록 출력 token(\(G^v_0 := F^v\)), 각 블록은 self-attention → cross-attention(상대 갈래의 token 참조) → MLP 순
- 이 지속적인 양방향 정보 교환이 있어야 두 pointmap이 같은 좌표계로 정렬된 채 출력될 수 있다
- regression head: 갈래별로 decoder token들을 모아 pointmap과 confidence를 회귀한다: \(X^{v,1}, C^{v,1} = \text{Head}^v(G^v_0, \dots, G^v_B)\)
출력 pointmap은 미지의 scale factor까지만 정의된다. 또 이 구조는 어떤 기하 제약도 명시적으로 강제하지 않는다. pointmap이 물리적으로 타당한 카메라 모델에 대응할 필요조차 없다. 기하적으로 일관된 학습 데이터로부터 네트워크가 관련 prior를 스스로 배우게 두고, 그 대가로 강력한 사전학습을 얹을 수 있는 범용 구조를 얻는다.
3.2 Training Objective
3D regression loss. 유일한 학습 목표는 3D 공간에서의 회귀다. 정답 pointmap을 \(\bar{X}^{1,1}, \bar{X}^{2,1}\), 정답이 정의된 픽셀 집합을 \(\mathcal{D}^1, \mathcal{D}^2\) 라 할 때, view \(v \in \{1,2\}\) 의 픽셀 \(i \in \mathcal{D}^v\) 에 대해
\[\ell_{regr}(v, i) = \left\lVert\, \frac{1}{z} X^{v,1}_i - \frac{1}{\bar{z}} \bar{X}^{v,1}_i \,\right\rVert\]- \(z, \bar{z}\): 예측과 정답 각각의 정규화 인자. 두 pointmap의 유효한 점 전체가 원점에서 떨어진 평균 거리
- 예측과 정답을 각자의 평균 거리로 나눠 scale 모호성을 제거한 뒤 비교한다. calibration 없는 입력에서 metric scale은 원리적으로 알 수 없기 때문이다
Confidence-aware loss. 하늘·투명한 물체·한쪽 시점에만 보이는 영역처럼 3D가 잘 정의되지 않는 픽셀이 있다. 네트워크가 픽셀별 confidence \(C^{v,1}_i\) 를 함께 배우게 하고, 최종 loss는 confidence로 가중한다.
\[\mathcal{L}_{conf} = \sum_{v \in \{1,2\}} \sum_{i \in \mathcal{D}^v} C^{v,1}_i\, \ell_{regr}(v, i) \;-\; \alpha \log C^{v,1}_i\]- 첫 항: confidence가 높은 픽셀의 회귀 오차에 더 큰 벌. 네트워크는 어려운 픽셀의 confidence를 낮춰 손해를 줄일 수 있다
- \(-\alpha \log C^{v,1}_i\): confidence를 무작정 낮추지 못하게 하는 정규화 항, \(\alpha\) 는 그 강도
- \(C^{v,1}_i = 1 + \exp \tilde{C}^{v,1}_i > 1\) 로 두어 항상 1보다 크게 강제한다. 정의가 모호한 영역에서도 외삽(extrapolation)을 하게 만든다
3.3 Downstream Applications
pointmap 하나에서 고전 기하 파이프라인의 산출물이 전부 나온다.
픽셀 대응(matching). 두 이미지의 대응은 3D 공간의 최근접 이웃으로 찾는다. 상호(reciprocal) 매칭으로 outlier를 거른다.
\[\mathcal{M}_{1,2} = \left\{ (i, j) \;\middle|\; i = \text{NN}^{1,2}_1(j) \ \text{and} \ j = \text{NN}^{2,1}_1(i) \right\}\]- \(\text{NN}^{n,m}_k(i) = \arg\min_{j} \lVert X^{n,k}_j - X^{m,k}_i \rVert\): view \(m\) 의 점 \(i\) 에 대해 view \(n\) pointmap에서 가장 가까운 픽셀
Intrinsics 추정. 주점이 중심에 있고 픽셀이 정사각형이라 가정하면 초점거리 \(f_1\) 만 남는다. \(X^{1,1}\) 은 카메라 1 좌표계이므로, 각 3D 점을 다시 투영했을 때 원래 픽셀 위치와 맞는 \(f_1\) 을 찾으면 된다.
\[f_1^* = \arg\min_{f_1} \sum_{i=0}^{W} \sum_{j=0}^{H} C^{1,1}_{i,j} \left\lVert\, (i', j') - f_1 \frac{\left(X^{1,1}_{i,j,0},\, X^{1,1}_{i,j,1}\right)}{X^{1,1}_{i,j,2}} \,\right\rVert\]- \(i' = i - \frac{W}{2},\ j' = j - \frac{H}{2}\): 주점 기준 픽셀 좌표. Weiszfeld 알고리즘 몇 번의 반복으로 수렴한다
상대 pose. 두 가지 길이 있다. (1) 위의 2D 매칭 + intrinsics로 essential matrix를 푸는 epipolar 방식. (2) 더 직접적으로, \(X^{1,1}\) 과 \(X^{1,2}\) (같은 이미지 1을 각각 자기 기준/이미지 2 기준으로 표현한 pointmap)를 Procrustes 정렬로 맞추는 방식.
\[R^*, t^* = \arg\min_{\sigma, R, t} \sum_i C^{1,1}_i C^{1,2}_i \left\lVert\, \sigma (R X^{1,1}_i + t) - X^{1,2}_i \,\right\rVert^2\]- \(\sigma\): scale, \((R, t)\): 상대 pose. Kabsch/Procrustes와 같은 닫힌형 풀이다. 다만 noise·outlier에 민감해서, 실제로는 PnP + RANSAC이 더 강건하다
절대 pose (visual localization). query 이미지 \(I^Q\) 와 3D 정답이 있는 reference \(I^B\) 사이 2D 대응을 뽑고, \(X^{Q,Q}\) 로 query intrinsics를 추정한 뒤 PnP-RANSAC을 돌리거나, 상대 pose를 구해 정답 pointmap과의 scale로 보정한다.
3.4 Global Alignment
이미지가 \(N\) 장이면 쌍별 예측들을 하나의 좌표계로 묶어야 한다.
- connectivity graph \(\mathcal{G}(\mathcal{V}, \mathcal{E})\): 이미지가 정점, 시각적으로 겹치는 쌍이 간선. 간선 \(e = (n, m)\) 마다 네트워크로 pointmap \(X^{n,e}, X^{m,e}\) 와 confidence \(C^{n,e}, C^{m,e}\) 를 예측해 둔다
- 각 간선에 pose \(P_e \in \mathbb{R}^{3\times4}\) 와 scale \(\sigma_e > 0\) 를 두고, 전역 pointmap \(\chi = \{\chi^n \in \mathbb{R}^{W \times H \times 3}\}\) 을 함께 최적화한다
- 직관: 쌍 \(e\) 의 두 pointmap은 이미 같은 좌표계에 있으므로, 하나의 rigid 변환 \(P_e\) 가 둘을 동시에 세계 좌표 \(\chi^n, \chi^m\) 에 붙일 수 있어야 한다
- \(\sigma_e = 0\) 이 되는 자명해를 막기 위해 \(\prod_e \sigma_e = 1\) 을 강제한다
- 여기에 pinhole 모델 \(\chi^n_{i,j} := P_n^{-1} h(K_n^{-1} [i D^n_{i,j};\, j D^n_{i,j};\, D^n_{i,j}])\) 을 대입하면 모든 카메라의 pose \(\{P_n\}\), intrinsics \(\{K_n\}\), depthmap \(\{D^n\}\) 까지 한꺼번에 복원된다
전통적 bundle adjustment와의 차이가 핵심이다. BA는 2D 재투영 오차를 최소화하지만, 이 최적화는 3D 공간의 정렬 오차를 직접 줄인다. 복잡한 재투영 기하가 없어 표준 gradient descent로 수백 스텝이면 수렴하고, 일반 GPU에서 몇 초면 끝난다.
4. Experiments with DUSt3R
학습 데이터. Habitat, MegaDepth, ARKitScenes, Static Scenes 3D, Blended MVS, ScanNet++, CO3D-v2, Waymo의 8개 데이터셋 혼합으로, 실내/실외/합성/실사/물체 중심을 아우르는 총 8.5M 이미지 쌍이다.
학습 세부. encoder는 ViT-Large, decoder는 ViT-Base, head는 DPT. CroCo 사전학습 가중치로 초기화하고, 224×224로 먼저 학습한 뒤 최대 변 512로 이어 학습한다(배치마다 종횡비를 무작위로 바꿔 다양한 이미지 모양에 적응). 이하 모든 실험은 downstream fine-tuning 없이 같은 모델(“DUSt3R 512”)의 결과다.
[Figure 3] 학습에 없던 장면의 복원 예. RGB, depth map, confidence map, 복원 결과(왼쪽: 쌍별 원시 출력, 오른쪽: global alignment)
4.1 Visual Localization
7Scenes(실내 7장면)·Cambridge-Landmarks(실외)에서 절대 pose를 추정한다. DUSt3R를 2D-2D 매처로 쓰고(retrieval로 뽑은 DB 이미지와의 raw pointmap 매칭), median 이동/회전 오차(cm/°)를 잰다.
[Table 1] 7Scenes·Cambridge-Landmarks 절대 pose (median 이동/회전 오차, cm/°)
visual localization용으로 학습한 적이 전혀 없고 query/DB 이미지도 학습에 없었는데, feature matching 기반(HLoc 등)·end-to-end 기반과 대등한 정확도를 내고 일부 장면에서는 HLoc 같은 강한 baseline을 앞선다.
4.2 Multi-view Pose Estimation
CO3Dv2(41개 카테고리)·RealEstate10K에서 시퀀스당 10프레임(45쌍)으로 상대 pose를 평가한다. 지표는 RRA@15(회전)·RTA@15(이동)·mAA(30).
[Table 2] 단안 depth 추정(왼쪽)과 CO3Dv2·RealEstate10K multi-view pose 회귀(오른쪽)
global alignment를 쓴 DUSt3R가 CO3Dv2에서 RRA@15 96.2로, 기존 SoTA PoseDiffusion(80.5)을 크게 앞선다. PnP만 써도(94.3/88.4) 학습·구조 기반 기존 방법을 모두 능가한다. RealEstate10K는 DUSt3R 학습에 쓰이지 않았는데도 mAA(30) 67.7로 가장 높다.
4.3 Monocular Depth
단안 과제는 같은 이미지를 쌍으로 넣어(\(\mathcal{F}(I, I)\)) 풀고, depth는 pointmap의 \(z\) 좌표다. 실외(DDAD, KITTI)·실내(BONN, NYUv2, TUM) 벤치마크에서 AbsRel과 \(\delta_{1.25}\) 를 잰다(Table 2 왼쪽). zero-shot(transfer) 설정에서 self-supervised 방법들을 능가하고 supervised 방법들에 근접한다. 실내외 모두에서 zero-shot SoTA인 SlowTv와 대등하거나 앞선다.
4.4 Multi-view Depth
multi-view stereo depth로도 평가한다. 같은 이미지의 depthmap이 여러 쌍에서 나오면 confidence 가중 평균으로 합친다. KITTI·ScanNet·ETH3D·DTU·T&T에서 rel(절대 상대 오차)·\(\tau\)(1.03 이내 inlier 비율)를 잰다.
[Table 3] 네 가지 설정(a: 고전, b: pose+range, c: pose만, d: 둘 다 없음)에서의 multi-view depth 평가
GT 카메라·pose·depth range를 전혀 쓰지 않고도(설정 d) 평균 rel 4.73/τ 64.52로, GT pose를 쓰는 최신 방법들까지 포함해 전체 평균 최고를 기록한다. ETH3D에서는 최고 정확도이고, COLMAP 파이프라인(~3분)보다 훨씬 빠르다(0.13s).
4.5 3D Reconstruction
global alignment로 얻은 전체 복원의 품질을 DTU에서 잰다. fine-tuning 없는 zero-shot으로, 예측을 GT 좌표계에 정렬만 해서 평가한다. 카메라 intrinsic·extrinsic에 대한 사전 지식이 전혀 없는 global MVS는 DUSt3R가 처음이다.
| Methods | GT cams | Acc.↓ | Comp.↓ | Overall↓ | |
|---|---|---|---|---|---|
| (a) | Camp | ✓ | 0.835 | 0.554 | 0.695 |
| (a) | Furu | ✓ | 0.613 | 0.941 | 0.777 |
| (a) | Tola | ✓ | 0.342 | 1.190 | 0.766 |
| (a) | Gipuma | ✓ | 0.283 | 0.873 | 0.578 |
| (b) | MVSNet | ✓ | 0.396 | 0.527 | 0.462 |
| (b) | CVP-MVSNet | ✓ | 0.296 | 0.406 | 0.351 |
| (b) | UCS-Net | ✓ | 0.338 | 0.349 | 0.344 |
| (b) | CER-MVS | ✓ | 0.359 | 0.305 | 0.332 |
| (b) | CIDER | ✓ | 0.417 | 0.437 | 0.427 |
| (b) | CasMVSNet | ✓ | 0.325 | 0.385 | 0.355 |
| (b) | PatchmatchNet | ✓ | 0.427 | 0.277 | 0.352 |
| (b) | GeoMVSNet | ✓ | 0.331 | 0.259 | 0.295 |
| DUSt3R 512 | ✗ | 2.677 | 0.805 | 1.741 |
[Table 4] DTU에서의 MVS 결과 (mm). (a) 전통 방식, (b) 이 도메인에 특화 학습한 학습 기반 방식
최고 방법들의 정확도에는 못 미친다. 그들은 GT pose를 쓰고 DTU 학습 셋에 특화 학습하며, 서브픽셀 triangulation(명시적 카메라 파라미터 필요)을 쓰는 반면 DUSt3R는 회귀 기반이다. 그럼에도 카메라에 대한 사전 지식 없이 정확도 2.7mm, 완전성 0.8mm, 종합 1.7mm에 도달하며, 저자들은 plug-and-play라는 특성을 감안하면 실용적으로 큰 가치가 있는 수준이라고 본다.
4.6 Ablations
CroCo 사전학습과 입력 해상도의 영향을 Table 1~3의 DUSt3R 224-NoCroCo / 224 / 512 행으로 비교한다. 모든 과제에서 일관된 향상이 있다. 사전학습과 고해상도가 데이터 기반 접근에서 결정적임을 보여준다.
5. Conclusion
장면과 카메라에 대한 사전 정보 없이 in-the-wild 3D 복원을 푸는 것을 넘어, 다양한 3D 비전 과제 전반을 함께 푸는 새로운 패러다임을 제시했다. 이미지 쌍의 pointmap 회귀라는 하나의 정식화에서 depth·대응·intrinsics·pose·전역 3D 복원이 모두 도출되며, 단안/다중 시점 depth 추정과 상대 pose 추정에서 새로운 SoTA를 세웠다.