Zurück zu Learn

HDF5 vs RLDS vs LeRobot: Roboterdatenformat verglichen

Vollständiger Vergleich von Roboter-Datenformat <unk> HDF5, RLDS, LeRobot. Wann jedes zu verwenden, wie man zwischen ihnen konvertiert und wie RCSV Ihre Daten liefert.

[← Führer]

Der endgültige Leitfaden für Robotikingenieure, die zwischen den drei dominierenden Roboter-Datenformatformaten ACT, Octo, LeRobot und Open X-Embodiment verstehen, produzieren und konvertieren müssen.

Warum das Datensatzformat wichtig ist

Das Format, das Sie am ersten Tag wählen, bestimmt drei Dinge, die Ihr Projekt für Monate beeinflussen werden:

1. Kompatibilität des Bildungsrahmens

Jedes wichtige Trainingsrahmen erwartet Daten in einem bestimmten Format. ACT und Diffusion Policy lesen HDF5 natively. Octo und die Open X-Embodiment Datenmix-Skripte erwarten RLDS/TFRecord. Die LeRobot-Training-Bibliothek liest LeRobot Parquet. Wenn Ihre Daten im falschen Format sind, schreiben Sie Konversions-Scripts, bevor Sie trainieren können und Konversions-Scripts sind, wo sich subtile Datenkorruptionsfehler verstecken.

2. Speicher- und Zugriffseffizienz

Ein 500-Episoden-Datensatz mit 3 Kameras bei 30 Fps nimmt 25-50 GB in RAW HDF5, 15-30 GB in komprimiertem HDF5, 3-8 GB in LeRobot (MP4-Video) oder 20-40 GB in RLDS/TFRecord ein. Der Speicherunterschied spielt bei Cloud-Hosting-Kosten, Download-Zeiten und Trainingsdaten-Lade-Geschwindigkeit eine Rolle. Die Speichereffizienz ist jedoch im Gegensatz zur Datenvertragbarkeit schlecht: Die MP4-Kompression von LeRobot ist verlustreich, während HDF5 und RLDS genaue Pixelwerte erhalten.

3. Gemeinschaft und Teilung

Wenn Sie Ihren Datensatz öffentlich teilen möchten, bietet Ihnen das LeRobot-Format mit eingebauter Webvisualisierung einen One-Command-Upload auf Hugging Face Hub. RLDS bietet Ihnen Kompatibilität mit dem Open X-Embodiment-Ökosystem (50+ Datensätze, 22 Robotertypen). HDF5 bietet Ihnen maximale Flexibilität, aber keine standardisierte Sharing-Plattform.

Unsere Empfehlung: Nutzen Sie HDF5 als Ihr Informations- und Speicherformat. Umwandeln Sie auf LeRobot zum Teilen und auf RLDS zum Kreuz-Einbildungs-Training. Dies gibt Ihnen das Beste aus allen drei Ökosystemen ohne die Nachteile eines einzigen Format-Lock-in.

HDF5: Goldstandard für die Datenspeicherung von Robotern

HDF5 (Hierarchical Data Format 5) speichert Daten in einer Dateisystem-ähnlichen Hierarchie von Gruppen (Verzeichnisse) und Datensätzen (Aren). Es wurde ursprünglich für wissenschaftliche Rechenarbeit entwickelt und ist dank seiner Flexibilität, reifem Werkzeug und effizienten Zufallszugangs zum de facto Standard für Roboterdemonstrationsdaten geworden.

Episodensstruktur

Das Standard-Layout von ACT/ALOHA HDF5 speichert jede Episode als Top-Level-Gruppe mit Beobachtungen, Aktionen und Metadaten-Attributen:

/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"

Lesen von HDF5 mit Python

