Depth-native VLMs — DepthVLM vs DepthLM
주장은 도발적이다. VLM은 depth를 '이해'하는 데 그치지 않고 depth 센서 그 자체가 될 수 있다. 별도의 vision head 없이, 혹은 아주 작은 것 하나만으로, 언어 모델의 출력이 곧 metric depth map이 된다. 그리고 그 depth는 오랫동안 이 일을 독점해 온 specialist depth network를 넘어선다.
🎯 학습 목표
- SpatialVLM 이후 dense geometry가 왜 전용 vision head의 몫으로 여겨졌는지, 그리고 두 논문이 그 가정을 어떻게 반박하는지 설명한다.
- DepthVLM의 dense depth head + unified vision–text supervision + two-stage schedule이 어떻게 depth map과 언어를 한 번의 forward pass로 함께 내놓는지 그린다.
- DepthLM이 진단한 두 병목(pixel reference ambiguity, cross-dataset intrinsic ambiguity)과 그 해법(visual prompting, intrinsic-conditioned augmentation)을 논증한다.
- $\delta_1$·AbsRel의 정의를 쓰고, dense map과 per-pixel text query가 coverage와 cost를 어떻게 맞바꾸는지 코드로 검증한다.
7장의 APC는 mental simulation으로 perspective-taking을 정면돌파했다. 하지만 그 시뮬레이션은 토대를 하나 전제한다. 장면의 metric depth, 즉 각 지점이 카메라로부터 실제 몇 미터 떨어졌는가다. 2장 SpatialVLM은 이 depth를 오프라인 depth estimator로 뽑아 QA를 합성하는 데이터 레시피로 우회했고, 3·4장은 depth를 feature로 fuse하거나 읽을 수 있는 map으로 다뤘다. 공통 전제는 하나였다. dense metric geometry는 언어 모델 바깥의 전용 vision network가 담당한다는 것.
이 장의 두 논문은 그 전제를 정면으로 뒤집는다. DepthVLM은 LLM backbone에 가벼운 dense depth head를 붙여, 단일 VLM이 언어 출력과 full-resolution dense depth map을 한 번의 forward pass로 함께 내놓게 한다. DepthLM은 정반대 극단을 택한다. head도, 아키텍처 변경도 없이, sparse depth label 위의 순수 text-based SFT만으로 expert-level per-pixel metric depth에 도달한다. 한쪽은 dense map을, 다른 쪽은 text token을 출력한다.
두 설계가 반대인데도 결론은 같다. metric geometry는 언어 인터페이스를 통해 복원 가능하며, VLM은 specialist depth network에 필적하거나 그것을 넘어선다. DepthVLM은 기존 VLM을 능가하면서 pure-vision 선도 모델까지 앞서고, DepthLM은 가장 앞선 VLM을 metric depth에서 2배 넘게 이긴다. 이 장은 2장의 데이터 레시피와 loop를 닫는다. depth를 오프라인으로 합성해 QA로 굽는 대신, VLM이 online으로 metric depth를 산출한다. metric depth가 native가 되면서 7장의 mental simulation과 10장의 reconstruction 계열로 흘러 들어간다.
핵심 내용
VLM을 깊이 센서로
SpatialVLM이 던진 데이터 레시피는 한 가지를 명시적으로 분업했다. depth는 오프라인 depth estimator가 뽑고, VLM은 그 depth에서 유도된 거리·크기 QA를 언어로 답한다. 이 분업은 이후 암묵적 정설이 됐다. dense metric geometry는 언어 모델이 아니라 그 바깥의 전용 vision head(dense prediction network)가 책임진다는 것이다. 코스의 central thesis로 말하면 projection bottleneck의 자연스러운 귀결이다. 2D encoder는 semantic alignment를 위해 tokenize하지, faithful 3D geometry를 위해 tokenize하지 않는다.
그래서 metric depth를 VLM이 직접 내놓는다는 발상은 오래 불가능해 보였다. 근거는 성능이었다. 이 과제의 난이도를 보여주는 앵커가 있다. DepthVLM의 project page는 심지어 GPT-5.5조차 이 metric depth 과제에서 \(\delta_1 \approx 0.4\)에 머문다고 보고한다. 절반 이상의 픽셀에서 예측이 참값과 25% 이내로 맞지 않는다는 뜻이다. 가장 앞선 범용 VLM도 depth를 '말로 재는' 데는 실패해 왔다.
여기서 두 metric을 고정하자. \(\delta_1\)은 예측 \(d_{pred}\)와 참값 \(d_{gt}\)의 비율이 임계 이내인 픽셀의 비율이다.
\[\delta_1 = \frac{1}{N}\sum_{i=1}^{N} \mathbb{1}\!\left[\max\!\left(\frac{d_{pred,i}}{d_{gt,i}},\ \frac{d_{gt,i}}{d_{pred,i}}\right) < 1.25\right]\]
AbsRel은 평균 절대 상대 오차다.
\[\text{AbsRel} = \frac{1}{N}\sum_{i=1}^{N} \frac{|d_{pred,i}-d_{gt,i}|}{d_{gt,i}}\]
\(\delta_1\)은 높을수록, AbsRel은 낮을수록 좋다. GPT-5.5의 \(\delta_1 \approx 0.4\)가 왜 낮은지는 이 정의에서 분명하다. metric scale을 조금만 놓쳐도 비율이 1.25를 넘어 그 픽셀은 통째로 오답 처리된다.
이 장의 두 논문은 이 벽을 서로 다른 방향에서 뚫는다. DepthVLM은 언어 모델에 dense depth head를 달아 map을 직접 출력하고, DepthLM은 head 없이 depth를 text token으로 뱉는다. 둘 다 증명하는 명제는 동일하다. metric geometry는 전용 vision head의 전유물이 아니라 언어 인터페이스를 통해 회수 가능하다. post-SpatialVLM의 암묵적 가정에 대한 정면 반박이다.

