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.
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 halfBoth 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
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
- 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.
- 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. - 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.
- 1 vs 89 tasks, real vs synthesized imagery.
Provenance
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.pyResults. 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
huggingface-cli download angkul07/so101-smolvla-data --repo-type dataset --local-dir .
tar -xf std_mm_teleop_v30.tar && tar -xf ego_v30.tarfrom lerobot.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("angkul07/so101-smolvla-data", root="std_mm_teleop_v30")