scene-mem-benchmark (Keh0t0, RoboCasa-based)는 로봇이 긴 멀티태스크 에피소드를 수행한 뒤, "그 물체가 어디 놓였는지"를 회상하는 능력을 측정한다. 우리는 zero-shot API 모델(Letsur 게이트웨이 경유 Gemini-2.5-flash)이 이 벤치마크에서 어디까지 도달하는지 측정하려 했고, 그 과정에서 벤치마크 자체의 "충실도 갭"(eval 계약이 실제 MemER 메커니즘과 얼마나 일치하는가)을 두 차례 보정해 가며 진짜 측정에 도달했다.
학습 JSONL(build_scene_mem_v2.build_turns_for_test) 그대로 멀티턴 [system, u0, a0, u1, a1, …, uF, aF]로 autoregressive. 매 turn의 user에 그 세그먼트 instruction + 메모리 키프레임 이미지 + recent 이미지. assistant 턴은 모델 자기 출력 누적(GT 절대 미투입). 학습된 LoRA엔 byte-identical이지만 zero-shot엔 모델이 자기 이전 subtask 텍스트를 다시 읽을 수 있어 메모리 회상이 trivialize.
실제 MemER 배포(MemERDeploymentPolicy + EpisodicMemory) 메커니즘. 매 스텝 단일턴(이전 user/assistant 텍스트 누적 0), 메모리 = 키프레임 이미지만 bounded FIFO(≤8)로 다음 스텝에 전달. 텍스트 transcript 인플레 제거. 단 초기에는 instruction이 매 스텝 회상질의로 고정돼 중간 task 부재가 또 다른 충실도 갭이었음.
--gt-per-segment-instruction. subtasks.json으로 timestep→세그먼트 매핑, 매 스텝 그 시점 현재 세그먼트 task instruction 주입, 회상질의는 최종 스텝만. 실제 MemER 배포(매 스텝 현재 task로 conditioning + 키프레임 FIFO + 별도 회상 질의)에 정확히 부합. 이게 본 측정의 계약.
system prompt = 빌더 원문 DEFAULT_SYSTEM_PROMPT("You are a robot program that predicts actions. … Return a JSON with current_subtask, keyframe_positions.") + SCENE_MEM_FORMAT_GUIDANCE(범용 주방 어휘로 출력 형식 제약, GT 비포함 — zero-shot format adapter).
| 계약 | m1 final-query | m2 turn | 해석 |
|---|---|---|---|
| trainstruct (전체 대화 누적) | 50% (1/2) | 38% | 인플레 — 모델이 자기 이전 텍스트 스크롤백 |
| 키프레임-FIFO (회상질의 고정) | 0/2 | 0% | 텍스트 누적 제거, 단 중간 task 부재 |
| 키프레임-FIFO + 스텝별 task (faithful) | 0/2 | 5% | 실제 MemER 배포 그대로 |
| 지표 | 값 |
|---|---|
| metric_1 final-query accuracy | 0/30 (0.0%) |
| metric_2 turn (fine / composite) | 4.16% (fine 4.65% / composite 0%) |
| metric_4 chunked / not-chunked | 0/20 (chunked) · 0/10 (not-chunked) |
| parse_failures | 10건 — 전부 중간스텝 content_filter (최종스텝 taint 0) |
| 소요 | 26825s (7.5h) |
| 모델 / 계약 | gemini-2.5-flash · methodology=memer_keyframe_fifo_deployment_perseg_instr |
| task 유형 | n | m1 | 목적지 fixture (GT) |
|---|---|---|---|
| MoveFridgeToFreezer | 3 | 0/3 | freezer |
| RestockBowls | 10 | 0/10 | cabinet |
| OvenBroilFish | 2 | 0/2 | oven (bottom rack) |
| ToastBagel | 7 | 0/7 | toaster oven |
| MicrowaveThawingFridge | 4 | 0/4 | microwave |
| PlaceMicrowaveSafeItem | 2 | 0/2 | microwave |
| FilterMicrowavableItem | 2 | 0/2 | microwave |
Place the steak in the pan on the stove ← 정답 freezerPlace the bowl on the counter ← 정답 cabinetPlace the fish on the counter ← 정답 ovenPlace the bagel in the fridge ← 정답 toaster ovenPlace the cup on the counter ← 정답 steak→microwave (이 케이스는 object까지 틀림)score_subtask는 정상 동작(fixture 불일치로 fail).읽는 법: 좌측 = wrist(상) + agentview_left(하) 카메라 스택. 우측 = 현재 task 시점의 정보 패널(CURRENT TASK fed to MemER / GROUND TRUTH — 현재 세그먼트 task + atomic fine_subtasks / MemER predicted subtask / 최종 스텝에 빨강 "MEMORY RECALL QUERY" 마커). 하단 = memory FIFO 썸네일(실제 모델이 기억하는 비디오 프레임). 화면 ✅/❌는 제거(per-step 무의미; 권위 수치 = metrics.json).
Place the steak in the freezer를 출력 → 채점 ✓. 학습 LoRA용 계약(byte-identical), zero-shot엔 transcript 스크롤백으로 trivialize.Place the steak in the pan on the stove(정답 freezer) ✗. 메모리 FIFO 썸네일이 끝까지 에피소드 후반만 담아 초반 steak 배치 프레임이 보존 안 됨 → 0 회상의 메커니즘이 눈으로 보임.Place the bowl on the counter ✗ (정답 cabinet)Place the fish on the counter ✗ (정답 bottom rack of oven)Place the bagel in the fridge ✗ (정답 toaster oven)Place the cup on the counter ✗ (정답 steak→microwave; object까지 틀린 최악)상세 설계·진단·코드 변경·중간 산출물은 claude/260519/plan-scene_mem_api_eval.md에 시간순 기록. 결과 디렉토리: eval_outputs/b1_gtscore_perseg_n30/ (predictions.jsonl + metrics.json + report.md + 자동 HTML).