Index
2026-08-13 — Plan (v2)

read-phase 메모리 평가 로직 설계 플랜

scene_bench | 샘플 데이터 → 메모리 주입(전략) → VLM instruction 추출 → 구조화 채점

TL;DR

4+1
메모리 전략
3+1
채점 필드
~9/13
유효 질의
~$1.4
파일럿/모델
5
게이트 E0–E4

1 배경 / 스코프

scene_bench의 측정 대상: "VLM이 write-phase context를 메모리로 받아, 질의 시점에 현재 관측에 없는 정보를 담은 올바른 instruction을 뽑아낼 수 있는가". 실행 하네스(T1~T3 통과)와 샘플 데이터 검증은 완료 상태였고, 메모리 주입·prompt·채점이 코드 0줄이었다.

사용자 스코프 재정의(260813): ① 데이터 생성은 다른 쪽 담당 — 있는 샘플에 맞춰 평가만 ② 메모리 획득 방식은 실험 단계라 자유(영상 전체든 텍스트든), 실로봇식 turn-based(50 timestep 청크 + 다음 action 예측)는 추후 옵션 ③ 마지막에 최종 질의에 대한 instruction만 뽑으면 됨 ④ prompt 세팅이 핵심 산출물 ⑤ 최종 eval은 task 유형/물체/장소를 리스트를 주고 뽑게 해서 필드별 채점.

전제 유지: 샘플 검증에서 확인된 버그 4건(swapped ok=true / target=distractor / ambiguous 중복 / 질의 시점 정답 가시 2건)은 로컬 후처리(eval_fixes)로 정화해서 소비한다 — 안 그러면 진짜 bowl을 찾은 모델이 오답 처리된다.

2 확정 결정

결정선택파생 효과
평가 형태Tier A 심볼릭시뮬 out-of-loop. VLM 답을 eval_spec_v2와 대조 채점. R1·embodiment 불일치는 무관해짐
질의 시작 상태종료 상태 그대로질의 시점 관측 = 마지막 프레임. 정답 가시 질의는 자동 제외 필터(마지막 5s 가시 or 로봇↔정답 <1.5m)
파일럿 조건blind+textlog+frames×2G1(blind≤chance)·A2(textlog 상한) 게이트를 파일럿 1회로 동시 확인
심기 방식W-act 수용textlog·질의 문구 1인칭("I moved") 정렬
답 형태 (v2)구조화 instruction{task_type, object_id, room_id, surface_id, abstain} — 전 필드 닫힌 후보 선택 → chance 계산 가능

3 아키텍처 — src/sbench_eval/

src/sbench_eval/ episode_loader.py # ~/sample/<ep>/ 로더 (meta/subtasks/eval_spec/traj.h5/videos/final_state) eval_fixes.py # eval_spec → eval_spec_v2 정화 + 질의 유효성 게이트 (버그 ①②③④) candidates.py # 후보 리스트 빌더: task 유형 / objects(uid+category) / rooms+surfaces memory_strategy.py # blind / textlog / frames-seg / frames-uniform / rollforward(E4) query_runner.py # [system]+[ingest 턴들]+[질의 턴] 대화 조립 + Letsur 호출 scorer.py # 필드별 채점 + 집계 + G1/A2 게이트 run_eval.py # CLI: --episodes --strategies --model(필수) --prompt-version --out prompts/ # system·질의 프롬프트 버전 태그 파일 (A4 공리)

메모리 전략 (플러그블 — ingest(episode) → 질의 전 대화 턴들)

전략내용역할 / 상태
blind없음 (마지막 프레임 + 질의만)G1 대조군 — chance 근처여야 함 / E1
textlogevent_results+segments → 1인칭 타임스탬프 로그A2 오라클 상한 (v1 승자) / E1
frames-segsegment 경계 키프레임 캡 N=16, "[t=..s]" 캡션subgoal 경계 샘플링 (공짜) / E1
frames-uniform에피소드 전체 균등 N장"영상 전체 넣기" 근사 (게이트웨이는 이미지 시퀀스) / E1
rollforwardturn-based: 청크 영상 제시 + 다음 상황/action 예측 반복 → 응답이 곧 축적 메모리. 청크 config: 50 step(2s)=~254턴 $5/ep vs segment 단위 16~23턴 $0.4/ep(기본)실로봇 online 근사 / E4

