[논문리뷰] Déjà View: Looping Transformers for Multi-View 3D Reconstruction
arXiv 2026. [Paper] [Page]
Alessandro Burzio, Tobias Fischer, Sven Elflein, Qunjie Zhou, Riccardo de Lutio, Jiawei Ren, Jiahui Huang, Shengyu Huang, Marc Pollefeys, Laura Leal-Taixé, Zan Gojcic, Haithem Turki
NVIDIA | University of Modena and Reggio Emilia | University of Toronto | ETH Zürich
28 May 2026

Introduction
최근에는 feed-forward 3D reconstruction 방식은 단일 forward pass로 이미지로부터 3D geometry를 예측하는 end-to-end transformer를 사용하고 있다. 이러한 방식의 발전은 backbone의 깊이와 너비를 확장함으로써 모델 용량을 늘린 데서 비롯되었다. 하지만 반복 과정이 완전히 사라진 것은 아닐 수도 있다. 단순히 네트워크 깊이에 흡수되었을 가능성이 있다. 실제로 ViT의 $L$개의 layer를 반복되는 $K$개 block으로 대체할 수 있다.
따라서 본 논문은 모델의 깊이에 의존하는 대신, 아키텍처에서 이 반복적인 프로세스를 명시적으로 구현하였다. 뷰별 DINOv2 feature에서 시작하여, $K$번의 정제 단계를 거치는 동안 하나의 transformer block을 반복적으로 적용한다. 학습 중에 $K$를 $[8, 16]$에서 샘플링함으로써, 하나의 체크포인트를 통해 재학습 없이 inference 시에 $K$를 조절할 수 있다. 학습된 순환 과정을 분석한 결과, 고정된 지점으로 수렴하지 않고 각 단계마다 state의 방향을 최종 지점으로 점진적으로 정렬하는 것을 확인할 수 있으며, 이를 directional refinement라고 부른다.
본 논문의 모델인 DéjàView는 다양한 reconstruction 벤치마크에서 훨씬 더 큰 규모의 feed-forward 모델들과 동등하거나 그 이상의 성능을 보였으며, 파라미터 수는 훨씬 적고 연산량 또한 비슷하거나 더 낮았다. 특히, 가중치를 공유하는 반복적인 알고리즘 방식이 동일한 학습 데이터와 연산량 조건에서 단계별 파라미터를 독립적으로 사용하는 기존 방식보다 훨씬 우수한 성능을 보였다. 이는 가중치를 공유하는 반복적인 정제 방식이 3D reconstruction에서 파라미터 scaling을 대체할 수 있는 효과적인 대안임을 시사한다.
Method
1. Problem setup
주어진 $V$개의 입력 이미지 \(\{\textbf{V}_i\}_{i=1}^V\)에 대해, 본 논문의 목표는 첫 번째 뷰의 좌표계로 표현된 3D 장면 geometry를 복원하는 것이다. 저자들은 depth-ray 표현을 채택하였다. 각 이미지 \(\textbf{I}_i \in \mathbb{R}^{H \times W \times 3}\)에 대해, 모델은 depth map \(\textbf{D}_i \in \mathbb{R}^{H \times W}\)와 dense ray map \(\textbf{R}_i \in \mathbb{R}^{H \times W \times 6}\)을 예측한다. Ray map의 각 픽셀은 3D 원점 \(\textbf{R}^o \in \mathbb{R}^3\)과 정규화되지 않은 방향 \(\textbf{R}^d \in \mathbb{R}^3\)을 인코딩하므로, 월드 좌표계에서의 3D 점은
\[\begin{equation} \textbf{X} = \textbf{R}^o + \textbf{D}(u,v) \cdot \textbf{R}^d \end{equation}\]로 얻어진다. 뷰별 camera-to-world rotation, translation, intrinsic은 Depth anything 3의 방법을 따라 예측된 ray map으로부터 복원된다.
2. Hypothesis
최근 두 논문의 결과가 저자들에게 동기를 부여하였다.
- Block-Recurrent Dynamics in ViTs는 학습된 ViT의 $L$개 layer를 post-hoc distillation을 통해 몇 개의 looped block으로 정확하게 근사화할 수 있음을 보여주었다.
- Understanding Multi-View Transformers는 DUSt3R를 layer별로 분석하여 예측된 pointmap이 디코더 깊이에 따라 점진적으로 개선됨을 보여주었고, 이를 통해 layer들이 가중치를 공유하지 않더라도 멀티뷰 transformer 내부의 geometry가 반복적으로 개선됨을 밝혀냈다.
본 논문에서는 진화하는 state에 looped block을 적용함으로써 이러한 구조를 명시적으로 나타낼 수 있으며, 결과적으로 생성되는 순환 구조가 directional refinement를 수행하여 \(\textbf{z}_k\)의 방향이 점점 최종 지점 방향으로 수렴한다고 가정하였다.
RAFT와 같은 반복 정제 방법은 매 step마다 디코딩을 수행하고 출력에 시퀀스 loss를 적용하는 반면, 본 논문에서는 looped block을 사용하여 내부 state를 정제하고 최종 step에 대해서만 학습을 수행한다. 이를 통해 매 중간 step에서 디코더를 실행하고 loss를 계산하는 과정을 생략하여 학습 iteration당 $(K-1)$번의 디코더 forward pass와 backward pass를 줄일 수 있다.
저자들은 $0 = t_0 < t_1 < \cdots < t_K = 1$에 대한 시간 조건부 discrete update로 재귀를 모델링하였다.
\[\begin{equation} \textbf{z}_{k+1} = f_\theta (\textbf{z}_k, t_k, t_{k+1}) \end{equation}\]여기서 \(f_\theta\)는 시간 간격 $(t_k, t_{k+1})$로 컨디셔닝된 block이다. Discrete step 인덱스가 아닌 continuous한 시간으로 컨디셔닝함으로써, block은 특정 $K$ 값에 의존하지 않고 하나의 가중치 세트로 inference 시 다양한 step 수를 처리할 수 있다.
3. Architecture

