As part of our announcement of Perceptron Egocentric 1.0, we are releasing and open-sourcing EgoHome, a new benchmark of densely human-annotated egocentric video: 137 clips of people performing household tasks, 2 hours in total.
Washing dishesScrubbing the drain mat and basin with a sponge, then rinsing the mat under the tap.
The annotations span four different categories:
- Hand location bounding boxes
- Subtask annotations
- Left and right hand actions (from Ego4D’s closed-vocab schema)
- Left and right hand captions.
We release the raw annotations as well as code for evaluation metrics, which we believe better capture the inherent subjectivity of open vocabulary video description.
A new standard for Egocentric annotations
Recent work has established that high volumes of diverse pretraining data are essential for reliable control: Physical Intelligence has shown that compositional generalization can emerge from diverse multimodal data and conditioning [1], Generalist has shown that task-specific mastery can be achieved by scaling high-fidelity physical-interaction data [2], and Dyna that scaling egocentric data is one viable path to human-level control [3]. Rich egocentric annotation, in particular, is of significant interest in the robotics world due to its scalability [3].
Despite material investment in egocentric data, it is still not well-understood which set of annotations serve as the best pretraining objectives or how best to measure the quality of synthetic labeling for these tasks.
The most widely adopted egocentric benchmark for subtask segmentation, WGO-Bench [4], was a remarkably useful contribution to the ecosystem and has since become a de facto standard for evaluating the quality of a model or harness on describing the events in an egocentric video. Despite this, WGO-Bench has several gaps in coverage.
Perceptron’s EgoHome benchmark addresses gaps in the previous state of egocentric benchmarking in three ways:
- Four annotation types: We introduce benchmarking for (1) hand box location, (2) subtask timelines, (3) hand action classification (from the Ego4D closed vocab), and (4) hand action freeform captions.
- Sub-second annotations: We provide a large number of annotations at the sub-second scale. Specifically, we include 3,371 segments under 1 s and 773 under 0.5 s.
- Permissible subsegment Jaccard measurement: We introduce a new flexible metric we call permissible subsegment Jaccard: an LLM-as-judge based technique which accommodates the fact that there are many permissible ways to break down the granularity of a task.
Benchmark overview
Our benchmark is the first of its kind to combine all four annotation types on every video. This has revealed the spikiness of model capabilities at the frontier, with subtask timeline generation being much stronger than individual hand description for the very best models. We also offer very temporally fine-grained annotations allowing us to analyze how model capabilities break down on much faster action sequences.
| EgoHome (Perceptron) | WGO-Bench | |
|---|---|---|
| Total hours | 1.99 h (137 clips from 46 videos) | 1.24 h (100 episodes) |
| Domain | Household chores, egocentric (head-mounted camera) | Robot manipulation (DROID 50, RoboCOIN Galaxea 25) + egocentric HomER (25) |
| Human annotated? | Yes (synthetic seed, human-corrected, reviewed) | Yes |
| Hand box annotations? | Yes: 417,912 boxes, 30 fps, left / right | No |
| Subtask annotations? | Yes: 1,924 segments | Yes: 743 segments |
| Left/right hand actions? | Yes: 5,032 segments, 118 Ego4D verbs | No |
| Left/right hand captions? | Yes: 5,277 segments | No |
| Shortest segment | 0.10 s | 0.19 s |
| Segments < 0.5 s | 773 | 15 |
| Mean subtask length | 3.57 s | 5.77 s |
| Mean segment length, all types | 2.62 s | 5.77 s (subtasks only) |
| Flexible time boundary metric? | Yes: permissible subsegment Jaccard | No: one-to-one matching at IoU ≥ 0.75 |

