מדוע פורמט סטנדרטי חשוב

למידת רובוטים סבלה היסטורית מכך שכל מעבדה משתמשת בפורמט נתונים שונה - מה שהופך את זה לבלתי אפשרי לשתף מערכי נתונים, לשלב נתונים מרובוטים שונים או להשתמש במדיניות מיומנת מראש במערכות שונות. פורמט הנתונים של LeRobot פותר זאת על ידי הגדרת סכימה אחת הפועלת בכל החומרה הנתמכת. ניתן להשתמש במערך נתונים שהוקלט ב-SO-100 כדי להכשיר מדיניות עבור OpenArm ללא כל המרה - כל עוד ממדי מרחב הפעולה תואמים.

הבנת הפורמט לפני ההקלטה פירושה שלא תגלה בעיה מבנית בנתונים שלך במהלך האימון. זה גם מקל הרבה יותר על ניפוי הבאגים: כאשר האימון נכשל, המקום הראשון לחפש בו הוא מערך הנתונים.

מבנה מערך הנתונים: פרקט + MP4

כל מערך נתונים של LeRobot חי בספרייה עם המבנה הזה:

my_dataset/ ├── meta/ │ ├── info.json # dataset metadata (robot type, fps, modalities) │ ├── tasks.jsonl # task description per episode │ └── stats.safetensors # mean/std for normalization ├── נתונים/ │ └── chunk-000/ │ ├── פרק_000000.פרקט # joint states + actions, one row per timestep │ ├── episode_000001.פרקט │ └── ... └── סרטונים/ └── chunk-000/ ├── observation.images.cam_high/ │ ├── episode_000000.mp4 # camera feed, one file per episode │ └── ... └── observation.images.cam_wrist/ └── ...

הפיצול בין Parquet (לסדרות זמן מספריות) ל-MP4 (עבור וידאו) הוא מכוון. פרקט דוחס מצבים ופעולות מפרקים ביעילות ותומך בגישה אקראית מהירה לפי אינדקס פרק. MP4 משתמש ב-codec וידאו המיועדים לרצפי תמונות, ומניב קבצים קטנים פי 10-30 מאשר אחסון תמונות גולמיות כטנסור.

שדות מפתח בכל פרק

שָׂדֶה צוּרָה תֵאוּר
תצפית.מצב[ת, ד]עמדות משותפות (ואופציונלי מהירויות) בכל צעד זמן. D הוא מספר המפרקים (למשל, 7 עבור SO-100: 6 מפרקים + תפסן אחד).
פְּעוּלָה[ת, ד]כוון לתפקידים משותפים שנפקדו בכל שלב בזמן. אותה ממדיות כמו תצפית.מצב.
חותמת זמן[T]זמן בשניות מאז תחילת הפרק, ב-50Hz כברירת מחדל (0.02 שניות לכל צעד).
episode_indexסקלריאינדקס מספר שלם של פרק זה בתוך מערך הנתונים. משמש על ידי טוען הנתונים לקיבוץ שלבי זמן לפרקים.
frame_index[T]מספר פריים בתוך הפרק (0 עד T-1). מתאים למספר המסגרת ב-MP4 המתאים.
הבא.בוצע[T]דגל בוליאני - נכון בשלב הזמן האחרון של פרק. משמש לאותת גבולות פרק במהלך אימון.
task_indexסקלריאינדקס לתוך tasks.jsonl. מאפשר מערכי נתונים מרובי משימות שבהם פרקים שונים תואמים להוראות שונות.
שדות מצלמה: תמונות המצלמה נשמרות כקבצי MP4, לא בפרקט. הפרקט מכיל observation.images.cam_high כהפניה לנתיב (אינדקס מסגרת + אינדקס פרק) במקום נתוני פיקסל גולמיים. טוען הנתונים של LeRobot מטפל בפענוח ובסנכרון בשקיפות.

טען ודמיין מערך נתונים קיים

טען את lerobot-raw/aloha_sim_insertion_scripted מערך נתונים מ- HuggingFace Hub והצג 3 פרקים. מערך נתונים זה מכיל הדגמות תסריטאיות של רובוט דו-מנוי המכניס יתד - דוגמה נקייה לאיך נראה מערך נתונים מובנה היטב.

מקור ~/lerobot-env/bin/activate # Visualize 3 episodes from a public dataset python -m lerobot.scripts.visualize_dataset \ --repo-id lerobot-raw/aloha_sim_insertion_scripted \ --פרק-מדדים 0 1 2 \ --output-dir ~/dataset-viz/ # Open the generated HTML in your browser # File path printed to terminal, e.g. ~/dataset-viz/index.html

הוויזואליזר מייצר דף HTML עם השמעת וידאו של כל פרק לצד עלילות מצב משותף מסונכרנות. לְחַפֵּשׂ:

  • מסלולי מפרקים חלקים - קוצים חדים מצביעים על חפצי תיעוד או התרסקות זרוע
  • אורך פרק עקבי - פרקים שאורכם משתנים מאוד (לדוגמה, 50 לעומת 400 פריימים) מצביעים לעתים קרובות על הדגמות מסוימות שנתפסו בתנועות חלקיות או ביטול
  • מצב התפסן משתנה - הממד המשותף האחרון צריך להראות מעברים בינאריים ברורים (פתוח → סגור → פתוח) עבור משימות מניפולציה
# Inspect the dataset programmatically m-lerobot.common.datasets.lerobot_dataset ייבוא ​​LeRobotDataset dataset = LeRobotDataset("lerobot-raw/aloha_sim_insertion_scripted") print(f"פרקים: {dataset.num_episodes}") print(f"סך מסגרות: {len(dataset)}") {:sature print"f"set.pset") # Inspect a single frame מסגרת = מערך נתונים[0] print(f"צורת מצב: {frame['observation.state'].shape}") print(f"צורת פעולה: {frame['action'].shape}")
אופציונלי - מערכי נתונים

חקור את אוסף ערכות הנתונים של SVRC

ספריית הנתונים של SVRC כוללת מערכי נתונים של לימוד רובוטים בפורמט LeRobot. עיין בהם כדי להבין כיצד נראות משימות וחומרה שונות לפני הקלטת משלך. עיין במערכי נתונים ←

יחידה 2 השלם כאשר...

ראית בהצלחה 3 פרקים מתוך lerobot-raw/aloha_sim_insertion_scripted ופלט ה-HTML נפתח בדפדפן שלך. אתה יכול לזהות את השדות observation.state, action ו-timestamp בקובץ Parquet שנטען עם Python. אתה מבין את ההבדל בין מה שמאוחסן בפרקט לעומת MP4. אתה מוכן להקליט את מערך הנתונים שלך ביחידה 3.