Depth quality qualitative analysis — v11 step 3000
Date: 2026-07-10 · Model: v11_pushpix step 3000 · Compared against: DA3 teacher
Side-by-side qualitative and quantitative comparison of v11's learned PointmapHead depth output against the DA3 teacher on 4 ARCTIC clips (2 best-hand-pose + 2 worst-hand-pose).
Quick links: Gallery · Metrics · Key finding
Gallery
4 clips × 4-panel mp4:
1. Raw RGB (input)
2. DA3 GT depth (teacher, turbo colormap 0.2-1.5 m)
3. v11 predicted depth (same range/colormap)
4. Log-ratio bias log(pred/GT) (RdBu_r ±0.7) — red = over-predict, blue = under-predict
Per-clip metrics
| Clip | Hand-pose category | AbsRel ↓ | δ<1.25 ↑ | MPJPE (hand pose) |
|---|---|---|---|---|
| #7660 s06 espressomachine_use_01 | best hand | 0.335 | 0.189 | 60 mm |
| #8422 s06 microwave_use_02 | best hand | 0.327 | 0.175 | 61 mm |
| #8888 s06 phone_grab_01 | worst hand | 0.336 | 0.166 | 540 mm |
| #14835 s09 espressomachine_use_02 | worst hand | 0.358 | 0.173 | 518 mm |
External reference points
- DA3 on ARCTIC (in-distribution training set for DA3): AbsRel ~0.15-0.20, δ<1.25 ~0.65-0.80.
- v11 pred: AbsRel 0.33, δ<1.25 0.17 → predictions are ~2× worse than DA3 teacher on the same data. Given the small pointmap head (~2 M params) and the SSI loss (which loses metric scale), this is expected.
Key finding — depth is uniform across hand-pose quality
Depth AbsRel is nearly identical (0.33-0.36) across best-hand-pose and worst-hand-pose clips. This means:
- The failure mode of the worst hand-pose clips is NOT depth quality — it's specifically the pixel localization (dense root_head soft-argmax fails on occluded/off-frame hands).
- Depth head trained uniformly across the val distribution — it doesn't have the bimodal behaviour that hand pose does.
- Fixing hand-pose failure modes (presence gating, off-frame handling) would move MPJPE much more than fixing depth.
Ordering of remaining gaps
By expected impact on aggregate abs MPJPE:
| Rank | Fix target | Est. gain | Cost |
|---|---|---|---|
| 1 | Presence gating on lift path | −10 to −20 mm | 100 LoC |
| 2 | Off-frame clamp_root_to_edge | −5 to −15 mm | 50 LoC |
| 3 | 6D-rot MANO orient (Iter 209 v12) | −5 to −40 mm | 200 LoC |
| 4 | VGGT point_head reuse (Iter 208 v13) | depth only, marginal on abs | 500 LoC |
| 5 | Multi-resolution root_head (Iter 209 v14) | pixel −40 to −80 px | 300 LoC |
Depth head is #4 — modest impact on abs MPJPE. The dominant next moves are 1-3 (hand-pose robustness).
Visual observations from gallery
Looking at panel 4 (log-ratio bias) across clips:
- Uniformly slight over-prediction — the mode of log-ratio is +0.1 to +0.3 (pred/GT ≈ 1.1 to 1.4), meaning v11 predicts ~15-30% deeper than DA3.
- Depth-normalized structure preserved — panels 3 and 2 show similar gradient patterns (hands closer, background further), just biased upward.
- Hand region rarely blue — the hand (typically closest object in ego view) is not systematically under-predicted, which suggests SSI's median normalization is doing its job of decoupling scale.
The uniform bias likely comes from the SSI loss — median-normalization absorbs additive shift, so the model has no metric anchor and drifts freely. Adding a small metric anchor (from GT wrist z on rare valid samples) would fix this.
Meta
- Depth head:
PointmapHeadfromdata_engine/train_egowm_v10_overfit.py, Conv2D 1536 → 256 → 256 → 4-channel (X, Y, Z, log_conf), zero-init last conv. ~2 M trainable params. - Loss: SSI (scale-shift invariant) log-depth L1, weight 0.5 (v10) then 0.5 (v11 unchanged). No metric anchor.
- Cache: DA3 pointmap cached at 480×832 in
_cache/da3_arctic/; pred at 60×104 upsampled bilinearly for the metrics. - Reproducer:
python benchmark/scripts/build_depth_gallery.py - Related: Failure mode analysis · Iter 209 direction