swapped 이벤트가 라벨-실물 불일치인데 outcome=ok (9건 중 2건 = 22%) ② 같은 물체가 target이자 distractor ③ ambiguous 질의의 답이 중복이자 물리적으로 모순 ④ 마지막 이벤트 대상이 질의 시점에 화면에 보여 메모리 없이 풀린다 (13건 중 2건).pick_and_place 하나뿐이라 open/close가 없다 → 은폐 방식 (a)"닫힌 곳"과 하위 task A3·C1·B계열이 전부 불가.arm 7 + base 3(x,y,yaw) + gripper 1 = 11-dim), 25 Hz. R2 리스크가 풀렸다.| 항목 | val_136__0 | val_290__0 |
|---|---|---|
| 길이 | 12,697 frame / 25 fps = 508 s (8.5분) | 11,891 / 25 = 476 s (7.9분) |
| 이벤트 | 5 (ok 4) | 4 (ok 4) |
| 세그먼트 | 23 (nav 6 · carry 6 · manip 11) | 16 (nav 4 · carry 4 · manip 8) |
| 세그먼트 길이 | 평균 22.1 s (6.6 ~ 72.9) | 평균 29.7 s (9.5 ~ 106.0) |
| 추적 물체 | 17 | — |
| 질의 | 6 (target 3 / distractor 3) | 7 (target 3 / distractor 4) |
| 영상 | 640×480 · 25 fps · 프레임 수 == h5 스텝 수 (정합 확인) | |
| 용량 | 에피소드당 mp4 3개 ≈ 44 MB / 32 MB | |
tracked_obj_pixels가 결정적이다. units="pixels", 카메라 3대별 픽셀 수 → "이 물체가 이 프레임에 보이는가"를 프레임 단위로 안다. 계획서의 게이트 "남은 일감이 현재 시야에 보이나"를 추측 없이 코드로 검사할 수 있다. 아래 버그 ④도 이걸로 잡았다.| 계획 | 실제 | |
|---|---|---|
| 단일 에피소드 (심기→개입→질의) | 8.5분 / 7.9분 단일 롤아웃 | ✓ L3 범위(6~8분) 일치 |
| 저장은 mp4 (PNG 금지) | mp4 3캠, 프레임 수 == 스텝 수 | ✓ |
| 인스턴스 수준 ID | bowl_847a24bf…_1_0_7 | ✓ |
| 세그먼트별 instruction | Navigate to the {} / Pick up the {} / Place the {} in or on the {} | △ 아래 §3-5 |
| 메모리 질의 (Finding A1) | "Navigate to the bowl I moved earlier" | ✓ |
| 동종 미끼 | find_distractor 질의 + 같은 카테고리 복수 인스턴스(candle ×3, butterknife ×2) | ✓ |
| base task 길이 13~20 s 추정 | 세그먼트 평균 22.1 / 29.7 s | △ 조금 김 |
| GT는 생성 시점에 확정 | event_results, tracked_obj_pose, frozen_config | ✓ |
| # | 계획 | 실제 데이터 | 영향 |
|---|---|---|---|
| 3-1 | 심기는 로봇이 보기만 (W-obs) | 로봇이 pick&place를 직접 수행. 질의도 "the bowl I moved earlier" | W-act 변형. 지난 결정과 반대. 둘 중 하나로 정해야 |
| 3-2 | open/close로 은폐 (a) | task가 pick_and_place 하나뿐. articulated 상호작용 없음 | 은폐 (a) 불가 → A3·C1·B계열 전부 불가 |
| 3-3 | subgoal 시퀀스 평가 | eval이 navigate-only. 정답 = 위치 1개(xyz/room/surface) | Target Accuracy 중 pick 항목을 못 잰다 |
| 3-4 | 2 캠 (π0.5-DROID 규약) | 3 캠 wrist + exo1 + exo2, 640×480 | VLA 어댑터에서 캠 선택 규칙 필요 |
| 3-5 | place는 pick 포함 한 덩어리 | Pick + PickAndPlace(tail)로 분할. "Place the {} in or on the {}"는 MolmoSpaces 정책 프롬프트에 없는 문구 | 이 문구로 VLA를 돌리면 OOD |
| 3-6 | 제어 15.15 Hz 가정 | policy_dt_ms=40 → 25 Hz | 길이 등급 재계산 (아래) |
| 3-7 | embodiment 미확정 (R2 리스크) | mobile Franka: {arm:7, base:[x,y,yaw], gripper:1} = 11-dim | R2 해소. RB-Y1 아님. π0.5-DROID(8-dim)와는 base 3-dim 차이 |
| 3-8 | ID 규약 <room>/<Type>_<kk> | stand_6bc09b7e…_2_0_7 (asset_hash_idx_?_room) | 데이터 규약을 따르자. 내 규약 폐기 |
| # | 등급 | 근거 |
|---|---|---|
| ① | 확정 — 데이터 내부 모순 | slots.pickup_name이 planned_obj와 9/9 일치, obj와는 7/9. 이름의 출처가 planned_obj임이 확정되고, 정답은 obj를 쓴다. 외부 메타데이터 없이 판정됨 |
| ② | 확정 — 완전 문자열 일치 | tissuepaper_1f28299e6e99a63de7abb400051cb351_1_0_7가 target·distractor에 동일 문자열로 등장 |
| ③ | 확정 — 물리적 불가능 | 같은 obj·같은 xyz인데 room/surface가 다름. ambiguous 3건 중 2건 |
| ④ | 사실 확정 / 심각도 조건부 | 거리·픽셀은 실측. 다만 "질의가 최종 상태에서 시작된다"는 가정이다 — 근거는 note의 "컨텍스트 종료 시점" 표현과 리셋 pose 필드의 부재. 하네스가 따로 리셋하면 비issue → 버그라기보다 스펙 공백 |
반증 검토한 것: ①에 대해 "objaverse 이름 노이즈 때문에 tissuepaper 에셋의 표시 이름이 실제로 'bowl'일 수 있다"를 검토했다. ObjectMeta.short_descriptions가 빈 배열을 반환해(메타 DB 미연결) 그 경로로는 확인 불가였으나, 이름 출처 역추적(9/9 vs 7/9)으로 반증되었다.
정정: butter knife가 물체 2개를 가리키는 것은 버그가 아니다 — 실제로 다른 butterknife 인스턴스 2개(xyz 상이, 같은 countertop)이고 ambiguous=true로 정직하게 선언돼 있다. 정당한 ambiguity다.
swapped — 라벨과 실물이 다른데 outcome=ok
val_136__0 event 0. 동일한 instruction "Pick up the bowl"이 두 번 나오고, 집힌 물체가 다르다. 왼쪽(frame 347)은 흰 그릇, 오른쪽(frame 1634)은 구겨진 티슈. 데이터는 두 번째 것만 obj로 기록한다.
val_290__0 event 1, frame 2909. instruction은 "Pick up the fork"인데 그리퍼에 잡힌 것은 후추통이다 (wrist 20,458 px). 씬에는 진짜 fork 인스턴스가 2개 따로 있고, 그중 하나는 find_distractor "fork"의 정답으로 쓰인다.정책이 의도한 물체 대신 옆 물체를 집었다. 그런데 설명·슬롯은 안 고쳐졌고 outcome은 ok다. 9개 이벤트 중 2건(22%).
파급이 크다 — eval_spec의 "Navigate to the bowl I moved earlier"의 정답이 tissuepaper의 위치가 된다. 그리고 씬에는 진짜 bowl_847a24bf…가 한 번도 안 움직인 채 존재한다. 진짜 bowl을 찾은 모델이 오답 처리된다.
swapped=true 이벤트는 질의 생성에서 제외. (2순위) obj의 실제 카테고리로 task_description·slots를 재생성. 그리고 outcome에 swapped를 성공으로 치지 않는 규칙 추가.val_136은 한 물체가 "내가 옮긴 것"이자 "안 옮긴 미끼"다 — 정의상 모순. val_290은 같은 단어 "fork"가 두 질의에서 다른 물체를 가리켜, 모델이 무엇을 답해도 하나는 틀린다. 둘 다 버그 ①의 파생이다.
obj가 target과 distractor에 동시 등장 금지, (b) 한 name이 서로 다른 obj를 가리키는 두 질의 동시 존재 금지.ambiguous 질의의 답이 중복이자 물리적으로 모순ambiguity가 아니라 중복이다. 같은 촛대를 event 1과 event 4에서 두 번 옮겼는데, 생성기가 이벤트당 answer 1개를 찍었다. xyz는 note대로 종료 시점 실측이라 둘 다 최종값인데, room/surface는 이벤트 시점 값이라 섞였다. 출처가 다른 필드를 한 레코드에 넣은 것.
note에 이미 미해결로 적혀 있지만, 실제 원인은 "이름 중복"이 아니라 물체 중복이다. val_290의 cell phone도 동일 패턴(event 0, event 3).
obj 단위로 dedupe하고 최종 위치 1개만 남긴다(room/surface도 최종값으로 재계산). 그러면 이 두 건은 ambiguous=false가 된다. 진짜 ambiguity(서로 다른 인스턴스 2개가 같은 이름)는 별도로 남긴다 — butter knife가 그 경우다.
val_136은 로봇이 변기 앞에 서 있고 물탱크 위 초록 촛대가 그리퍼 바로 옆이다. val_290은 서랍장 위 휴대폰 앞이다. 두 경우 모두 "이동"이 이미 완료된 상태다.val_136의 촛대는 변기 물탱크(crapper) 위에 있다. 그런데 eval_spec의 답 2개 중 하나는 room:6 / surface:countertop이다 — 육안으로 낡은 값임이 확인된다.
find_target 정답 물체의 가시 픽셀 시계열. 각 물체는 자기 이벤트 동안만 보이다가 사라지는데, 마지막 이벤트의 물체만 QUERY 선까지 살아 있다(점 = 질의 프레임 실측값). 범례에 "bowl" → tissuepaper, "fork" → peppershaker 불일치가 그대로 드러난다.13개 질의 중 2건(15%)이 메모리 없이 풀린다. 원인이 구조적이다 — 두 건 모두 마지막 이벤트의 대상이다. 로봇이 방금 그 물체를 놓고 그 앞에 서 있으니 당연히 보인다.
계획서 §7 규칙 1("현재 관측에 없는 정보")의 정확한 위반이다. blind 베이스라인이 이 두 건을 무행동으로 100% 맞히면서 전체 blind 점수를 부풀리고, 게이트 G1(blind ≤ chance)을 통과 못 하게 만든다.
tracked_obj_pixels로 자동 검사를 건다(재료가 이미 있다).val_136 event 3은 outcome=failed_no_place(펜을 집었으나 놓지 못함, ok=false)이고 세그먼트가 3개뿐이다. 현재 pen 질의는 없지만, 실패 이벤트를 질의 대상에서 어떻게 다룰지 명시적 규칙이 필요하다. 권고: 실패 이벤트는 find_target에서 제외하되, "집었다가 놓지 못한 물체"는 오히려 좋은 B4 장치/절차 재개 소재이므로 별도 태그로 보존.| # | 항목 | 왜 | 난이도 |
|---|---|---|---|
| A | 이석 구간 (질의 전 로봇을 다른 방으로) | 버그 ④ 구조적 해결. 모든 질의에 일괄 적용 | 낮음 (nav 세그먼트 1개 추가) |
| B | open/close 이벤트 | 은폐 (a) "닫힌 곳" + A3·C1·B계열의 전제. 지금은 은폐 (b) "다른 방"만 가능 | 중 (MolmoSpaces에 OpeningTask 존재) |
| C | 반사실 짝 | 현재 0건. prior로 찍는 모델을 걸러내는 유일한 장치 | 낮음 (심기 이벤트 1개 제거/치환) |
| D | subgoal GT (gt.plan / required / forbidden) | 계획의 Target Accuracy·Plan F1 채점에 필요. 지금은 위치만 있다 | 낮음 (segments에서 유도 가능) |
| E | 질의 실행 구간 | 지금은 질의가 QA다. 실제 수행을 재려면 질의 후 롤아웃이 필요 | 중 |
| F | total_seen_s 상한 규칙 | bowl 136 s / 508 s = 27%, candle 283 s = 56%. 너무 오래 보이면 쉬운 문제 — 난이도 라벨 또는 상한 필요 | 낮음 (이미 측정됨) |
| G | blind / oracle 메타 | 세 조건 대조를 위한 필드. 텍스트 로그(oracle)는 event_results에서 바로 생성 가능 | 낮음 |
| H | PickAndPlace(tail) 문구 정합 | "Place the {} in or on the {}"는 MolmoSpaces 정책 프롬프트에 없다. VLA를 돌릴 때 OOD | 낮음 (렌더러에서 pick_and_place 통짜로 복원) |
| I | 한국어 질의 | 현재 영어. 실사용에 가깝게 하려면 — 다만 스키마는 영어 유지 | 낮음 (선택) |
| 발견 | 계획에 미치는 영향 |
|---|---|
tracked_obj_pixels (T,17,3) 픽셀 수 = 프레임별 가시성 GT | 게이트 "남은 일감이 현재 시야에 보이나"를 자동 검사할 수 있다. 버그 ④를 이걸로 잡았다. 난이도 라벨링(total_seen_s)·프레임 샘플링에도 그대로 쓴다 |
policy_phase (T,) + segments[].frames | subgoal 경계 샘플링이 공짜. 계획서 §5의 "경계 샘플링으로 API 12배 절감"이 추가 작업 없이 된다 |
robot_base_pose (T,7) | 경로 길이 / Search Path Ratio / Room Revisit 계산 가능. scene_navi ego-command 생성도 이 궤적으로 |
event_results + subtasks.segments | 텍스트 로그 oracle을 바로 생성할 수 있다. 계획의 3조건 중 하나가 공짜 |
frozen_config (13.6 KB) | 씬 재현 가능 → 반사실 짝 생성 시 동일 씬 보장 |
| embodiment = mobile Franka 11-dim, 25 Hz | R2 리스크 해소. 다만 π0.5-DROID(8-dim)와 base 3-dim 차이 → 어댑터 필요 여부는 별도 확인 |
| 순위 | 할 일 | 근거 |
|---|---|---|
| 1 | 버그 ①②③ 수정 — swapped 제외 + 충돌 검사 + answer dedupe | 전부 질의 생성기 후처리. 재시뮬 불필요 |
| 2 | 버그 ④ — 이석 구간 추가 + tracked_obj_pixels 자동 게이트 | 재생성 필요하지만 구조적 해결. 안 하면 blind 점수가 부풀려진다 |
| 3 | subgoal GT 유도 (segments → gt.plan/required/forbidden) | 파이프라인 계획의 B단계(골든 20개)를 수작업 대신 자동으로 만들 수 있다 |
| 4 | 반사실 짝 생성 | 낮은 비용, 가장 강력한 검증 장치 |
| 5 | open/close 이벤트 추가 | 하위 task 절반이 여기 걸려 있다. 중기 과제 |
| 6 | 심기 방식 결정 — 보기만(W-obs) vs 직접(W-act) | 현재 데이터는 W-act. 지난 결정은 W-obs. 하나로 정해야 |
eval_spec.json 재생성만으로 끝난다 — event_results에 swapped/planned_obj/obj가 다 있으니 후처리로 걸러낼 수 있다. 순위 2만 재생성이 필요하다.swapped는 왜 생기나? 22%는 높다. tags:["shift"]가 같이 붙어 있어 "잡는 중 물체가 밀려서 옆 것을 집음"으로 보이는데, 원인이 grasp sampler인지 물리인지에 따라 대응이 다르다.secs 필드의 의미 — event 0이 secs=476.4인데 프레임 구간은 [0, 2628] = 105 s다. 생성 wall-clock으로 보이는데 확인 필요.tracked_obj_pixels의 카메라 순서 — videos.cameras = [wrist, exo1, exo2]와 같은 순서인지 확인 필요(가정하고 썼음).room 정수(4/5/6/7)와 obj UID 접미사의 방 번호가 어떤 관계인지 — UID는 초기 방으로 보인다.final_state.npz 용도names(17) / pose(17,7) / robot_base_pose(7) / frame(). 종료 시점 스냅샷이고, 버그 ④의 거리 계산에 바로 썼다. 정답 검증·이석 구간 판정에 그대로 쓸 수 있다.