CoolFace
Datasetpublic

hungho77/so101-multitask-calib

SO-101 multitask — calibration pool (LeRobot v2.1) The observation pool that post-training quantization of a GR00T N1.7 SO-101 policy is calibrated on, in the LeRobot v2.1 layout. Same recordings as hungho77/so101-multitask, which is stored in the v3.0 layout; GR00T's data loader reads v2.1 only, so this is the copy a quantization or evaluation run actually opens. 143 episodes · 67,496 frames · 3 tasks · 30 fps · single SO-101 arm · two 480×640 cameras (top, wrist) · 6-D state… See the full description on the dataset page: https://huggingface.co/datasets/hungho77/so101-multitask-calib.

sourceHugging Faceapache-2.0updated 11d agoView on Hugging Face
0likes244downloads
Dataset Card

SO-101 multitask — calibration pool (LeRobot v2.1)

The observation pool that post-training quantization of a GR00T N1.7 SO-101 policy is calibrated on, in the LeRobot v2.1 layout. Same recordings as `hungho77/so101-multitask`, which is stored in the v3.0 layout; GR00T's data loader reads v2.1 only, so this is the copy a quantization or evaluation run actually opens.

143 episodes · 67,496 frames · 3 tasks · 30 fps · single SO-101 arm · two 480×640 cameras (top, wrist) · 6-D state and action (5 joints + gripper).

taskepisodes
Pick up the banana and place it in the bot, then close the lid50
Pick blue cube and place on red cube49
Pick all cubes and place into cup44

The split

`calibration_manifest.json` carries both halves:

  • Calibration — 128 observations, one per episode, seed 0. Spread evenly through each episode (quintiles 27/24/23/19/35, median at 51% of the episode) and across all three tasks in the dataset's own proportions (47/43/38).
  • Held-out evaluation — the remaining 15 episodes, seed 42. The intersection with the calibrated episodes is empty and the two halves cover 143/143 episodes, so quantization drift is never scored on an observation the quantizer saw.
python
import json
m = json.load(open("calibration_manifest.json"))
m["calibration"]["samples"][0]        # {"episode": ..., "step": ...}
m["held_out_evaluation"]["episodes"]  # the 15 never calibrated on

Units — read this before driving a policy with it

observation.state and action are raw, unnormalised values in the units the arm reports (degrees for the joints, 0–100 for the gripper):

single_arm  mean [-6.22, -15.85, 25.11, 49.77, 1.63]   std [19.36, 36.87, 36.02, 24.33, 1.01]
gripper     mean [24.30]                                std [12.34]

A policy trained on this data normalises internally from its own statistics.json, so a client sends these units as they are. Sending radians, or normalising before sending, produces actions roughly five times worse than holding the arm still — and raises no error.

These statistics match the checkpoint's dataset_statistics.json to every decimal on all six dimensions, which is how this v2.1 conversion is known to carry the same values as the recordings the policy was trained on.

Layout

data/chunk-000/episode_{i:06d}.parquet     observation.state, action, indices
videos/chunk-000/observation.images.top/episode_{i:06d}.mp4
videos/chunk-000/observation.images.wrist/episode_{i:06d}.mp4
meta/info.json, episodes.jsonl, tasks.jsonl, stats.json, modality.json