molmobot_pi0/eval/scene_perturb.py — hand-off 도달 직후 참조 물체가 놓인 면 위에서 물체를 추가(add:N)/제거(remove:N), goal 이미지·replace 기준 위치는 교란 전(pass 1) 그대로.goal v2(배치 완료 프레임을 goal 이미지로 주입)의 hand-off replace@5cm 12.8%라는 결과는, goal 이미지가 같은 장면·같은 카메라·같은 base pose에서 pass 1(expert 완주)로 만든 것이라 관측과의 차이가 물체 위치·팔 자세뿐인 가장 유리한 조건이다(09-04 확인: base pose·카메라 파라미터는 에피소드 내 변화 없음).
사용자 요청: base pose 교란보다 먼저 책상 위에 다른 물체를 추가하거나 없애는 조건에서 goal 이미지를 보고도 정확히 놓을 수 있는지 확인. 실제 배포에서는 goal을 찍은 뒤 다른 물체가 놓이거나 치워지는 상황이 흔하다.
새 모듈 molmobot_pi0/eval/scene_perturb.py로 hand-off 시점 장면 교란을 구현. 환경변수 HANDOFF_PERTURB="add:N" | "remove:N" | "add:N,remove:M"로 제어.
검증: 프로브(house 100, 로그인 GPU 3, 정책 없이) 3회 — 팬·소금통 제거(가시 후보 3), 접시/머그 추가 후 15 step 물리에서 높이 유지(0.954→0.952). 스모크(v2 goal-on, add:2,remove:2, 2편) 통과 — house 100 hand-off @119 step에서 제거 2·추가 1(가시 자리 부족으로 후보 23 중 1개만), 정책 303 step, h5 메타·PNG 정상 저장.
제출: own, -c 20 — 109165 placegoalv2_on_add2 / 109166 on_rm2 / 109167 on_addrm2 / 109168 off_add2(INJECT=0) / 109169 off_rm2,
각 ~3h17m. 비교 기준 = 교란 없는 v2 on(replace@5 12.8%, @10 36.8%, 13.4cm) / v2 off(1.7 / 7.7 / 28.9cm).
117편 중 실제 쌍 비교 가능 편 113편. "실제 교란 편수"는 add/remove 대상이 존재해 정말로 장면이 바뀐 편만(가시 자리·경로 제약으로 목표 N개를 다 못 놓는 경우가 있음).
| 조건 | 실제 교란 편수 | replace@5cm | @10cm | @15cm | goal까지 중앙값 | NextTo | off-surface |
|---|---|---|---|---|---|---|---|
| v2 on (무교란) | — | 12.8% | 36.8% | 53.0% | 13.4 cm | 53.8% | 18 |
| v2 on + add:2 | 73/117 | 12.0% | 30.8% | 41.9% | 16.0 cm | 46.2% | 21 |
| v2 on + remove:2 | 107/117 | 7.7% | 26.5% | 45.3% | 15.9 cm | 39.3% | 17 |
| v2 on + add:2,remove:2 | 112/117 | 11.1% | 23.9% | 41.9% | 16.9 cm | 49.6% | 14 |
| v2 off (무교란) | — | 1.7% | 7.7% | 13.7% | 28.9 cm | 26.5% | 17 |
| v2 off + add:2 | 73/117 | 2.6% | 8.5% | 17.9% | 29.3 cm | 28.2% | 15 |
| v2 off + remove:2 | 107/117 | 5.1% | 10.3% | 17.1% | 30.9 cm | 27.4% | 15 |
goal-관측 불일치 중 "산만 물체 추가/제거" 차원만 분리해서 재는 도구를 확보했다. 대조군(goal-off+교란)을 같이 재서 "clutter 자체가 배치를 방해하는 효과"와 "goal 불일치 효과"를 분리할 수 있게 됐다. 결과적으로 v2의 goal 활용은 정합(alignment)만 학습한 것이 아니라 물체 배치의 실제 위치 정보를 읽는 것에 가깝다는 근거가 하나 더 늘었다 — 배포 시 goal 촬영과 실행 사이에 장면이 조금 바뀌어도 성능이 완전히 무너지지는 않을 것으로 기대할 수 있다.
add는 가시 자리·경로 회피 제약으로 목표 N개를 다 못 놓는 에피소드가 있다(스모크에서도 1/2) — 결과의 "실제 교란 편수"·perturb.mean_added로 실제 교란 강도를 항상 같이 보고해야 한다.
또한 이 실험은 프롬프트 정정(09-04) 이전 버전이라 "next to Y" 프롬프트로 진행됐다 — 참조 물체 언어 힌트가 있는 상태의 강건성이므로, 복원 프롬프트("on the {받침면}", 참조 물체 없음) 모델로도
재측정이 필요하다.
다음 교란 차원: (1) goal 프레임 시점 차이 — 다른 exo 카메라로 goal을 찍는 HANDOFF_GOAL_CAMERA 실험(미구현), (2) base pose 교란(미구현), (3) 조명/시간대 차이. 프롬프트 정정 후
모델(place_oc goal v2, onsupport 프롬프트)로 같은 add/remove 프로토콜을 재실행해 "언어 힌트 없이도 교란에 강건한가"를 확인.