패치 인코더 및 토큰
각 뷰의 state \(\textbf{z}_0\)는 사전 학습된 DINOv2 ViT-B 인코더를 사용하여 초기화된다. DINOv2 인코더는 각 입력 이미지를 $\frac{H}{P} \times \frac{W}{P}$ 그리드의 패치 토큰으로 매핑한다. 각 뷰의 토큰 시퀀스 앞에 학습 가능한 register 토큰 $R$개와 카메라 토큰 하나를 추가하고, 파라미터는 모든 뷰에 걸쳐 공유된다.
카메라 토큰은 두 개의 파라미터 세트를 사용하는데, 하나는 레퍼런스 (첫 번째) 뷰용이고 다른 하나는 다른 모든 뷰에 걸쳐 공유된다. 패치 위치는 2D RoPE로 인코딩하고, 특수 토큰에는 패치 그리드 외부의 별도 위치를 할당한다. 그런 다음, looped transformer block을 \(\textbf{z}_0\)에 $K$번 적용한다. $K$는 학습 batch당 무작위로 선택된다. 이렇게 생성된 최종 state \(\textbf{z}_K\)는 decoder head로 전달된다.
Decoder head
\(\textbf{z}_K\)를 두 개의 병렬 decoder branch를 통해 전달하는데, 각 branch는 얕은 transformer와 output head로 구성된다. 각 decoder transformer는 looped block과 동일한 pre-norm Attn + MLP block 디자인을 사용하지만 LayerScale은 사용하지 않는다. Ray decoder는 linear pixel-shuffle head를 사용하여 ray map \(\textbf{R}_\theta \in \mathbb{R}^{H \times W \times 6}\)을 생성한다. Depth decoder는 패치 경계에서 블록 아티팩트를 방지하기 위해 convolutional depth head를 사용하고, depth map \(\textbf{D}_\theta \in \mathbb{R}^{H \times W}\)와 depth confidence map \(c_\textbf{D} \in \mathbb{R}^{H \times W}\)를 생성한다.
또한, Depth anything 3을 따라, ray decoder 출력의 뷰별 카메라 토큰으로부터 translation, rotation quaternion, FoV를 포함하는 튜플 \(\textbf{c}_\theta = (\textbf{t}_\theta, \textbf{q}_\theta, \textbf{f}_\theta) \in \mathbb{R}^3 \times \mathbb{S}^3 \times \mathbb{R}^2\)를 디코딩하는 camera MLP head를 추가했다. 이는 inference 시 기본값으로 사용되는 ray 기반 복구 방식보다 빠른 대안을 제공한다. World point는 \(\textbf{X}_\theta = \textbf{R}_\theta^o + \textbf{D}_\theta \cdot \textbf{R}_\theta^d\)로 얻는다.
4. Looped Block
Block 설계
Looped block은 VGGT의 프레임/글로벌 교대 설계에 따라 순차적으로 적용되는 두 개의 attention sub-block으로 구성된다.
- 2D RoPE를 사용하여 각 뷰를 독립적으로 처리하는 frame attention
- 모든 뷰의 모든 토큰의 결합 시퀀스에 대해 작동하는 global attention
각 attention sub-block은 LayerScale을 사용하는 표준 pre-norm Attn + MLP 디자인을 사용한다.
Block은 시간 간격 $(t_k, t_{k+1})$로 컨디셔닝된다. 세 개의 채널별 scale 벡터 \((\textbf{s}_\textrm{attn}, \textbf{s}_\textrm{mlp}, \textbf{s}_\textrm{out})\)가 block 업데이트를 제어한다.
\[\begin{aligned} \textbf{z}^\prime &= \textbf{z}_k + \textbf{s}_\textrm{attn} \odot \textrm{LS}_1 (\textrm{Attn} (\textrm{LN}_1 (\textbf{z}_k))) \\ \textbf{z}^{\prime \prime} &= \textbf{z}^\prime + \textbf{s}_\textrm{mlp} \odot \textrm{LS}_2 (\textrm{Attn} (\textrm{LN}_2 (\textbf{z}^\prime))) \\ \textbf{z}_{k+1} &= \textbf{s}_\textrm{out} \odot \textbf{z}^{\prime \prime} \end{aligned}\]($\textrm{LN}$은 layer normalization, $\textrm{LS}$는 LayerScale, $\odot$은 channel-wise multiplication)
각 scale은 0으로 초기화된 MLP를 통해 다음과 같이 계산된다.
\[\begin{equation} \textbf{s} = 1 + \textrm{MLP}(\gamma (t_k, t_{k+1})) \end{equation}\]($\gamma$는 $t_k$와 $t_{k+1}$의 사인파 임베딩을 concat)
가변 step 수
$K$에 탄력적인 하나의 가중치 세트를 학습시킨다. 동일한 block은 inference 시 다양한 step 수 $K$를 지원하며, 이를 통해 계산량을 조절할 수 있다. 구체적으로, batch당 \(K \sim \textrm{Beta}(2, 1)\)을 샘플링하고, 이를 $[8, 16]$으로 스케일링 및 반올림한다. 그런 다음, $0 = t_0 < \cdots < t_K = 1$의 균일 분할 구간을 따라 block을 $K$번 적용한다. \(\textbf{z}_k\)에서 \(\textbf{z}_{k+1}\)로의 적용은 $(t_k, t_{k+1})$로 컨디셔닝된다.
Directional refinement
본 논문의 모델은 feature space의 고정된 지점으로 수렴하지 않는다. 대신, state norm \(\| \textbf{z}_k \|\)는 $k$에 따라 단조 증가한다. 그러나 학습 단계 범위 내에서 두 가지 경험적 특징이 그 동적 특성을 나타낸다.

