Segmentation mask collection

Egocentric Video with Segmentation Masks

A policy that manipulates a particular object needs to know which pixels are that object. We collect custom first-person video on demand against your written skill spec and deliver it with per-pixel instance masks and tracked object IDs, aligned to depth, hand pose and IMU on one PTP clock. This is collection, not annotation of footage you already have.
Masks
Per-pixel instance IDs, tracked
Mask grid
848×480, the depth resolution
Sync
Median 1.12 ms, 2.0 ms ceiling
First batch
Median 48 h in deep-coverage settings
A contributor wearing a head-mounted camera performs a bimanual task, beside a graphic of the instance mask and action layers delivered with each episode.
Instance masks are delivered beside the video, depth and hand pose, on the same timeline.

What a mask delivery includes

Which pixels are which object, frame after frame.

01

Per-pixel instance masks

Masks ship as instance_masks in the annotations group, uint16 [T, 480, 848], so two identical objects stay separate rather than sharing one class label.

02

Tracked IDs across the episode

The stream list describes manipulated objects and target surfaces with tracked IDs across the episode, linked to an objects list and to contact events.

03

Aligned to depth

Masks are stored at the depth resolution and annotated against the synchronized depth stream, so they can be lifted into 3D beside hand joints in metres.

04

Packed for the format you load

The episode schema is the canonical layout, with HDF5 and zarr mirroring it; where masks sit in other formats is agreed in the spec.

Definition

What is egocentric video with segmentation masks?

Egocentric video with segmentation masks is first-person task footage delivered together with per-pixel masks that say which object each pixel belongs to. Instance masks keep two identical objects apart, and tracking gives the same object the same ID from one frame to the next. On Firsthand’s rig the masks are the instance_masks field in the annotations group of the episode schema, on the same timeline as the video, depth and hand pose.

This page sells the collection: fast, on-demand, custom collection scoped to your skill spec, with masks delivered beside the video. It is not the definition and it is not a general annotation service. The instance segmentation glossary entry defines the term, and the egocentric video annotation and image and video annotation pages cover labeling. On those pages the annotation applies to footage captured on Firsthand’s synchronized hardware to your spec, not to footage you already own.

Why it matters

Why do robot learning and perception teams need object masks?

The site’s glossary states the case: manipulation is about a particular object, and instance masks let a model attend to the manipulated item through clutter and occlusion and tie contact events to a specific object ID. Tracked across frames, a mask gives a policy a persistent handle on which object is being manipulated.

A mask also says where the hand ends and the object begins, which a bounding box cannot express. The site also notes that clothing, bedding and bags do not track well with propagated masks, so household episodes ship per-frame instance masks for them. The site states these dependencies but does not quantify how much masks change model performance, and this page does not either.

Mask fields

Which mask and annotation fields does Firsthand deliver?

Masks are delivered as instance_masks in the annotations group, listed beside hand_joints, hand_visible, body_joints, contact_events, objects, action_segments and gaze_target. The schema gives the shape as uint16 [T, 480, 848]: one integer instance ID per pixel on the depth grid. The stream list describes the segmentation stream as instance masks over manipulated objects and target surfaces, with tracked IDs across the episode.

The glossary adds that instance_masks are tracked object IDs per frame, linked to an objects list and to contact events. The format pages say whether a given delivery includes masks is a spec decision, so name them in the skill spec and confirm them on the Spec Pilot batch. The first table lists each field and what the site states about it.

Masks and other labels

How do segmentation masks differ from bounding boxes, hand pose and action labels?

They answer different questions. A mask says which pixels belong to which object instance. A bounding box is the smallest rectangle around an object; on this site boxes are used in the detect-track-blur pass that removes faces, plates and screens, while segmentation is delivered as per-pixel masks rather than boxes alone. Hand pose is 21 joints per hand in metres, and action segments are start and end timestamps with a verb and a noun.

The site delivers these together and keeps them distinct. This page claims for masks only what the site states for masks. The 21-joint count and the visibility flag belong to hand pose, and the verb and noun belong to action segments. The site also says a polygon outline can be traced from a delivered mask, while a mask cannot be recovered from a box without re-labeling. The second table sets the four side by side.

What masks cover

What do the masks cover?

The stream list says manipulated objects and target surfaces. The annotation pages add that object, hand and body masks are annotated where the program spec calls for them, so a policy can separate the hand, the task object and the background as distinct masks.

Which classes are in scope is your decision. The skill spec names the object classes, grasp families and environments before capture, so labels use the terms your training stack expects rather than a generic taxonomy. The site does not publish a class list, and it describes instance masks rather than semantic ones: whether a delivery adds class-only semantic masks is not stated and is set per program.

