EventMemAgent: Hierarchical Event-Centric Memory for Online Video Understanding with Adaptive Tool Use
Jun 07, 2026

문제 배경
- task: Online Video Understanding
- 입력되는 스트리밍 데이터는 끝이 없는데, MLLM의 컨텍스트 윈도우는 유한
- 기존 접근 방식
- 컨텍스트 윈도우 내에서 비주얼 토큰 관리
- 토큰 가지치기, 슬라이딩 윈도우 → 영상이 길어질 수록 정보가 소실 될 수 있음
- 모델의 최대 컨텍스트 길이가 한계
- 외부 메모리에 과거 비주얼 토큰 저장
- 쿼리와 유사도가 높은 정보를 추론 시점에 가져와 참고
- 저장 비용이 크고, 시맨틱 한 부분에 대한 이해가 부족하다 함
- 두 방식 모두 “수동적 인지”
- 단순 저장, 회상하는 방식
제안
- 능동적(active) 에이전트 패러다임으로의 전환
- 에이전트가 복잡한 작업을 여러 하위 작업으로 분해, 관련 정보를 검색하거나 인지하는 방식
- EventMemAgent: dual-layer 메모리 전략
- 단기 메모리(STM): 이벤트 단위 reservoir sampling → 이벤트 경계를 탐지
- 장기 메모리(LTM): 과거 관찰을 이벤트 단위 튜플(캡션, visual anchor, change log …) 등으로 구조화해서 보관
방법

Event-Centric Short-Term Memory
- 최대 용량 K개의 프레임을 E에 나눠서 나눠서 담음

- Online Event Segmentation
- 새로운 프레임을 Em에 넣을지, 아니면 세로운 Em+1을 만들지 판단해야 함
- 새 프레임의 normalization한 그레이 히스토그램 ht를 현재 Em에 들어있는 모든 프레임의 평균 히스토그램 hm과 비교하여 평가
- 픽셀 수로 정규화
- 이 값이 threshold보다 낮으면 기존 Em에, 아니면 Em+1에 넣기

- Intra-event Reservoir Sampling
- 정지화면의 경우 중복 정보로 이런 중복이 많으면 비효울적이 됨
- 이때 reservoir sampling(저수지 샘플링) 실행
- 위의 Event Segemtation이 트리거링 되지 않는 경우(프레임간의 히스토그램이 계속 비슷할 경우)
- E안에 프레임이 K미만일 경우 모두 그냥 넣음
- 만약 전체가 K를 넘으면 FIFO로 “이벤트”를 LTM으로 이동시킴
- 이벤트 하나가 너무 길 때 (K를 넘을 때)
- reservoir sampling 저수지 샘플링 실행
- 순차적으로 한 번에 하나의 샘플만 볼 수 있고 전체 샘플 개수를 모르는 상황에서 무작위 추출을 하는 방법
- 이렇게 하면 이벤트가 끝났을 때 버퍼에 남은 32개 프레임이 전체 구간에서 골고루(편향 없이) 뽑힌 대표 샘플이 됨



Structured Long-Term Memory

- STM에서 밀려난 이벤트는 LTM에 구조화해여 튜플 형태로 저장
- I: 첫 프레임 = visual anchor. 나중에 OCR이나 detection을 이 프레임에다가 함
- c: MLLM으로 생성한 캡션;. 이벤트에 대해 묘사함
- e: 캡션 c를 임베딩 벡터화 함. 질문과 유사도 계산에 사용
- Δi: change log. 연속된 이벤트 사이의 상태 전이/논리적 변화를 기록. 서사적 단편화(narrative fragmentation)를 막기 위한 장치로, "이전 이벤트와 어떻게 달라졌는지" "다음 이벤트로 어떻게 이어지는지"를 담음

Multi-granular Perception Toolkit
에이전트는 아래와 같은 툴킷을 가지고 있음.
- 메모리 검색
- temporal retrieval
- 질문 시간의 범위와 타임스탬프가 겹치는 이벤트 필터링 (예: 10-30초 사이에 있었떤 일?)
- semantic retrieval
- 쿼리 임베딩과 저장된 이벤트 임베딩 간의 코사인 유사도 최대화하여 관련 에피소드를 찾음
- 세밀한 부분 포착용 도구
- OCR, object detection
- visual anchor또는 STM의 특정 프레임에 적용가능
agent reinforcement learning
- ReAct 패러다임 기반의 추론
- Thought (t): 작업 분해를 위한 에이전트의 내부 추론
- Action (a): 도구 호출 또는 최종 응답을 지정
- Observation (o): 인지 툴킷이 반환한 감각적 피드백
- 생각 → 행동 (툴킷 사용) → 관찰 < 사이클 반복

GRPO를 이용한 policy optimization

- 같은 질문에 대해 여러 개(G)의 추론 시도를 만들어 보고, 그중 평균보다 잘한 시도는 강화하고 못한 시도는 억제하는 방식

- 예시
- 질문: 무언가를 깨트린(breaking) 횟수는 몇 번인가?
- 학습되지 않은 에이전트
- STM만 보고 깨트린 사례가 없으니 0번으로 판단
- 학습 시킨 에이전트
- STM에 깨트리기의 증거가 없음. LTM에 깨트리기를 검색해보겠음
- LTM에서 이벤트 1번 발견
- STM에 깨트리기의 흔적 확인. object detection으로 “broken object” 검출
- 1번의 깨짐이 있었따.
실험
- 벤치마크: 온라인 비디오 질의응답
- OVO-Bench
- StreamingBench
- 모델
- 백본 MLLM: Qwen3-VL-8B-Instruct
- 객체 탐지 모델: Grounding DINO
- OCR 모델: DeepSeek-OCR
- 입력 샘플링: 기본 1 FPS
- 단기 메모리 최대 용량 K: 32
- 콘텐츠 일관성 임계값 δ: 0.2
- 80GB A100 GPU 8장

- 제안하는 모델이 GPT-4o도 넘음. gemini 1.5 pro보단 낮았음
- 그래도 human과의 차이가 크긴 함

- 역시 사람에 비해 ai는 아직 낮은 수치

- fixed-length는 30초마다 분할하는 거임
- 제안하는 방법이 더 높은 성능
- 하지만 큰 차이는 아닌 듯 함
- 그래도 속도나 메모리 효율성 측면에선 제안하는 방식이 더 좋을듯.
- 벤치마크 비디오가 짧을 수도 있음

- real time visual perception
- 현재 장면을 정확히 인지
- backward tracing
- 지나간 일을 회상·검색
- forward active respoidng
- 적절한 시점까지 보고 판단
- OCR, detection 모델 없으면 크게 하락

- 학습을 시켜야 “메모리 검색” 툴을 호출 함
- 학습 전에는 툴을 아예 쓰지 않거나, 최대까지 반복 사용했음
Share article