답 계약 + 채점

{"reasoning": "...", "task_type": "navigate", // 리스트: navigate|pick|pick_and_place|open|close "object_id": "<uid>", // 리스트: 씬 tracked objects (uid + category) "room_id": 6, "surface_id": "<uid>", // 리스트: 씬 room / surface 인벤토리 "abstain": false}

채점 = type_acc / obj_acc / where_acc(room, surface) + strict(전 필드 일치). GT는 eval_spec_v2 answers에 전부 존재. tolerant 파서 + 재질의 1회, --model 필수.

누출 주의: object 후보에 category를 병기하므로 "bowl" 질의→유일 bowl 선택은 문자열 매칭일 뿐이다. obj_acc는 동일 카테고리 다중 인스턴스(butter knife류)에서만 변별력이 있고, 주 메모리 신호는 where_acc. 필드별 분리 보고가 필수인 이유. task_type도 현 샘플은 navigate-only라 자명 — 스키마 일반성용.

prompt = 1급 산출물

prompts/에 버전 태그 파일로 분리, 결과 JSON에 prompt_version 기록(A4). 질의 프롬프트 = 질의문 + 후보 리스트 3종 + JSON 스키마 + 기권 규정 + "메모리(앞 턴)에 근거하라, 현재 이미지에 안 보일 수 있다" 명시. 반복 개선은 dev=val_136에서만, val_290은 홀드아웃.

4 마일스톤 / 게이트

단계내용게이트
E0loader + eval_fixes + 후보 리스트 빌더13질의 전수 분류 + 기지 버그 4종 자동 검출(회귀) + 후보 리스트가 GT 전부 포함
E1MemoryStrategy 4종두 에피소드 빌드, 토큰/이미지 캡 준수, 단위 테스트
E2query_runner + prompt v1실 Letsur 1질의 왕복, 구조화 파스 + 재질의 동작 (로그인, API만 GPU 0)
E3파일럿: 2ep × 4전략 × ~9질의 × 1–2모델blind≈chance & blind<textlog 갭, 필드별 정확도 리포트. ≈72 call ≈ $1.4/모델
E4rollforward 전략 + prompt 반복 + 신규 샘플 스케일전략 간 순위가 v1 교훈(커버리지 지배)과 정합

5 리스크 / 남은 확인

리스크

종료-상태 시작으로 마지막-이벤트 질의 제외율 15% → 유효 질의 감소 (E3 리포트에 제외율 병기). room/surface GT 출처 혼합(버그③) 잔재로 surface 채점 커버리지 저하. frames 캡 N이 커버리지를 좌우(v1 교훈: 격차는 알고리즘이 아니라 커버리지) → config化.

E0 사전 점검 결과 (실측 완료)

object 리스트 ✅ 완전: obs_scene.tracked_objects(17/16개) == final_state names, 모든 answer 포함. room ⚠️ 유도 가능: uid 접미사 마지막 정수 = room id (answers 16/16 전수 일치로 확정), 정수↔이름은 event↔slots 조인(val_136: 4=bedroom 5=bathroom 6=kitchen 7=living room). surface ⚠️ 부분: 관측된 uid만, 전체 인벤토리는 house 에셋 필요. 이름 불일치 3계열: 어휘 사전 차이(cell phone↔cellulartelephone, tissue box↔tissuepaper), swapped 버그, 표면 어휘(tv stand↔stand, toilet↔crapper, dresser↔chestofdrawers) → uid+표시명 병기 제시, uid로 채점으로 해결. 카메라 순서 [wrist, exo1, exo2] 확정. 파일럿 모델은 지정 없으면 gemini-3.6-flash + 강한 모델 1개.