Four annotation types
Subtask annotations
Similar to WGO-Bench, we have open vocab descriptions of the high level goal of what task the subject is performing e.g. “scrubbing the stovetop”. The average video has 14.0 segments.
Hand box locations
We annotate every hand box with human annotators at 10 fps then apply proprietary smoothing algorithms to extrapolate up to 30 fps.
Hand actions
We have annotators choose an accurate hand action label from the closed vocabulary Ego4D action schema [5]; there are 118 total actions to choose from (47 occur in the release).
Hand captions
We have annotators write free-form hand captions describing what the hands are doing during the video.
Evaluation metrics
Hand box metric: centroid hit fraction
To measure hand box prediction accuracy, we simply ask each model to produce timestamped bounding boxes for the hand locations throughout the video. For every frame with a human-annotated hand, we check whether the centroid of the model’s box for that hand falls inside the human box, then divide by the number of annotated hand-frames, plus any boxes the model predicts outside the annotated range.
Models that sample fewer frames per second are still scored on every annotated frame: between two of a model’s boxes, we linearly interpolate its prediction. A model sampled at 1 fps therefore only loses credit where the hand moves off the straight-line path between its samples.
Subtask, action, and hand caption metric: permissible subsegment Jaccard
We developed our subtask correctness metric while attempting to find a fair way to calibrate our annotators. We initially used a metric similar to WGO-Bench’s semantic F1, which performs bipartite matching between the target and prediction and then calculating F1 between the predicted and target sets.
Bipartite matching, which is common in object segmentation benchmarks, allows each ground truth segment to be paired with exactly one predicted segment. In other words, during scoring, the mapping between predicted and ground truth is one-to-one.
We’ve found, however, that there are many valid ways to divide up the timeline in a video. Even if you show the same annotator the same video, in one sitting they may break washing the dishes down into a single task or they may break it down into many smaller segments.
Rather than encouraging models to overfit to one particular choice of temporal granularity, we opted to allow the ground truth and predicted segments to match to each other in a many-to-many mapping, and we’ve tailored our LLM as judge prompt to permit predicted tasks to be subtasks of the ground truth or vice versa.
We call our metric permissible subsegment Jaccard.
Worked example: the stairs
Let’s say the ground truth labeled the time span 0 to 5s as one segment, “sweeping the stairs”.
The table below demonstrates how various predictions would be graded under our many-to-many permissible subsegment Jaccard, vs the one-to-one WGO-Bench semantic F1.
| Model output | Permissible subsegment Jaccard | WGO-Bench semantic F1 |
|---|---|---|
| A. 0–5 s: “sweeping the stairs” Ground truth (human) Model | (5 + 5) / (5 + 5) = 1.0 | IoU 1.0, labels match: 1 match → 1.0 |
| B. 0–2 s: “sweeping the top stair”; 2–5 s: “sweeping the bottom stair” Ground truth (human) Model | both pieces agree: (2 + 3 + 5) / (5 + 5) = 1.0 | IoUs 0.4 and 0.6, both below 0.75: 0 matches of 2 predicted, 1 gold → 0.0 |
| C. 0–3 s: “sweeping the stairs”; 3–5 s: “putting the broom away” Ground truth (human) Model | first piece agrees: (3 + 3) / (5 + 5) = 0.6 | IoU 0.6, below 0.75 → 0.0 |
| D. 0–5 s: “carrying the broom” Ground truth (human) Model | judge says it’s a different action → 0.0 | timing matches but the label doesn’t → 0.0 |
While calibrating annotators, we frequently ran into Case B, as illustrated in Table 2: a valid, more detailed breakdown gets a score of zero under one-to-one matching and full credit under ours. Case C shows we still give partial credit for the part the model got right, where a fixed IoU cutoff gives nothing. (WGO-Bench’s semantic F1 pairs segments one-to-one, counts a pair only when its temporal IoU is at least 0.75 and the judge accepts the labels).
We found that this metric adhered much more closely to subjective measures of fairness when evaluating human annotators’ performance during calibration, thus we opted to release it as our official metric for the benchmark.
The formal definitions of both metrics are in the appendix, and the scoring code is in our GitHub repository.
How different models stack up
We compare Perceptron Egocentric, at its default 4 fps and an 8 fps option, with GPT-6 Astra, Gemini 3.8 Flash and Elorian’s Glimpse, each at 4 fps and 1 fps, and with Pantheon’s Argus and NVIDIA’s FLORA. Subtasks, hand actions and hand captions are scored with permissible subsegment Jaccard, and hand boxes with centroid hit fraction; higher is better for both.
The Perceptron Egocentric harness matches or beats every other system on subtask labeling and is close to GPT-6 Astra on hand boxes, but trails it on hand actions and captions. Generally speaking, most systems struggle with identifying individual hand activities, with the 3 hand-related portions of this benchmark quite far from being saturated.

