43 train / 7 held-out unseen)대로 나눠, 각 태스크의 실제 데모 영상 + 그 에피소드에 실제로 붙은 language instruction을 나란히 보여준다.영상·instruction은 전부 로컬 RoboTwin 2.0 수집 데이터에서 직접 추출했다. 프로젝트 페이지에 올라간 7개 unseen 영상은 정책 롤아웃이지만, 여기 영상은 전부 동일 소스(demo_clean expert 데모)라 43 vs 7을 같은 조건에서 비교할 수 있다.
| 항목 | 출처 | 비고 |
|---|---|---|
| 영상 | RoboTwin/data/demo_clean/<task>/aloha_agilex/video/episode_000000{0,1,2}.mp4 | 320×240 head-cam, expert demo. 태스크당 3 에피소드(상단 Episode 토글) |
| instruction | .../instruction/episode_XXXXXXX.json | 에피소드마다 seen 100개 + unseen 100개 문장. 실제 오브젝트 이름이 치환된 상태 |
| 태스크 정의 / 슬롯 | RoboTwin/description/task_instruction/<task>.json | full_description, schema({A}{B}{a}가 무엇인지) |
| 슬롯 변이 수 | .../scene_info.json | 수집된 50 에피소드에 걸친 {A}/{B}/{a}의 고유값 개수 → 오브젝트 다양성 지표 |
| 43/7 분할 · SR | Zero-WAM 프로젝트 페이지 (gh-pages/index.html) | 7개 태스크 이름·카테고리·성공률 그대로 인용 |
{a}는 사용 팔(left/right/dual).seen은 학습 때 쓰인 표현 분포, unseen은 같은 뜻의 보지 못한 표현(언어 일반화 평가용)이다. 상단에서 토글해 두 스타일을 비교할 수 있다. 이건 태스크 분할이 아니라 문장 분할이라는 점에 주의.Zero-WAM의 주장은 human demo video를 task specification으로 쓰면 language만으로는 안 되는 zero-shot 태스크가 풀린다는 것이다. 그렇다면 각 태스크에 대해 물어야 할 것은 “language instruction이 이 태스크의 목표 상태를 유일하게 결정하는가?”이다. 카드를 보면서 아래 세 축으로 판정하면 된다.
| 판정 | 기준 | 전형적 신호 |
|---|---|---|
| 언어로 충분 | 문장만 읽고도 목표 상태·대상·순서가 하나로 정해진다. 데모는 중복 정보 | 오브젝트 1종, 명시적 색/이름, 단일 스텝 (click_bell, place_empty_cup) |
| 애매 | 문장으로 표현은 가능하나 실행 세부(파지점·접근각·팔 선택)가 열려 있음 | 오브젝트 다변이({A}×5+), 팔 선택이 장면 의존, 도구 사용 |
| 데모 필요 | 목표가 시연으로만 편하게 지정됨. 언어로 쓰면 장황하거나 모호해짐 | 장기 순서(3단 적재), 관절체 궤적, 새 오브젝트 카테고리, 양팔 협응 |
RoboTwin은 태스크마다 이미 잘 쓰인 language instruction이 200개씩 붙어 있는 벤치마크다. 즉 7개 held-out 태스크도 언어로는 완벽히 명세되어 있다. 그렇다면 human demo가 기여하는 것은 “명세”가 아니라 다른 것일 수 있다:
seal, scale)를 픽셀에 붙여준다따라서 카드를 볼 때 “이 문장이 애매한가?” 뿐 아니라 “문장은 멀쩡한데 이 단어/오브젝트를 43개 train 태스크에서 본 적 있나?”를 같이 보면 된다. 43개 쪽을 검색창에 seal, scale, stapler, cup, bread, microwave, stack으로 넣어보는 것이 가장 빠른 확인법이다.
“정말 human demo가 필요한가”를 감으로 판단하지 않기 위해, 먼저 7개 held-out 태스크에 등장하는 오브젝트가 43개 train 태스크에 실제로 나왔는지를 scene_info.json 전수(태스크당 50 에피소드)에서 계산했다. 오브젝트는 048_stapler/base1 같은 asset 경로에서 카테고리 토큰만 뽑아 비교했다.
| Held-out 태스크 | train 43에 있는 asset | train 43에 없는 asset | Zero-WAM SR | Δ video (vs text-only) | 1차 소견 |
|---|---|---|---|---|---|
| Place Empty Cup place_empty_cup | cup ← 1개 train | coaster | 84.87% | +19.22 | cup은 train(place_container_plate)에 있고 coaster는 평평한 타깃이라 사실상 새 개념이 아님. 문장 “place the empty cup on the coaster”가 목표를 유일하게 결정한다. |
| Move Stapler Pad move_stapler_pad | stapler ← 5개 train | 없음 (전부 train에 존재) | 69.14% | +4.16 | stapler는 train 5개 태스크에 등장하고, ‘물체를 색깔 매트 위로’ 패턴은 place_mouse_pad가 그대로 학습했다. 새로운 건 조합뿐. |
| Open Microwave open_microwave | — | microwave | 59.00% | +17.57 | microwave asset 자체는 train에 전혀 없다. 다만 open_laptop·put_object_cabinet이 ‘관절체를 연다’는 스킬 프라이어를 준다. 언어는 명확하지만 어떤 픽셀이 microwave인지가 새 정보. |
| Stamp Seal stamp_seal | — | seal | 47.00% | +29.67 | seal asset이 train에 전혀 없다. 반면 ‘물체를 잡아 색깔 매트에 놓는다’는 동작은 place_mouse_pad/place_fan/place_shoe에 있다. 즉 부족한 것은 동작이 아니라 ‘seal’이라는 단어의 grounding. |
| Place Bread Basket place_bread_basket | bread ← 4개 train | breadbasket | 35.00% | -28.92 | bread는 train(place_bread_skillet 등)에 있지만 breadbasket은 없다. 게다가 빵이 여러 개라 ‘every bread’의 반복 횟수가 장면 의존 → 문장만으로는 종료 조건이 덜 결정적. |
| Place Object Scale place_object_scale | bell ← 4개 trainmouse ← 5개 trainstapler ← 5개 train | electronicscale | 24.67% | +1.99 | 옮기는 물체(mouse/stapler/bell)는 전부 train에 있고, 타깃인 electronicscale만 없다. SR 24.67%로 낮은데 asset 신규성은 1개뿐 → 저울 위 작은 면적에 정밀하게 놓는 실행 난이도가 병목일 가능성. |
| Stack Blocks Three stack_blocks_three | — | 없음 (전부 train에 존재) | 9.00% | +9.00 | asset 신규성 0. stack_blocks_two가 train에 있고 색·순서까지 문장에 명시돼 있다. 그런데 SR 9%로 최저 → 이 태스크의 병목은 명세가 아니라 horizon/누적 오차다. |
electronicscale·breadbasket·coaster·seal·microwave 5종뿐이다. 프로젝트 페이지가 이 그룹을 “Unseen Object or Unseen Container”라고 부르는 것과 일치한다.stack_blocks_three가 SR 9.00%로 최저이고, asset이 완전히 새로운 open_microwave가 59.00%다. 즉 이 벤치마크에서 실패의 주된 원인은 “태스크를 몰라서”가 아니라 “길고 정밀한 실행을 못해서”일 가능성이 크다.RoboTwin은 태스크마다 오브젝트 이름이 치환된 instruction을 200개씩 갖고 있어서, 7개 held-out 태스크도 언어로는 완전히 명세되어 있다. 따라서 human demo가 “무엇을 할지”를 알려준다는 설명은 이 벤치마크에서는 약하다. 표가 지지하는 더 그럴듯한 역할은 두 가지다:
seal, electronicscale, breadbasket, microwave처럼 train에서 한 번도 픽셀에 붙어본 적 없는 명사. 이 4개에 한해서는 demo가 “그 단어가 화면의 이것”을 지정해 주는 실질적 정보를 준다.반대로 demo가 별 도움이 안 될 것으로 보이는 쪽도 표에 있다. stack_blocks_three는 색·순서가 문장에 다 적혀 있고 stack_blocks_two까지 학습했는데 9%다. 여기서 부족한 건 명세도 grounding도 아니라 3단계 누적 실행이다. 아래 카드에서 각 태스크를 직접 보면서 이 가설을 태스크 단위로 검증하면 된다.
seal / scale / microwave / coaster / basket을 넣고 43 train 필터로 전환하면, 그 단어가 train 쪽에 존재하는지 즉시 확인된다.본문 Table 2에는 Zero-WAM/LingBot-VA/WAN-Action만 있고, ablation 변형들의 태스크별 수치는 그림 안에만 있다. 아래 표는 그 그림에서 복원한 값이다 — 출처와 정밀도는 표 아래에 명시.
| Held-out 태스크 | train에 없는 타깃 | WAN-Action | LingBot-VA (논문) | LingBot-VA (자체 학습) | ZW w/o pretrain | ZW w/o pretrain (자체 · language-only) | ZW w/o pretrain (자체 · ICL) | ZW w/o pretrain (자체 · 영상 교체) | ZW w/o IFP | text-only ZW | Zero-WAM | Δ ICL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Stamp Seal | seal | 7.33 | 3.67 | 34.00 | 53 | 30.00 | 47.00 | 38.00 | 21.34 | 17.33 | 47.00 | +29.67 |
| Place Empty Cup | coaster | 38.33 | 42.33 | 62.00 | 46 | 10.00 | 28.00 | 12.00 | 59.02 | 65.65 | 84.87 | +19.22 |
| Open Microwave | microwave | 2.26 | 29.33 | 34.00 | 26 | 8.70 | 21.00 | — | 3.82 | 41.43 | 59.00 | +17.57 |
| Stack Blocks Three | 없음 | 0.00 | 0.00 | 0.00 | 0 | 0.00 | 0.00 | — | 0.00 | 0.00 | 9.00 | +9.00 |
| Move Stapler Pad | 없음 | 10.67 | 23.33 | 61.00 | 74 | 52.00 | 40.00 | 26.00 | 56.35 | 64.98 | 69.14 | +4.16 |
| Place Object Scale | electronicscale | 3.00 | 6.17 | 34.00 | 22 | 13.00 | 16.00 | — | 19.65 | 22.68 | 24.67 | +1.99 |
| Place Bread Basket | breadbasket | 15.26 | 17.33 | 60.00 | 33 | 31.00 | 37.00 | — | 39.74 | 63.92 | 35.00 | -28.92 |
| macro average | — | 10.98 | 17.45 | 40.71 | 36.36 | 20.67 | 27.00 | — | 28.55 | 39.44 | 46.95 | +7.51 |
변형 정의 (논문 §4.4 원문 기준) — ZW w/o pretrain: Wan-2.2 초기화 + human video ICL로 43개 RoboTwin 태스크만 학습(대규모 pre-training 없음). text-only ZW: 전체 pre-training은 그대로 하되 human-video condition을 마스킹해 각 human-robot pair를 평범한 text-conditioned 샘플로 강등 — 즉 “데이터는 같고 video 조건만 뺀” 변형. ZW w/o IFP: in-context future chunk prediction 목표 제거. Δ video = Zero-WAM − text-only ZW, 즉 같은 데이터로 학습했을 때 ICL 경로 전체(학습 + 추론)의 기여다. text-only ZW는 학습 단계에서부터 human-video condition이 마스킹된 별도 모델이라, “추론 때 demo만 빼고 넣는 차이”가 아니다.
수치 출처 — WAN-Action/LingBot-VA/Zero-WAM은 논문 Table 2(본문 텍스트, 소수 2자리). ZW w/o pretrain은 Fig. 5 막대 라벨(정수 반올림). text-only ZW와 ZW w/o IFP는 Fig. 6 radar 차트에 값 라벨이 없어, 그림 PDF의 벡터 폴리곤 좌표를 축 스케일로 역산했다. 같은 디코더가 Zero-WAM·LingBot-VA 행을 Table 2와 ±0.05 pp 이내로 재현하므로 이 값들의 오차도 그 수준이다. macro average는 논문 본문에 인쇄된 값(46.95 / 39.44 / 36.36 / 28.55 / 17.45 / 10.98)을 그대로 썼다.
stamp seal +29.67, place empty cup +19.22, open microwave +17.57)는 전부 train 43에 없는 타깃 asset(seal / coaster / microwave)을 가진 태스크다 — §3에서 세운 “demo = grounding 보완” 가설과 방향이 맞는다.
그러나 place bread in basket은 breadbasket이 마찬가지로 train에 없는데도 −28.92 pp로 최대 손해다. 따라서 asset 신규성만으로는 설명되지 않는다.
이 태스크는 양팔 + 빵이 여러 개라 “몇 개를 옮겨야 하는가”가 장면 의존인데, 고정된 human video를 조건으로 주면 오히려 잘못된 반복 횟수/팔 배정을 유도했을 수 있다 — 가설이며 이 표만으로는 검증되지 않는다.ZW w/o IFP는 human video를 조건으로 받는데도 28.55%로, video를 아예 안 쓰는 text-only(39.44%)보다 10.89 pp 낮다.
즉 in-context video는 기본적으로 무시되거나 방해가 되고, IFP 목표로 “video를 보라”고 강제해야 +18.40 pp를 회수한다.
특히 open microwave는 3.82 → 59.00으로 IFP 유무가 사실상 전부다.RoboTwin 범위 안에서는 ‘필요조건’이 아니라 ‘조건부 보너스’에 가깝다. 근거:
stack blocks three는 0.00 → 9.00으로 video가 zero-success 장벽을 깬 유일한 태스크다. 절대값은 작지만 언어로 완전히 명세된 태스크에서도 video가 도움이 된 사례라, “명세 보완” 해석을 완전히 배제할 수는 없다.확실히 가르려면 여전히 ablation이 필요하다 — 같은 7개 태스크에서 (i) 언어만, (ii) human video 전체, (iii) video의 마지막 프레임만(목표 상태만), (iv) 무관한 태스크의 video를 비교하면 grounding / 목표상태 / 모션 프라이어 / 단순 조건 노이즈를 분리할 수 있다.
논문 baseline을 그대로 믿는 대신, 같은 7개 태스크에서 직접 학습·평가한 LingBot-VA를 넣었다.
출처는 RoboTwin/eval_result/<task>/LingBot_VA/demo_clean/step32000/,
7개 태스크 전부 100 에피소드, Instruction Type: seen.
(place_empty_cup에는 3 에피소드짜리 중단된 smoke run이 같이 있어서, 에피소드 수가 가장 많은 run을 자동 선택하도록 했다.)
| Held-out 태스크 | LingBot-VA (논문) |
LingBot-VA (자체) |
Δ | text-only ZW | Zero-WAM | 비고 |
|---|---|---|---|---|---|---|
| Place Bread Basket | 17.33 | 60.00 | +42.67 | 63.92 | 35.00 | 언어 baseline 승 |
| Move Stapler Pad | 23.33 | 61.00 | +37.67 | 64.98 | 69.14 | — |
| Stamp Seal | 3.67 | 34.00 | +30.33 | 17.33 | 47.00 | — |
| Place Object Scale | 6.17 | 34.00 | +27.83 | 22.68 | 24.67 | 언어 baseline 승 |
| Place Empty Cup | 42.33 | 62.00 | +19.67 | 65.65 | 84.87 | — |
| Open Microwave | 29.33 | 34.00 | +4.67 | 41.43 | 59.00 | — |
| Stack Blocks Three | 0.00 | 0.00 | +0.00 | 0.00 | 9.00 | — |
| macro average | 17.45 | 40.71 | +23.26 | 39.44 | 46.95 | — |
place bread in basket 60.00 vs Zero-WAM 35.00, place object on scale 34.00 vs 24.67.
특히 bread basket은 이제 같은 방향의 독립 신호가 셋이다 —
Δvideo −28.92, text-only ZW 63.92 > ZW 35.00, 그리고 자체 LingBot-VA 60.00 > ZW 35.00.
이 태스크에서 human video가 성능을 깎는다는 건 이제 단일 그림에서 읽은 수치가 아니라 재현된 관측이다.stamp seal의 언어 실패는 재현된다.
논문 3.67% → 자체 4.00% (둘 다 upstream 기준). 독립적인 두 번의 학습에서 같은 값이 나왔으니 학습 우연이 아니라
태스크/프롬프트의 성질이다. 다만 이것이 “언어로는 원리적으로 불가”를 뜻하지는 않는다 —
stamp/seal이 43 train instruction에 0회 등장한다는 §3의 사실과 똑같이 잘 들어맞는다.
프롬프트를 train 분포로 다시 써서 재평가하는 것이 이 둘을 가르는 실험이다.
(덧붙여, 수정 기준으로 옮기면 자체 값은 4.00 → 34.00%가 된다 — 이 태스크의 “언어 실패” 중 상당 부분은
정책 능력이 아니라 1 cm 허용오차였다.)move stapler to pad의 “미재현”은 성공 기준 차이였다.
같은 step32000 체크포인트를 Zero-WAM 수정 성공 기준으로 다시 평가했다(job 130608, n=100, 모델 고정 · 기준만 변경).
move_stapler_pad는 성공 xy 면적이
16→176 cm²(11배)로 넓어지고 자세 조건 (|q|max−|q|min)<0.02가 삭제되어 pad 접촉으로 대체된다.
stamp_seal은 eps 1→3 cm(면적 9배). 아래 표의 자체 LingBot-VA 열은 이제 7개 태스크 전부 수정 기준이다
(나머지 5개는 upstream과 수정본의 check_success가 동일).step32000 단일 체크포인트, 단일 시드).
논문 Table 2는 시드 분산(예: 17.45±1.40)을 함께 보고하므로, 위 Δ를 시드 노이즈와 구분하려면
최소 2~3 시드가 더 필요하다. 현재 표는 “논문 baseline이 상한이 아니다”를 보이는 용도로만 쓰는 것이 안전하다.move stapler to pad의 롤아웃을 보면, upstream 기준에서 1%였던 이유(스테이플러를 매트에 올려놓기는 하지만
yaw가 정렬되지 않음)를 눈으로 확인할 수 있다.Zero-WAM은 이 7개를 태스크 단위로 완전히 제외하고 나머지 43개로 학습한 뒤, 파라미터 업데이트 없이 평가한다. 각 카드의 막대는 §4의 여섯 가지 성공률(%)이다 — Zero-WAM / text-only ZW / ZW w/o pretrain / ZW w/o IFP / LingBot-VA / WAN-Action. 막대 아래 칩은 Δ ICL = Zero-WAM − text-only다. text-only는 학습 때부터 video 조건이 없는 별도 모델이므로, 이 값은 학습과 추론을 합친 ICL 경로의 기여이지 추론 시 demo만의 몫이 아니다.
7개 held-out을 뺀 나머지. 여기서 어떤 스킬·오브젝트·문장 표현이 이미 학습에 노출됐는지를 확인하는 것이 “7개가 진짜 unseen인가 / demo가 필요한가” 판정의 근거가 된다.
공개 zero-wam-pretrain이 아니라 Wan2.2-TI2V-5B에서 시작해 RoboTwin 43개 seen 태스크의 ICL 데이터로만
32,000 step 학습한 모델이다(8 GPU, 공개 recipe 기본값). 논문은 이 설정을 ICL 모드 36.36%로만 보고했고,
같은 모델을 human demo 없이 돌린 수치는 논문에 없다. 평가는 7개 held-out 태스크, demo_clean,
Instruction Type: seen, Zero-WAM 수정 성공 기준(move_stapler_pad·stamp_seal)이다.
| Held-out 태스크 | 자체 · language-only | 자체 · ICL | Δ (ICL − lang) | 자체 · 영상 교체 | Δ (교체 − ICL) | 논문 w/o pretrain | text-only ZW | Zero-WAM |
|---|---|---|---|---|---|---|---|---|
| Place Empty Cup | 10.00 (n=100) | 28.00 (n=100) | +18.00 | 12.00 (n=100) | -16.00 | 46 | 65.65 | 84.87 |
| Stamp Seal | 30.00 (n=100) | 47.00 (n=100) | +17.00 | 38.00 (n=100) | -9.00 | 53 | 17.33 | 47.00 |
| Open Microwave | 8.70 (n=92) | 21.00 (n=100) | +12.30 | — | — | 26 | 41.43 | 59.00 |
| Place Bread Basket | 31.00 (n=100) | 37.00 (n=100) | +6.00 | — | — | 33 | 63.92 | 35.00 |
| Place Object Scale | 13.00 (n=100) | 16.00 (n=100) | +3.00 | — | — | 22 | 22.68 | 24.67 |
| Stack Blocks Three | 0.00 (n=100) | 0.00 (n=100) | +0.00 | — | — | 0 | 0.00 | 9.00 |
| Move Stapler Pad | 52.00 (n=100) | 40.00 (n=100) | -12.00 | 26.00 (n=100) | -14.00 | 74 | 64.98 | 69.14 |
| macro average | 20.67 | 27.00 | +6.33 | 3개 태스크만 측정 | 36.36 | 39.44 | 46.95 | |
n은 해당 태스크에서 실제로 평가한 에피소드 수다. 느린 태스크는 job 시간 제한에 걸려 100개보다 적을 수 있다.
open_microwave의 ICL 결과는 중단된 런을 --start_seed로 이어받아 두 구간(56 + 42 에피소드)을 합산한 값이다.
TARGET_TEXT_CFG=-1로 생성 스트림의 task text가 빈 임베딩으로 대체되므로(wan_va_server.py:641-644),
human demo가 유일한 과제 정보다. 게다가 ICL 컨텍스트는 .pth에 저장된 그 영상 자체의 캡션 임베딩을 함께 싣기 때문에
(wan_va_server.py:530-536), 영상을 바꾸면 캡션도 함께 바뀐다. 그런데도: