ليرة تركية؛ د اليوم نطلق سراحنا LeRobotDataset:v3! في سابقتنا LeRobotDataset:v2 عند الإصدار، قمنا بتخزين حلقة واحدة لكل ملف، مما أدى إلى تجاوز قيود نظام الملفات عند توسيع نطاق مجموعات البيانات إلى ملايين الحلقات. LeRobotDataset:v3 يحزم حلقات متعددة في ملف واحد، باستخدام بيانات التعريف العلائقية لاسترداد المعلومات على مستوى الحلقة الفردية من ملفات متعددة الحلقات. يدعم التنسيق الجديد أيضًا الوصول إلى مجموعات البيانات في وضع الدفق، مما يسمح بمعالجة مجموعات البيانات الكبيرة بسرعة. نحن نقدم أداة أحادية الخط لتحويل جميع مجموعات البيانات في تنسيق LeRobotDataset إلى التنسيق الجديد، ونحن متحمسون جدًا لمشاركة هذا الإنجاز مع المجتمع قبل إصدارنا المستقر التالي!

جدول المحتويات

ليروبوت داتاسيت، v3.0

LeRobotDataset هو تنسيق موحد لمجموعة بيانات مصمم لتلبية الاحتياجات المحددة لتعلم الروبوتات، ويوفر وصولاً موحدًا ومريحًا إلى بيانات الروبوتات عبر الأساليب، بما في ذلك القراءات الحسية الحركية وخلاصات الكاميرا المتعددة وحالة التشغيل عن بعد. يقوم تنسيق مجموعة البيانات لدينا أيضًا بتخزين معلومات عامة تتعلق بالطريقة التي يتم بها جمع البيانات (البيانات الوصفية)، بما في ذلك الوصف النصي للمهمة التي يتم تنفيذها، ونوع الروبوت المستخدم وتفاصيل القياس مثل الإطارات في الثانية التي يتم من خلالها أخذ عينات من تدفقات حالة الصورة والروبوت. تعد البيانات التعريفية مفيدة للفهرسة والبحث عبر مجموعات بيانات الروبوتات على Hugging Face Hub!

داخل lerobot، مكتبة الروبوتات التي نقوم بتطويرها في Hugging Face، LeRobotDataset يوفر واجهة موحدة للعمل مع بيانات السلاسل الزمنية متعددة الوسائط، ويتكامل بسلاسة مع النظامين البيئيين Hugging Face وPytorch. تم تصميم تنسيق مجموعة البيانات ليكون قابلاً للتوسعة والتخصيص بسهولة، ويدعم بالفعل مجموعات البيانات المتاحة بشكل مفتوح من مجموعة واسعة من النماذج – بما في ذلك منصات المعالجة مثل أذرع SO-100 وإعداد ALOHA-2، وبيانات الروبوت الواقعية، ومجموعات بيانات المحاكاة، وحتى بيانات السيارة ذاتية القيادة! يمكنك استكشاف مجموعات البيانات الحالية التي ساهم بها المجتمع باستخدام مصور مجموعة البيانات! 🔗

إلى جانب الحجم، هذا الإصدار الجديد من LeRobotDataset كما يتيح الدعم ل جاري وظيفة تسمح بمعالجة دفعات من البيانات من مجموعات كبيرة من البيانات بسرعة، دون الحاجة إلى تنزيل مجموعات كبيرة من البيانات على القرص. يمكنك الوصول إلى أي مجموعة بيانات واستخدامها في v3.0 في وضع البث باستخدام المخصص StreamingLeRobotDataset واجهة! يعد تدفق مجموعات البيانات علامة فارقة رئيسية نحو تعلم الروبوتات الذي يسهل الوصول إليه، ونحن متحمسون لمشاركتها مع المجتمع 🤗

من مجموعات البيانات المستندة إلى الحلقات إلى مجموعات البيانات المستندة إلى الملفات
StreamingLeRobotDataset
نحن نقوم بتمكين تدفق مجموعة البيانات مباشرة من Hugging Face Hub للمعالجة السريعة.

ثَبَّتَ lerobot، وتسجيل مجموعة البيانات