Das Lesen von Episoden mit h5py ist einfach. Hier ist ein vollständiges Beispiel, das die Beobachtungen und Aktionen einer Episode aufladen:

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 Beste Praxis

  • ** Chunking:** Stets schneiden Sie Datensätze entlang der Zeitsachse. Verwenden Sie chunk_size=1 für zufälligen Zugriff (Debugging, Visualisierung) oder chunk_size=32 für die sequentielle Leseffizienz (Training).
  • ** Kompression:** LZF für Bilddaten (3-5x schneller als GZIP bei ähnlichen Verhältnissen für Kamerabläufe). GZIP-Level 4 für gemeinsame Bahnen (höheres Verhältnis, Geschwindigkeit nicht kritisch).
  • Metadatenattribute: Speichern Sie Episoden-Metadaten als HDF5-Gruppenattribute: T10, T11, T12, T13. Fügen Sie ein T14-Attribut in die Dateirot ein, um Änderungen des Formats zu verfolgen.
  • Eine Datei pro Episode vs. eine Datei pro Datensatz: Für Datensätze unter 1.000 Episoden ist eine HDF5-Datei pro Episode für parallele Verarbeitung und teilweise Wiedererhebung einfacher. Für größere Datensätze sollten 50-100 Episoden pro Datei verpackt werden, um die Overhead des Dateisystems zu reduzieren.

HDF5 Vor- und Nachteile

Pros

  • Erwachsene Bibliotheksunterstützung (h5py, HDFView, Julia, C++)
  • Effizienter zufälliger Zugang zu jedem Rahmen
  • Flexibles Schema freie Angabe von benutzerdefinierten Sensortypen
  • Verlustfreie Speicherung bewahrt genaue Pixelwerte
  • Native zu ACT, ALOHA und Diffusion
  • Menschlich überprüfbar mit HDFView GUI

Kons

  • Keine integrierte Versionsverfolgung oder Herkunftsverfolgung
  • Nicht cloud-streamable (Muss vollständige Datei herunterladen)
  • Große Dateigrößen ohne Video-Kompression
  • Schema-Inkonsistenzen zwischen den Laboren
  • Keine standardisierte Plattform zum Teilen
  • Gleichzeitige Schriften erfordern sorgfältiges Sperren

RLDS: Der offene X-Einheit-Standard

RLDS (Reinforcement Learning Datasets) ist das Format, das von dem Open X-Embodiment Datensatz verwendet wird die größte Sammlung von Robotern Manipulationsdaten mit 2,2M+ Episoden über 22 Robotertypen und 527K einzigartige Bahnen. Es serialisiert Daten als TFRecord-Dateien, die über TensorFlow Datensätze (TFDS) verarbeitet werden.

RLDS-Schema

Jeder RLDS-Datensatz wird durch einen TensorFlow DatensatzBuilder definiert, der das Featureschema spezifiziert. Episoden werden als Schrittenfolge dargestellt, in denen jeder Schritt Folgendes enthält:

# 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
}

Lade von RLDS-Daten

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 Vor- und Nachteile

Pros

  • Das standardisierte Schema ermöglicht das Training zwischen Datensätzen
  • Effizientes Streaming über tf.data-Pipelines
  • Cloud-native (Streaming von GCS/S3 ohne Download)
  • 50+ Datensätze in kompatibelem Format verfügbar
  • Native für Octo, RT-2 und OXE-Daten-Mix
  • Eingebildetes Sprachunterrichtfeld

Kons

  • Abhängigkeit von TensorFlow (schwer für PyTorch-Teams)
  • Nur Sequenzzugriff (keine effiziente zufällige Rahmen)
  • Starr Schema benutzerdefinierte Sensoren benötigen DatasetBuilder
  • Das Schreiben eines DatasetBuilders dauert 2-4 Stunden
  • Die Inspektion erfordert TF-Werkzeuge
  • Weniger intuitiv als HDF5 für Debugging

LeRobot: Das Ökosystem der Umarmung

LeRobot, entwickelt von Hugging Face, verwendet Parquet-Dateien für Tabellendaten (gemeinsame Positionen, Aktionen, Metadaten) und MP4-Video-Dateien für Kamerabeobachtungen. Es ist für den Open-Source-Forschungs-Workflow entwickelt: lokal sammeln, auf Hugging Face Hub schieben, trainieren mit der LeRobot-Bibliothek, Ergebnisse mit der Gemeinschaft teilen.

Struktur des LeRobot Datensatzes

Ein LeRobot-Daten-Set auf Hugging Face Hub enthält:

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

