एक मानक प्रारूप क्यों मायने रखता है

हर प्रयोगशाला में अलग-अलग डेटा प्रारूप का उपयोग करने से रोबोट सीखना ऐतिहासिक रूप से प्रभावित हुआ है - जिससे डेटासेट साझा करना, विभिन्न रोबोटों से डेटा को संयोजित करना, या सिस्टम में पूर्व-प्रशिक्षित नीतियों का उपयोग करना असंभव हो गया है। लेरोबोट डेटासेट प्रारूप एक एकल स्कीमा को परिभाषित करके इसे हल करता है जो सभी समर्थित हार्डवेयर पर काम करता है। SO-100 पर रिकॉर्ड किए गए डेटासेट का उपयोग बिना किसी रूपांतरण के ओपनआर्म के लिए नीति को प्रशिक्षित करने के लिए किया जा सकता है - जब तक कि एक्शन स्पेस आयाम मेल खाते हैं।

रिकॉर्ड करने से पहले प्रारूप को समझने का मतलब है कि आपको प्रशिक्षण के दौरान अपने डेटा में कोई संरचनात्मक समस्या नहीं मिलेगी। यह डिबगिंग को भी बहुत आसान बना देता है: जब प्रशिक्षण विफल हो जाता है, तो सबसे पहले देखने का स्थान डेटासेट होता है।

डेटासेट संरचना: लकड़ी की छत + MP4

प्रत्येक LeRobot डेटासेट इस संरचना के साथ एक निर्देशिका में रहता है:

मेरा_डेटासेट/ ├── मेटा/ │ ├── info.json # dataset metadata (robot type, fps, modalities) │ ├── कार्य.jsonl # task description per episode │ └── आँकड़े.सुरक्षा सेंसर # mean/std for normalization ├── डेटा/ │ └── चंक-000/ │ ├── एपिसोड_000000.parquet # joint states + actions, one row per timestep │ ├── एपिसोड_000001.parquet │ └── ... └── वीडियो/ └── हिस्सा-000/ ├── अवलोकन.images.cam_high/ │ ├── एपिसोड_000000.mp4 # camera feed, one file per episode │ └── ... └── अवलोकन.images.cam_wrist/ └── ...

Parquet (संख्यात्मक समय-श्रृंखला के लिए) और MP4 (वीडियो के लिए) के बीच विभाजन जानबूझकर किया गया है। Parquet संयुक्त अवस्थाओं और क्रियाओं को कुशलतापूर्वक संपीड़ित करता है और एपिसोड इंडेक्स द्वारा तेज़ यादृच्छिक पहुंच का समर्थन करता है। MP4 छवि अनुक्रमों के लिए डिज़ाइन किए गए वीडियो कोडेक्स का उपयोग करता है, जो कच्ची छवियों को टेंसर के रूप में संग्रहीत करने की तुलना में 10-30x छोटी फ़ाइलें प्रदान करता है।

प्रत्येक एपिसोड में मुख्य फ़ील्ड

मैदान आकार विवरण
अवलोकन.स्थिति[टी, डी]प्रत्येक टाइमस्टेप पर संयुक्त स्थिति (और वैकल्पिक रूप से वेग)। डी जोड़ों की संख्या है (उदाहरण के लिए, एसओ-100 के लिए 7: 6 जोड़ + 1 ग्रिपर)।
कार्रवाई[टी, डी]प्रत्येक समय-चरण पर लक्षित संयुक्त स्थितियों का आदेश दिया गया। अवलोकन.अवस्था के समान आयामीता।
TIMESTAMP[टी]एपिसोड की शुरुआत से सेकंड में समय, डिफ़ॉल्ट रूप से 50 हर्ट्ज (0.02 सेकंड प्रति चरण)।
एपिसोड_इंडेक्सअदिशडेटासेट के भीतर इस एपिसोड का पूर्णांक सूचकांक। डेटालोडर द्वारा टाइमस्टेप्स को एपिसोड में समूहित करने के लिए उपयोग किया जाता है।
फ़्रेम_सूचकांक[टी]एपिसोड के भीतर फ़्रेम संख्या (0 से टी-1)। संबंधित MP4 में फ़्रेम संख्या से मेल खाता है।
अगला.किया[टी]बूलियन ध्वज - एपिसोड के अंतिम समय पर सत्य। प्रशिक्षण के दौरान एपिसोड की सीमाओं का संकेत देने के लिए उपयोग किया जाता है।
कार्य_सूचकांकअदिशकार्यों में अनुक्रमणिका.jsonl. बहु-कार्य डेटासेट को सक्षम करता है जहां अलग-अलग एपिसोड अलग-अलग निर्देशों के अनुरूप होते हैं।
कैमरा फ़ील्ड: कैमरा छवियाँ MP4 फ़ाइलों के रूप में संग्रहीत की जाती हैं, न कि Parquet में। लकड़ी की छत में शामिल हैं observation.images.cam_high कच्चे पिक्सेल डेटा के बजाय पथ संदर्भ (फ़्रेम इंडेक्स + एपिसोड इंडेक्स) के रूप में। LeRobot डेटालोडर डिकोड और सिंक को पारदर्शी तरीके से संभालता है।

