← Back to index
TL;DR
100.0%
Tier-3b CHUNKED (56/56)
64.9%
Tier-3b overall (63/97)
97.9%
Tier-3a (long-ctx bypass)
36%
chunkable non-transit segs
- 핵심: Tier-3b는 task가 bounded FIFO에 실제로 들어가기만 하면 fixture를 56/56 = 100% 회상. memory 용량/메커니즘 문제는 0.
- overall 64.9%로 눌린 진짜 원인: memory 한계가 아니라
_PNP_INSTR_RE가 non-transit instruction의 64%(122/192)를 못 잡아 해당 object가 애초에 memory에 안 들어감 → 추측(17.1%).
- Tier-3a 97.9%는 허수: raw 영상 44 frame이 final query 때도 context에 다 있어 long-context attention으로 푼다. chunking 여부와 무관하게 맞으므로 두 버킷을 가린다 = memory 우회.
- 액션: 모델 키우기가 아니라 instruction 파서(Transport/Move/Place/Load 구문) 확장 → overall이 chunked 100% 상한으로 끌려 올라가면서 faithful bounded-memory는 유지.
1 왜 Tier-3a 97.9%를 믿으면 안 되는가
scene-mem-benchmark의 평가 대상은 "압축된 memory로 final query의 target fixture를 회상하느냐"다. prior video는 실제 N개 policy rollout 비용을 줄이려는 shortcut일 뿐이다.
Tier-3a (2-turn: Watch 전체 → Recall)는 raw 영상 44 frame을 final query 시점에도 context에 전부 들고 있다. 따라서 답을 memory에서 회상하는 게 아니라 raw frame에 대한 long-context attention으로 찾는다.
사용자 직접 지적 (260515): "이 task 자체는 그 앞에 하는게 지금 중요한게 아니라 memory로 final task를 잘 찾을 수 있냐 이걸 보기 때문에 앞에 돌리는 과정을 줄이기 위해서 해놓은거야. 근데 그걸 그렇게 압축해서 넣어버리면 좀 어긋나지 않을까" → Tier-3b(bounded FIFO) 설계.
Tier-3a 97.9%는 실제 online cascade(chunk 단위 처리, raw 영상 폐기)와 분포가 어긋난다. 벤치마크 의도 위반.
2 Tier-3b 디자인: chunked + bounded FIFO=8 + model keyframe
For each PnP segment chunk:
user = [memory FIFO imgs (≤8)] + [chunk recent frames] + prompt
model → {"current_subtask": "...", "keyframe_positions": [k]}
push recent[k] into FIFO ; if len(FIFO) > 8: evict oldest
Final recall turn:
user = [bounded FIFO imgs only] + final query ← raw video NOT re-shown
model → "place the <obj> in the <fixture>"
- chunk마다 (bounded FIFO + recent frames)만 본다. raw 영상 전체를 한 번에 안 넣음.
- keyframe은 model이 직접 선택 — 휴리스틱 고정 아님. 선택된 frame만 FIFO에 cap 8로 유지.
- no GT leak — prior chunk supervision에 eval_spec target 안 들어감 (Tier-2 버그 제거).
- final query 때 raw 영상 안 보여줌 — 압축된 FIFO만. = MemER 원본 메커니즘 + 실제 deployment 경로 일치.
학습: ~/ckpts/robocasa-memer-tier1-v2-merged에서 resume, data/scene_mem_tier3b/train.jsonl (1,651 sample), LoRA r=16/α=32, 3 epoch, 12분, eval_loss 9.5e-05 → merge ~/ckpts/scene-mem-tier3b-merged.
3 분해 방법론 — CHUNKED vs NOT-CHUNKED
Tier-3a 97.9% vs Tier-3b 64.9%를 그냥 비교하면 "Tier-3b가 나쁘다"로 오독된다. 실제로는 64.9% 안에 (a) 진짜 memory recall 품질과 (b) 고칠 수 있는 데이터 커버리지 버그가 섞여 있다. 각 test를 분리한다:
- CHUNKED: target task_idx에
_PNP_INSTR_RE 매칭 segment가 있어 object가 실제로 bounded FIFO에 들어감 → 진짜 압축-memory recall 측정.
- NOT-CHUNKED: 매칭 segment 없음 ("Transport X from Y to Z", "Place X on the oven rack" 등) → object가 애초에 저장 불가 → 모델은 학습된 prior로 추측만 → 정확도 floor.
combo_035 zero-memory 처리: combo_035는 7개 non-transit segment가 전부 미매칭이라 probe가 no PnP segments — abort로 json을 안 쓰고 drop했다. 이걸 빼면 표본이 "최악 케이스 제외"로 Tier-3b에 유리하게 편향된다. probe를 패치해 빈 FIFO로 final recall을 정직하게 수행하고 json을 쓰도록 변경 (4/4 전부 오답 — 정상). 30/30 확보.
4 결과 — 진짜 memory recall은 완벽 (56/56)
Tier-3a(bypass) 97.9% vs Tier-3b overall 64.9% vs Tier-3b CHUNKED 100% vs NOT-chunked 17.1%. 진짜 memory는 완벽, overall은 커버리지 갭으로 눌림.
| 지표 | 값 | 의미 |
| Tier-3a overall | 95/97 = 97.9% | long-context bypass (참조 상한, 허수) |
| Tier-3b overall | 63/97 = 64.9% | 분해 전 raw 수치 |
| Tier-3b CHUNKED | 56/56 = 100.0% | 진짜 압축-memory recall — 완벽 |
| Tier-3b NOT-CHUNKED | 7/41 = 17.1% | object 미저장 → 순수 추측 floor |
| 커버리지 | MATCH 70 / NO-MATCH 122 | 비-transit의 36%만 chunkable |
4.1 Per-fixture: Tier-3a vs Tier-3b CHUNKED
memory에 들어간 task에 한해서는 Tier-3b가 모든 fixture에서 Tier-3a와 동등(대부분 100%). 즉 정확도 차이는 fixture 난이도가 아니라 chunking 여부.
Tier-3b는 task가 bounded FIFO에 들어가기만 하면 56/56 = 100% 회상. memory 용량/구조/학습 문제는 없다. MemER bounded-FIFO 메커니즘이 scene-mem에서 충분히 작동함을 입증.
5 진짜 병목 — instruction 파서 커버리지 갭
비-transit 192 segment 중 _PNP_INSTR_RE가 70개만 매칭(36%). 122개 미매칭 → 그 object들은 memory에 절대 안 들어감.
| 미매칭 상위 task | # segs | 대표 구문 (regex 미커버) |
| OvenBroilFish | 8 | "Place the fish on the oven rack" — pick-from 절 없음 |
| PlaceMicrowaveSafeItem | 6 | "Place the item in the microwave" — pick-from 절 없음 |
| FilterMicrowavableItem | 4 | "Remove X from bowl ... place bowl in microwave" |
| FreshProduceOrganization | 4 | 복합 배치 |
| SortingCleanup | 4 | "Pick the mug and place it in the sink" — from-src 생략 |
| LoadPreparedFood / Open·CloseOven / AddLemonToFish | 3 each | Transport/Move/단일동작 |
5.1 NOT-chunked guess prior
memory에 없을 때 모델은 fridge(14)/cabinet(13)로 쏠려 추측. NOT-chunked 17.1%는 GT가 우연히 이 prior에 걸린 경우 (chance 약간 위).
6 Takeaway + Next
Takeaway
- Tier-3a 97.9%는 허수 — memory recall이 아니라 raw 영상 long-context attention. online cascade와 분포 어긋남.
- Tier-3b가 올바른 평가이고, 진짜 memory recall은 사실상 완벽(56/56). 병목은 학습/구조가 아니라 builder의 instruction 파서 커버리지 하나뿐.
- 다음 액션은 "모델을 키운다"가 아니라 "
_PNP_INSTR_RE를 Transport/Move/Place/Load 구문까지 확장". chunked 100% 상한이 보장돼 있으므로 커버리지만 올리면 overall이 산술적으로 따라 올라간다.
Next priorities
- P0:
_PNP_INSTR_RE 확장 — (a) "Transport/Move/Bring X from Y to Z", (b) "Place/Put X on/in Z"(단일 배치), (c) "Pick X and place it in Z"(from-src 생략). dst fixture 추출(trailing fixture noun reduction) 점검 동반.
- P1: 확장 후 Tier-3b builder 재생성 → 재학습 → 30-sample 재측정 (가설: chunkable 36%→80%+, overall→85%+).
- P2: 858 전체 sweep으로 일반화 확인 (task #10).
- P3: cascade(
memer_pi05_policy.py)에 Tier-3b 2-turn(watch/query) 분기 추가 → 진짜 Pi0.5(PI05_STUB=0) memory_success 정량 (task #17).