Index
2026-09-03 — Experiment / Analysis

goal 조건화 v2 (late-attention + 배치 완료 프레임): hand-off replace 3.4% → 12.8%, goal까지 거리 31 → 13 cm

MolmoBot-Pi0 · pi0.5 · NextTo HardBench hand-off place 벤치(117편) · 성공 기준 = goal 이미지 속 자리 복원(replace)

TL;DR

12.8%
replace@5cm (v2 on)
3.4%
replace@5cm (v1 on)
36.8%
replace@10cm (v2 on)
13.4 cm
goal까지 거리 중앙값
53.8%
NextTo (구 기준)
117
hand-off 편수

1 배경 / 목적

2-stage(pick → nav → place)의 low-level VLA(pi0.5)가 물체를 든 채 넘겨받아 "Place the X next to the Y"만 받고 goal 이미지 속 자리에 되돌려 놓아야 한다. v1(goal을 빈 3번째 이미지 슬롯에 넣고, 에피소드마다 시점이 다른 제3 카메라 goal_im 사용)은 open-loop L1이 −20% 좋아졌지만 closed-loop 성공률은 노이즈 범위였다.

두 가지 지적(사용자): (1) 성공 기준이 NextTo(참조물체 옆 어디든)라 "goal 이미지에 둔 자리에 그대로 두기"를 재지 못한다. (2) goal을 빈 슬롯에 넣으면 pretrained 분포와 너무 달라 모델이 제대로 못 읽을 수 있다 — 마지막 쯤에 넣거나 goal이라고 명시해야 하지 않나. π0.7의 goal-image 방식과 비교해 설계를 다시 잡기로 함.
v1 replace 재측정 (위치 기록 러너로 재평가, 117편): goal on replace@5cm 3.4% / off 0.9% / 틀린 goal 2.6%, goal까지 거리 중앙값 31 / 34 / 39 cm. 성공률 지표는 세 조건이 구분되지 않음(p ≥ 0.31). 거리만 맞는 goal 대 틀린 goal이 p = 0.013 — v1도 goal을 아주 약하게는 읽지만 5 cm 정밀도에는 전혀 못 미침.

2 작업 내용

2.1 성공 기준 보강 — replace

replace@r = released ∧ ‖xy(final obj) − xy(obj in goal image)‖ ≤ r ∧ |z(final) − z(goal)| ≤ 5 cm r = 5 cm (주 지표), 10 / 15 cm (보조). 기준 위치 = goal-on/off 러너가 pass 1(expert 배치 완료) 직후 기록한 물체의 실제 위치. off-surface = |dz| > 5 cm (바닥 낙하 dz ≈ −94 cm, 다른 물체 위 +6~+13 cm, 넘어짐 −5.6 cm 등). 집계: scripts/summarize_handoff.py

2.2 v2 goal 주입 방식 (π0.7 비교 후 사용자 결정)

v1v2π0.7 (arXiv 2604.15483)
goal 이미지goal_im exo_camera_2 — 관측과 다른 제3 시점(에피소드마다 다름), 480×640 squash관측 exo 카메라(randomized_zed2_analogue_1)의 에피소드 마지막 프레임(배치 완료 후 장면), 관측과 같은 전처리같은 카메라 다중 뷰, 25% 세그먼트 끝 + 75% 0–4 s 미래 프레임(subgoal)
토큰 위치·attention빈 3번째 이미지 슬롯(right_wrist), 관측·언어와 같은 블록(서로 다 봄)언어 뒤 새 블록: 관측·언어는 goal을 못 봄, goal은 관측·언어를 봄, action expert는 전부 봄 (install_late_goal_attention, openpi mask_ar 블록 시작 1)비대칭 attention(관측이 goal을 못 봄)
존재 비율50%2/3 (dropout 0.34)25%
배포 시 형식같음같음 (배치 완료 장면 1장)world model이 subgoal 생성 — 우리 세팅에서 불가 → 기각
학습: PLACE=1 GOAL=2 scripts/train_pi05_mlspaces.sh (job 107935, own 8 GPU, 8h27m) --data.goal-camera randomized_zed2_analogue_1 --data.goal-source clip_end --data.goal-late-attn --data.goal-dropout 0.34 init · step(10k) · 혼합비 · 지시문 = place10k / v1과 동일. loss: 0 1.534 → 1k 0.0137 → 5k 0.0095 → 9k 0.0087 (v1과 같은 궤적) 검증(학습 전): 마스크 의미 4/4, fp32 K-cache 불변(관측→goal 누수 0), 5k 중간 ckpt open-loop on 0.0717 / off 0.0951 / wrong 0.1402

