Ziyang412/EgoMemReason

Python

16

0 commits

updated Jul 14, 2026

See the code

README

EgoMemReason

A Memory-driven Reasoning Benchmark for Long-Horizon Egocentric Video Understanding

Accepted at COLM 2026.

Project page · Paper · Benchmark (HF) · Leaderboard (HF Space)

⚠️ Benchmark revision — v1.1 (2026-07-13). The per-question option-letter mapping in annotations_public.jsonl has been reshuffled. If you downloaded the benchmark before 2026-07-13, please re-download it before your next evaluation run — letters A–J now map to different option strings. Question text and the set of option strings per question are unchanged, so previously published aggregate scores remain valid; but any locally-stored letter-only predictions must be remapped (or the model re-run) against the new mapping before submitting to the leaderboard.

Ziyang Wang*, Yue Zhang*, Shoubin Yu, Ce Zhang, Zengqi Zhao, Jaehong Yoon, Hyunji Lee, Gedas Bertasius, Mohit Bansal UNC Chapel Hill · NTU SingaporeEqual contribution


Overview

Next-generation visual assistants — smart glasses, embodied agents, always-on life-logging systems — must reason over an entire day or more of continuous visual experience. In ultra-long video, relevant information is sparsely distributed across hours or days, making memory the fundamental challenge: models must accumulate information over time, recall previously observed states, track temporal order, and abstract recurring patterns.

EgoMemReason is a comprehensive benchmark that systematically evaluates week-long egocentric video understanding through the lens of memory-driven reasoning. It targets three complementary memory types:

  • Entity memory — track how object states evolve across days
  • Event memory — recall and order activities separated by hours or days
  • Behavior memory — abstract recurring patterns from sparse, repeated observations

500 multiple-choice questions across 6 core challenges, with 5.1 evidence segments / question and 25.9 h memory backtracking on average — 2× both metrics over the strongest prior week-long benchmark.

Main Results

We evaluate 17 systems spanning general-purpose MLLMs, video-specific MLLMs, and agentic video frameworks. The strongest model reaches 39.6% overall — long-horizon memory is far from solved. Numbers are from the paper's Table 1; best in each column bold, second-best underlined.

MethodTrackingCountingOrderingLinkingSpatialActivityOverall
Random19.616.711.117.319.319.216.8
General-purpose MLLMs
InternVL3.5-8B23.029.023.027.034.042.028.0
Qwen-3-VL-8B35.028.023.021.040.042.029.6
InternVL3.5-38B33.040.027.024.046.032.032.6
Qwen-3-VL-30B-A3B36.048.025.026.040.030.034.0
Qwen-3-VL-32B35.046.027.027.050.046.036.8
GPT-529.042.020.018.032.028.027.8
Gemini-3-Flash46.028.036.044.044.044.039.6
Gemini-3.1-Pro40.026.044.033.040.048.037.4
Video-specific MLLMs
LongVA-7B22.018.020.020.020.022.020.6
InternVideo2.5-8B29.027.025.015.032.032.025.6
VideoLLaMA3-8B23.031.027.032.038.036.030.0
Molmo2-8B36.050.027.025.034.022.033.2
Agentic video frameworks
SiLVR31.014.027.017.018.028.022.4
Ego-R130.018.023.018.048.032.025.8
WorldMM32.044.021.021.034.036.030.6
AVP (ours)34.042.031.027.038.034.034.0

Repository Layout

EgoMemReason/
├── data/                  # Dataset access instructions (see data/README.md)
├── evaluation/            # Per-model evaluation scripts (one folder per system)
│   ├── Gemini/            # Gemini-3 Flash / 3.1 Pro
│   ├── GPT5/              # GPT-5 (via Azure OpenAI)
│   ├── InternVL/          # InternVL3.5-8B / 38B
│   ├── InternVideo/       # InternVideo2.5-8B
│   ├── LongVA/            # LongVA-7B
│   ├── Molmo2/            # Molmo2-8B
│   ├── Qwen3VL/           # Qwen-3-VL 8B / 32B / 30B-A3B (+ ablations)
│   └── VideoLLaMA3/       # VideoLLaMA3-8B
└── agentic/               # Agentic video frameworks
    ├── AVP/               # Ours — Agentic Video Pipeline (Gemini backbone)
    ├── EgoR1/             # Ego-R1 reasoning agent
    ├── SILVR/             # SiLVR
    └── WorldMM/           # WorldMM retrieval + reasoning framework

Each method directory ships only the scripts for evaluation. The underlying model code (LongVA, VideoLLaMA3, Ego-R1-Agent, etc.) is not vendored — install each from its upstream repo, then point the run script at the right environment. See each subfolder's README for the exact upstream link and install snippet.

Quick Start

1. Get the benchmark

The 500 questions are on Hugging Face: https://huggingface.co/datasets/Ted412/EgoMemReason

hf download Ted412/EgoMemReason annotations_public.jsonl --repo-type dataset --local-dir ./data
# Video frames come from EgoLife (separate license): https://egolife-ai.github.io/
# Then set:
export EGOMEM_DATA=/path/to/benchmark.json            # see data/README.md
export EGOLIFE_FRAMES_INDEX=/path/to/egolife_frames_index.json

See data/README.md for the full schema, the frame-index format, and how submissions are scored.

2. Run a method

Closed-source API models (Gemini, GPT-5) are the simplest:

cd evaluation/Gemini
export GOOGLE_API_KEY=...
INPUT_JSON=$EGOMEM_DATA \
FRAMES_INDEX=$EGOLIFE_FRAMES_INDEX \
bash run_final_benchmark_500_apr22_gemini_flash_512.sh 20   # 20 parallel jobs

Open-source MLLMs require the upstream environment first (see per-folder README), then:

cd evaluation/Qwen3VL
INPUT_JSON=$EGOMEM_DATA bash run_final_benchmark_500_apr22.sh

3. Score a run

Each eval_*.py writes a JSON file with one prediction per question. Per-task / overall accuracy is printed at the end of every run. Prediction shards from parallel jobs are merged by merge_temporal_ordering_eval_shards.py (under evaluation/Gemini/ and evaluation/GPT5/).

4. Test your model and (optionally) join the leaderboard

Convert your prediction file to the submission format (one entry per question, all 500):

import json
src = json.load(open("results_my_model.json"))
sub = [{"example_id": r["example_id"], "predicted_answer": r["pred"]} for r in src]
json.dump(sub, open("submission.json", "w"))

Get your score — anyone can score anonymously on the EgoMemReason Leaderboard SpaceScore tab. Upload submission.json and the Space returns per-split + Overall accuracy against the held-out answer key. The score is shown to you only; nothing is stored and it does not appear on the public leaderboard.

Ask to be listed — the public leaderboard is curated by hand. To be added, email ziyangw@cs.unc.edu with submission.json attached, plus:

  • method name, team name, model size / API tier, video-input modality,
  • one-sentence method description,
  • project page URL, arXiv or OpenReview URL.

The maintainer will re-score against the private answer key, sanity-check the metadata, and add a row within ~5 business days.

Adding a New Method

  1. Create evaluation/<YourMethod>/ (or agentic/<YourMethod>/).
  2. Implement an inference script that reads final_benchmark_500_apr22.json and writes [{"id", "predicted_answer", "correct", ...}, ...].
  3. Compare against the schema used by any existing method (e.g. evaluation/Gemini/eval_gemini_frames.py is a clean reference).
  4. Report Tracking / Counting / Ordering / Linking / Spatial / Activity / Overall — splits are tagged in the dataset.

Citation

@misc{wang2026egomemreasonmemorydrivenreasoningbenchmark,
      title={EgoMemReason: A Memory-Driven Reasoning Benchmark for Long-Horizon Egocentric Video Understanding},
      author={Ziyang Wang and Yue Zhang and Shoubin Yu and Ce Zhang and Zengqi Zhao and Jaehong Yoon and Hyunji Lee and Gedas Bertasius and Mohit Bansal},
      year={2026},
      eprint={2605.09874},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2605.09874},
}

License

Code in this repository is released under the MIT License (see LICENSE). The benchmark is built on top of EgoLife — please follow EgoLife's data license when using the underlying video frames.

Ziyang412/EgoMemReason