lerobot هي مكتبة الروبوتات الشاملة التي تم تطويرها في Hugging Face، وتدعم الروبوتات في العالم الحقيقي بالإضافة إلى أحدث خوارزميات تعلم الروبوت. تسمح المكتبة بتسجيل مجموعات البيانات محليًا مباشرة على روبوتات العالم الحقيقي، وتخزين مجموعات البيانات على Hugging Face Hub. يمكنك قراءة المزيد عن الروبوتات التي ندعمها حاليًا هنا!

LeRobotDataset:v3 سيكون جزءًا من lerobot المكتبة تبدأ من lerobot-v0.4.0، ونحن متحمسون جدًا لمشاركتها مبكرًا مع المجتمع. يمكنك تثبيت الأحدث lerobot-v0.3.x دعم تنسيق مجموعة البيانات الجديد هذا مباشرة من PyPI باستخدام:

pip install "https://github.com/huggingface/lerobot/archive/33cad37054c2b594ceba57463e8f11ee374fa93c.zip"  

تابع تقدم المجتمع نحو إصدار مستقر للمكتبة هنا 🤗

بمجرد تثبيت إصدار lerobot الذي يدعم تنسيق مجموعة البيانات الجديد، يمكنك تسجيل مجموعة بيانات باستخدام ذراع الروبوت المميز لدينا، SO-101، باستخدام التشغيل عن بعد جنبًا إلى جنب مع التعليمات التالية:

lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem585A0076841 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.num_episodes=5 \
    --dataset.single_task="Grab the black cube"

توجه إلى الوثائق الرسمية لمعرفة كيفية تسجيل مجموعة بيانات لحالة الاستخدام الخاصة بك.

خيار التصميم الأساسي وراء LeRobotDataset يفصل تخزين البيانات الأساسي عن واجهة برمجة التطبيقات التي تواجه المستخدم. يتيح ذلك إجراء تسلسل وتخزين فعالين أثناء تقديم البيانات بتنسيق بديهي وجاهز للاستخدام. يتم تنظيم مجموعات البيانات في ثلاثة مكونات رئيسية:

  1. البيانات الجدولية: يتم تخزين البيانات منخفضة الأبعاد وعالية التردد مثل الحالات المشتركة والإجراءات في ملفات Apache Parquet الفعالة، وعادةً ما يتم تفريغها إلى الملفات الأكثر نضجًا datasets المكتبة، مما يوفر وصولاً سريعًا ومعينًا للذاكرة أو وصولًا قائمًا على البث.
  2. البيانات المرئية: للتعامل مع كميات كبيرة من بيانات الكاميرا، يتم تجميع الإطارات وترميزها في ملفات MP4. يتم دائمًا تجميع الإطارات من نفس الحلقة معًا في نفس الفيديو، ويتم تجميع مقاطع فيديو متعددة معًا بواسطة الكاميرا. لتقليل الضغط على نظام الملفات، يتم أيضًا تقسيم مجموعات مقاطع الفيديو لنفس عرض الكاميرا إلى أدلة فرعية متعددة.
  3. البيانات الوصفية: مجموعة من ملفات JSON التي تصف بنية مجموعة البيانات من حيث البيانات الوصفية الخاصة بها، وتعمل كنظير علائقي لكل من الأبعاد الجدولية والمرئية للبيانات. تتضمن البيانات التعريفية مخططات الميزات المختلفة ومعدلات الإطارات وإحصائيات التسوية وحدود الحلقة.

لدعم مجموعات البيانات التي تحتوي على ملايين الحلقات المحتملة (مما يؤدي إلى مئات الملايين/المليارات من الإطارات الفردية)، نقوم بدمج البيانات من حلقات مختلفة في نفس البنية عالية المستوى. ويعني هذا بشكل ملموس أن أي مجموعة جدولية وفيديو معين لن يحتوي على معلومات حول حلقة واحدة فقط، بل سلسلة من المعلومات المتوفرة في حلقات متعددة. وهذا يجعل الضغط على نظام الملفات قابلاً للإدارة، محليًا وعلى موفري التخزين عن بعد مثل Hugging Face. يمكننا بعد ذلك الاستفادة من البيانات الوصفية لجمع معلومات خاصة بالحلقة، على سبيل المثال، الطابع الزمني الذي تبدأ به حلقة معينة أو تنتهي في مقطع فيديو معين.

