check_success의 허용 오차 차이에서 왔을 수 있다. Zero-WAM이 쓰는 env override(zwcrit)로 같은 checkpoint·seed를 다시 채점했다.RoboTwin unseen-7 zero-shot 평가(260910-robotwin_unseen7_eval_final.html)는 평균 27.86% vs paper baseline 17.45%(+10.41p)였지만 태스크별 편차가 극심했다 — place_bread_basket +42.67p, move_stapler_pad 1.0%로 -22.33p. 이어 260911 카드에서 stamp_seal 4.0%의 원인 하나가 학습 분포 밖 instruction 문구임을 분리했다(4.0%→19.0%).
그 카드 이후에도 남은 의문은 채점 자체였다. 이 평가는 stock RoboTwin(RoboTwin/envs/*.py)의 check_success로 채점되는데, Zero-WAM은 두 태스크의 check_success를 자체 env(Zero-WAM/evaluation/robotwin/envs/)로 덮어쓴 별도 eval root(Zero-WAM/tmp/robotwin_eval_root, 2026-09-15 생성)를 쓴다. 비교 대상인 paper의 LingBot-VA baseline이 어느 기준으로 채점됐는지 확인되지 않은 상태에서, stock 기준의 절대 수치를 "조작 능력"으로 읽어도 되는지가 불명확했다.
모델·checkpoint·seed·rollout 수는 고정하고 eval root(ROBOTWIN_ROOT)만 stock → Zero-WAM으로 바꿨다. script/eval_robotwin_task.sh가 이미 ROBOTWIN_ROOT env를 받고 EVAL_TAG로 결과 디렉토리를 분리하므로 코드 수정은 없다.
| 태스크 | stock check_success | zwcrit check_success |
|---|---|---|
stamp_seal | seal–target xy 오차 eps1 = 0.01 (1 cm) + 양 gripper open | eps1 = 0.03 (3 cm), 나머지 동일 |
move_stapler_pad | stapler–pad 3축 오차 [0.02, 0.02, 0.01] 이내 + stapler quaternion 성분 spread < 0.02(사실상 특정 yaw 강제) + 양 gripper open | stapler xy가 pad half-size(0.055×0.03)+margin 0.025 이내 + stapler–pad 물리 접촉 + 양 gripper open. yaw·z 제약 제거 (주석: "Use physical contact with the pad instead of enforcing a specific stapler yaw") |
core-own, --container=nvcr.io/nvidia/isaac-lab:2.2.0, checkpoint robotwin_seen43_train/step32000, seed 0, 100 rollout, demo_clean)왜 이 설계인가: 260911의 LINGBOT_INSTRUCTION_TEMPLATE 변수와 이번 ROBOTWIN_ROOT 변수를 독립적으로 켜고 꺼서, stamp_seal에서 문구 × 기준의 2×2 요인 설계를 완성했다. 모델 재학습이나 추론 경로 변경이 없어 채점 기준의 순수 효과만 남는다. 결과는 eval/step32000_zwcrit/, eval/step32000_zwcrit_pnpprompt/에 baseline과 분리 저장.
sacct WorkDir는 Zero-WAM이지만 실행 스크립트·checkpoint·결과 저장은 모두 lingbot-va 쪽이다.| Run | 문구 | 판정 기준 | 성공 | SR | vs paper (3.67%) |
|---|---|---|---|---|---|
step32000 | 원본 "stamp …" | stock (1 cm) | 4/100 | 4.0% | +0.33p |
step32000_pnpprompt | 학습 스타일 pnp | stock (1 cm) | 19/100 | 19.0% | +15.33p |
step32000_zwcrit | 원본 "stamp …" | zwcrit (3 cm) | 34/100 | 34.0% | +30.33p |
step32000_zwcrit_pnpprompt | 학습 스타일 pnp | zwcrit (3 cm) | 47/100 | 47.0% | +43.33p |
stock 기준 +15.0p (4→19) / zwcrit 기준 +13.0p (34→47)
원본 문구 +30.0p (4→34) / pnp 문구 +28.0p (19→47)
두 요인의 조합 효과는 두 열에서 거의 같다(문구 +15 vs +13, 기준 +30 vs +28; 차이 2p). n=100 이항 표준오차가 19%에서 ≈3.9p, 47%에서 ≈5.0p이므로 이 2p 차이의 상호작용은 노이즈와 구분되지 않는다 — 즉 두 요인은 가산적으로 보는 게 안전하다.
| Run | 판정 기준 | 성공 | SR | vs paper (23.33%) |
|---|---|---|---|---|
step32000 | stock (yaw·z 제약) | 1/100 | 1.0% | -22.33p |
step32000_zwcrit | zwcrit (contact 기반) | 61/100 | 61.0% | +37.67p |
Zero-WAM eval root가 덮어쓰는 env가 위 2개뿐이므로 나머지 5개(place_object_scale 34, place_bread_basket 60, open_microwave 34, place_empty_cup 62, stack_blocks_three 0)는 stock과 동일하다고 보고 합산했다.
| 구성 | 7-task 성공 합계 / 700 | 평균 SR | vs paper (17.45%) |
|---|---|---|---|
| stock 기준 (260910 카드) | 195 | 27.86% | +10.41p |
| stamp_seal·move_stapler_pad만 zwcrit (원본 문구) | 285 | 40.71% | +23.26p |
| Job | 구성 | Elapsed | GPU-h | QOS |
|---|---|---|---|---|
130608 lva_zwcrit | 2 GPU × 2 태스크, 09-18 01:37→06:08 | 4h31m37s | 9.06 | core-own |
134193 lva_pnp_zwcrit | 1 GPU × 1 태스크, 09-18 11:32→15:49 | 4h17m09s | 4.29 | core-own |
move_stapler_pad가 1%→61%로 움직였다. 1%는 "조작 실패"가 아니라 stapler를 pad에 놓고도 yaw/z 허용 오차(quaternion spread < 0.02, z 1 cm)를 못 맞춘 경우가 대부분이었을 가능성이 높다.1) 채점 기준이 문구보다 큰 교란 요인이다. stamp_seal에서 기준 효과(+28~30p)가 문구 효과(+13~15p)의 약 2배. 260911 카드가 stamp_seal 저조 원인을 "문구"로 진단했지만, 4.0%→19.0%는 전체 격차(4.0→47.0, +43p)의 약 1/3에 불과했다.
2) unseen-7 태스크별 편차는 "cross-task 조작 일반화"로 해석하면 안 된다. move_stapler_pad -22.33p(stock)가 +37.67p(zwcrit)로 뒤집혔다. 260910 카드의 "태스크별 편차 극심" 결론과 260911의 wording 민감도 결론은 모두 채점 기준 통제 없이는 조작 능력 지표로 못 쓴다.
3) baseline 비교의 전제가 흔들린다. 우리 수치(stock)와 paper 수치의 채점 기준이 다르면 delta(+10.41p)는 정책 차이가 아닌 채점 차이를 섞는다. 이후 모든 unseen-7 비교는 채점 기준을 명시해야 한다.
check_success를 stock/zwcrit 둘 다 매 step 평가해 episode별 (stock, zwcrit) 성공 쌍을 저장 → 재실행 없이 rollout 단위 flip 비율과 "허용 오차 경계 근처 실패"의 비중을 측정.