Index
2026-10-17 · ego2robot · full run

H2O 전체 → ALOHA 변환 실행 + 데이터 손실 원인(IK teleport · z-score) 수정

job 196898 (8 GPU, 2h31m) → 수정 → replan 197097 (4 GPU, 1h51m) → export 197120 (41 min) · 최종 LeRobot 695 ep · 실패 0 · 158 tests

TL;DR

184/184
seq 성공
527→695
episodes
46.2k→63.4k
frames
366→0
joint jumps
0.0400 m
max site step
158
tests passed

1배경/목적

목표는 단일 sequence e2e 검증을 넘어 H2O 전체(train/val/test)를 학습용 bimanual ALOHA 데이터셋으로 만드는 것. 대규모 실행에서 나타나는 실패, 처리량, curation 통과율을 측정했음. 그런데 v1 export에서 후보 933 episode 중 527개만 채택되어, 손실 원인을 분석했음.

2Full run 결과 (v1)

segment (SAM 3)
74 min · cover 11.2%
main (IK·ProPainter·render)
65 min
vlm (Qwen3-VL-8B)
26 min
export v2.1→v3.0
36 min · 705/674 MB
split후보 ep채택 ep채택 frames
train56925220,843
val122796,935
test (VLM label)24219618,410
단독 거부 사유 (v1)episodes진단
L2 dataset z-score outlier158버그: 155개가 ik_pos_err_mean feature 때문 (cutoff 1.0 mm)
L2 IK joint jump > 8 rad/s123버그: recovery multi-start가 step box 없이 teleport
L1 ik_fail_ratio > 0.136실제 kinematic 한계 (in-air)
L2 gripper rate p9916손 개폐가 빠름
L3 VLM9score 분포: 5점 857, 3점 75, 2점 1
로드 검증 (v2.1, v3.0 동일): max |action[k] − state[t+1+k]| = 0, max |state − robot.npz| = 1.1e-7, image와 composite의 평균 차이 2.76/255.

3원인 분석 → 수정

(a) IK recovery teleport

tracking은 step box(0.12 rad/frame)를 쓰지만, 그 상한에 막혀 target을 못 따라가면 rot err가 20°까지 쌓임. 그 시점에 _recover(multi-start, step box 없음)가 한 프레임에 0.4–6 rad를 점프했음.

h1/1 fix
subject1/h1/1 왼손. (좌) roll slew limit, (중) wrist_rotate: 기존 IK는 frame 164·194에서 teleport, (우) 최대 joint 속도: 기존 25 rad/s spike, 수정 후 ≤ 3.6 rad/s. 이 구간에서는 roll limit만으로 transition이 필요 없어짐.
IK (ego2robot/ik.py) - recovery 해가 0.12 rad 또는 0.04 m보다 멀면 → joint-space transition (직선 segment, FK target tracking, error는 실제 target 기준 → 정직하게 IK failure로 집계) - recovery 중 재시드 안 된 팔은 step box 유지 (_StepBoxLimit.active) - 먼 target은 max_tcp_step(0.04 m/frame)로 catch-up, 마지막 guard에서 site step ≤ 0.04 m 보장 Retarget (ego2robot/retarget.py) - approach_roll (parallel transport) + zero-phase slew limit, max_roll_step_deg = 5 Curation (ego2robot/curation.py) - z-score features = TCP speed mean/p99, joint vel mean/p99, gripper rate mean (IK error 제외)

(b) 재평가 (prepare + L1/L2, 184 seq, CPU sbatch)

variantaccepted epframesjump framesmax joint step비고
기존 (v1)69461,0573666.12 rad126 seq teleport
A: transition (1차, 버그)68662,113172.93TCP jump 거부 71 ep
B5: + roll 5°71264,64100.12TCP jump 거부 41 ep
B3: + roll 3°73266,31700.12roll 편차 >10°가 6.9% 프레임
C: B5 + TCP cap71565,13400.12TCP speed 거부 5
D: C + site guard (채택)71565,13400.120site step max 0.0400 m
B3가 episode 20개를 더 살리지만 closing 방향 충실도가 낮음. 그래서 B5를 채택함. roll 편차(mod 180°) >10° 비율: B5 2.2%, B3 6.9%.
IK failure frame 비율은 4.4%→7.4%로 증가함. teleport로 "성공 처리"되던 프레임이 이제 실제 target 기준으로 실패로 집계되기 때문임.

4최종 결과 (replan + export)

replan + vlm (197097, 4 GPU)
1h51m · 184/184
export v2.1→v3.0 (197120)
41 min · 959/914 MB
max joint step / site step
0.1200013 rad / 0.0400 m
IK fail / transition frames
7.40% / 2.54%
split후보 epv1 채택최종 채택최종 frames
train56925236832,621
val122791019,045
test (VLM label)24219622621,719
합계933527 (46,188 fr)695 (74.5%)63,385
단독 거부 사유v1최종진단
L2 dataset z-score outlier15810motion 지표만 사용
L2 IK joint jump1230teleport 제거
L1 ik_fail_ratio > 0.136187teleport로 숨겨지던 실패가 정직하게 집계됨
L2 gripper rate p991618손 개폐가 빠름
L3 VLM910score 분포: 5점 869, 3점 61, 2점 3
ik_fail_ratio로 거부된 199 ep의 실패 프레임 12,073개 중 32.8%(3,960)가 transition 프레임임. 즉 flip이나 branch를 바꾸는 이동 비용임. transition을 줄이면 최대 107 ep가 기준(≤10%)을 넘을 수 있음. scene별로 고르게 분포함(o1 39, k2 37, k1 35, h2 33, h1 30, o2 25).
로드 검증 (v2.1, v3.0 동일): 695 ep / 63,385 frame / 36 task, label은 gt 469, vlm 226. max |action[k] − state[t+1+k]| = 0, max |state − robot.npz| = 1.1e-7, aux.ik_transition이 robot.npz["transition"]과 일치, image와 composite의 평균 차이 2.87/255.

5Takeaway

분석

full run의 데이터 손실 1, 2위는 vision 품질이나 로봇 한계가 아니었음. 속도 bound를 우회하던 recovery 경로와 0에 몰린 지표에 쓴 robust z-score였음. 이제 export되는 모든 action chunk가 joint 3.6 rad/s, TCP 1.2 m/s 안에 들어감. 즉 실제 ALOHA가 재현할 수 있는 trajectory임. 최종 채택률은 56%에서 74.5%로 올랐음(frame 기준 +37%). 남은 거부의 대부분(187/226 단독 사유)은 ik_fail_ratio임. 그 실패 프레임의 2/3는 ALOHA wrist의 kinematic 한계(in-air 조작)이고, 1/3은 greedy recovery가 만드는 transition임.

6Next