Die Parquet-Datei enthält eine Zeile pro Zeitschritt mit Spalten für T15, T16, T17, T18 (gemeinsame Positionen), T19 und Verweise auf den entsprechenden Video-Rahmenindex.

Lade von LeRobot-Daten

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}")

Vor- und Nachteile von LeRobot

Pros

  • Ein-Befehls-Upload auf Hugging Face Hub
  • Eingebildete Webvisualisierung unter hf.co/datasets/
  • Kompaktes Speicher (MP4-Video 5-10x kleiner als Rohmaterial)
  • 300+ öffentliche Datensätze und rasch wachsende
  • Unterstützung der Ausbildung für Native ACT und Diffusionpolitik
  • Statistiken (Mittel/Std) automatisch berechnet

Kons

  • MP4-Kompression ist verlustlos nicht Quelle-of-Wahrheit Qualität
  • Video-Decodierung erhöht die Latenz während des Trainings
  • Parquet nicht ideal für Folgen mit variabler Länge
  • Schemaänderungen erfordern eine vollständige Datensatzwiederherstellung
  • Neues Format mit sich entwickelnden Werkzeugen
  • Kein beliebiger Bildzugriff ohne Video-Decodierung

Formatvergleichstabelle

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

Umwandlung zwischen den Formaten

Sie werden Daten in mehreren Formaten benötigen. Hier ist der praktische Leitfaden zur Konvertierung mit den Werkzeugen und geschätzten Aufwand für jeden Weg.

HDF5 an LeRobot

Die LeRobot-Bibliothek bietet eine native Konvertierung für ALOHA-Stil HDF5-Datenmengen:

# 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

Für benutzerdefinierte HDF5-Schemas (nicht ALOHA) müssen Sie eine kleine Adapterfunktion schreiben, die Ihre Schlüsselnamen auf LeRobots erwartetes Schema abbildet.

HDF5 bis RLDS

Um RLDS zu konvertieren, ist ein benutzerdefinierter TensorFlow DatasetBuilder erforderlich. Dies ist die arbeitsintensivste Konvertierung (2-4 Stunden für ein neues Schema), ist jedoch ein einmaliger Preis pro Datensatzformat:

# 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 an LeRobot

LeRobot bietet einen integrierten Converter für RLDS-Datensätze, einschließlich aller Open X-Embodiment-Datensätze:

# 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

LeRobot auf HDF5

Es gibt kein offizielles Instrument für diese Richtung, aber es ist einfach zu schreiben (30-60 Minuten):

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)

** Wichtige Vorbeugung:** Die Umstellung von LeRobot zurück auf HDF5 kann die ursprüngliche Pixel-Eigenschaft nicht wiederherstellen, da LeRobot Bilder als MP4-Video speichert.

Übersetzungsvorlage

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

Wie RCSV Ihre Daten liefert

Wenn Sie RCSV für eine Daten-Sammel-Kampagne einbeziehen, verarbeiten wir so die Formatlieferung:

Sammelformat

Wir sammeln immer in HDF5 als unsere Quelle der Wahrheit. Rohsensordaten werden mit Zeitstempeln pro Rahmen, vollen Metadaten und zusammengefassten Datensätzen für effizienten Zugriff losslos gespeichert. Diese Master-Kopie wird für die Dauer Ihres Projekts aufbewahrt.

Lieferformat

Sie geben Ihr Zielformat in der Projektbeschreibung an.

  • HDF5: Direktverfügung der Daten aus der Quelle der Wahrheit.
  • RLDS / TFRecord: Konvertiert mit einem benutzerdefinierten DatasetBuilder, der mit Ihrem Schema übereinstimmt.
  • LeRobot / Parquet: In ein privates Hugs Face Hub-Repository unter Ihrer Organisation verschoben.
  • Nachgewählte Formate: ROS-Bag, CSV, JSON-Lines oder proprietäre Schemata.

Was ist enthalten

