ours 구현까지--recall-style report (과거 배치 보고로 프레이밍)--state-align leadup, --recall-walk fineours(tagged-keyframe + 검색) 구현 → 시각 메모리 계열 최고 성능(m2 0.308 → ours 0.462, +50%). 다만 텍스트 로그(m3v2 0.564)엔 아직 못 미침.이 문서의 모든 측정은 858-시나리오 벤치마크에서 나온 것이다. 그 뒤(2026-07-27) HF
Keh0t0/scene-mem-benchmark가 879-시나리오 릴리즈로 교체됐고, 현재 디스크 상태는 이렇다:
| 항목 | 현재 상태 | 의미 |
|---|---|---|
| 시나리오 수 | list_scenarios() = 879 | 데이터셋이 이미 교체됨 |
fine_subtasks.json | 없음 (신규 시나리오) | --recall-walk fine·회상 GT가 이 파일에 의존 → 현재 재현 불가 |
| diverse12 (측정 셋) | 12개 중 9개만 ID 존재 | 남은 9개조차 영상이 100% 재생성돼 구 측정치 이식 불가 |
260727-benchmark_879_resync.html)반면 코드 수정(3개 버그 fix)과 ours 구현은 데이터셋과 무관하게 유효하다 —
fine annotation만 복구되면 그대로 재측정 가능.
목표: RoboCasa 기반 벤치에서 "로봇이 ~8분짜리 영상으로 여러 task를 수행한 뒤, 메모리를 반영해 올바르게 답하는 능력"을 측정. 로드맵은 API 트랙(현재) → Open-VLM 튜닝 → ours. (측정 당시 858 시나리오 → 현재 879로 교체됨, 위 경고 참조)
측정 방식 2가지가 있었는데, 이번에 하나는 폐기하고 하나만 유효화했다:
| 모드 | 내용 | 판정 |
|---|---|---|
| next-subtask | 타깃 시점의 "다음 할 일" 예측 | 폐기 GOAL 텍스트에 정답이 그대로 들어있음(recipe leak) → 메모리 없이도 풀림 = 인지/지시수행 과제 |
| recall | 에피소드 끝에 "그 물건 어디 뒀어?" 질의 | 유효 과거 사건을 기억해야만 답 가능 = 진짜 메모리 측정 |
비교 대상 메서드(이 부분만 서로 다름): control(메모리 없음) · m1(과거 프레임 균일 샘플) · m2(MemER keyframe) · m3v2(수행한 subtask 텍스트 로그) · ours(이번에 새로 만든 것).
control도 똑같이 앞서감(control vs m3 예측 80% 동일).--state-align leadup--recall-style report"Close the freezer door" — 배치 사건이 기록조차 안 됨.--recall-walk fine (fine-subtask 단위 + leadup)"Place the bottled water in the freezer"로 교정. place 정확도 0.00 → 0.667. 콜 수는 2.18배.ours 설계·구현 (아래 §2)"Place the <obj> in/on the <place>"인데 모델이 "in/on"을 리터럴로 출력 → 파서가 슬래시를 연결어로 인식 못 해 action=other로 처리 → 정답을 오답 처리.ours — 어떻게 동작하나아이디어: 시각 메모리(m2)는 "8장 이미지"라 용량이 작고 회상 때 다시 인식해야 하는 부담이 있다. 텍스트 로그(m3v2)는 정보가 촘촘하지만 인덱스가 없어 비슷한 줄이 쌓이면 엉뚱한 걸 조회한다. 둘을 합치자 — keyframe을 고르되 구조화 태그를 박제하고, 회상 때 검색한다.
처음엔 walk가 끝난 뒤 보존된 keyframe을 따로 캡션했다. 그런데 정지 프레임 한 장만 보니 동작 판정이 틀렸다 — steak를 freezer에 넣는 장면을 place=fridge, action=open으로 오라벨. 그래서 walk 콜 안에서 선택과 태깅을 동시에(fused) 하도록 바꿨다. 모션이 보이는 창에서 판단하니 교정됐다.
| 사후 캡션 (초안) | fused 선택+태깅 (최종) | |
|---|---|---|
| steak 태그 | fridge / open ✗ | freezer / place ✓ |
| 태그 수 (1 에피소드) | 6 | 16 |
| API 콜 | 39 | 33 (별도 캡션 콜 제거) |
fridge/open으로 틀렸던 것을 fused가 교정 → 정답세로 합성: 위=agentview-left, 중간=agentview-right, 아래=wrist(eye-in-hand). 모델은 이 형태로 관측한다.
diverse12(서로 다른 12개 task family에서 1개씩) · 회상 task 39개 · --recall-walk fine · --recall-style report · gemini-3.5-flash · 파서 수정 반영.
| method | 메모리 형태 | place_acc | slot_acc | exact |
|---|---|---|---|---|
| m3v2 | 수행 subtask 텍스트 로그(~23줄) | 0.564 | 0.282 | 0.128 |
| ours | 태그된 keyframe(≤8장) + 검색 | 0.462 | 0.256 | 0.077 |
| m2 | keyframe 이미지(≤8장) | 0.308 | 0.154 | 0.000 |
| m1 | 과거 프레임 균일 샘플 | 0.179 | 0.128 | 0.000 |
| control | 없음(상식만) | 0.154 | 0.077 | 0.000 |
ours는 시각 계열 최고: 같은 keyframe을 쓰는 m2(0.308) 대비 +50%. 태그 + 검색이 raw 이미지 위에 실질 가치를 더한다는 증거.39개 중 둘 다 정답 15, ours만 정답 3, m3v2만 정답 7.
| 커밋 | 내용 |
|---|---|
516e2ab | recall-report 프롬프트 + forced-M2 (메모리가 비로소 측정 가능) |
4dca378 | fine + leadup 누적 walk (--recall-walk fine) |
432905f | diverse12 fine 스윕 문서화 |
7456ca2 | ours 메서드(fused select+caption) + in/on 파서 수정 |
e24f6ee | ours 최종 스윕 문서화 |
주요 파일: scene_mem_api/memory/base.py(메서드 정책, OursPolicy) · runner.py(오케스트레이션) · prompts.py(RECALL_SYSTEM, OURS_STEP_SYSTEM) · templates.py(채점 파서).
879 릴리즈에 fine_subtasks.json이 없어 회상 측정 자체가 현재 돌아가지 않는다. 이게 복구돼야 아래 연구 방향을 실제로 측정할 수 있다. 코드(--recall-walk fine, ours)는 준비돼 있으므로 annotation만 생기면 즉시 재측정 가능.
ours-only 3건 / m3v2-only 7건으로 실패 모드가 갈린다는 게 확인됐다. m3v2의 촘촘한 사건 로그를 인덱스로 쓰고, ours의 태그 검색·시각 확인을 얹으면 둘 다 넘을 여지가 가장 크다.
| 순위 | 후보 | 내용 | 기대 |
|---|---|---|---|
| 0 (블로커) | fine annotation 재생성 | 879 릴리즈용 fine_subtasks.json 생성 | 측정 재개 (이거 없으면 나머지 불가) |
| 1 | 하이브리드 | m3v2 로그 + ours 시각 검색 | 0.564 초과 가능성 (가장 유망) |
| 2 | ours 커버리지 | 이미지는 8장 유지, 태그(텍스트)는 더 많은 keyframe에 부여 | 커버리지 격차 직접 해소 |
| 3 | ablation | ours R1(검색 off) vs R2(검색 on) | "검색"의 순수 기여 분해 |
| 4 | 리포트 갱신 | 기존 fine-sweep 리포트에 ours + 파서수정 반영 | 문서 일관성 (지금 옛 숫자) |
ours는 bowl/peach류 배치를 keyframe으로 못 잡는 커버리지 문제가 미해결.