- \(\textrm{cos}(\textbf{z}_k, \textbf{z}_K)\)는 1로 단조 증가하는데, 이는 각 step에서 state가 최종 지점 방향으로 더 가까워짐을 의미한다.
- 상대적 업데이트 크기 \(\| \Delta \textbf{z}_k \| / \| \textbf{z}_k \|\)는 감소하는데, 이는 일정한 크기 조정이 아니라 움직임의 속도 감소를 나타낸다.
각 decoder branch는 per-norm되어 있기 때문에, 첫 번째 transformer block 시작 부분의 LayerNorm은 norm 증가를 유발하는 \(\textbf{z}_k\)에 평행한 \(\Delta \textbf{z}_k\) 성분을 흡수하고, 디코딩된 표현은 효과적으로 방향이 수렴한다. 이러한 동작을 directional refinement라고 부른다.
5. Training
Loss
저자들은 depth, ray, world point, 카메라 파라미터를 포괄하는 5가지 loss 항을 사용하여 예측된 geometry에 대해 모델을 직접 학습시켰다. DUSt3R를 따라, 예측값과 GT는 loss 계산 전에 독립적으로 정규화된다. 유효한 3D point \(\{\textbf{X}_j\}_{j \in \Omega}\)가 주어졌을 때, 다음과 같이 inverse normalization scale를 정의한다.
\[\begin{equation} s = \left( \frac{1}{\vert \Omega \vert} \sum_{j \in \Omega} \| \textbf{X}_j \|_2 \right)^{-1} \end{equation}\]이 scale은 예측된 포인트 클라우드와 GT포인트 클라우드에 대해 각각 $\hat{s}$와 $\bar{s}$로 계산된다. 샘플별 학습 loss는 다음과 같다.
\[\begin{aligned} \mathcal{L} = \, & \| \hat{s} \textbf{D}_\theta - \bar{s} \textbf{D} \|_2 + \mathcal{L}_\textrm{grad} (\hat{s} \textbf{D}_\theta, \bar{s} \textbf{D}) + \| \hat{s} \textbf{R}_\theta - \bar{s} \textbf{R} \|_1 \\ &+ \| \hat{s} \textbf{X}_\theta - \bar{s} \textbf{X} \|_2 + \mathcal{L}_\textrm{cam} (\textbf{c}_\theta, \textbf{c}) \end{aligned}\](\(\mathcal{L}_\textrm{grad}\)는 수평/수직 depth gradient에 대한 multi-scale \(\ell_1\) loss, \(\mathcal{L}_\textrm{cam}\)은 \(\textbf{c}_\theta\)의 translation, rotation, FoV 성분에 대해 각각 1, 1, 0.5로 가중치가 부여된 \(\ell_1\) 항으로 분해됨)
최적화
학습은 두 단계로 진행된다. 첫 번째 단계에서는 depth 및 pointmap 항에 대해 일반 \(\ell_2\) loss를 사용하고 linear pixel-shuffle depth head를 적용하여 모든 loss 항을 사용하여 모델을 end-to-end로 학습한다.
두 번째 단계에서는 convolutional depth head로 교체하고 다른 모든 파라미터를 고정한 상태에서 depth decoder를 fine-tuning한다. 두 번째 단계에서는 ray loss와 camera loss는 비활성화된다. Depth 항에는 예측된 픽셀별 불확실성 \(c_\textbf{D}\)를 사용한 DUSt3R 스타일의 confidence-aware loss가 적용된다.
\[\begin{equation} \mathcal{L}_\textrm{unc} (c, \textbf{a}, \textbf{b}) = c \| \textbf{a} - \textbf{b} \|_2 - \lambda_c \log c \end{equation}\]Experiments
- 구현 디테일
- GPU: H100 128개
- 장면당 뷰 개수 $V \in [2, 18]$
- 해당도: 긴쪽이 504px
- optimizer: AdamW
- 학습 1단계:
- learning rate \(3 \times 10^{-4}\), cosine decay, warmup 없음
- DINOv2 backbone는 0.1배
- weight decay 0.05
- 학습 2단계
- learning rate \(1 \times 10^{-4}\), 500-step linear warmup
- confidence regularizer 가중치 \(\lambda_c = 0.2\)
- depth gradient 항은 합성 데이터에만 적용
1. Comparison with State of the Art
다음은 pointmap 정확도를 비교한 결과이다.

다음은 카메라 포즈 정확도를 비교한 결과이다.

다음은 모델 효율성과 품질을 비교한 결과이다.

다음은 예측된 포인트 클라우드를 비교한 결과이다.

2. Analysis
다음은 block 디자인에 대한 ablation 결과이다.

다음은 step 수에 대한 ablation 결과이다.