मौजूदा डेटासेट को लोड करें और विज़ुअलाइज़ करें

लोड करें lerobot-raw/aloha_sim_insertion_scripted हगिंगफेस हब से डेटासेट और 3 एपिसोड की कल्पना करें। इस डेटासेट में एक द्वि-मैनुअल रोबोट द्वारा खूंटी डालने का स्क्रिप्टेड प्रदर्शन शामिल है - एक अच्छी तरह से संरचित डेटासेट कैसा दिखता है इसका एक स्पष्ट उदाहरण।

स्रोत ~/लेरोबोट-एनवी/बिन/सक्रिय करें # Visualize 3 episodes from a public dataset पायथन -एम लेरोबोट.स्क्रिप्ट्स.विज़ुअलाइज़_डेटासेट \ --रेपो-आईडी लेरोबोट-रॉ/अलोहा_सिम_इंसर्शन_स्क्रिप्टेड \ --एपिसोड-सूचकांक 0 1 2 \ --आउटपुट-डीआईआर ~/डेटासेट-विज़/ # 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 Lerobot.common.datasets.lerobot_dataset से LeRobotDataset आयात करें डेटासेट = LeRobotDataset("lerobot-raw/aloha_sim_insertion_scripted") प्रिंट(f"एपिसोड: {dataset.num_episodes}") प्रिंट करें (f"कुल फ़्रेम: {len(डेटासेट)}") प्रिंट(एफ"एफपीएस: {डेटासेट.एफपीएस}") प्रिंट(f"विशेषताएं: {सूची(dataset.features.keys())}") # Inspect a single frame फ़्रेम = डेटासेट[0] प्रिंट(f"स्टेट आकार: {frame['observation.state'].shape}") प्रिंट(f"क्रिया आकार: {frame['क्रिया'].आकार}")
वैकल्पिक - संदर्भ डेटासेट

एसवीआरसी डेटासेट संग्रह का अन्वेषण करें

एसवीआरसी डेटासेट लाइब्रेरी में लेरोबोट प्रारूप में क्यूरेटेड रोबोट लर्निंग डेटासेट शामिल हैं। अपना स्वयं का रिकॉर्ड करने से पहले यह समझने के लिए उन्हें ब्राउज़ करें कि विभिन्न कार्य और हार्डवेयर कैसे दिखते हैं। डेटासेट ब्राउज़ करें →

इकाई 2 पूर्ण जब...

आपने 3 एपिसोड की सफलतापूर्वक कल्पना की है lerobot-raw/aloha_sim_insertion_scripted और HTML आउटपुट आपके ब्राउज़र में खुल जाता है। आप पायथन से लोड की गई Parquet फ़ाइल में अवलोकन.स्थिति, क्रिया और टाइमस्टैम्प फ़ील्ड की पहचान कर सकते हैं। आप Parquet बनाम MP4 में संग्रहीत सामग्री के बीच अंतर को समझते हैं। आप इकाई 3 में अपना स्वयं का डेटासेट रिकॉर्ड करने के लिए तैयार हैं।