DepthVLM: 밀집 헤드 한 방에
DepthVLM의 선택은 단순하고 대담하다. RGB를 ViT encoder로 토큰화해 LLM backbone에 흘리는 표준 VLM 구조 위에, 가벼운 dense depth head 하나를 추가한다. LLM의 표현이 두 갈래로 나뉜다. 기존 text head는 언어를 생성하고, 새 dense depth head는 full-resolution metric depth map을 예측한다. 두 출력이 단 한 번의 forward pass에서 동시에 나온다. depth를 얻으려고 픽셀마다 다시 질의할 필요가 없다.
학습은 unified vision–text supervision으로 이뤄진다. 언어 supervision과 dense depth supervision을 하나의 목적함수 아래 묶어, 모델이 semantic과 geometry를 함께 익히게 한다. 여기에 two-stage schedule을 둔다. 대략적으로 먼저 언어·정렬 능력을 세운 뒤 dense depth 예측을 정련하는 순서다. 이 결합 덕분에 depth head는 LLM이 이미 학습한 풍부한 장면 표현 위에 올라탄다.
설계에서 의도적으로 피한 두 가지가 이 논문의 성격을 규정한다. 첫째, DepthVLM은 외부 vision model로부터 distill하지 않는다. 외부 depth network의 출력을 teacher로 삼으면 그 network의 오차가 누적(error accumulation)되기 때문이다. 대신 supervision을 ground-truth metric depth에서 직접 받는다. 둘째, per-pixel querying을 하지 않는다. depth를 픽셀 단위로 언어 질의해 받는 방식은 느리다. dense head는 한 번의 pass로 map 전체를 뱉어 이 비용을 없앤다.
이 접근을 뒷받침하려면 데이터가 필요하다. DepthVLM은 indoor와 outdoor를 아우르는 unified metric-depth benchmark를 VLM-compatible format으로 새로 제안한다. 실내 mm 스케일과 실외 수십 미터 스케일을 하나의 평가 틀에 담아, VLM이 두 domain을 한 표현으로 다루도록 강제한다. 이는 4장 SpatialBot이 인코딩 층위에서 마주했던 indoor-mm 대 outdoor-range 딜레마를, 이번엔 benchmark·supervision 층위에서 정면으로 다루는 것이다.
결과는 주장을 뒷받침한다. DepthVLM은 기존 VLM들을 능가하면서 inference 효율은 더 높고, 나아가 선도적 pure-vision depth 모델까지 앞선다. 언어 인터페이스를 유지한 채로 specialist를 넘어선 것이다. dense head가 있으니 이건 여전히 vision head 아니냐는 반문이 가능하지만, 요점은 그 head가 별도 network가 아니라 LLM backbone에 얹힌 lightweight 모듈이며 언어와 하나의 pass·하나의 supervision을 공유한다는 데 있다.

