TL;DR
- LossV1 (자체 설계 6-term): step 0→10419, loss 1.85→45.1 — 지수 발산, 학습 불가
- LossV2 (논문 §3.2 완전 구현): step 0→7816, loss 2.23→0.21 — 안정 수렴
- 동일 backbone(DA3 vitl layer 6), 동일 데이터(24-task RoboCasa), 동일 하이퍼파라미터로 parallel 실행
- v1 발산 원인: unweighted sum +
scale term 불안정. v2의 confidence-weighted L_D + L_P(3D point) 설계가 핵심
45.1
V1 final loss (step 10419)
0.21
V2 final loss (step 7815)
1 배경 / 목적
DA3 Phase B(geometry supervision)에서 loss 설계가 학습 안정성을 결정한다. DA3 backbone 전환(260430) 직후 자체 설계한 v1 loss와, 260501에 논문 §3.2를 완전 구현한 v2 loss를 동일 조건에서 parallel 학습하여 어느 쪽이 수렴하는지 확인.
두 실험 디렉토리: experiments/lgm_robocasa_da3_v0_lossv1_0511_0254, experiments/lgm_robocasa_da3_v0_lossv2_0511_0254
2 작업 내용
❌ LossV1 — 자체 설계 (phase_b_loss_da3.py)
L = depth_loss
+ ray_origin_loss
+ ray_dir_loss
+ rot_loss
+ trans_loss
+ scale_loss
6개 term 단순 합산. 각 term에 confidence weighting 없음. scale이 scalar로 단독 term.
✅ LossV2 — 논문 §3.2 완전 구현 (phase_b_loss_da3_v2.py)
L = L_D # conf-weighted depth
+ L_M # mask loss
+ L_P # 3D point projection
+ L_C # 9-DoF camera (pose+intrinsic)
+ L_grad # gradient sharpness
confidence map으로 아웃라이어 억제. L_P는 3D 포인트를 다른 view로 투영해 일관성 강제.
공통 설정
backbone: DA3 vitl, stitch layer 6, conv3d_init_layer6.pt
data: RoboCasa v0.1 24-task sealed (216×384 depth)
optimizer: AdamW, warmup cosine LR
batch_size: 동일
GPU: 4× (4-way DDP)
script: scripts/train_lgm_robocasa_da3_v0.sh
3 결과
학습 궤적 비교
| Step |
V1 total loss |
V1 depth |
V1 scale |
V2 total loss |
V2 L_D |
V2 L_P |
| 0 |
1.846 |
0.253 |
1.039 |
2.234 |
0.533 |
0.654 |
| 10 |
2.231 |
0.097 |
1.373 |
1.879 |
0.230 |
0.512 |
| 100 |
~2.0 |
— |
— |
~1.2 |
— |
— |
| 5000 |
~15+ |
발산 중 |
급증 |
~0.5 |
~0.12 |
~0.10 |
| 10419 |
45.1 |
0.165 |
37.0 |
— |
— |
— |
| 7815~7816 |
— |
— |
— |
0.147~0.374 |
0.021~0.102 |
0.029~0.100 |
V1 발산 패턴: step ~100 이후부터 scale term이 1.0 → 5.0 → 30+ 로 지수 증가. 다른 term들(depth, ray_origin/dir, rot, trans)은 계속 감소하는데 scale만 폭발. step 10419에서 total loss 45.1, scale term이 37.0으로 전체의 82%를 차지.
V2 수렴 패턴: step 7815 기준 loss 0.147 (L_D 0.027 + L_M 0.055 + L_P 0.029 + L_C 0.034 + L_grad 0.003). 5개 term이 균형 있게 감소. scale term이 별도로 분리되지 않고 L_C(9-DoF camera) 안에 정규화되어 있어 발산 없음.
V2 Loss 각 term 수렴 상태 (step 7815)
| Term | 의미 | step 0 | step 7815 | 감소율 |
| L_D | conf-weighted depth | 0.533 | 0.027 | −95% |
| L_M | mask | 0.618 | 0.055 | −91% |
| L_P | 3D point projection | 0.654 | 0.029 | −96% |
| L_C | 9-DoF camera (pose+intrinsic) | 0.424 | 0.034 | −92% |
| L_grad | gradient sharpness | 0.004 | 0.003 | −25% |
| Total | | 2.234 | 0.147 | −93% |
4 Takeaway
V1 발산 원인 분석
(1) Scale term 비정규화: V1에서 scale을 독립 term으로 두면서 다른 loss term과 magnitude 불균형이 생겼다. depth/ray 등이 0으로 수렴하면 scale gradient만 남아 발산.
(2) Confidence weighting 부재: 아웃라이어 픽셀(오클루전 경계, 반사면)이 depth loss에 동등한 가중치로 들어가 gradient를 오염. V2의 L_D는 confidence map으로 이를 억제.
(3) 3D consistency 강제 없음: V1은 각 view를 독립적으로 처리. L_P처럼 3D 포인트를 다른 view로 투영해 일관성을 강제하는 메커니즘이 없어 view 간 pose가 발산 방향으로 학습될 수 있음.
프로젝트 의미: V2(논문 §3.2 완전 구현)가 올바른 선택임이 확인됐다. V1 ablation을 통해 confidence weighting과 L_P의 역할이 단순 "논문 따라하기" 이상임을 실증. Phase B 학습은 V2 loss로만 진행.
5 Next Steps
- V2 step 7816+ 계속: 현재 share QOS에서 반복 PREEMPTED(job 1845→2212→2223). own/extra QOS로 제출하거나 step 7816 ckpt에서 재시작. 목표 step 20K+ (plateau 확인 후 early stop).
- V1 실험 보존:
lgm_robocasa_da3_v0_lossv1_0511_0254/는 ablation 데이터로 보존. 삭제하지 않음.
- LR 스케줄 검토: V2 step 7816 구간에서 loss가 0.15~0.37로 oscillation. LR이 너무 높을 수 있음 — warmup 완료 후 cosine decay 상태 확인, 필요시 lower LR로 재시작.
- Phase 3 전환 기준: V2 학습 loss <0.10 (안정) + per-view depth RMSE <5cm(RoboCasa GT 기준) 달성 시 Phase 3(DROID + RoboCasa 혼합) 로 전환 가능.