2.3 평가

open-loop val: molmo-augment place val 39,040 프레임 L1 (goal on / off / wrong=shuffle). closed-loop hand-off: NextTo HardBench 200편, scripted expert가 집어 preplace까지 → 정책이 Place 지시문만 받음(20 s). goal-on 러너는 pass 1에서 expert를 끝까지 완주시켜 go_home 시점의 정책 base 카메라(droid_shoulder_light_randomization) 프레임을 goal로, 물체 실제 위치를 replace 기준으로 기록한 뒤 MuJoCo 상태를 복원하고 pass 2를 정책이 수행. off = 같은 pass 1 + goal 미주입(HANDOFF_GOAL_INJECT=0), wrong = 다른 에피소드의 goal(HANDOFF_GOAL_BANK). 시드 고정으로 6조건 모두 같은 117편.

3 결과

3.1 closed-loop hand-off — replace 기준 (117편; 쌍 비교는 공통 113편)

조건replace@5cm@10cm@15cmgoal까지 xy 중앙값NextTo(구)off-surface놓음
v2 goal on12.8% (15)36.8% (43)53.0% (62)13.4 cm53.8% (63)1899.1%
v2 goal off1.7% (2)7.7% (9)13.7% (16)28.9 cm26.5% (31)1798.3%
v2 틀린 goal5.1% (6)7.7% (9)17.9% (21)40.9 cm21.4% (25)2995.7%
v1 goal on3.4% (4)9.4% (11)16.2% (19)31.4 cm23.9% (28)1998.3%
v1 goal off0.9% (1)6.0% (7)15.4% (18)34.4 cm18.8% (22)1898.3%
v1 틀린 goal2.6% (3)12.0% (14)15.4% (18)39.4 cm19.7% (23)2299.1%
goal까지 거리 CDF와 성공률 막대
Figure 1. (좌) 최종 물체 위치 → goal 이미지 속 위치의 xy 거리 CDF. v2 goal ON(빨강)만 왼쪽으로 크게 이동. (우) replace@5/10/15 cm와 구 NextTo 기준. 같은 117편·같은 시드.
쌍 비교(McNemar 정확검정 / 거리 Wilcoxon, n=113): v2 on vs v2 off — replace@5 13:0 (p=2.4e-4), @10 36:2 (p=5.4e-9), NextTo 39:8 (p=5.5e-6), 거리 p=1.6e-12 (on이 더 가까운 편 79%). v2 on vs v1 on — @5 13:3 (p=0.021), @10 36:5 (p=7.8e-7), NextTo 39:6 (p=5.4e-7). v2 off vs v1 off는 전부 p ≥ 0.18 — goal 없이 돌리면 두 모델은 같다.
틀린 goal: v2 off vs v2 wrong 거리 p=0.013(더 멀어짐), off-surface 17→29편 — v2는 틀린 goal도 따라간다(강한 goal 의존). wrong의 replace@5 6편 중 5편은 물체를 35–78 cm 옮겨 맞는 자리에 놓은 경우: 틀린 goal이어도 언어("next to the Y")·장면만으로 자리가 잘 제약되는 에피소드.

3.2 물체 이동 진단 (hand-off 시 goal까지 중앙값 49.7 cm)

조건최종→goal 중앙값이동량 중앙값goal 방향 진행률거의 안 움직임(<5 cm)hand-off보다 가까워진 편
v2 goal on14.3 cm44.4 cm0.694%95%
v2 goal off28.9 cm35.5 cm0.3522%73%
v2 틀린 goal40.9 cm34.1 cm0.1511%58%
v1 goal on31.9 cm32.0 cm0.2923%74%

3.3 open-loop val (L1, 39,040 프레임)

ckptgoalallarmgripper
v2@10kon0.06190.05790.0900
v2@10koff0.08710.08550.0980
v2@10kwrong0.15200.15750.1136
v1@10kon0.07200.06830.0979
v1@10koff0.08980.08850.0983
place10k—0.08700.08590.0950

