HDF5 vs RLDS vs LeRobot:ロボットデータセットフォーマット比較
ロボットデータセットのフォーマットの完全な比較 <unk> HDF5, RLDS, LeRobot. どのフォーマットを使うか,それらの間でどのように変換するか,およびRCSVがどのようにデータを配信するかを.
[←ガイド]
ACT,Octo,LeRobot,Open X-Embodimentが使用する3つの支配的なロボットデータセットフォーマットを理解し,生産し,変換する必要があるロボットエンジニアのための最終的なガイド. 2026年更新.
データセットのフォーマットが重要
ロボット訓練データ形式は,延期できない詳細です. 最初の日に選択した形式は,数ヶ月間プロジェクトに影響を与える3つの要素を決定します.
1. 訓練枠組みの互換性
各主要トレーニングフレームワークは特定のフォーマットでデータを期待します.ACTとディフュージョンポリシーは HDF5 をネイティブに読み取ります.OctoとOpen X-EmbodimentのデータミックススクリプトはRLDS/TFRecord を期待します.LeRobotのトレーニングライブラリはLeRobot Parquet を読み取ります.データが間違ったフォーマットである場合は,訓練の前に変換スクリプトを書いている.
2. ストレージ効率とアクセスパターン
ビデオは3つのカメラで30fpsで3つのカメラを搭載する500エピソードデータセットで,原始 HDF5,圧縮 HDF5,圧縮 HDF5,圧縮 HDF5,圧縮 HDF5,圧縮 HDF5,圧縮 HDF5,圧縮 HDF5 (MP4ビデオ) で3-8GB,または RLDS/TFRecord で20-40GBを占めています. しかし,ストレージ効率はデータ信頼性に対して劣っています. レロボットのMP4圧縮は損耗的です. HDF5とRLDSは正確なピクセル値を保持しています.
3 地域社会と共有
公開してデータセットを共有したい場合は,LeRobotフォーマットで,ウェブビジュアライゼーションを組み込みながら Hugging Face Hubに1つのコマンドでアップロードできます.RLDSは,Open X-Embodimentエコシステム (50+データセット,22種類のロボット) と互換性を提供します.HDF5は最大限の柔軟性を与えますが,標準化された共有プラットフォームはありません.
私たちの推奨事項: HDF5 を真実の源の収集と保存形式として使用します.共有のためにLeRobotとクロスエンボディメントトレーニングのためにRLDSに変換します.これは,単一の形式のロックインのデメリットなしに,三つのエコシステムの中で最高のものを提供します.
HDF5: ロボットデータストレージのゴールドスタンダード
HDF5 (階層データ形式 5) は,グループ (ディレクトリ) とデータセット (アレイ) のファイルシステムのような階層でデータを保存します.これは当初科学コンピューティングのために開発され,柔軟性,成熟したツール,効率的なランダムアクセスのおかげでロボット示範データのための事実上の標準となっています.
エピソード構造
ACT/ALOHA HDF5 標準レイアウトでは,各エピソードを観測,アクション,メタデータ属性を持つトップレベルグループとして保存します.
/episode_0/
observations/
images/
cam_high # uint8 [T x 480 x 640 x 3] overhead camera
cam_wrist_left # uint8 [T x 480 x 640 x 3] left wrist camera
cam_wrist_right # uint8 [T x 480 x 640 x 3] right wrist camera
qpos # float32 [T x 14] joint positions (7 per arm)
qvel # float32 [T x 14] joint velocities
action # float32 [T x 14] leader arm positions (supervision signal)
attrs:
task = "pick_cube_bimanual"
operator_id = "op_03"
success = True
num_timesteps = 450
timestamp = "2026-04-10T14:32:00Z"
Python で HDF5 を読み取る
H5py で エピソードを読み取るのは簡単です. エピソードの観察と行動を読み込む完全な例はこちらです.
import h5py
import numpy as np
# Open a single episode file
with h5py.File("episode_0.hdf5", "r") as f:
# Read joint positions and actions
qpos = f["/observations/qpos"][:] # shape: [T, 14]
action = f["/action"][:] # shape: [T, 14]
# Read a specific camera frame (random access)
frame_100 = f["/observations/images/cam_high"][100] # shape: [480, 640, 3]
# Read all frames for a camera
all_frames = f["/observations/images/cam_high"][:] # shape: [T, 480, 640, 3]
# Read metadata
task = f.attrs.get("task", "unknown")
success = f.attrs.get("success", False)
print(f"Task: {task}, Success: {success}")
print(f"Episode length: {qpos.shape[0]} timesteps")
print(f"Joint positions range: [{qpos.min():.3f}, {qpos.max():.3f}]")
HDF5 の 最良の 実践
- ** チェンキング:** タイム軸に沿ってデータセットを常にチェンキング.ランダムアクセス (デバッグ,ビジュアライゼーション) またはチェンキング (チェンキング) のためにチェンキング・サイズの32を使用します. チェンキング・画像データを保存しないでください. 単一モノリシックブロックとしてロードします.
- **圧縮:**画像データのためにLZFを使用する (3-5倍GZIPより相似の比率で相機フレーム).関節軌跡のためにGZIPレベル4を使用する (より高い比率,速度が重要ではない).収集時に画像を圧縮しないでください. QA認証後に最終アーカイブに圧縮を適用します.
- メタデータ属性: HDF5グループ属性としてエピソードメタデータを保存する:
T10 , T11 , T12 , T13 . ファイルルーツに T14 属性を含めて,フォーマット変更を追跡する. - Episode1 vs.DateSet1のファイル: 1,000エピソード未満のデータセットでは,並行処理と部分再収集で1つのHDF5ファイルがより簡単です.より大きなデータセットでは,ファイルシステムオーバーヘッドを減らすために,ファイルセット1個に50-100エピソードをパッケージ化することを検討してください.
HDF5 利害と悪質
- 成熟したライブラリサポート (h5py, HDFView, Julia, C++)
- フレームに効率的なランダムアクセス
- 柔軟なスケーマ
任意にカスタマイズされたセンサータイプを追加 - 損失のないストレージは,正確なピクセル値を維持します
- ACT,ALOHA,および拡散政策に本土的
- HDFView GUIで人間に検査できる
- 組み込みバージョン化や起源追跡は行われない
- クラウドストリーミングできない (完全なファイルをダウンロードする必要があります)
- ビデオ圧縮なしで大きなファイルサイズ
- 試験室間のスケーマ不一致性
- 標準化された共有プラットフォームはありません
- 同期書き込みは注意深くロックする必要があります
RLDS:オープンX体体標準
RLDS (Reinforcement Learning Datasets) は,Open X-Embodimentデータセットによって使用されるフォーマットである. 22種類のロボット型と527Kのユニークな軌道を介して2.2M+エピソードでロボット操作データの最大のコレクションである.
RLDS計画
各RLDSデータセットは,特徴スケーマを指定する TensorFlow DatasetBuilder によって定義されます.エピソードはステップの連続として表示され,各ステップには以下が含まれます:
# Standard RLDS step structure
step = {
"observation": {
"image": tf.uint8, # shape: [H, W, C]
"state": tf.float32, # shape: [D] (joint positions + gripper)
"wrist_image": tf.uint8, # shape: [H, W, C] (optional)
},
"action": tf.float32, # shape: [D]
"reward": tf.float32, # scalar
"discount": tf.float32, # scalar (typically 1.0)
"is_terminal": tf.bool, # True on terminal state
"is_first": tf.bool, # True on first step
"is_last": tf.bool, # True on last step
"language_instruction": tf.string, # natural language task description
}
RLDS データをロードする
import tensorflow_datasets as tfds
# Load an Open X-Embodiment dataset
dataset = tfds.load("berkeley_autolab_ur5", split="train")
# Iterate over episodes
for episode in dataset.take(5):
steps = episode["steps"]
for step in steps:
image = step["observation"]["image"].numpy() # [H, W, 3]
state = step["observation"]["state"].numpy() # [D]
action = step["action"].numpy() # [D]
instruction = step["language_instruction"].numpy().decode()
print(f"Instruction: {instruction}")
print(f"State shape: {state.shape}, Action shape: {action.shape}")
break # just first step
RLDS の 利害 と 弊端
- 標準化されたスキーマは,データセットのクロストレーニングを可能にします
- tf.dataパイプラインを通じて効率的なストリーミング
- クラウドネイティブ (GCS/S3からダウンロードなしでストリーミング)
- 互換性のある形式で利用可能な50以上のデータセット
- Octo,RT-2,OXEのデータミックスに本体
- 言語指導フィールド内蔵
- TensorFlow依存性 (PyTorch チームにとって重量)
- 順序アクセスのみ (効率的なランダムフレームはありません)
- 固いスケーマ
定番センサーには DatasetBuilder が必要です - データベースビルダーを作成するには 2-4 時間かかります
- 検査にはTFツールが必要
- デバッグの HDF5 より直感性が低い
抱擁する顔生態系
ハグジングフェイスによって開発されたLeRobotは,テーブルデータ (共同位置,アクション,メタデータ) および MP4ビデオファイルを使用してカメラ観測を行う.オープンソース研究ワークフローのために設計されています.
レロボットデータセット構造
ハグ・フェイスハブのLeRobotデータセットには以下のものが含まれています
my_dataset/
data/
train-00000-of-00001.parquet # tabular data (all episodes)
videos/
observation.images.cam_high/
episode_000000.mp4 # overhead camera video
episode_000001.mp4
observation.images.cam_wrist/
episode_000000.mp4 # wrist camera video
episode_000001.mp4
meta/
info.json # dataset metadata, features schema
episodes.jsonl # per-episode metadata
stats.json # per-feature mean/std/min/max
パークートファイルには,時間ステップごとに1行,
LeRobot データをロードする
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
# Load a dataset from Hugging Face Hub
dataset = LeRobotDataset("lerobot/aloha_sim_transfer_cube_human")
# Access a single frame (returns a dict of tensors)
frame = dataset[0]
print(f"State: {frame['observation.state'].shape}") # [D]
print(f"Action: {frame['action'].shape}") # [D]
print(f"Image: {frame['observation.images.cam_high'].shape}") # [C, H, W]
# Get episode-level info
print(f"Number of episodes: {dataset.num_episodes}")
print(f"Number of frames: {dataset.num_frames}")
print(f"FPS: {dataset.fps}")
レロボット の 利害 と 劣勢
- 抱きしめ顔ハブへの1つのコマンドアップロード
- hf.co/datasets/ の内蔵ウェブビジュアル化
- コンパクト収納 (MP4ビデオは原料より5~10倍小さい)
- 300以上の公共データセットが急速に増加しています
- 国産ACT及び拡散政策の訓練支援
- 統計 (平均/STD) 自動計算
- MP4圧縮は損失性
真実の源品質ではない - ビデオ解読はトレーニング中に遅延を加える
- パーケットは,変容長さのエピソードに適さない
- スケーマ変更は,全データセットの再構築を要求する
- 進化するツール・ド・イン・フォーマット
- ビデオを解読せずにランダムなフレームアクセスができません
フォーマット比較表
| Feature | HDF5 | RLDS / TFRecord | LeRobot / Parquet |
|---|---|---|---|
| Native frameworks | ACT, Diffusion Policy, custom | Octo, RT-2, OXE data mix | LeRobot, ACT (via lib), DP (via lib) |
| Storage size (500 eps, 3 cams) | 15-30 GB (compressed) | 20-40 GB | 3-8 GB (MP4) |
| Image fidelity | Lossless (raw uint8) | Lossless (raw uint8) | Lossy (MP4 H.264/H.265) |
| Random frame access | Efficient (chunked) | Inefficient (sequential) | Requires video decode |
| Cloud streaming | No (download required) | Yes (tf.data from GCS/S3) | Yes (HF Hub streaming) |
| Schema flexibility | High (any structure) | Low (fixed DatasetBuilder) | Medium (Parquet columns) |
| Sharing platform | None (manual hosting) | TFDS catalog | Hugging Face Hub |
| Community datasets | Many (no central catalog) | 50+ (Open X-Embodiment) | 300+ (Hugging Face Hub) |
| Python tooling | h5py (mature, lightweight) | tensorflow-datasets (heavy) | lerobot, datasets (growing) |
| Recommended for | Primary storage, ACT/DP training | Cross-embodiment, Octo training | Sharing, community, quick start |
形式間の変換
変換の実践的なガイドは,各経路のツールと推定努力です.
HDF5はレロボット
ALOHA型 HDF5 データセットのネイティブ変換を LeRobot ライブラリが提供します:
# Convert ALOHA HDF5 to LeRobot format and push to Hub
python -m lerobot.scripts.push_dataset_to_hub \
--raw-dir /path/to/hdf5/episodes \
--raw-format aloha_hdf5 \
--repo-id your-org/dataset-name \
--push-to-hub 1
定番 HDF5 計画 (ALOHA ではなく) において,LeRobot の予想されたスケーマにキー名をマップする小さなアダプター 機能を書く必要があります.これは通常30~60分かかります.
HDF5からRLDS
RLDS に変換するには,カスタム TensorFlow DatasetBuilder を書き込む必要があります.これは最も労働を集約する変換 (2-4 時間 新しいスケーマでは) ですが,データセットの形式ごとに一度のコストです:
# Skeleton RLDS DatasetBuilder (simplified)
import tensorflow_datasets as tfds
class MyRobotDataset(tfds.core.GeneratorBasedBuilder):
VERSION = tfds.core.Version("1.0.0")
def _info(self):
return tfds.core.DatasetInfo(
builder=self,
features=tfds.features.FeaturesDict({
"steps": tfds.features.Dataset({
"observation": tfds.features.FeaturesDict({
"image": tfds.features.Image(shape=(480, 640, 3)),
"state": tfds.features.Tensor(shape=(14,), dtype=tf.float32),
}),
"action": tfds.features.Tensor(shape=(14,), dtype=tf.float32),
"is_terminal": tf.bool,
"is_first": tf.bool,
"is_last": tf.bool,
"language_instruction": tfds.features.Text(),
}),
}),
)
def _generate_examples(self, path):
# Read from your HDF5 files and yield episodes
for episode_path in sorted(path.glob("*.hdf5")):
with h5py.File(episode_path, "r") as f:
# Map HDF5 fields to RLDS schema
yield episode_id, {"steps": steps_list}
RLDSはレロボット
LeRobot は,すべての Open X-Embodiment データセットを含む RLDS データセットのための内蔵変換器を提供します.
# Convert any RLDS dataset to LeRobot format
python -m lerobot.scripts.push_dataset_to_hub \
--raw-dir /path/to/rlds/dataset \
--raw-format rlds \
--repo-id your-org/converted-dataset \
--push-to-hub 1
レロボットからHDF5
この方向性については公式なツールはありませんが,書き出すことは簡単です (30-60分):
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
import h5py
import numpy as np
dataset = LeRobotDataset("your-org/dataset-name")
for ep_idx in range(dataset.num_episodes):
ep_frames = [dataset[i] for i in range(len(dataset))
if dataset[i]["episode_index"] == ep_idx]
with h5py.File(f"episode_{ep_idx:05d}.hdf5", "w") as f:
qpos = np.stack([fr["observation.state"].numpy() for fr in ep_frames])
action = np.stack([fr["action"].numpy() for fr in ep_frames])
f.create_dataset("observations/qpos", data=qpos, chunks=(1, qpos.shape[1]))
f.create_dataset("action", data=action, chunks=(1, action.shape[1]))
# Decode and store video frames as image arrays
# ... (video decode step adds complexity)
重要な注意: LeRobot から HDF5 に変換すると,元のピクセルレベルでの信頼性を回復することはできません. LeRobot は画像を MP4 ビデオとして保存します.変換された HDF5 では,元の原始画像ではなく,解読された MP4 フレームが含まれます.
変換概要表
| From → To | Tool | Effort | Notes |
|---|---|---|---|
| HDF5 → LeRobot | lerobot.scripts.push_dataset_to_hub | 30 min | Native ALOHA support; custom schemas need adapter |
| HDF5 → RLDS | Custom DatasetBuilder | 2-4 hours | One-time per schema; requires TF knowledge |
| RLDS → LeRobot | lerobot.scripts.push_dataset_to_hub --raw-format rlds | 15 min | Works for all OXE datasets |
| LeRobot → HDF5 | Custom script | 30-60 min | Lossy: MP4 frames, not original raw images |
| Any → Any | RCSV Platform | 5 min | Upload once, export to any format via UI |
RCSV が あなたのデータを 提供 する 方法
[データ収集キャンペーン] (T21
収集形式
データは,フレームごとにタイムスタンプ,完全なメタデータ,および効率的なアクセスのために,小規模データセットで損失をなくして保存されます.このマスターコピーは,プロジェクトの期間中に保存されます.
配達形式
プロジェクト簡要に目標格式を指定します
- HDF5: 直接の真実源ファイル配信. シェマドキュメントと読み込みのための Python 例脚本が含まれます.
- RLDS / TFRecord: 設定されたデータセットビルダーで変換されました.データセットビルダーソースコードが含まれていますので,変換を再実行できます.
- LeRobot / Parquet: 組織内のプライベートなハグリング・フェイス・ハブのリポジトリに移動. 完全なメタデータ,統計,視覚化を含むデータセットカード.
- カスタムフォーマット: ROS バッグ,CSV,JSONライン,またはプロペッテリー・スケーマ.我々は輸出アダプタを書き込み,配送に含まれます.
含めるもの
データのセットの配信には以下のものが含まれます
- 要求された形式のデータセットファイル
- メタデータ,品質スコア,統計を含むすべてのエピソードをリストするデータマニスト (JSON)
- 各フィールド,データタイプ,単位を記述するスケーマ文書
- Python の例脚本で,エピソードを読み込み,形状と範囲を印刷する
- 訓練中の正常化のためのパーフェクトル統計 (平均,STD,min,max)
- 質量測定値をまとめたQAレポート
RCSVプラットフォーム輸出
[RCSV Fearless Platform] (T22
よく 聞かれる 質問
始めているならどんなフォーマットを使うべきか?
HDF5から始めましょう.最もシンプルなツール (h5pyのみ),最も柔軟なスキーマがあり,最も人気のあるトレーニングフレームワーク (ACT,拡散ポリシー) に本土的です.後で常にLeRobotまたはRLDSに変換できます.もしあなたのデータセットをすぐにHugging Face Hubで共有したい場合は,LeRobotを最初から使用してください.
レロボットのMP4圧縮は訓練の問題ですか?
H.264圧縮の視覚的アーテファクトは,合理的な品質設定 (CRF 20-23) で,典型的なカメラセンサーのノイズレベルを下回っている.しかし,ピクセルレベルの精度が重要である作業では,素ミリメートル小規模の標的に視覚的なサービス,薄いワイヤや糸を検出,圧縮アーテファクトを分析する研究など,損失のない HDF5 をトレーニング源として使用する. LeRobotチームは将来のバージョンのために 損失のないビデオコーデック (FFV1) を探求しています.
訓練のために異なるフォーマットからデータセットを混ぜることができますか?
訓練の前に,すべてのものを単一のフォーマットに変換することです. もし,あなたがOctoでトレーニングをしている場合,またはクロスインボディメント実験をしている場合,すべてをRLDSに変換してください. もし,LeRobot図書館でトレーニングをしている場合,すべてをLeRobotフォーマットに変換してください. RCSV プラットフォームは混合形式のアップロードを標準化して統一データセットに輸出することができます.
ロボットデータセットを バージョン制御するには?
ハグジング・フェイス・ハブのレロボットデータセットでは, git-lfsでバージョンアップが組み込まれています.HDF5では,スケーマ_バージョン,作成日,エピソードリスト,および統計を記録するHDF5ファイルとともにデータマニフェストファイル (JSON) を使用します.センサーの設定を変更するとスケーマバージョンをボタンします.生産ワークフローでは,RCSVプラットフォームはロールバックで完全なデータセットバージョンアップを提供します.
ROSバッグの格式はどうなるの?
ROS バッグ (ROS2 の ROSbag2) は,収集中にデータを記録するのに優れたもので,すべての ROS テーマをネイティブにタイムスタンプでキャプチャする.しかし,ROS2 ライブラリが読み取れることを要求し,ランダムアクセスがないため,ML 訓練ではなく再プレイに最適化されたフォーマットでデータを保存するため,トレーニングフォーマットとして適当ではありません. 標準的なワークフローは:収集中にROSバッグに記録し,訓練および共有のためにHDF5 (またはLeRobot/RLDS) に変換します.この変換ステップはデータ浄化および検証チェックポイントとしても機能します.
RCSV がデータセットのフォーマットを処理できるようにする
機械データを RCSV プラットフォームにアップロードして 視覚化やQAレビューを行い,一クリックで HDF5,LeRobot Parquet,またはRLDS形式に輸出します. または,データを収集して,あなたのトレーニングパイプラインに必要な正確な形式で提供してください.







