CoolFace
Datasetpublic

angkul07/so101-smolvla-data

so101-smolvla-data — two SO-101 halves in LeRobot v3.0, ready for SmolVLA std_mm_teleop_v30.tar 95 MB 100 eps 9,500 frames 1 task ISR-standardized real teleop ego_v30.tar 319 MB 324 eps 36,442 frames 89 tasks retargeted egocentric video std_results/ the standardization run that produced the first half Both tars unpack to a complete LeRobot v3.0 tree (meta/ data/ videos/) that loads with LeRobotDataset(repo_id, root=...). Same… See the full description on the dataset page: https://huggingface.co/datasets/angkul07/so101-smolvla-data.

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes197downloads
Dataset Card

so101-smolvla-data — two SO-101 halves in LeRobot v3.0, ready for SmolVLA

std_mm_teleop_v30.tar    95 MB   100 eps    9,500 frames   1 task    ISR-standardized real teleop
ego_v30.tar             319 MB   324 eps   36,442 frames  89 tasks   retargeted egocentric video
std_results/                     the standardization run that produced the first half

Both tars unpack to a complete LeRobot v3.0 tree (meta/ data/ videos/) that loads with LeRobotDataset(repo_id, root=...). Same 6-DOF SO-101 layout, same camera keys, same units.

The two halves

Field`std_mm_teleop_v30``ego_v30`
FormatLeRobot v3.0LeRobot v3.0
Robotso_followerso101_follower (same arm, different string)
Rate10 fps (30 Hz ÷ 3.05 ISR compression)30 fps
Episodes100324
Frames9,500 (from 28,948)36,442
Tasks1 — "pick up blue cube and put into orange box"89
Duration15.8 min nominal (real span 16.1 min)20.2 min
Episode lengthmean 95, range 78–117mean 112.5, range 30–354
Camera keysobservation.images.front / .wristsame ✓
Video640×480, h264, yuv420p640×480, h264, yuv420p ✓
Image sourcereal cameras (openbooth SO-101 rig), ISR-selected subset, re-encodedsynthesized — 2 crops from 1 ego camera
state / actionfloat32[6]float32[6]
State layout[pan, lift, elbow, wrist_flex, wrist_roll, gripper], degreessame ✓
Action conventionteleop command, leads state by ~4 raw frames (0.13 s, residual 0.90°); 2 steps / 2.08° after ISRabsolute next-frame target — exact, max abs diff 0.0 on all 324 eps
Gripper encodingdeg, larger = open (checked against the wrist video: 1.40° = jaws touching, 59.78° = wide), range 1.4–59.8deg, larger = open, range −10.0–84.3 — same polarity ✓
Gripper occupancyrests closed — mean 0.294 of span, 52.6 % of frames in the bottom quarter, 4.1 % in the toprests mid — mean 0.328, 33.5 % bottom quarter, 0.7 % top

Every row is measured off the files (std_results/stats_compare.py, ffprobe on the mp4s, the parquet columns); raw numbers in std_results/comparison_stats.json.

What to watch when co-training

  1. 1.10 vs 30 fps. ISR frames are non-uniform in real time, so no single fps is literally true; 10 is the measured effective rate and keeps episode durations within ~2 % of the real ones. A shared action horizon in seconds therefore covers 3× more steps on the ego half.
  2. 2.Action convention. On ego, action[t] == state[t+1] exactly — no controller dynamics to learn. The teleop half carries a genuine ~0.13 s tracking lag, and ISR does not remove it.
  3. 3.Gripper span differs (1.4–59.8° vs −10.0–84.3°) at identical polarity, so per-dataset normalization differs; binarizing at each dataset's own closed→open midpoint is the safe fix.
  4. 4.1 vs 89 tasks, real vs synthesized imagery.

Provenance

halfsourceprocessing
std_mm_teleop_v30makermods/2nd_100ep_blue_cube_orange_box (LeRobot v3.0, real SO-101 teleop)ISR standardization (teleop_std_poc) → kept frames rewritten as a v3.0 dataset
ego_v30angkul07/ego-data (EgoDex), retargeted through DT-pipeline stage 6 run FLeRobot v2.1 → v3.0 (metadata + ffmpeg concat, stream copy — pixels untouched)

std_results/ — the standardization run

ISR (Information-Standardized Trajectory Resampling, Yang et al., IROS 2026, arXiv:2606.22907) keeps one frame per fixed amount of information (distance moved + accumulated acceleration) instead of one frame per fixed amount of time, so operator pauses collapse and contact-rich moments stay dense. Demonstration consistency is then scored with ActionVariance (Eq. 9 of arXiv:2306.02437) and episodes are bucketed.

out/report.json         final artifact: per-episode bucket + ISR stats + thresholds
out/scores_raw.json     ActionVariance before ISR
out/scores_isr.json     ActionVariance after ISR
out/eps_sensitivity.json  cluster-radius stability check
out/isr/                per-episode kept indices + resampled arrays + 3x uniform baseline
out/plots/              compression / spacing / variance + 12 per-episode figures
RUN_NOTES.md            knobs, calibration, results, caveats
calibrate.py, eps_sens.py, build_std_dataset.py, stats_compare.py

Results. 28,948 → 9,500 frames (32.8 %). The kept ratio varies 25.1–44.1 % per episode against a flat 33.4 % for the 3× time-uniform baseline — that content-adaptivity is ISR's claim, and it reproduces here. Buckets (P50/P90 on ISR scores): 50 train / 40 review / 10 quarantine.

Two caveats that belong next to those numbers:

  • ActionVariance rose raw→ISR (89.8 → 94.3, up in 76/100 episodes), the opposite of the BridgeData POC. Expected rather than broken: dropping pause frames removes the lowest-variance samples. Read the ISR column alone, as a within-dataset ranking.
  • Buckets are ε-sensitive. All 100 episodes are one task, so states overlap heavily; per-episode rank correlation against ε=0.5 falls to 0.51 (ε=0.3), 0.41 (0.2), 0.19 (0.1). Treat the 10 quarantined episodes as a shortlist to eyeball, not a verdict.

Knobs were recalibrated for degree units (the defaults assume metres): d_target=12, λ_acc=0.002, gripper-threshold=2.0°. See RUN_NOTES.md.

The ActionVariance scorer is a from-the-paper implementation (the paper ships no code) and joint-space ISR is an extension beyond the paper, which operates on end-effector positions.

Use

bash
huggingface-cli download angkul07/so101-smolvla-data --repo-type dataset --local-dir .
tar -xf std_mm_teleop_v30.tar && tar -xf ego_v30.tar
python
from lerobot.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("angkul07/so101-smolvla-data", root="std_mm_teleop_v30")