goal 이득 v2 −28.9% (v1 −19.8%), 틀린 goal 손실 +74% (v1 +43%). goal off = place10k(0.0871 vs 0.0870) — goal 슬롯을 비워도 손해 없음.

3.4 goal 이미지 vs 정책 최종 장면 (v2 goal on)

goal 이미지와 최종 프레임 비교
Figure 2. 왼쪽 = 모델이 받은 goal 이미지(expert 배치 완료 직후, 정책 base 카메라), 오른쪽 = 정책 종료 시 같은 카메라. 위 4편 replace 성공(1.6–3.7 cm), house_117 근접(5.4 cm), house_100·395 실패(30 cm+; 395는 hand-off 직후 떨어뜨림), house_211 off-surface(xy 4.5 cm이나 넘어져 dz −5.6 cm — 기준 경계).

3.5 남은 실패 분해 (v2 goal on, 117편)

결과편수비율설명
replace@5cm 성공1512.8%goal 자리 복원
근접 5–15 cm4740.2%방향은 맞고 마지막 정밀도 부족 — 가장 큰 덩어리
15–30 cm1613.7%잘못된 자리
30 cm+2017.1%이 중 4편은 네 조건 모두 이동 <2 cm(hand-off 직후 떨어뜨림, 벤치 측 문제 의심)
off-surface1815.4%바닥 낙하 / 다른 물체 위 / 넘어짐
못 놓음10.9%

4 영상 (hand-off 시점 = VLA 제어 시작부터, 15 fps)

행: v2 goal ON / v2 goal OFF / v2 WRONG goal / v1 goal ON. 열: 모델이 받은 goal 이미지 | exo(정책 base 카메라) | wrist. 네 조건은 같은 시드로 expert가 만든 동일한 hand-off 상태에서 시작(노란 테두리 = 첫 8 프레임). 라벨의 거리 = 최종 물체 위치 → goal 이미지 속 위치.

house_116 — "Place the fork next to the dark smooth cup"

v2 goal ON만 replace 성공(3.7 cm). goal OFF 41.6 cm, 틀린 goal·v1은 다른 곳에 놓음.
v2 goal ON: REPLACE OK (3.7 cm from goal) · v2 goal OFF: FAIL: 42 cm from goal · v2 WRONG goal: FAIL: 49 cm from goal · v1 goal ON: FAIL: 57 cm from goal

house_587 — "Place the medium sized glossy red apple next to the dark pot"

v2 goal ON 2.3 cm. goal OFF 28.9 cm, v1 goal ON 43.0 cm — 같은 hand-off 상태에서 goal 주입 방식만 다름.
v2 goal ON: REPLACE OK (2.3 cm from goal) · v2 goal OFF: FAIL: 29 cm from goal · v2 WRONG goal: FAIL: 64 cm from goal · v1 goal ON: FAIL: 43 cm from goal

house_464 — "Place the dark green wine bottle next to the yellow sponge"

v2 goal ON 2.2 cm. goal OFF는 76 cm(다른 곳), v1 goal ON은 off-surface(80 cm).
v2 goal ON: REPLACE OK (2.2 cm from goal) · v2 goal OFF: FAIL: 76 cm from goal · v2 WRONG goal: FAIL: off-surface (xy 104 cm, dz -97 cm) · v1 goal ON: FAIL: off-surface (xy 80 cm, dz -12 cm)

house_965 — "Place the kitchen spatula next to the square white ceramic plate with ridges"

v2 goal ON 1.6 cm. goal 이미지가 로봇 팔로 크게 가려져 있는데도 위치를 복원. goal OFF 9.3 cm(근접), v1 17.9 cm.
v2 goal ON: REPLACE OK (1.6 cm from goal) · v2 goal OFF: near miss (9 cm from goal) · v2 WRONG goal: near miss (7 cm from goal) | NextTo OK · v1 goal ON: FAIL: 18 cm from goal | NextTo OK

house_117 — "Place the polished metal fork with curve next to the blue rectangular frying pan"

v2 goal ON 5.4 cm — 기준(5 cm) 바로 밖의 근접 실패(방향은 맞음). OFF 34.5 cm, v1 24.0 cm.
v2 goal ON: near miss (5 cm from goal) | NextTo OK · v2 goal OFF: FAIL: 34 cm from goal · v2 WRONG goal: FAIL: 19 cm from goal · v1 goal ON: FAIL: 24 cm from goal

