Index
2026-05-01 — Research

Depth Anything 3 (DA3) Architecture Survey

VGGRPO | LGM backbone 교체 후보 — paper/GitHub/HF 스펙 추출 및 Any4D 매핑

TL;DR

4
모델 사이즈
8
alt_start layer
6ch
ray map (origin+dir)
9
camera head DoF

1 배경 / 목적

VGGRPO LGM backbone 장기 교체 후보 (plan-da3_backbone_migration.md)인 DA3의 출력 스키마 / 인코더 hook point / cross-view alignment 메커니즘을 파악. 우리 파이프라인 (Wan VAE latent → Conv3d connector → backbone → phase-B loss)의 어느 부분을 어떻게 재구성해야 하는지 결정 근거 수집.

소스: arxiv 2511.10647, 프로젝트 페이지, ByteDance-Seed GitHub, HuggingFace.

2 작업 내용

설치

pip install xformers torch>=2 torchvision git clone https://github.com/ByteDance-Seed/depth-anything-3 cd depth-anything-3 pip install -e . # core (weights는 first inference 시 HF 자동 다운로드)

Inference API

from depth_anything_3.api import DepthAnything3 model = DepthAnything3.from_pretrained("depth-anything/DA3-LARGE-1.1") prediction = model.inference(images) # images: List[str | np.ndarray] # prediction: # processed_images : [N, H, W, 3] uint8 # depth : [N, H, W] float32 (per-view metric or rel) # conf : [N, H, W] float32 # extrinsics : [N, 3, 4] float32 (OpenCV / COLMAP) # intrinsics : [N, 3, 3] float32

Encoder 구조

DINOv2 vitl 기반, Patch 14, base resolution 504×504. 24 blocks를 두 그룹으로 분할:

Output Head

Dual-DPT 헤드: shared reassembly modules + 두 fusion branch (depth / ray) + 별도 output layer. Camera head D_C: per-view single camera token에서 9-DoF 예측 (FOV 2 + quat 4 + trans 3), 전체 compute의 ~0.1% 추가.

Multi-view consistency

"Input-adaptive cross-view self-attention" via token rearrangement. 모든 patch token + camera token이 같이 attention에 참여. 학습 시 view 수 [2, 18] uniform sampling.

3 결과

모델 라인업

ModelParamsLicenseHF id우리 파이프라인 적합성
DA3METRIC-LARGE0.35BApache 2.0depth-anything/DA3METRIC-LARGE최적 (metric depth + 상업 OK)
DA3-LARGE-1.10.35BCC BY-NC 4.0depth-anything/DA3-LARGE-1.1연구용 OK, 상업 불가
DA3-BASE0.12BApache 2.0depth-anything/DA3-BASE경량화 필요 시
DA3-SMALL0.08BApache 2.0depth-anything/DA3-SMALL실험용 빠른 iteration
DA3NESTED-GIANT-LARGE-1.11.40BCC BY-NC 4.0과도하게 큼

Any4D ↔ DA3 파이프라인 매핑

항목Any4DDA3파이프라인 영향
Cross-view consistency❌ monocular✅ 인코더 내장per-view (s,b) alignment 제거
Depth outputscale ambiguous per-framemetric depth 직접LS fit 불필요, GT L1 직접
Ray outputray_directions per-pixelray map (origin 3 + dir 3)GT ray 그대로 supervise
Posequat + trans (ref view 0)quat + trans + FOVFOV는 GT intrinsic에서 계산
Scene flowDA3 전환 시 drop 또는 외부 RAFT
EncoderDINOv2-L (frozen + LoRA)DINOv2 vitl (같은 family)stitch search 로직 재사용
입력 해상도294×518504×504 (base)전처리 변경 필요
학습 view 수typically 2uniform [2, 18]우리 3-cam 셋업과 잘 맞음
Stitch search 재사용 가능: 같은 DINOv2 family라 encoder layer별 hidden → VAE latent ridge regression이 그대로 동작. layer index만 다시 탐색하면 됨 (within-image regime: layer 0~7).
Scene flow 없음: DA3는 scene flow head 없음. GRPO reward에서 flow consistency가 필요하면 RAFT 같은 외부 모델로 보충. LGM이 모든 출력을 다 가질 필요는 없음.
Scale anchoring: 학습 시 GT를 "mean ℓ₂ norm of valid reprojected points"로 normalize — per-view LS fit 대신 글로벌 1 scalar. per-view alignment 자체가 학습에 들어있음.

4 Takeaway

Stitch 트랙은 살아남는다

같은 DINOv2 family라 Conv3d → layer hidden ridge regression이 그대로 동작. DA3 within-image regime (layer 0~7)에서 stitch 후보를 탐색하면 된다. Any4D best=7 대비 DA3 best=6 (실측 완료). Connector → backbone 인터페이스만 view-list 방식으로 변경.

Phase-B loss가 단순해진다: per-view alignment 통째 제거, depth는 metric GT와 직접 L1, ray는 intrinsic GT, pose는 quat + trans (+ FOV), scene_flow는 drop. supervision signal 설계가 훨씬 깔끔해짐.

5 Next Steps

✅ 완료된 후속 작업 (260430 동일 세션)

DA3 조사 → connector 스케치 → stitch search 실행 → phase-B loss 설계 → train shell 작성. 상세 내용은 260501-da3_prototype_setup.html 참조.

학습 시작 조건

클린 RoboCasa 데이터 도착 + DA3 트랙 트리거 조건 충족 후. preprocessing: HDF5 경로 교체 + preprocess_robocasa_cam.py 재실행. 입력 해상도를 294×518 → 504×504로 변경 시 K 스케일도 함께 조정.

라이선스 결정

연구 단계: DA3-LARGE-1.1 (CC BY-NC 4.0) OK. 상용화 시 DA3METRIC-LARGE / DA3-BASE / DA3-SMALL (Apache 2.0) 라인 선택. 지금은 연구용이므로 DA3-LARGE-1.1로 stitch search 진행.