Learnに戻る

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行, T15, T16, T17, T18 (共同位置), T19の列,および対応するビデオフレームインデックスへの参照が含まれています.

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) に RCSVを募集する際,

収集形式

データは,フレームごとにタイムスタンプ,完全なメタデータ,および効率的なアクセスのために,小規模データセットで損失をなくして保存されます.このマスターコピーは,プロジェクトの期間中に保存されます.

配達形式

プロジェクト簡要に目標格式を指定します

  • HDF5: 直接の真実源ファイル配信. シェマドキュメントと読み込みのための Python 例脚本が含まれます.
  • RLDS / TFRecord: 設定されたデータセットビルダーで変換されました.データセットビルダーソースコードが含まれていますので,変換を再実行できます.
  • LeRobot / Parquet: 組織内のプライベートなハグリング・フェイス・ハブのリポジトリに移動. 完全なメタデータ,統計,視覚化を含むデータセットカード.
  • カスタムフォーマット: ROS バッグ,CSV,JSONライン,またはプロペッテリー・スケーマ.我々は輸出アダプタを書き込み,配送に含まれます.

含めるもの

データのセットの配信には以下のものが含まれます

  • 要求された形式のデータセットファイル
  • メタデータ,品質スコア,統計を含むすべてのエピソードをリストするデータマニスト (JSON)
  • 各フィールド,データタイプ,単位を記述するスケーマ文書
  • Python の例脚本で,エピソードを読み込み,形状と範囲を印刷する
  • 訓練中の正常化のためのパーフェクトル統計 (平均,STD,min,max)
  • 質量測定値をまとめたQAレポート

RCSVプラットフォーム輸出

[RCSV Fearless Platform] (T22) を使用している場合は,任意のフォーマットでデータセットをアップロードし,ウェブUIを通じて他のフォーマットに輸出できます.プラットフォームはスケーマ正常化,統計計算,フォーマット特有のコーディング (LeRobot の MP4 ,RLDS の TFRecord) を自動的に処理します.一度アップロードし,必要な限り多くの場合,輸出します.

よく 聞かれる 質問

始めているならどんなフォーマットを使うべきか?

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形式に輸出します. または,データを収集して,あなたのトレーニングパイプラインに必要な正確な形式で提供してください.

データ収集サービス プラットフォームを開く