house_100 — "Place the small red potato next to the blue pot with handles"

반례: v2 goal ON 44 cm 실패, goal OFF 10.5 cm, 틀린 goal이 오히려 3.8 cm(언어·장면만으로 자리가 정해지는 에피소드). goal이 항상 도움이 되진 않음.
v2 goal ON: FAIL: 44 cm from goal | NextTo OK · v2 goal OFF: near miss (10 cm from goal) | NextTo OK · v2 WRONG goal: REPLACE OK (3.8 cm from goal) · v1 goal ON: FAIL: 24 cm from goal

house_395 — "Place the orange conical spray bottle with nozzle next to the solanaceous vegetable"

공통 실패: 네 조건 모두 이동량 <2 cm — 넘겨받자마자 hand-off 지점 아래로 떨어뜨림(정책과 무관한 hand-off 상태 문제 의심).
v2 goal ON: FAIL: 59 cm from goal · v2 goal OFF: FAIL: 59 cm from goal · v2 WRONG goal: FAIL: 58 cm from goal · v1 goal ON: FAIL: 59 cm from goal

4b 추가 실험 (09-04): goal과 관측이 산만 물체에서 다를 때 — 책상 위 물체 추가/제거

벤치의 goal은 같은 장면·같은 카메라의 배치 후 프레임이라 관측과의 차이가 물체 위치·팔 자세뿐이다(base pose·카메라 파라미터 에피소드 내 변화 0 확인). 사용자 요청으로 hand-off 직후 책상 위 산만 물체를 추가(add:2)하거나 제거(remove:2)해 goal(원래 장면)과 관측이 산만 물체에서만 다른 조건을 만들었다(HANDOFF_PERTURB, molmobot_pi0/eval/scene_perturb.py). 추가 물체는 집 안의 다른 자유 물체를 참조 물체 주변 0.15–0.55 m의 상판(레이캐스트 검증)·카메라에 보이는 빈 자리로 옮기고, 제거는 보이는 상판 위 물체부터 50 m 밖으로 치운다. goal 자리·경로는 비워 둔다.

조건 (117편)실제 교란replace@5cm@10cm@15cmgoal까지 중앙값NextTo
v2 goal on (무교란)—12.8%36.8%53.0%13.4 cm53.8%
v2 goal on + add:273편, 평균 1.12개12.0%30.8%41.9%16.0 cm46.2%
v2 goal on + remove:2107편, 평균 1.78개7.7%26.5%45.3%15.9 cm39.3%
v2 goal on + add:2, remove:2112편11.1%23.9%41.9%16.9 cm49.6%
v2 goal off (무교란)—1.7%7.7%13.7%28.9 cm26.5%
v2 goal off + add:273편2.6%8.5%17.9%29.3 cm28.2%
v2 goal off + remove:2107편5.1%10.3%17.1%30.9 cm27.4%
교란 효과 (실제 교란된 편만 쌍 비교): remove — 거리 17.0 vs 13.3 cm (p=0.024), NextTo 39.8 vs 54.4% (p=0.02), replace@10 25.2 vs 36.9% (p=0.06). add — 거리 16.0 vs 13.0 cm (p=0.22), NextTo 43.7 vs 62.0% (p=0.01). 둘 다 — replace@10 23.1 vs 37.0% (p=0.02). 제거가 추가보다 더 해롭다(goal에 있던 참조 단서가 사라짐; 추가는 가시 자리 제약으로 절반의 에피소드에서 1개만 놓여 강도가 약했음). replace@5cm는 n이 9–14편이라 노이즈 범위.
같은 교란 아래 goal on vs off: add — 16.0 vs 29.3 cm (p=1.3e-6), replace@10 29.6 vs 7.0% (18:2, p=4e-4); remove — 17.0 vs 30.8 cm (p=3.2e-7), replace@10 25.2 vs 8.7% (23:6, p=2e-3). goal off는 교란에 무반응(언어만 사용). → v2는 산만 물체 불일치에 무너지지 않고 goal의 위치 정보를 계속 쓴다(성능은 완만히 감소: 중앙값 +3~4 cm, replace@10 −6~14%p).
주의: 이 실험을 포함한 모든 v1·v2 결과는 프롬프트가 "Place the X next to the Y"였다 — 변환 때 HF 업로더의 원래 instruction "Place the X on the {받침면}."을 버린 오류(09-04 발견·복원). 즉 언어가 Y 옆을 알려준 조건이며, goal만으로 자리를 찾는 능력은 다음 학습(place+open/close, 복원된 프롬프트, job 109241)부터 측정한다.