Alignment

How are masks kept aligned with video, depth and IMU?

Masks are annotated against the synchronized depth stream and stored at the depth resolution, 848×480, which is what lets a mask be lifted into 3D alongside hand joints expressed in metres in the head-camera frame. The head camera records at 3840×2160 and 60 fps; how a mask on the depth grid maps onto the 4K head frame is not stated and is confirmed in the spec.

Every label carries the same PTP-domain timestamp as the frame it belongs to. The capture page describes one PTP clock domain across the head-mounted stereo pair, both wrist cameras, the depth sensor and the IMUs, with a 1.12 ms median and 1.94 ms p99 against a 2.0 ms ceiling. The IMUs run at 200 Hz on the head and both wrists on that clock; the site does not describe masks being derived from them. The third table lists the streams.

Formats

Which formats carry the masks?

The episode schema is the canonical layout and its annotations group lists instance_masks as uint16 [T, 480, 848]; HDF5 and zarr mirror that layout. In the WebDataset shards, masks and the other episode-schema fields are not itemised, and which fields appear inside a shard’s annotation file is set in the skill spec.

The site does not state how masks are laid out in the LeRobot v2.1 export, in RLDS, or in Rerun .rrd, so name your loader in the spec. A mask stored as an image array is a different object from a LeRobot observation vector, so confirm the shape you load. The fourth table summarizes this.

Quality and consent

How is a mask delivery checked, and who owns it?

An episode is validated on the checks the site defines for every episode: sync within the ceiling, calibration solved and within drift tolerance, coverage cells filled and consent documented. For annotation, a second reviewer covers a sampled or full pass depending on density and stakes, failed items are rejected and recaptured at no extra cost, and the reject log with reasons is visible to you. The site publishes no mask accuracy or overlap figure, so none is claimed here.

On consent, the contributor agreement the site describes covers derivative representations, including segmentation masks, and those layers sit under the same consent as the video. Delivered data ships under a perpetual, buyer-owned license, and billing is per validated hour, so footage that fails QA is not billed.

Agreed per spec

What is set per program rather than stated up front?

Several mask details are not fixed on this site and are agreed in the skill spec. The last table separates what the site states from what is set per program, so you know what to put in writing before the quote.

Getting started

How do you order a custom segmentation-labelled collection?

Send the tasks, the environments and regions, and the delivery format you need, and name instance masks in the streams and labels list along with the object classes in scope. The site lists RGB as the baseline and the other streams as added where the spec calls for them, and says each added label adds equipment, QA passes and cost, so order what the model consumes. If you have no written spec yet, the skill spec is the document that names the tasks, the labels and the acceptance test.

The order flow is spec, quote, Spec Pilot, then production. Where coverage for your tasks and regions is deep, the median time from signed spec to first validated batch is 48 hours; where it is thin, turnaround runs three to four weeks. There is no list price.

At a glance

What you get.

Segmentation
Per-pixel instance masks; manipulated objects and target surfaces, tracked IDs across the episode
Delivered field
annotations/instance_masks, uint16 [T, 480, 848]
Mask grid
Stored at the depth resolution, 848×480
Linked fields
objects list and contact_events, in the same annotations group
Hand pose beside it
21 joints per hand, metres, head-camera frame, per-joint visibility flag
Sync
One PTP domain; median 1.12 ms, p99 1.94 ms, 2.0 ms ceiling
Delivery
RLDS · LeRobot · WebDataset · HDF5 / zarr
Class vocabulary, semantic masks, mask accuracy, mask frame rate
Set per program in the skill spec
Spec to first batch
a median of 48 hours (deep coverage)
License
Perpetual, buyer-owned

Every collection runs through the same seven-stage end-to-end custom collection pipeline. End-to-end custom data collection is a managed service that takes an AI data need from problem to owned dataset in a single accountable pipeline.

Mask fields

Mask fields the site states, and what each is used for

Field names and shapes as stated on the site’s format, glossary and annotation pages.
FieldWhat the site statesWhat it is used for
instance_masksannotations/; uint16 [T, 480, 848], per-pixel instance IDs, tracked across the episodeSeparating objects through clutter and occlusion
objectsannotations/; object labels for the classes named in the specNaming which instance is which
contact_eventsannotations/; hand-object contact onsets, against the depth streamTying contact to a specific object ID
depth_mmstreams/; uint16 [T, 480, 848] at 30 Hz, metric millimetresThe grid the masks are stored on
hand_joints, hand_visiblefloat32 [T, 2, 21, 3], metres, head-camera frame; per-joint visibility flagHand geometry beside the masks
*_timestamp_nsint64 nanoseconds per stream, shared PTP domainAligning masks to video from the data