Jede Datenmenge enthält:

  • Die Datensätze in Ihrem angeforderten Format
  • Ein Datenmanifest (JSON), in dem alle Episoden mit Metadaten, Qualitätsscores und Statistiken aufgeführt sind
  • Schema-Dokumentation, die jedes Feld, jeden Datentyp und jede Einheit beschreibt
  • Ein Python-Beispielschrift, das eine Episode lädt und Formen und Bereiche druckt
  • Statistiken über die Performance (Mittel, Std, Min, Max) für die Normalisierung während der Ausbildung
  • Qualitätsberichterstattung, die Qualitätsmesswerte für den gesamten Datensatz zusammenfasst

Export der RCSV-Plattform

Wenn Sie die [RCSV Fearless Platform] (T22) verwenden, können Sie Datensätze in jedem Format hochladen und über die Web-UI in jedes andere Format exportieren. Die Plattform verarbeitet automatisch Schema-Normalisierung, Statistikberechnung und formatsspezifische Kodierung (MP4 für LeRobot, TFRecord für RLDS).

Häufig gestellte Fragen

Welches Format sollte ich verwenden, wenn ich gerade anfange?

Sie können immer später auf LeRobot oder RLDS konvertieren. Wenn Sie Ihren Datensatz sofort auf Hugging Face Hub teilen möchten, verwenden Sie LeRobot von Anfang an , aber halten Sie den rohen HDF5 als Sicherung.

Ist LeRobots MP4-Kompression ein Problem für das Training?

Für die meisten Manipulationsarbeiten: Nein. Die visuellen Artefakte aus der Kompression von H.264 bei angemessenen Qualitätsanpassungen (CRF 20-23) liegen unter dem Lärmniveau typischer Kamerasensoren. Für Aufgaben, bei denen die Pixelpräzision wichtig ist, verwenden Sie jedoch visuelle Servoing zu Sub-Millimeterzielen, die Erkennung dünner Drähte oder Fäden oder Forschung, die Kompressionartefakte analysiert verwenden Sie lossless HDF5 als Ausbildungsquelle. Das LeRobot-Team untersucht Verlustfreie Video-Codecs (FFV1) für zukünftige Versionen.

Kann ich Datenmengen aus verschiedenen Formaten für das Training mischen?

Ja, aber Sie müssen sie zuerst in ein gemeinsames Format normalisieren. Der praktischste Ansatz ist es, alles vor dem Training in ein einziges Format umzuwandeln. Wenn Sie mit Octo trainieren oder Kreuzkörperversuche durchführen, konvertieren Sie alles in RLDS. Wenn Sie mit der LeRobot-Bibliothek trainieren, konvertieren Sie alles in LeRobot-Format. Die RCSV-Plattform kann gemischte Format-Uploads in einen einheitlichen Datensatz normalisieren und exportieren.

Wie steuere ich die Versionen meiner Roboter-Daten?

Für LeRobot-Datensätze auf Hugging Face Hub ist Versionsverarbeitung über Git-lfs eingebaut. Für HDF5 verwenden Sie eine Datensatzdatei (JSON) neben Ihren HDF5-Dateien, die Schema_Version, Erstellungsdatum, Episodenliste und Statistiken aufzeichnet. Schemaversion bump, wenn Sie die Sensorkonfiguration ändern. Für Produktionsworkflows bietet die RCSV-Plattform vollständige Datensatzversion mit Rollback.

Was ist mit dem ROS-Taschenformat?

Die ROS-Tasche (ROSbag2 in ROS2) ist hervorragend für die Datenerfassung während der Sammlung, da sie alle ROS-Themen mit Zeitstempeln nativ erfasst. Der Standard-Workflow ist: Aufnahme in ROS-Tasche während der Sammlung, dann umwandeln Sie in HDF5 (oder LeRobot/RLDS) für Training und Weitergabe.

RCSV kann die Datenformatverarbeitung übernehmen

Laden Sie Ihre Roboterdaten auf die RCSV-Plattform für Visualisierung, Qualitätsprüfung und Export mit einem Klick in HDF5, LeRobot Parquet oder RLDS-Format hoch. Oder lassen Sie uns Ihre Daten sammeln und in dem genauen Format liefern, das Ihre Trainingsleitung benötigt.

Datenerhebungsdienste Offnen der Plattform