Zurück zu LeRobot Path

Verständnis für das Format des LeRobot Datensatzes

Einheit 2 des LeRobot-Lernpfads. Lernen Sie das Format des LeRobot-Datensatzes: Parquet + MP4-Speicher, Episodestruktur, Beobachtungs-/Aktionsschema. Laden und visualisieren Sie einen vorhandenen Datensatz aus HuggingFace Hub. ~ 1,5 Stunden.

Einheit 2 von 6 · Datensatzformat · ~ 1,5 Stunden

Bevor Sie Ihre eigenen Daten aufzeichnen, verstehen Sie genau, was ein LeRobot-Datensatz enthält wie Episoden strukturiert sind, welche Felder gespeichert werden und wie vorhandene Datensätze aus HuggingFace Hub geladen und überprüft werden.

Warum ein Standardformat wichtig ist

Das Roboter-Lernen hat historisch von jedem Labor mit einem anderen Datenformat gelitten, was es unmöglich macht, Datensätze zu teilen, Daten von verschiedenen Robotern zu kombinieren oder vorgebildete Richtlinien über Systeme hinweg zu verwenden. Das LeRobot-Datensatzformat löst dies durch die Definition eines einzigen Schemas, das über alle unterstützten Hardware funktioniert. Ein auf einem SO-100 aufgezeichneter Datensatz kann verwendet werden, um eine Politik für einen OpenArm ohne Konvertierung zu trainieren solange die Dimensionen des Aktionsraums übereinstimmen.

Das Verständnis des Formates, bevor Sie aufnehmen, bedeutet, dass Sie während des Trainings kein strukturelles Problem in Ihren Daten entdecken werden.

Datensatzstruktur: Parquet + MP4

Jeder LeRobot-Datenbestand lebt in einem Verzeichnis mit dieser Struktur:

my_dataset/ ── meta/ │ ── info.json # Datensatz Metadaten (Robotertyp, Fps, Modalitäten) │ ── Aufgaben.jsonl # Aufgabenbeschreibung pro Episode │ ── Statistiken.Safetensoren # Mittel/std für die Normalisierung ── Daten/ │ ── chunk-000/ │ ── episode_000000.parquet # gemeinsame Zustände + Aktionen, eine Reihe pro Zeitstufe │ ──_000001.parquet │ ── ... ── ── chunk video episode/ ── ages.beobachtung.images.\mp_ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

Die Spaltung zwischen Parquet (für numerische Zeitserien) und MP4 (für Video) ist absichtlich. Parquet komprimiert gemeinsame Zustände und Aktionen effizient und unterstützt schnellen zufälligen Zugriff per Episodenindex. MP4 verwendet Video-Codecs, die für Bildsequenzen entwickelt wurden, und liefert 1030x kleinere Dateien als die Speicherung von Rohbildern als Tensoren.

Schlüsselpunkte in jeder Episode

Field Shape Description
observation.state [T, D] Joint positions (and optionally velocities) at each timestep. D is the number of joints (e.g., 7 for SO-100: 6 joints + 1 gripper).
action [T, D] Target joint positions commanded at each timestep. Same dimensionality as observation.state.
timestamp [T] Time in seconds since the start of the episode, at 50Hz by default (0.02s per step).
episode_index scalar Integer index of this episode within the dataset. Used by the dataloader to group timesteps into episodes.
frame_index [T] Frame number within the episode (0 to T-1). Matches the frame number in the corresponding MP4.
next.done [T] Boolean flag — True at the last timestep of an episode. Used to signal episode boundaries during training.
task_index scalar Index into tasks.jsonl. Enables multi-task datasets where different episodes correspond to different instructions.

Kamerafelder: Kamerabilder werden als MP4-Dateien gespeichert, nicht im Parquet. Das Parquet enthält T0 als Wegreferenz (Framenindex + Episodeindex) anstatt Rohpixeldaten. Der LeRobot-Dateloader verarbeitet die Dekodierung und Synchronisierung transparent.

Lade und visualisiere einen vorhandenen Datensatz

Laden Sie den T1 Datensatz von HuggingFace Hub und visualisieren Sie 3 Episoden. Dieser Datensatz enthält scripted Demonstrationen eines zweibäufigen Robots, der einen Pegel einfügt ein klares Beispiel dafür, wie ein gut strukturiertes Datensatz aussieht.

Quelle ~/lerobot-env/bin/activate # Visualisieren Sie 3 Episoden aus einem öffentlichen Datensatz python -m lerobot.scripts.visualize_datensatz \ --repo-id lerobot-raw/aloha_sim_insertion_scripted \ --episode-indices 0 1 2 \ --output-dir ~/datensatz-viz/ # Öffnen Sie den erzeugten HTML in Ihrem Browser # Dateiweg, der zum Terminal gedruckt wurde, z.B. ~/datensatz-viz/index.html

Der Visualisierer erzeugt eine HTML-Seite mit Videowiedergabe jeder Episode zusammen mit synchronisierten gemeinsamen Zustandsplots.

  • Glatte Gelenkbahnen Scharfe Spitzen zeigen Aufzeichnungsartefakte oder Armcrashes
  • Konsistente Episodelänge Episoden, die sich wild in der Länge unterscheiden (z.B. 50 vs. 400 Bilder) zeigen oft einige Demonstrationen, die teilweise oder abgebrochenen Bewegungen erfasst haben
  • Greifer-Zustandänderungen Die letzte gemeinsame Dimension sollte für Manipulationsarbeiten klare binäre Übergangsvorgänge (offene → geschlossene → offene) zeigen

# Programmatisch vom Datensatz inspizieren lerobot.common.datasets.lerobot_datensatz Import LeRobotDataset Datensatz = LeRobotDataset("lerobot-raw/aloha_sim_insertion_scripted") print(f"Episoden: {datensatz.number_episodes}") print(f"Gesamt-Frame: {len(datensatz)}") print(f"FPS: {datensatz.fps}") print(f"Funktionen: {(listedatensatz.features.keys))}") # Inspizieren Sie eine einzelne Datensatz-Framme\0[] Printform: {[Observation.state'shapes].}") "((((Action: {\shapes}" printform" {\shapes}"

Optional Referenzdatensätze

Erforschen Sie die RCSV Datensatz-Sammlung

Die RCSV-Datensatzbibliothek enthält kuratierte Roboter-Lerndaten-Sets im LeRobot-Format.

Einheit 2 ist fertig, wenn...

Sie haben 3 Episoden von T2 erfolgreich visualisiert und die HTML-Ausgabe öffnet sich in Ihrem Browser. Sie können die Beobachtungs-, Aktions- und Zeitstempelfelder in einer Parquet-Datei mit Python identifizieren. Sie verstehen den Unterschied zwischen dem, was in Parquet versus MP4 gespeichert ist. Sie sind bereit, Ihren eigenen Datensatz in Einheit 3 aufzunehmen.

[← Zurück zum Wegüberblick]