TL;DR
- DA3 vitl(24 transformer layers, alt_start=8)에서 Conv3d connector 스티칭 위치를 closed-form ridge search로 결정
- layer 6 MSE 0.0249으로 최솟값 — alt_start=8 직전 2 레이어, standard transformer 마지막 구간
- 24 RoboCasa task × 3 clips × 32 frames × 3 views = 5,370,624 rows, ridge=1e-4
- Conv3d init weights
conv3d_init_layer6.pt 저장 → Phase B 학습 시작점 확보
1 배경 / 목적
DA3 backbone으로 전환(260430~260501)한 후, LGM connector가 DA3 transformer의 어느 레이어 출력에 붙어야 GT depth 예측이 가장 잘 되는지 결정이 필요했다. 레이어 선택이 Phase B 학습 품질에 직접 영향을 주기 때문에 학습 시작 전 반드시 결정해야 한다.
DA3 vitl은 24개의 transformer block을 가지며, block 8부터 alt_start=8 (alternate-attention) 구조가 시작된다. 스티칭 후보는 alt_start보다 앞에 있는 레이어(1~8)를 탐색 대상으로 잡았다.
설계 근거: alt_start 이전 레이어들은 standard full-attention으로 global scene 정보를 처리. alt_start 이후는 교차 attention 패턴이 달라져 feature 분포가 바뀌므로, 스티칭은 alt 구조 진입 전에 놓는 것이 합리적.
2 작업 내용
스크립트: scripts/find_stitch_layer_da3.sh → scripts/find_stitch_layer_da3.py 실행. SLURM job 1287 (--qos=extra, --gres=gpu:1), 13분 37초 완료.
탐색 방법 (closed-form ridge regression)
각 레이어 ℓ ∈ {1, …, 8}에 대해:
- DA3 vitl에서 레이어 ℓ 출력 feature 추출 (shape: [B, T, H_grid, W_grid, C])
- Conv3d(kernel=5×5×5, stride=1×2×2, pad=2×2×2)로 spatial 압축
- GT depth와 closed-form ridge regression으로 최적 projection 계산
- held-out clip에서 MSE 측정
backbone: DA3 vitl (depth-anything/DA3-LARGE-1.1)
alt_start: 8 rope_start: 8
dataset: RoboCasa v0.1 216×384 depth sealed
tasks: 24 (kitchen_coffee 3 + kitchen_doors 4 + kitchen_drawer 2 +
kitchen_microwave 2 + kitchen_pnp 8 + kitchen_sink 3 + kitchen_stove 2)
clips/task: 3 frames/clip: 32
n_views: 3 (frontview, robot0_eye_in_hand, agentview)
ridge: 1e-4
patch_grid: [21, 37] n_rows_total: 5,370,624
3 결과
| Layer |
MSE |
vs layer 6 |
비고 |
| 1 |
0.13636 |
+447% |
early feature, 매우 low-level |
| 2 |
0.05477 |
+120% |
|
| 3 |
0.03568 |
+43% |
|
| 4 |
0.03111 |
+25% |
|
| 5 |
0.02528 |
+1.3% |
2위 — layer 6과 근접 |
| 6 |
0.02493 |
— |
✅ 최솟값 채택 (alt_start=8 직전 2번째) |
| 7 |
0.02804 |
+12.5% |
alt_start 이전 1번째 (약간 반등) |
| 8 |
0.03376 |
+35.4% |
alt_start 진입 레이어 |
Layer 5→6→7 구간에서 U자 최솟값: layer 6이 MSE 0.0249로 최소. layer 5(0.0253) 대비 1.6% 낮음. layer 7(0.0280) 대비 11.1% 낮음. alt_start=8 직전 2번째 레이어가 depth 정보 밀도가 가장 높음.
Layer 7→8 반등: alt_start=8에서 attention 패턴이 바뀌면서 MSE가 0.028→0.034로 증가. alt 구조가 feature 분포를 변환시켜 단순 Conv3d projection에 불리해지는 것으로 해석.
출력 파일:
experiments/stitch_search_da3/
best_layer.json # {"best_layer": 6, "mse_per_layer": {...}}
conv3d_init_layer1.pt # 각 레이어 ridge solution → Conv3d 초기화 가중치
conv3d_init_layer2.pt
...
conv3d_init_layer6.pt # ← Phase B 학습에 사용
conv3d_init_layer8.pt
mse_curve.png
4 Takeaway
아키텍처 해석
DA3 vitl의 standard transformer block들(layer 1~7)은 레이어가 깊어질수록 depth 정보를 선형적으로 축적하다가, alt_start 직전(layer 6~7)에서 geometry-rich feature가 최대화된다. Layer 6이 최적인 이유는 충분히 깊은 semantic feature + alt 구조에 의한 분포 변환 전 마지막 "순수" representation이기 때문으로 추정.
이 선택은 Phase B 학습의 시작점을 결정한다. Conv3d init weight를 ridge solution으로 초기화하면 학습 초반 수렴 속도가 빨라진다.
프로젝트 의미: Phase B 학습에 layer 6 채택 확정. conv3d_init_layer6.pt로 LGM connector 초기화 → train_lgm_robocasa_da3_v0.sh 즉시 시작 가능.
5 Next Steps
- Phase B 학습 진행: layer 6 + Conv3d init weight로
train_lgm_robocasa_da3_v0.sh 실행. v2 loss(L_D+M+P+C+grad)로 수렴 확인 → 목표 step 20K+.
- share QOS 탈피: DA3 Phase B 학습이 share QOS에서 반복 PREEMPTED. own/extra QOS 확보 또는 스케줄 전략 변경 필요.
- Multi-task 일반화 검증: 24 task 모두에서 layer 6 feature의 depth 선형성이 유지되는지 task별 MSE 분포 확인 (현재는 평균 MSE만 측정).
- Layer 5 vs 6 Phase B 비교 (보너스): MSE 1.6% 차이가 Phase B 실제 학습에서도 유의미한지 확인. layer 5 init weight도 저장돼 있으므로 parallel run 가능.