يتم تنظيم مجموعات البيانات كمستودعات تحتوي على:

  • meta/info.json: هذا هو ملف البيانات الوصفية المركزي. أنه يحتوي على مخطط مجموعة البيانات الكاملة، وتحديد كافة الميزات (على سبيل المثال، observation.state, action) وأشكالها وأنواع البيانات. كما أنه يخزن معلومات مهمة مثل إطارات مجموعة البيانات في الثانية (fps)، وإصدار قاعدة التعليمات البرمجية، وقوالب المسار المستخدمة لتحديد موقع ملفات البيانات والفيديو.
  • meta/stats.json: يقوم هذا الملف بتخزين الإحصائيات المجمعة (المتوسط، القياسي، الأدنى، الأقصى) لكل ميزة عبر مجموعة البيانات بأكملها. يتم استخدامها لتطبيع البيانات ويمكن الوصول إليها عبر dataset.meta.stats.
  • meta/tasks.jsonl: يحتوي على التعيين من أوصاف المهام باللغة الطبيعية إلى مؤشرات المهام ذات الأعداد الصحيحة، والتي تُستخدم للتدريب على السياسات المشروطة بالمهمة.
  • meta/episodes/: يحتوي هذا الدليل على بيانات وصفية حول كل حلقة على حدة، مثل طولها والمهمة المقابلة لها ومؤشرات إلى مكان تخزين بياناتها. من أجل قابلية التوسع، يتم تخزين هذه المعلومات في ملفات Parquet مقسمة بدلاً من ملف JSON كبير واحد.
  • data/: يحتوي على البيانات الجدولية الأساسية إطارًا بإطار في ملفات Parquet. لتحسين الأداء والتعامل مع مجموعات البيانات الكبيرة، يجب استخدام البيانات من يتم تجميع حلقات متعددة في ملفات أكبر. يتم تنظيم هذه الملفات في أدلة فرعية مقسمة لإبقاء أحجام الملفات قابلة للإدارة. لذلك، عادةً ما يحتوي الملف الواحد على بيانات لأكثر من حلقة واحدة.
  • videos/: يحتوي على ملفات فيديو MP4 لجميع تدفقات المراقبة المرئية. مماثلة ل data/ الدليل، لقطات فيديو من يتم تجميع حلقات متعددة في ملفات MP4 واحدة. تقلل هذه الإستراتيجية بشكل كبير من عدد الملفات في مجموعة البيانات، وهو أكثر كفاءة لأنظمة الملفات الحديثة. بنية المسار (/videos/<camera_key>/<chunk>/file_...mp4) يسمح لمحمل البيانات بتحديد موقع ملف الفيديو الصحيح ثم البحث عن الطابع الزمني الدقيق لإطار معين.

ترحيل الخاص بك v2.1 مجموعة البيانات إلى v3.0

LeRobotDataset:v3.0 سيتم الافراج مع lerobot-v0.4.0، إلى جانب إمكانية تحويل أي مجموعة بيانات مستضافة حاليًا على Hugging Face Hub بسهولة إلى المجموعة الجديدة v3.0 استخدام:

python -m lerobot.datasets.v30.convert_dataset_v21_to_v30--repo-id=<HFUSER/DATASET_ID>

نحن متحمسون جدًا لمشاركة هذا التنسيق الجديد مبكرًا مع المجتمع! بينما نتطور lerobot-v0.4.0، لا يزال بإمكانك تحويل مجموعة البيانات الخاصة بك إلى الإصدار المحدث حديثًا باستخدام الإصدار الأحدث lerobot-v0.3.x دعم تنسيق مجموعة البيانات الجديد هذا مباشرة من PyPI باستخدام:

pip install "https://github.com/huggingface/lerobot/archive/33cad37054c2b594ceba57463e8f11ee374fa93c.zip"  
python -m lerobot.datasets.v30.convert_dataset_v21_to_v30 --repo-id=<HFUSER/DATASET_ID>

لاحظ أن هذا إصدار ما قبل النشر، وهو إصدار غير مستقر بشكل عام. يمكنك متابعة حالة تطوير إصدارنا المستقر التالي هنا!

