← 목록
2026-09-06 · scene_bench · 데이터셋 해설

v1.1 데이터셋 업데이트 해설 — "남이 옮긴 물체"(moved distractor)

HF Keh0t0/scene-mem-benchmark 커밋 609076c0 (2026-09-05). 무엇이, 왜, 어떻게 바뀌었는지 원문·영상 프레임·질의 JSON으로 직접 확인할 수 있게 정리

TL;DR

47
재렌더 편 / 100
164
옮겨진 물체
83 → 196
질의된 물체 → restore_distractor 행
109
두 번 옮겨진(두 번 목격) 행
+65 / −64
find 행 추가 / 삭제

1파일 단위로 무엇이 바뀌었나

파일변경내용
contexts/type1/<ep>/videos/{exo_camera_1,exo_camera_2,wrist_camera}.mp447편 재렌더옮겨진 물체(또는 그 물체의 옛 자리)가 보이는 프레임만 시뮬레이터 상태에서 다시 그림. exo 카메라 기준 편당 프레임의 중앙 76%(30–97%)가 교체 대상이었음(로봇이 보는 대부분의 프레임에 해당 물체가 걸리기 때문). 전체 파일이 재인코딩되어 나머지 프레임도 픽셀값이 미세하게 다름(평균 |Δ|≈1).
traj.h5, states/final.npz47편옮겨진 물체의 새 포즈. 스텝 수·fps·프레임 수는 v1과 동일(steps_emitted = n_steps − 2도 그대로). final.npz에서 포즈가 바뀐 물체 집합 = 옮겨진 물체 164개와 47/47편 정확히 일치(직접 검증).
meta.json47편, schema 1.0 → 1.1relocated[](물체·이동 프레임·xyz·tracked_in_v1), rerender, derived_from 추가.
subtasks.json불변(47편 바이트 동일)로봇의 행동 기록은 그대로. 옮김은 로봇이 한 일이 아니므로 여기 없음 → textlog 오라클은 이 변화를 모른다.
eval/restore/queries.jsonl322 → 518행기존 322 = kind: restore_target(문장·정답 동일, id 38개 재번호) + 신규 196 = kind: restore_distractor.
eval/find/queries.jsonl589 → 590행내용 일치 525 · 추가 65 · 삭제 64 · GT 변경 1. 답 필드 visible_at_start·visible_px_at_start 추가.
eval/resume/*불변type2 12편, 48+96행 그대로.
나머지 53편불변v1과 바이트 동일(하드링크). v1 전체는 revision="v1" 태그로 계속 받을 수 있음.

데이터 카드 원문 (v1.1 절)

v1.1 (2026-09-04): moved distractors. In 47 contexts one to eight distractor objects — objects the robot never touches — are moved by someone else while the robot is out of the room: seen at one place early in the episode, later seen somewhere else (some of them twice). The robot's trajectory, actions and every other object are byte-identical to v1; only the frames in which those objects (or their old spots) are visible were re-rendered from the recorded simulator state, and traj.h5 / states/final.npz carry the new poses. Such contexts have meta.json.schema_version = "1.1" and a relocated list. The new queries are restore rows with kind = "restore_distractor" (139 first + 57 previous, in 47 of those contexts — the other moved objects failed the pick/place eligibility gates and get no query, but are moved in the video all the same); the existing rows are now kind = "restore_target" (unchanged otherwise). find is unchanged. v1 is still reachable as revision="v1".
"find is unchanged"는 카드 문구이고, 행 단위로 대조하면 find도 바뀌어 있다(§5). 47편 목록은 사용자가 준 relocation_json_47eps.tgz와 허브 sha 변경 47편이 정확히 일치.

2"남이 옮긴 물체"는 어떻게 만들어졌나 (생성 규칙)

편별 relocation.json(schema 1.1)에 선정 규칙과 후보별 판정 이유가 전부 적혀 있다. 요지:

rule (relocation.json): single_cap 4 · two_move_uncapped · final_spot "reach + plan_pick" · first_origin "plan_place, else A′" notice_px 300 · strong_px 500 · single_move "60 s + 다른 task" · two_move "한 이동은 task 하나 띄움" hops: 1회 102 · 2회 62 (물체 기준) · 편당 렌더 물체 수: 1개 2편 · 2개 7 · 3개 16 · 4개 12 · 5개 8 · 6개 2

3눈으로 보기 — 같은 프레임, 왼쪽 v1 / 오른쪽 v1.1

목격이 시작되는 프레임에서 1초 뒤(+25프레임)를 두 버전에서 같은 카메라로 뽑았다. 로봇 팔·배경은 동일하고, 옮겨진 물체만 오른쪽에 나타나거나 자리가 다르다.

train_1299__2 · paper towel roll — 두 번 이동, 시작 자리 재배치(restaged)

원래 자리 countertop(방 6) → 시작을 dining table(방 6)에 배치 → f2795에 chair(방 6)로 → f5085에 dining table(방 4)로. 질의: first = 방 6 dining table, previous = 방 6 chair.

paper towel hop0
hop 0 (start) · exo_camera_2 · f25 (1.0 s) · 3,241 px · 60 s 목격 — 오른쪽 식탁 위에 키친타월이 놓여 있다(왼쪽 v1에선 원래 자리인 countertop).
paper towel hop1
hop 1 · f2795에 chair로 이동 → exo_camera_1 · f4444 (177.8 s) · 959 px · 2.4 s 목격(짧은 스침).
paper towel hop2
hop 2 · f5085에 방 4 dining table로 이동 → exo_camera_1 · f8554 (342.2 s) · 3,664 px · 12 s 목격 — 오른쪽 식탁 위 키친타월. 평가 시작 시점의 "지금 자리".

train_1299__2 · bottle — 두 번 이동(같은 방 안 의자→의자)

bottle hop0
hop 0 · f2705에 방 4 chair로 · exo_camera_1 · f4869 (194.8 s) · 2,510 px · 6.4 s.
bottle hop1
hop 1 · f5105에 옆 chair로 · f8639 (345.6 s) · 2,851 px · 18.6 s. previous 정답 = 첫 chair(1.2 m 거리), first 정답 = 방 6 dining table.

train_1847__1 · apple — 두 번 이동(방 6 → 방 2 서랍장 → 방 6 의자)

apple hop0
hop 0 · f1045에 방 2 chest of drawers로 · exo_camera_2 · f5269 (210.8 s) · 1,364 px · 81 s 목격.
apple hop1
hop 1 · f8165에 방 6 chair로 · exo_camera_1 · f14354 (574.2 s) · 600 px · 26 s — 오른쪽 노란 의자 위 사과(옆의 국자도 같은 편의 이동 물체 ladle).

train_1847__1 · soap bottle / ladle — 한 번 이동, 시작 재배치

soap hop1
soap bottle · 시작 dining table(방 6) → f1700에 방 2 armchair로 · exo_camera_1 · f5109 (204.4 s) · 765 px · 14 s.
ladle hop1
ladle · 시작 countertop(방 6) → f5045에 방 6 chair로 · f14859 (594.4 s) · 310 px(최소 목격 강도) · 5.8 s.

미디어 11쌍 전체: 260906-v11_dataset_explainer_media/. 추출 스크립트 tmp/hf_check/explainer_v11_data.py.

4새 질의 — restore_distractor 196행

문장과 채점은 restore_target과 완전히 같다. 다른 것은 "누가 옮겼나"뿐이다.

"Pick up the {name} and place it in or on where it first was" ← origin = first (139행) "Pick up the {name} and place it in or on where it was just before" ← origin = previous (57행, 두 번 옮겨진 물체만)

train_1299__2의 4행 (위 영상의 물체들)

query_idorigin지금 자리(from)정답 자리(to)n_hopsmoved_framestagsd_xy
restore:train_1299__2:q02first방 4 dining table (f5085 정착)방 6 dining table (origin_frames 0–2794)2[2795, 5085]moved_distractor, restaged_start4.8 m
restore:train_1299__2:q03previous방 4 dining table방 6 chair (origin_frames 2795–5084)2[2795, 5085]moved_distractor, restaged_start4.0 m
restore:train_1299__2:q04first방 4 chair (f5105 정착)방 6 dining table (0–2704)2[2705, 5105]moved_distractor4.5 m
restore:train_1299__2:q05previous방 4 chair방 4 chair(옆 의자) (2705–5104)2[2705, 5105]moved_distractor1.2 m

새 필드

필드뜻
kindrestore_target(로봇이 옮긴 것, 322) / restore_distractor(남이 옮긴 것, 196)
answers[].misplacedmoved_by_other(196) — 옮긴 주체가 로봇이 아님
answers[].tagsmoved_distractor(196) + restaged_start(113행: 시작 자리도 우리가 배치)
answers[].moved_frames물체가 점프한 프레임 목록. from.settled_frame은 마지막 점프
answers[].n_hops옮겨진 횟수(README도 이번에 정정: 방 수가 아님). 2 = 두 번 목격 후 처음/직전 구분이 필요한 행(109), 1 = 한 번 옮겨진 행(87)
answers[].seen_s_at_final마지막 자리를 카메라로 본 시간(초)
answers[].to.origin_frames, other_origins정답 자리에 있던 프레임 구간 · 그 외 거쳐 간 자리 좌표(미끼)
answers[].from.visible_at_start평가 시작 프레임에 지금 자리가 보이는가(196행 중 40 True) — 보이면 "어디서 집을지"는 지각으로 풀리고, 되돌릴 곳은 여전히 기억
왜 이 형태인가. 260903에 설계한 Restore ② = "A에서 목격 → 못 본 사이 이동 → B에서 재목격 → 처음 자리로(정답 A, 미끼 B)"가 그대로 구현됐다. 클래스 유일 물체만 쓰여 정체(identity) 문제가 없고(twin_nearby 전부 False, 후보 1), 같은 물체를 find가 묻지 않으므로 find와 독립이다(shares_answer_with 빈 값).

5find는 어떻게 바뀌었나

bcaf2815609076c0
행589 (target 294 / distractor 295)590 (301 / 289)
multi5491
내용 일치525행(그중 query_id 재번호 18) · 삭제 64 · 추가 65 · GT 변경 1(train_8077__2 bowls 2→3)
misplacedno / wrong_surface / on_floor / not_moved 10not_moved 폐기 — 집으려다 실패해 제자리인 물체는 어느 kind로도 정직하지 않아 무질의
답 필드—visible_at_start(685답 중 160 True: target 101 / distractor 59) · visible_px_at_start(≥50 160 · ≥200 122 · ≥500 82)

변경 유형 ① 쌍둥이 단일 → "all the X" multi (추가 65행 중 40행)

OLD find:train_3426__1:q03 find_distractor · single · "Pick up the watch" answers: watch_…_3_0_2 @ room 2 / stand NEW find:train_3426__1:q03 find_distractor · multi · "Pick up all the watches" (n_candidates 2) answers: watch_…_3_0_2 @ room 2 / stand visible_at_start false watch_…_1_0_7 @ room 7 / dining table visible_at_start false

같은 클래스 인스턴스가 여럿이면 하나만 묻던 것을 전부 묻는 형태로 바꿨다(어느 인스턴스든 정답 인정 → 전부 집기). 그래서 find multi 91행은 전부 같은 클래스 묶음이고, restore multi(74/79가 서로 다른 물체)와는 성격이 다르다 — 사용자 결정: 그대로 쓴다(twin-set).

변경 유형 ② 픽 실패 물체 정리

REMOVED find:train_2169__1:q00 find_distractor multi "Pick up all the butter knives" [not_moved, no] ADDED find:train_2169__1:q00 find_target single "Pick up the butter knife I moved earlier" → 집기 실패한 칼을 빼고, 로봇이 실제로 옮긴 칼만 target으로

변경 유형 ③ 되돌려 놓은 물체도 target (README 신설 문단)

로봇이 옮겼다가 다시 제자리에 놓은 물체는 마지막 위치가 시작 위치와 같다. 지시문("dresser에 놓아라")만 외운 에이전트는 틀리고, 두 번째 이동을 본 에이전트만 맞는다 — target에 포함됨(misplaced: no, 이력은 subtasks.json의 settled_xyz로 확인).

query_id는 릴리즈 간 안정적이지 않다. qNN은 편 안의 순번이라 행이 추가·삭제되면 다른 질의에 재배정된다(find 18 · restore 38). 결과를 옮길 때는 (가족, 편, 질의문)으로 매칭해야 한다 — 우리 델타 도구가 이미 그렇게 한다.

6task 격자에 어떻게 들어가나

가족Direct ① 내가 한 것Direct ② 보기만 한 것Direct ③ hiddenStateful ① (①의 multi)Stateful ② (②의 multi)
Findfind_target single 265find_distractor single 234hidden 답 포함 68 (①②S와 겹침 → 본표 제외, 여기서만 셈)find_target multi 36 (twin-set)find_distractor multi 55 (twin-set)
Restorerestore_target single 243restore_distractor single 196 ← 이번 추가from hidden 56 (①S 안)restore_target multi 790
Restore Stateful ②가 비어 있는 이유. restore multi는 같은 편의 single 행 2–3개를 접어서(fold) 만드는데(stats merged_multi 34), 이 fold가 restore_target에만 돌았다. 재료는 충분하다: distractor 행이 2개 이상인 편 45/47, first-origin 2개 이상인 편 42. 데이터팀에 같은 fold를 distractor에도 돌려 달라고 요청하면 렌더 없이 ≈40행이 생기고, 우리는 47편 메모리를 재사용해 읽기만 하면 된다(≈$10).

평가에 미치는 의미

7재측정 현황 (2026-09-06 KST 새벽 기준)

모델상태실비
qwen3vl-8b · molmo2-8b · cosmos-r2-8b (자체 서빙)완료·병합(각 2h10m / 2h37m / 5h24m)$0
gemini-3.7-flash완료·병합(3h45m)$59.80
gpt-5.6-luna · claude-sonnet-5 (7전략, restore 전용)완료·병합(3h09m / 4h32m, 선점 1회 후 재개) — 캠페인 종료, 결과 리포트 260906-restore_v11_grid.html$5.74 + $74.13
gemini-3.6-flash보류(사용자 결정 9/6) — 필요할 때 tmp/v11/submit.sh로 재제출(≈$88 절감)

병합은 restore 전용(merge_v11.py, 모델마다 전략당 518행 검산; D1 잡이 함께 잰 find 행은 find_v11_rows로 보관만). 격자 표: restore = python tmp/hf_check/grid_v1final.py v11 restore, find = grid_v1final.py delta nohidden(v1.0 그대로).

8다룰 때 주의할 점

원천: tmp/reloc47/relocation_json/(사용자 tgz), tmp/hf_check/{inspect_latest,match_609076c0,explainer_v11_data}.py, tmp/reloc47/{eval_match,explainer_data}.json. 분석 로그 claude/260905/analysis-v11_release_delta.md, 앞선 리포트 260905-v11_release_delta.html.