Python

16

0 commits

updated Jul 14, 2026

See the code

README

EgoMemReason

A Memory-driven Reasoning Benchmark for Long-Horizon Egocentric Video Understanding

Accepted at COLM 2026.

Project page · Paper · Benchmark (HF) · Leaderboard (HF Space)

⚠️ Benchmark revision — v1.1 (2026-07-13). The per-question option-letter mapping in annotations_public.jsonl has been reshuffled. If you downloaded the benchmark before 2026-07-13, please re-download it before your next evaluation run — letters A–J now map to different option strings. Question text and the set of option strings per question are unchanged, so previously published aggregate scores remain valid; but any locally-stored letter-only predictions must be remapped (or the model re-run) against the new mapping before submitting to the leaderboard.

Ziyang Wang*, Yue Zhang*, Shoubin Yu, Ce Zhang, Zengqi Zhao, Jaehong Yoon, Hyunji Lee, Gedas Bertasius, Mohit Bansal UNC Chapel Hill · NTU SingaporeEqual contribution


Overview

Next-generation visual assistants — smart glasses, embodied agents, always-on life-logging systems — must reason over an entire day or more of continuous visual experience. In ultra-long video, relevant information is sparsely distributed across hours or days, making memory the fundamental challenge: models must accumulate information over time, recall previously observed states, track temporal order, and abstract recurring patterns.

EgoMemReason is a comprehensive benchmark that systematically evaluates week-long egocentric video understanding through the lens of memory-driven reasoning. It targets three complementary memory types:

  • Entity memory — track how object states evolve across days
  • Event memory — recall and order activities separated by hours or days
  • Behavior memory — abstract recurring patterns from sparse, repeated observations

500 multiple-choice questions across 6 core challenges, with 5.1 evidence segments / question and 25.9 h memory backtracking on average — 2× both metrics over the strongest prior week-long benchmark.

Main Results

We evaluate 17 systems spanning general-purpose MLLMs, video-specific MLLMs, and agentic video frameworks. The strongest model reaches 39.6% overall — long-horizon memory is far from solved. Numbers are from the paper's Table 1; best in each column bold, second-best underlined.

MethodTrackingCountingOrderingLinkingSpatialActivityOverall
Random19.616.711.117.319.319.216.8
General-purpose MLLMs
InternVL3.5-8B23.029.023.027.034.042.028.0
Qwen-3-VL-8B35.028.023.021.040.042.029.6
InternVL3.5-38B33.040.027.024.046.032.032.6
Qwen-3-VL-30B-A3B36.048.025.026.040.030.034.0
Qwen-3-VL-32B35.046.027.027.050.046.036.8
GPT-529.042.020.018.032.028.027.8
Gemini-3-Flash46.028.036.044.044.044.039.6
Gemini-3.1-Pro40.026.044.033.040.048.037.4
Video-specific MLLMs
LongVA-7B22.018.020.020.020.022.020.6
InternVideo2.5-8B29.027.025.015.032.032.025.6
VideoLLaMA3-8B23.031.027.032.038.036.030.0
Molmo2-8B36.050.027.025.034.022.033.2
Agentic video frameworks
SiLVR31.014.027.017.018.028.022.4
Ego-R130.018.023.018.048.032.025.8
WorldMM32.044.021.021.034.036.030.6
AVP (ours)34.042.031.027.038.034.034.0

Repository Layout

EgoMemReason/
├── data/                  # Dataset access instructions (see data/README.md)
├── evaluation/            # Per-model evaluation scripts (one folder per system)
│   ├── Gemini/            # Gemini-3 Flash / 3.1 Pro
│   ├── GPT5/              # GPT-5 (via Azure OpenAI)
│   ├── InternVL/          # InternVL3.5-8B / 38B
│   ├── InternVideo/       # InternVideo2.5-8B
│   ├── LongVA/            # LongVA-7B
│   ├── Molmo2/            # Molmo2-8B
│   ├── Qwen3VL/           # Qwen-3-VL 8B / 32B / 30B-A3B (+ ablations)
│   └── VideoLLaMA3/       # VideoLLaMA3-8B
└── agentic/               # Agentic video frameworks
    ├── AVP/               # Ours — Agentic Video Pipeline (Gemini backbone)
    ├── EgoR1/             # Ego-R1 reasoning agent
    ├── SILVR/             # SiLVR
    └── WorldMM/           # WorldMM retrieval + reasoning framework