5 Takeaway

Q2 답: goal 이미지는 "어떻게 넣느냐"가 결정적

같은 데이터·같은 step·같은 init에서 goal을 언어 뒤 별도 블록으로, 관측과 같은 카메라의 배치 완료 프레임으로 주니 closed-loop replace@5cm 3.4% → 12.8%, @10cm 9.4% → 36.8%, goal까지 거리 31 → 13 cm, NextTo 24% → 54%(expert 상한 71.8%). v1처럼 빈 슬롯에 제3시점 goal을 넣으면 open-loop만 좋아지고 closed-loop는 못 바꿨다 — "pretrained 분포와 다른 자리" 우려가 맞았다.

goal 없이 돌리면 v2 = v1 = place10k(replace@5 1–2%). 즉 향상은 전부 goal 내용에서 오고, 모델은 틀린 goal도 따라간다(off-surface 17 → 29편). goal 의존이 강한 만큼 배포 시 goal 이미지의 품질(같은 장면·같은 카메라)이 성능을 좌우한다.

NextTo(구 기준)와 replace의 괴리는 여전히 크다(54% vs 13%). 최종 목표(5 cm 복원)까지의 병목은 마지막 5–15 cm 정밀도(40%).

6 Next Steps

정밀도 (근접 5–15 cm, 40%)

(a) inference에서 goal을 pass 1 프레임 하나로 고정하지 말고 매 step 같은 goal을 유지하되 존재 비율을 더 높여(2/3 → 1) 학습, (b) place 데이터 학습 step 10k → 20k, (c) 마지막 구간을 wrist 카메라 중심으로 보게 하는 정밀 배치 데이터 가중, (d) goal 해상도/크롭(현재 obs와 같은 224 pad) 상향.

off-surface 15%

놓는 높이 판단 실패. goal 프레임에 로봇 팔이 크게 가리는 경우(house_965·464)의 영향 확인 → goal 프레임을 retreat 이후(팔 없는 장면)로 찍는 변형(HANDOFF_GOAL_DELAY) 재평가.

배포 형식 강건성

벤치의 goal은 "같은 카메라·같은 장면의 배치 후 프레임"이라 최적 조건. 실제 2-stage에서는 goal이 이전 시점(pick 전)·다른 로봇 포즈·다른 조명일 수 있음 → v1 wrong(다른 에피소드)이 아니라 "같은 장면, 다른 포즈/시간"의 goal로 강건성 평가.

벤치 점검

네 조건 모두 hand-off 직후 떨어뜨리는 4편(house_258/374/395/566): expert hand-off 상태(그립·물체 자세) 문제 여부 확인 후 분모에서 제외할지 결정.

7 산출물

ckpt : ~/ckpts/molmobot_pi05_runs/pi05_mlspaces_finetune/pi05_mlspaces_place_goal_v2/10000 (5000, 9999 보존) 결과 : ~/ckpts/molmobot_pi05_runs/handoff_eval/results/placegoalv2_{on,off,wrong}_step10000.json, placegoal10k_{on,off,wrong}_r2_step10000.json ~/ckpts/molmobot_pi05_runs/place_val/placegoalv2_{on,off,wrong}.json 잡 : 학습 107935 (own) · val 108734/108735/108736 · hand-off 108737/108738/108739 · v1 재평가 108019/108021/108180 (extra) 코드 : molmobot_pi0/goal_image.py (install_late_goal_attention, GoalDroidInputs) · dataset.py (goal_source=clip_end) · eval/handoff_goal.py (INJECT/BANK, 위치 기록) scripts/summarize_handoff.py (replace 기준) · tmp/plot_replace_dist.py · tmp/make_replace_figure.py · tmp/make_replace_videos.py 로그 : claude/260903/analysis-goal_v2_replace_results.md · analysis-replace_metric.md · progress-goal_v2_late_attention.md