EgoHome results
| System | Subtask | Hand action | Hand caption | Hand box | Subtask $ / video-hour |
|---|---|---|---|---|---|
| Perceptron Egocentric, 4 fps (default) | 0.787 | 0.421 | 0.613 | 0.942 | $9 |
| Perceptron Egocentric, 8 fps (option) | 0.798 | 0.421 | 0.626 | 0.973 | ≈ $15 |
| GPT-6 Astra, 4 fps frames | 0.797 | 0.498 | 0.749 | 0.979 | ≈ $76 |
| GPT-6 Astra, 1 fps frames | 0.775 | 0.479 | 0.724 | 0.865 | ≈ $20 |
| Gemini 3.8 Flash, 4 fps video | 0.663 | 0.405 | 0.558 | 0.454 | ≈ $1.3 |
| Gemini 3.8 Flash, 1 fps video | 0.639 | 0.390 | 0.557 | 0.574 | n/r |
| Glimpse (Elorian), 4 fps video | 0.689 | 0.390 | 0.560 | 0.489 | ≈ $2.8 |
| Glimpse (Elorian), 1 fps video | 0.590 | 0.353 | 0.560 | 0.247 | n/r |
| Argus (Pantheon), GPT-6 Astra | 0.367 | 0.336 | 0.593 | — | $24.17 |
| Argus (Pantheon), Midcentury's settings: GPT-6.1 Sol | 0.315 | 0.327 | 0.590 | — | $7.76 |
| FLORA (NVIDIA) | 0.747 | — | — | — | $35.39 |
Fine-grained results by gold segment length
Our benchmark is the only one with sufficient scale of annotations necessary to offer performance breakdowns at varying timescales. This reveals that specialist systems like NVIDIA's FLORA hold up much better at shorter timescales than some of the other models which fare well on the overall metric.
| System | All | < 0.5 s | 0.5–1 s | > 1 s |
|---|---|---|---|---|
| Perceptron Egocentric, 4 fps (default) | 0.787 | 0.559 | 0.615 | 0.814 |
| Perceptron Egocentric, 8 fps (option) | 0.798 | 0.555 | 0.672 | 0.824 |
| GPT-6 Astra, 4 fps frames | 0.797 | 0.503 | 0.649 | 0.831 |
| GPT-6 Astra, 1 fps frames | 0.775 | 0.595 | 0.500 | 0.807 |
| Gemini 3.8 Flash, 4 fps video | 0.663 | 0.375 | 0.392 | 0.695 |
| Gemini 3.8 Flash, 1 fps video | 0.639 | 0.361 | 0.320 | 0.670 |
| Glimpse (Elorian), 4 fps video | 0.689 | 0.380 | 0.410 | 0.720 |
| Glimpse (Elorian), 1 fps video | 0.590 | 0.328 | 0.279 | 0.616 |
| Argus (Pantheon), GPT-6 Astra | 0.367 | 0.135 | 0.133 | 0.381 |
| Argus (Pantheon), Midcentury's settings: GPT-6.1 Sol | 0.315 | 0.098 | 0.106 | 0.332 |
| FLORA (NVIDIA) | 0.747 | 0.579 | 0.615 | 0.777 |
| Clips with a step of this length | 137 | 24 | 60 | 137 |
| System | All | < 0.5 s | 0.5–1 s | > 1 s |
|---|---|---|---|---|
| Perceptron Egocentric, 4 fps (default) | 0.421 | 0.298 | 0.286 | 0.461 |
| GPT-6 Astra, 4 fps frames | 0.498 | 0.422 | 0.415 | 0.531 |
| GPT-6 Astra, 1 fps frames | 0.479 | 0.341 | 0.355 | 0.520 |
| Gemini 3.8 Flash, 4 fps video | 0.405 | 0.206 | 0.273 | 0.435 |
| Gemini 3.8 Flash, 1 fps video | 0.390 | 0.191 | 0.252 | 0.436 |
| Glimpse (Elorian), 4 fps video | 0.390 | 0.193 | 0.212 | 0.433 |
| Glimpse (Elorian), 1 fps video | 0.353 | 0.212 | 0.185 | 0.392 |
| Argus (Pantheon), GPT-6 Astra | 0.336 | 0.321 | 0.268 | 0.358 |
| Argus (Pantheon), Midcentury's settings: GPT-6.1 Sol | 0.327 | 0.262 | 0.205 | 0.355 |
| System | All | < 0.5 s | 0.5–1 s | > 1 s |
|---|---|---|---|---|
| Perceptron Egocentric, 4 fps (default) | 0.613 | 0.447 | 0.446 | 0.678 |
| GPT-6 Astra, 4 fps frames | 0.749 | 0.560 | 0.642 | 0.830 |
| GPT-6 Astra, 1 fps frames | 0.724 | 0.415 | 0.575 | 0.800 |
| Gemini 3.8 Flash, 4 fps video | 0.558 | 0.343 | 0.379 | 0.618 |
| Gemini 3.8 Flash, 1 fps video | 0.557 | 0.295 | 0.383 | 0.619 |
| Glimpse (Elorian), 4 fps video | 0.560 | 0.281 | 0.351 | 0.625 |
| Glimpse (Elorian), 1 fps video | 0.560 | 0.264 | 0.337 | 0.631 |
| Argus (Pantheon), GPT-6 Astra | 0.593 | 0.414 | 0.490 | 0.647 |
| Argus (Pantheon), Midcentury's settings: GPT-6.1 Sol | 0.590 | 0.433 | 0.441 | 0.648 |
How we built EgoHome
Annotation methodology
We begin by synthetically labeling videos then having humans edit the initial annotations. Next, we had a member of our research team review every clip by hand. Due to the quality of our initial annotations and our proprietary review pipeline, we were able to get the overall average time to re-annotate a video down to 116 minutes per minute of video across all four annotation types.
| Annotation type | Active minutes per minute of video | Agreement of the synthetic seed with the final human labels |
|---|---|---|
| Hand boxes | 41.7 | 0.932 (centroid hit fraction) |
| Subtasks | 17.1 | 0.766 (permissible subsegment Jaccard) |
| Hand actions | 24.6 | 0.613 (permissible subsegment Jaccard) |
| Hand captions | 32.6 | 0.688 (permissible subsegment Jaccard) |
| All four | 115.9 |
Ensuring annotator quality
Every annotator undergoes a calibration where they have to achieve high agreement with a clip labeled by a member of our research staff. They are then allowed to re-attempt the calibration clip up to 3 times, with feedback after each failed attempt. They are allowed to see what parts of their answers were incorrect, but they are not allowed to see the ground truth.
After their initial calibration, crowdsourced annotators then go through a 10-clip calibration against each other, where they are graded by how high their interannotator agreement is compared to their agreement with the original labels. Via this process we chose 5 annotators (from a pool of 50) to serve as the annotators on our evaluation set, keeping lower performing members of our annotation pool to work on other tasks.
Open-source release
The data can be found in the Hugging Face link at the page header and the prompts and metrics can be found in the GitHub repository.
License. The EgoHome dataset is released under the Creative Commons Attribution-NonCommercial 4.0 license (CC BY-NC 4.0). As an additional permission, anyone, including commercial organizations, may use EgoHome to evaluate models and publish the results. Other commercial uses, such as selling the data or training commercial models on it, are not permitted.
Appendix
Metric formulas
Centroid hit fraction
Mathematically this can be expressed as
Where is the set of human-annotated frames at 30 fps and is the ground truth box for hand on frame . is the model’s box for hand at frame : either a box directly emitted for that frame, or the linear interpolation between its two nearest boxes; frames outside the span the model covered count as misses. is the set of frames for which the model has a box but the ground truth doesn’t. The indicator in the numerator is 1 when the centroid of falls inside .
Permissible subsegment Jaccard
It can be expressed mathematically as follows:
Let and be the predicted and ground-truth segments. Each segment has a time interval and a label, and is duration. is the LLM judge’s verdict on whether two labels are permissible matches: the same action, or one a subtask of the other. is the portion of ’s duration that overlaps some segment in that the judge accepts.
Judge prompt
For subtasks and hand captions, an LLM judge (Gemini 3.5 Flash) decides whether two overlapping labels describe the same activity; hand actions are matched on their Ego4D verb. This is the judge’s prompt for subtasks. For hand captions, “subtask descriptions” reads “hand activity captions”. The prompts each model receives are in our GitHub repository.
You are grading a human annotator against a gold reference for egocentric video subtask descriptions. The two labels describe time segments that overlap; decide if they are talking about the SAME underlying activity.
Gold label: "<gold label>"
Annotator label: "<predicted label>"
Be lenient about WORDING, OBJECTS, and SURFACES: match=true across synonyms, paraphrases, different objects/tools/surfaces, and finer-vs-coarser detail, PROVIDED the same physical hand ACTION is being performed (e.g. "vacuuming the stairs with the hose" ~ "vacuuming the floor" — both vacuuming; "wash the dishes" ~ "scrub the plate" — both washing/scrubbing).
But the ACTION itself must be the same: return match=false when the manipulation differs, EVEN IF the same object is mentioned (e.g. "vacuuming the stairs with the hose" vs "holding the vacuum cleaner" — vacuuming vs holding; "wiping a window" vs "opening a drawer"), or when one is empty/placeholder.
A label that names no specific physical action never matches a specific one: generic descriptions such as "doing chores", "cleaning up", "working in the kitchen", "doing the task" or "using the hands" are match=false against any specific activity.
When genuinely ambiguous, lean match=false.
Return only JSON: {"match": true|false, "rationale": "short reason"}
Degenerate baselines
In order to ensure the metric isn’t trivially gameable, we chose a few degenerate baselines and determined how they'd be rated by the metric. We chose three types of generic baseline:
- Choosing a generic label like "doing chores" and applying it to the whole timeline
- Choosing a generic label and applying at fixed 2.5s windows
- Taking the most common/longest true clip from the ground truth and filling the whole video timeline with it as a single task.
| Answer (no video used) | Subtask | Hand action | Hand caption |
|---|---|---|---|
| One segment for the whole clip, generic label | 0.000 | 0.175 | 0.000 |
| Fixed 2.5 s windows, generic label | 0.000 | 0.175 | 0.000 |
| One segment for the whole clip, the clip’s own most common true label | 0.528 | 0.449 | 0.499 |
Generic labels earn nothing on subtasks and captions. A constant “hold” earns 0.175 on hand actions, the share of time hands really are holding. These degenerate baselines represent a floor of how good a trivial baseline is at the task. The table below shows which models exceed the trivial baseline on the three tasks.
| System | Subtask | Hand action | Hand caption |
|---|---|---|---|
| Perceptron Egocentric, 4 fps (default) | 0.787 ✓ | 0.421 ✗ | 0.613 ✓ |
| Perceptron Egocentric, 8 fps (option) | 0.798 ✓ | 0.421 ✗ | 0.626 ✓ |
| GPT-6 Astra, 4 fps frames | 0.797 ✓ | 0.498 ✓ | 0.749 ✓ |
| GPT-6 Astra, 1 fps frames | 0.775 ✓ | 0.479 ✓ | 0.724 ✓ |
| Gemini 3.8 Flash, 4 fps video | 0.663 ✓ | 0.405 ✗ | 0.558 ✓ |
| Gemini 3.8 Flash, 1 fps video | 0.639 ✓ | 0.390 ✗ | 0.557 ✓ |
| Glimpse (Elorian), 4 fps video | 0.689 ✓ | 0.390 ✗ | 0.560 ✓ |
| Glimpse (Elorian), 1 fps video | 0.590 ✓ | 0.353 ✗ | 0.560 ✓ |
| Argus (Pantheon), GPT-6 Astra | 0.367 ✗ | 0.336 ✗ | 0.593 ✓ |
| Argus (Pantheon), Midcentury's settings: GPT-6.1 Sol | 0.315 ✗ | 0.327 ✗ | 0.590 ✓ |
| FLORA (NVIDIA) | 0.747 ✓ | — | — |
| Best trivial baseline | 0.528 | 0.449 | 0.499 |
Annotation statistics
Subtasks
The distribution of durations is below:
| Subtask segments | EgoHome |
|---|---|
| Segments | 1,924 |
| Shortest | 0.16 s |
| Median | 2.50 s |
| Mean | 3.57 s |
| 90th percentile | 7.34 s |
| Longest | 55.1 s |
| Duration | Relative size | EgoHome |
|---|---|---|
| < 0.5 s | 30 (1.6%) | |
| 0.5–1 s | 120 | |
| 1–2 s | 564 | |
| 2–5 s | 829 | |
| 5–10 s | 277 | |
| > 10 s | 104 |
Hand boxes
Here is the percentage of time the right and left hand are on screen in the corpus:
| Hand on screen | % of frames |
|---|---|
| Left | 96.7% |
| Right | 96.6% |
| Both | 94.3% |
| Either | 99.0% |
| Neither | 1.0% |
| Boxes | 417,912 on 216,225 frames |
Hand actions
| Hand actions | Left | Right |
|---|---|---|
| Segments per clip | 17.3 | 19.4 |
| Median duration | 1.45 s | 1.34 s |
| Mean duration | 2.49 s | 2.39 s |
| < 0.5 s | 171 | 248 |
| < 1 s | 731 | 939 |
| Distinct labels (both hands) | 47 | |
| Video where left and right have the same action | 42.7% | |
| Most frequent verbs | Relative size | Segments |
|---|---|---|
| hold | 802 | |
| take | 615 | |
| put | 595 | |
| fold | 427 | |
| move | 310 | |
| arrange | 257 | |
| adjust | 227 | |
| smooth | 214 | |
| lift | 207 | |
| wash | 163 |
Hand captions
| Hand captions | Left | Right |
|---|---|---|
| Segments per clip | 18.4 | 20.1 |
| Median duration | 1.55 s | 1.49 s |
| Mean duration | 2.50 s | 2.38 s |
| < 0.5 s | 145 | 179 |
| < 1 s | 707 | 844 |
| Distinct labels (both hands) | 3,948 | |
| Video where left and right have the same caption | 29.3% | |
Citation
If you reference this work, please cite it as:
@article{perceptron2026egohome,
author = {PerceptronAI},
title = {Perceptron EgoHome: A new benchmark for dense, sub-second egocentric understanding},
journal = {PerceptronAI Research Blog},
year = {2026},
note = {https://perceptron.inc/blog/egohome},
}
Acknowledgements
The raw footage for this data was collected by HumanSignal, a human data provider specializing in high-quality data collection and annotation for AI teams.
References
-
Physical Intelligence. A Steerable Model with Emergent Capabilities. April 2026. pi.website/blog/pi07
-
Generalist. GEN-1: Scaling Embodied Foundation Models to Mastery. April 2026. generalistai.com/blog/gen-1
-
Dyna Robotics. Dyna-2: A 1-Million-Hour Scaling Law for World-Action Models. August 2026. dyna.co/dyna-2
-
Macrodata Labs. Segmenting Robot Video into Actionable Subtasks. June 2026. macrodata.co/blog/annotating-robot-video-subtasks
-
K. Grauman, A. Westbury, E. Byrne, et al. Ego4D: Around the World in 3,000 Hours of Egocentric Video. CVPR 2022. arXiv:2110.07058