DepthLM: 헤드 없이 텍스트로
DepthLM은 반대 극단에서 같은 결론에 닿는다. dense head도, 아키텍처 변경도 없다. 표준 VLM에 sparse depth label 위의 순수 text-based SFT를 태우는 것만으로 expert-level per-pixel metric depth에 도달한다. depth는 map이 아니라 text token으로 출력된다. 질문이 특정 픽셀을 가리키면, 모델이 그 지점의 metric depth를 숫자 텍스트로 답한다.
DepthLM의 진짜 기여는 아키텍처가 아니라 진단이다. VLM이 metric depth에 실패해 온 원인이 표현력 부족이 아니라 두 개의 ambiguity라고 짚는다.
첫째는 pixel reference ambiguity다. "이 지점의 depth는?"이라 물을 때, 모델은 정확히 어느 픽셀을 묻는지 알기 어렵다. 텍스트 좌표는 이미지 그리드와 정렬이 흐릿하고, 근처 물체 경계에서 depth는 급변한다. 잘못된 픽셀을 참조하면 답 자체가 무의미해진다. 둘째는 cross-dataset camera-intrinsic ambiguity다. 같은 픽셀 변위라도 카메라의 focal length·principal point 같은 intrinsic이 다르면 대응하는 metric depth가 달라진다. 여러 데이터셋을 섞어 학습하면 모델은 intrinsic을 모른 채 상충하는 신호를 받아 metric scale을 고정하지 못한다.
해법은 두 병목에 정확히 대응한다. pixel reference에는 visual prompting을 쓴다. 질의 대상 픽셀에 marker(가리키는 시각적 표식)를 이미지 위에 직접 그려 넣어, 어느 점을 묻는지 모호함 없이 지정한다. intrinsic에는 intrinsic-conditioned augmentation을 쓴다. 학습 중 카메라 intrinsic을 조건으로 반영·증강해, 모델이 intrinsic에 맞춰 metric scale을 보정하도록 만든다. 두 fix 모두 아키텍처가 아니라 입력·데이터 층위의 개입이라는 점이 이 논문의 성격이다.
효과는 두 갈래다. 정확도에서 DepthLM은 가장 앞선 VLM들을 metric depth에서 2배 넘게 이기며, pure-vision specialist에 필적한 첫 VLM이 된다. 그리고 뜻밖의 부수 효과가 하나 있다. dense regression network는 인접 픽셀을 매끄럽게 이으려다 물체 경계에서 depth를 뭉개고 'flying point'(경계에 떠 있는 허깨비 점)를 만든다. DepthLM은 픽셀을 개별 text query로 다루므로 이런 over-smoothing이 구조적으로 발생하지 않는다. 별도의 boundary regularization 없이도 경계가 날카롭게 유지된다.
DepthLM은 arXiv non-exclusive 라이선스라 이 코스는 그 아키텍처를 논문 figure 대신 mermaid로 재현한다. 위 flowchart의 핵심은 marker가 찍힌 RGB와 intrinsic 조건이 표준 VLM으로 들어가 depth를 text token으로 내놓는다는 것, 그리고 head가 없다는 것이다.
같은 문제, 반대 설계
두 논문은 metric depth라는 동일한 목표를, 축마다 정반대의 선택으로 공략한다. 출력 modality, supervision, 아키텍처, inference 비용, over-smoothing 성향이 전부 갈린다.
| 축 | DepthVLM | DepthLM |
|---|---|---|
| 출력 modality | full-resolution dense depth map | 픽셀별 text token(숫자) |
| supervision | dense GT depth (unified vision–text) | sparse depth label (text SFT) |
| 아키텍처 | LLM backbone + lightweight dense head | head 없음, 아키텍처 무변경 |
| inference 비용 | 한 번의 forward pass로 map 전체 | 질의 픽셀당 1 pass |
| over-smoothing | dense regression 특성상 경계 뭉갬 우려 | per-pixel query라 구조적으로 회피 |
| 대표 성과 | 기존 VLM·pure-vision 모델 초과, 고효율 | 최상위 VLM 2배 초과, specialist에 필적 |
이 대립을 coverage와 cost의 trade-off로 읽으면 본질이 드러난다. DepthVLM의 dense map은 한 번의 pass로 100% 픽셀을 덮는다. coverage가 최대이고 pass는 1회다. DepthLM의 text query는 질의한 픽셀만 답하므로 coverage는 예산에 비례하고, 전체 map을 덮으려면 픽셀 수만큼 pass가 필요하다. 대신 픽셀 하나에 집중하므로 그 지점의 정밀도와 경계 선명도를 얻는다. 밀집 커버리지를 한 번에 사느냐, 국소 정밀도를 질의당 사느냐의 교환이다. 코드 예제가 이 교환을 \(\delta_1\)·AbsRel과 pass 수로 수치화한다.
반대 설계가 같은 명제를 증명한다는 점이 이 장의 결론이다. 한쪽은 head를 더해 map을, 다른 쪽은 head를 빼고 token을 내놓지만, 둘 다 metric geometry가 언어 인터페이스를 통해 회수됨을 보인다. post-SpatialVLM의 '전용 vision head 필요' 가정은 필요조건이 아니라 하나의 선택지였을 뿐이다.
이로써 2장에서 열린 loop가 닫힌다. SpatialVLM은 depth를 오프라인으로 뽑아 QA로 굽는 offline 합성이었다. depth-native VLM은 그 depth를 online으로 산출한다. metric depth가 파생 라벨이 아니라 모델의 native 출력이 되면서, 7장의 mental simulation은 실측 가능한 토대를 얻고 10장의 reconstruction 계열은 재구성의 재료를 얻는다.
💡 비유로 이해하기
DepthVLM은 항공 라이다 스캐너다. 비행기가 지형 위를 한 번 지나가면 모든 지점의 고도가 담긴 dense한 지형도가 통째로 나온다. 한 번의 비행(forward pass)으로 전 영역을 덮으니 coverage가 완전하다. 다만 스캐너는 인접 점을 부드럽게 잇는 경향이 있어, 절벽 같은 급격한 경계에서 값이 살짝 뭉개지기 쉽다.
DepthLM은 삼각대 위의 레이저 거리계다. 측량사가 겨냥한 그 한 점의 거리를 매우 정확히 읽어 숫자로 불러준다. 겨냥(marker)이 정확하니 경계에서도 값이 흐트러지지 않는다. 대신 전체 지형을 알려면 점을 하나하나 다시 겨냥해 재야 한다. 점당 정밀도는 최고지만, 전 영역 커버리지에는 그만큼의 측정 횟수가 든다.
두 장비 모두 결국 '거리를 재는 기계'다. 그리고 이 장의 요점은, 그 기계가 이제 별도의 측량 장비가 아니라 말을 하는 조수(언어 모델) 자신이라는 것이다. 하나는 지도를 통째로 그려주고, 하나는 겨냥한 점을 불러준다. 출력 형태만 다를 뿐, 둘 다 언어 인터페이스를 쓰는 metric depth 센서다.
💻 코드 예시
\(\delta_1\)과 AbsRel을 numpy로 구현하고, DepthVLM의 dense map과 DepthLM의 per-pixel text query가 coverage와 cost를 어떻게 맞바꾸는지 시뮬레이션한다. dense head는 한 번의 pass로 전 픽셀을 덮고, text query는 예산만큼의 픽셀을 질의당 1 pass로 답한다. 난이도 앵커로 GPT-5.5의 \(\delta_1 \approx 0.4\)를 함께 출력한다.
import numpy as np
def delta1(pred, gt, thr=1.25):
"""delta_1: max(pred/gt, gt/pred) < 1.25 인 픽셀 비율."""
pred = np.asarray(pred, dtype=np.float64)
gt = np.asarray(gt, dtype=np.float64)
ratio = np.maximum(pred / gt, gt / pred)
return float(np.mean(ratio < thr))
def abs_rel(pred, gt):
"""AbsRel: 평균 절대 상대 오차."""
pred = np.asarray(pred, dtype=np.float64)
gt = np.asarray(gt, dtype=np.float64)
return float(np.mean(np.abs(pred - gt) / gt))
rng = np.random.default_rng(0)
H, W = 120, 160
gt = rng.uniform(0.5, 10.0, size=(H, W)) # GT metric depth (m)
# DepthVLM: dense head가 한 번의 forward pass로 전 픽셀 예측
pred_dense = gt * rng.normal(1.0, 0.06, size=gt.shape)
print("=== DepthVLM: dense map (1 forward pass) ===")
print(f"coverage: {gt.size} px (100%)")
print(f"delta_1 : {delta1(pred_dense, gt):.3f} AbsRel: {abs_rel(pred_dense, gt):.3f}")
print(f"passes : 1")
# DepthLM: 예산만큼의 픽셀만 text query, 질의당 1 pass, 픽셀당 더 정밀
budget = 200
idx = (rng.integers(0, H, budget), rng.integers(0, W, budget))
gt_q = gt[idx]
pred_q = gt_q * rng.normal(1.0, 0.03, size=budget)
print("\n=== DepthLM: per-pixel text query (query당 1 pass) ===")
print(f"coverage: {budget} px ({budget/gt.size*100:.1f}%)")
print(f"delta_1 : {delta1(pred_q, gt_q):.3f} AbsRel: {abs_rel(pred_q, gt_q):.3f} (질의 픽셀 한정)")
print(f"passes : {budget} (질의당 1회)")
print("\n=== trade-off ===")
print(f"text query로 전체 map을 덮으려면 {gt.size} passes 필요 (dense map은 1)")
print(f"난이도 앵커: GPT-5.5도 이 과제에서 delta_1 ~= 0.40")
delta1은 예측·참값 비율의 최대치가 1.25 미만인 픽셀 비율을, abs_rel은 상대 오차의 평균을 계산한다. 두 정의 모두 브리프의 수식 그대로다. DepthVLM 블록은 dense head가 한 번의 pass로 전 픽셀(19200개)을 예측하는 상황으로, coverage 100%에 pass 1회다. DepthLM 블록은 예산 200픽셀만 text query로 답하는 상황이다. 질의된 픽셀에 집중하므로 픽셀당 노이즈를 작게 줘 AbsRel이 더 낮게 나오지만, coverage는 약 1%에 그치고 pass는 200회다. 마지막 블록이 교환의 본질을 못 박는다. text query로 dense map과 같은 커버리지를 얻으려면 픽셀 수만큼(19200회) pass가 들어, dense-head 단일패스 대비 coverage와 cost가 정확히 반대로 맞바뀐다. GPT-5.5의 delta_1 ~= 0.40 출력은 이 과제 자체가 최상위 범용 VLM에도 얼마나 어려운지를 상기시키는 앵커다.
🏭 현업에서의 평가
✅ 시니어가 보는 것
- $\delta_1$·AbsRel의 정의를 정확히 쓰고, metric scale을 조금만 놓쳐도 $\delta_1$이 급락하는 이유(비율 1.25 임계)를 설명하는가.
- DepthVLM이 외부 vision model distillation과 per-pixel querying을 왜 피했는지(error accumulation·속도)를 설계 의도로 논증하는가.
- DepthLM의 두 병목(pixel reference·intrinsic ambiguity)과 그 입력·데이터 층위 해법(visual prompt·intrinsic 증강)을 아키텍처 해법과 구분하는가.
- dense-head 단일패스와 head-free 텍스트질의를 coverage 대 cost, over-smoothing 성향까지 축별로 대비하는가.
⚠️ 레드 플래그
- "VLM에 depth head만 붙이면 된다"며 unified supervision·two-stage·distillation 회피 같은 학습 설계를 통째로 생략함.
- DepthLM의 기여를 '더 큰 모델·더 많은 데이터'로 오해하고, 진짜 기여가 ambiguity 진단과 입력 층위 fix라는 점을 놓침.
- $\delta_1$을 단순 정확도로 뭉뚱그리고 1.25 비율 임계나 scale 민감성을 설명하지 못함.
- 두 논문을 '둘 다 depth를 잘한다'로만 묶고, 출력 modality·supervision·inference 비용의 반대 설계를 대비하지 못함.
🎤 예상 인터뷰 질문 (클릭하면 모범답안)
DepthVLM은 왜 외부 depth network에서 distill하지 않고 GT depth로 직접 supervision을 받는가?
외부 vision model의 출력을 teacher로 삼으면 그 network의 오차가 학생 VLM으로 누적되는 error accumulation이 생기기 때문입니다. DepthVLM은 대신 dense depth head를 ground-truth metric depth로 직접 학습하고, 언어와 묶은 unified vision–text supervision을 two-stage로 태웁니다. 그 결과 depth가 LLM의 장면 표현 위에 올라타면서도 teacher의 편향을 물려받지 않아, pure-vision 선도 모델까지 넘어섭니다.
DepthLM은 아키텍처를 바꾸지 않는데 어떻게 metric depth를 크게 개선했는가?
DepthLM은 병목을 아키텍처가 아니라 두 ambiguity로 진단합니다. 어느 픽셀을 묻는지 모호한 pixel reference ambiguity와, 데이터셋마다 카메라 intrinsic이 달라 metric scale이 흔들리는 cross-dataset intrinsic ambiguity입니다. 해법은 각각 질의 픽셀에 marker를 그리는 visual prompting과 intrinsic을 조건·증강으로 반영하는 것이며, 둘 다 입력·데이터 층위 개입입니다. 이 sparse text-label SFT만으로 최상위 VLM을 metric depth에서 2배 넘게 이기고 pure-vision specialist에 필적합니다.
dense depth map(DepthVLM)과 per-pixel text query(DepthLM)는 어떤 trade-off를 갖는가?
DepthVLM의 dense head는 한 번의 forward pass로 전 픽셀을 덮어 coverage가 완전하고 inference가 효율적이지만, dense regression 특성상 경계에서 over-smoothing 우려가 있습니다. DepthLM의 text query는 질의한 픽셀만 답해 coverage가 예산에 비례하고 전체 map을 덮으려면 픽셀 수만큼 pass가 들지만, per-pixel이라 over-smoothing과 flying point가 구조적으로 발생하지 않아 경계가 날카롭습니다. 밀집 커버리지를 한 번에 사느냐, 국소 정밀도를 질의당 사느냐의 교환입니다.
✨ 핵심 요약
VLM이 곧 metric depth 센서가 될 수 있다
post-SpatialVLM의 '전용 vision head 필요' 가정은 필요조건이 아니었다. DepthVLM·DepthLM은 반대 설계로 metric geometry가 언어 인터페이스를 통해 회수됨을 증명한다.
GPT-5.5도 delta_1 ~= 0.4인 어려운 과제다
$\delta_1$은 비율이 1.25 이내인 픽셀 비율이라 metric scale을 조금만 놓쳐도 급락한다. 최상위 범용 VLM도 이 과제에서 절반 이상의 픽셀을 놓친다.
DepthVLM: dense head로 한 번의 pass에 map과 언어를 함께
LLM backbone에 lightweight dense depth head를 얹어 full-resolution depth map과 언어 출력을 단일 forward pass로 낸다. per-pixel querying의 느림을 없앤다.
DepthVLM은 distillation을 피한다
외부 depth network를 teacher로 쓰면 error accumulation이 생기므로, GT depth로 직접 unified vision–text supervision을 two-stage로 태워 pure-vision 모델까지 넘어선다.
DepthLM: 아키텍처가 아니라 ambiguity가 병목
head도 아키텍처 변경도 없이 sparse text-label SFT만으로 expert-level에 도달한다. 진짜 병목은 pixel reference와 cross-dataset intrinsic의 두 ambiguity다.
visual prompt와 intrinsic 증강이 그 병목을 푼다
질의 픽셀에 marker를 그려 어느 점인지 못 박고, camera intrinsic을 조건·증강으로 반영해 metric scale을 고정한다. 최상위 VLM을 depth에서 2배 넘게 이긴다.
text query는 over-smoothing을 구조적으로 피한다
dense regression이 경계에서 만드는 flying point를, per-pixel text query는 boundary regularization 없이도 회피한다. coverage 대신 경계 정밀도를 얻는다.
2장 데이터 레시피의 loop를 닫는다
depth를 오프라인 합성해 QA로 굽던 방식이 online metric depth 산출로 바뀐다. metric depth가 native가 되어 mental simulation·reconstruction 계열의 토대가 된다.
- Hanxun Yu et al. (2026). Unlocking Dense Metric Depth Estimation in VLMs (DepthVLM). arXiv 2026. arXiv:2605.15876