Masks and other labels

Masks, boxes, hand pose and action labels compared

Each signal as the site describes it. “Not stated” is on purpose.
SignalWhat the site statesWhat it tells a modelNot stated
Segmentation maskPer-pixel instance IDs, uint16 [T, 480, 848], trackedWhich pixels are which objectClass list, accuracy, frame rate
Bounding boxUsed in the detect-track-blur pass for faces, plates and screensRough location onlyBox labels as a delivered object field
Hand pose21 joints per hand, metres, per-joint visibility flagHand geometryAccuracy figure
Action labelaction_segments with start_ns, end_ns, verb, nounWhat happens and whenVocabulary, set in the spec

Rig streams

Rig streams that travel with the masks

Stream specifications as stated on the site; masks share the clock with each of them.
StreamWhat the site statesRelation to the masks
Head cameraGlobal-shutter, 3840×2160 at 60 fps, 120° HFOVThe view the masks describe
Wrist camerasTwo, 1920×1080 at 60 fpsHand-level views beside the head view
Depth848×480 at 30 fps, metric millimetres plus confidenceMasks are stored at this resolution
IMUs6-DoF, 200 Hz, head and both wristsMotion record on the same clock
ClockOne PTP domain, hardware-triggeredLabels aligned under the 2.0 ms ceiling

Formats

What each format states about masks

Claims as stated on the site’s format and conversion pages; unstated layout is set per program.
FormatWhat the site statesSet per program
Episode schemaannotations/instance_masks, uint16 [T, 480, 848]Whether a delivery includes masks
HDF5 / zarrMirrors the episode schema layoutAnything beyond the format page
WebDatasetMasks not itemised for shards; included only if the spec orders themWhich fields appear in the annotation file
LeRobot v2.1Mask layout not statedWhere and how masks are stored
RLDSMask layout not statedWhere and how masks are stored
Rerun .rrdListed as a delivery formatMask layout

Agreed per spec

What the site states vs what is set per program

Details the site does not fix are agreed in the skill spec.
DetailWhat the site statesWhere it is set
Mask typePer-pixel instance masks with tracked IDsStated; confirmed in the spec
Object classes and vocabularyNamed in the skill spec before captureSet per program in the skill spec
Semantic (class-only) masksNot stated as deliveredSet per program in the skill spec
Mask accuracy or overlap scoreNot stated; no figure publishedSet per program in the skill spec
Mask frame rate and mapping to the 4K head frameNot statedSet per program in the skill spec
Annotation tooling and throughputNot stated; reviewer pass is sampled or fullSet per program in the skill spec
Hours, price and turnaroundNo list price; median 48 h where deep, three to four weeks where thinThe quote and the Spec Pilot

FAQ

Egocentric video with segmentation masks, answered.

What is egocentric video with segmentation masks?
First-person task footage delivered with per-pixel instance masks and tracked object IDs: the instance_masks field, uint16 [T, 480, 848], on the same timeline as the video, depth and hand pose.
Does Firsthand deliver instance segmentation masks?
Yes, where the spec calls for them. The episode schema lists instance_masks in the annotations group, and the stream list describes instance masks over manipulated objects and target surfaces with tracked IDs across the episode.
How are masks different from bounding boxes?
A mask assigns every pixel to an object instance, so it shows where the hand ends and the object begins. Boxes are used on this site in the detect-track-blur pass for faces, plates and screens, and segmentation is delivered as masks.
What resolution are the masks?
They are stored at the depth resolution, 848×480, and annotated against the synchronized depth stream. How they map onto the 3840×2160 head frame is not stated and is confirmed in the spec.
Who decides the object classes?
You do, in the skill spec. It names the object classes, grasp families and environments in scope before capture. The site publishes no class list.
How accurate are the masks?
No mask accuracy or overlap figure is published on the site, so none is claimed here. Episodes are gated on sync, calibration, coverage and consent, and a second reviewer covers a sampled or full annotation pass.
How fast and how priced is a segmentation collection?
Where coverage is deep, the median from signed spec to first validated batch is 48 hours; where thin, three to four weeks. There is no list price: you are quoted against your spec and billed per validated hour, and masks add equipment and QA like any added label.

Sources

Where are the formats documented?

Request a custom segmentation dataset.

Tell us the tasks, environments, the object classes and mask fields your model needs, and the format you load from. A first validated batch arrives in a median of 48 hours where coverage is deep.