البرنامج النصي للتحويل convert_dataset_v21_to_v30.py يجمع حلقات متعددة episode-0000.mp4, episode-0001.mp4, episode-0002.mp4, .../episode-0000.parquet, episode-0001.parquet, episode-0002.parquet, episode-0003.parquet, ... في ملفات واحدة file-0000.mp4/file-0000.parquet، ويقوم بتحديث البيانات الوصفية وفقًا لذلك، لتتمكن من استرداد المعلومات الخاصة بالحلقة من الملفات ذات المستوى الأعلى.

مثال التعليمات البرمجية: استخدام LeRobotDataset مع torch.utils.data.DataLoader

تحتوي كل مجموعة بيانات في Hugging Face Hub على الركائز الثلاث الرئيسية المذكورة أعلاه (البيانات الجدولية والمرئية، بالإضافة إلى البيانات الوصفية العلائقية)، ويمكن الوصول إليها من خلال سطر واحد.

تميل معظم خوارزميات تعلم الروبوتات، القائمة على التعلم المعزز (RL) أو الاستنساخ السلوكي (BC)، إلى العمل بناءً على مجموعة من الملاحظات والإجراءات. على سبيل المثال، تستخدم خوارزميات RL عادةً تاريخًا من الملاحظات السابقة o_{t-H_o:t}وبدلاً من ذلك، يتم تدريب خوارزميات BC عادةً على التراجع عن أجزاء من الإجراءات المتعددة. لاستيعاب تفاصيل التدريب على تعلم الروبوت، LeRobotDataset يوفر عملية تشغيل النوافذ الأصلية، حيث يمكننا استخدام ثواني قبل وبعد أي ملاحظة معينة باستخدام أ delta_timestamps دعوى.

مريح، باستخدام LeRobotDataset مع باي تورش DataLoader يمكن للمرء أن يجمع تلقائيًا قواميس العينات الفردية من مجموعة البيانات في قاموس واحد للموترات المجمعة.

from lerobot.datasets.lerobot_dataset import LeRobotDataset

repo_id = "yaak-ai/L2D-v3"


dataset = LeRobotDataset(repo_id)


sample = dataset[100]
print(sample)








delta_timestamps = {
    "observation.images.front_left": [-0.2, -0.1, 0.0]  
}
dataset = LeRobotDataset(
    repo_id
    delta_timestamps=delta_timestamps
)


sample = dataset[100]



print(sample['observation.images.front_left'].shape)

batch_size=16

data_loader = torch.utils.data.DataLoader(
    dataset,
    batch_size=batch_size
)


num_epochs = 1
device = "cuda" if torch.cuda.is_available() else "cpu"

for epoch in range(num_epochs):
    for batch in data_loader:
        
        

        
        

        
        observations = batch['observation.state.vehicle'].to(device)
        actions = batch['action.continuous'].to(device)
        images = batch['observation.images.front_left'].to(device)

        
        ...

جاري

يمكنك أيضًا استخدام أي مجموعة بيانات في v3.0 التنسيق في وضع الدفق، دون الحاجة إلى تنزيله محليًا، باستخدام ملف StreamingLeRobotDataset فصل.

from lerobot.datasets.streaming_dataset import StreamingLeRobotDataset

repo_id = "yaak-ai/L2D-v3"
dataset = StreamingLeRobotDataset(repo_id)

خاتمة

LeRobotDataset v3.0 يعد بمثابة نقطة انطلاق نحو توسيع نطاق مجموعات بيانات الروبوتات المدعومة في LeRobot. من خلال توفير تنسيق لتخزين مجموعات كبيرة من بيانات الروبوت والوصول إليها، فإننا نحرز تقدمًا نحو إضفاء الطابع الديمقراطي على الروبوتات، مما يسمح للمجتمع بالتدريب على ملايين الحلقات دون الحاجة حتى إلى تنزيل البيانات نفسها!

يمكنك تجربة تنسيق مجموعة البيانات الجديد عن طريق تثبيت الإصدار الأحدث lerobot-v0.3.x، وشارك أي تعليقات على GitHub أو على خادم Discord الخاص بنا! 🤗

شكر وتقدير

نشكر فريق yaak.ai الرائع على دعمهم الثمين وملاحظاتهم أثناء تطوير LeRobotDataset:v3. انطلق وتابع منظمتهم على Hugging Face Hub! نحن نتطلع دائمًا إلى التعاون مع المجتمع ومشاركة الميزات المبكرة. تواصل معنا إذا كنت ترغب في التعاون 😊

شاركها.
اترك تعليقاً