Each method directory ships only the scripts for evaluation. The underlying model code (LongVA, VideoLLaMA3, Ego-R1-Agent, etc.) is not vendored — install each from its upstream repo, then point the run script at the right environment. See each subfolder's README for the exact upstream link and install snippet.

Quick Start

1. Get the benchmark

The 500 questions are on Hugging Face: https://huggingface.co/datasets/Ted412/EgoMemReason

hf download Ted412/EgoMemReason annotations_public.jsonl --repo-type dataset --local-dir ./data
# Video frames come from EgoLife (separate license): https://egolife-ai.github.io/
# Then set:
export EGOMEM_DATA=/path/to/benchmark.json            # see data/README.md
export EGOLIFE_FRAMES_INDEX=/path/to/egolife_frames_index.json

See data/README.md for the full schema, the frame-index format, and how submissions are scored.

2. Run a method

Closed-source API models (Gemini, GPT-5) are the simplest:

cd evaluation/Gemini
export GOOGLE_API_KEY=...
INPUT_JSON=$EGOMEM_DATA \
FRAMES_INDEX=$EGOLIFE_FRAMES_INDEX \
bash run_final_benchmark_500_apr22_gemini_flash_512.sh 20   # 20 parallel jobs

Open-source MLLMs require the upstream environment first (see per-folder README), then:

cd evaluation/Qwen3VL
INPUT_JSON=$EGOMEM_DATA bash run_final_benchmark_500_apr22.sh

3. Score a run

Each eval_*.py writes a JSON file with one prediction per question. Per-task / overall accuracy is printed at the end of every run. Prediction shards from parallel jobs are merged by merge_temporal_ordering_eval_shards.py (under evaluation/Gemini/ and evaluation/GPT5/).

4. Test your model and (optionally) join the leaderboard

Convert your prediction file to the submission format (one entry per question, all 500):

import json
src = json.load(open("results_my_model.json"))
sub = [{"example_id": r["example_id"], "predicted_answer": r["pred"]} for r in src]
json.dump(sub, open("submission.json", "w"))

Get your score — anyone can score anonymously on the EgoMemReason Leaderboard SpaceScore tab. Upload submission.json and the Space returns per-split + Overall accuracy against the held-out answer key. The score is shown to you only; nothing is stored and it does not appear on the public leaderboard.

Ask to be listed — the public leaderboard is curated by hand. To be added, email ziyangw@cs.unc.edu with submission.json attached, plus:

  • method name, team name, model size / API tier, video-input modality,
  • one-sentence method description,
  • project page URL, arXiv or OpenReview URL.

The maintainer will re-score against the private answer key, sanity-check the metadata, and add a row within ~5 business days.

Adding a New Method

  1. Create evaluation/<YourMethod>/ (or agentic/<YourMethod>/).
  2. Implement an inference script that reads final_benchmark_500_apr22.json and writes [{"id", "predicted_answer", "correct", ...}, ...].
  3. Compare against the schema used by any existing method (e.g. evaluation/Gemini/eval_gemini_frames.py is a clean reference).
  4. Report Tracking / Counting / Ordering / Linking / Spatial / Activity / Overall — splits are tagged in the dataset.

Citation

@misc{wang2026egomemreasonmemorydrivenreasoningbenchmark,
      title={EgoMemReason: A Memory-Driven Reasoning Benchmark for Long-Horizon Egocentric Video Understanding},
      author={Ziyang Wang and Yue Zhang and Shoubin Yu and Ce Zhang and Zengqi Zhao and Jaehong Yoon and Hyunji Lee and Gedas Bertasius and Mohit Bansal},
      year={2026},
      eprint={2605.09874},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2605.09874},
}

License

Code in this repository is released under the MIT License (see LICENSE). The benchmark is built on top of EgoLife — please follow EgoLife's data license when using the underlying video frames.

Languages

Python

93.5%

Shell

6.5%