هذه مشاركة مدونة ضيف بواسطة فريق Pollen Robotics. نحن منشئو Reachy، وهو روبوت بشري مفتوح المصدر مصمم للتلاعب في العالم الحقيقي.
في سياق السلوكيات المستقلة، يكمن جوهر قابلية استخدام الروبوت في قدرته على الفهم والتفاعل مع بيئته. هذا الفهم يأتي في المقام الأول من الإدراك البصريوالتي تمكن الروبوتات من التعرف على الأشياء، والتعرف على الأشخاص، والتنقل في المساحات، وغير ذلك الكثير.
نحن متحمسون لمشاركة الإطلاق الأولي لمصدرنا المفتوح pollen-vision المكتبة، وهي خطوة أولى نحو تمكين الروبوتات لدينا بالاستقلالية في الإمساك بالأشياء غير المعروفة. هذه المكتبة عبارة عن مجموعة منسقة بعناية من نماذج الرؤية المختارة لقابليتها للتطبيق المباشر على الروبوتات. Pollen-vision تم تصميمه لسهولة التثبيت والاستخدام، ويتكون من وحدات مستقلة يمكن دمجها لإنشاء خط أنابيب للكشف عن الكائنات ثلاثية الأبعاد، والحصول على موضع الكائنات في الفضاء ثلاثي الأبعاد (x، y، z).
لقد ركزنا على اختيار نماذج صفرية، مما يلغي الحاجة إلى أي تدريب، ويجعل هذه الأدوات قابلة للاستخدام على الفور بمجرد إخراجها من الصندوق.
يركز إصدارنا الأولي على الكشف عن الكائنات ثلاثية الأبعاد، مما يضع الأساس لمهام مثل الإمساك الآلي من خلال توفير تقدير موثوق للإحداثيات المكانية للأشياء. تقتصر هذه الوظيفة حاليًا على تحديد المواقع داخل مساحة ثلاثية الأبعاد (لا تمتد إلى التقدير الكامل للوضعية السداسية الأبعاد)، وتضع أساسًا متينًا لمهام المعالجة الآلية الأساسية.
النماذج الأساسية لرؤية حبوب اللقاح
تحتوي المكتبة على عدة نماذج رئيسية. نريد أن تكون النماذج التي نستخدمها خالية من الطلقات ومتعددة الاستخدامات، مما يسمح بمجموعة واسعة من الكائنات القابلة للاكتشاف دون إعادة التدريب. يجب أن تكون النماذج أيضًا “قادرة على العمل في الوقت الفعلي”، مما يعني أنها يجب أن تعمل على الأقل بمعدل بضعة إطارات في الثانية على وحدة معالجة الرسومات الخاصة بالمستهلك. النماذج الأولى التي اخترناها هي:
- OWL-VIT (تعريب العالم المفتوح – محول الرؤية، بواسطة أبحاث Google): يقوم هذا النموذج بتنفيذ تعريب كائن ثنائي الأبعاد بدون لقطة مشروط بالنص في صور RGB. يقوم بإخراج الصناديق المحيطة (مثل YOLO)
- Mobile Sam: نسخة خفيفة الوزن من Segment Anything Model (SAM) بواسطة Meta AI. SAM هو نموذج لتجزئة الصور بدون لقطة. يمكن المطالبة به باستخدام المربعات أو النقاط المحيطة.
- ذاكرة الوصول العشوائي (نموذج التعرف على أي شيء من معهد أبحاث OPPO): مصممة لوضع علامات على الصور بدون لقطة، يمكن لذاكرة الوصول العشوائي (RAM) تحديد وجود كائن في الصورة بناءً على الأوصاف النصية، مما يضع الأساس لمزيد من التحليل.
ابدأ باستخدام أسطر قليلة جدًا من التعليمات البرمجية!
فيما يلي مثال لكيفية استخدام Pollen-Vision لإنشاء مسار بسيط للكشف عن الكائنات وتقسيمها، مع أخذ الصور والنصوص فقط كمدخلات.
from pollen_vision.vision_models.object_detection import OwlVitWrapper
from pollen_vision.vision_models.object_segmentation import MobileSamWrapper
from pollen_vision.vision_models.utils import Annotator, get_bboxes
owl = OwlVitWrapper()
sam = MobileSamWrapper()
annotator = Annotator()
im = ...
predictions = owl.infer(im, ["paper cups"])
bboxes = get_bboxes(predictions)
masks = sam.infer(im, bboxes=bboxes)
annotated_im = annotator.annotate(im, predictions, masks=masks)
يعتمد وقت استنتاج OWL-VIT على عدد المطالبات المقدمة (أي عدد الكائنات المطلوب اكتشافها). على كمبيوتر محمول مزود بوحدة معالجة الرسومات RTX 3070:
1 prompt : ~75ms per frame
2 prompts : ~130ms per frame
3 prompts : ~180ms per frame
4 prompts : ~240ms per frame
5 prompts : ~330ms per frame
10 prompts : ~650ms per frame
لذا فمن المثير للاهتمام، من حيث الأداء، أن نطالب OWL-VIT فقط بالأشياء التي نعرف أنها موجودة في الصورة. وهنا تكون ذاكرة الوصول العشوائي (RAM) مفيدة، لأنها سريعة وتوفر هذه المعلومات بالضبط.
حالة استخدام الروبوتات: استيعاب الأشياء غير المعروفة في بيئات غير مقيدة
باستخدام قناع تجزئة الكائن، يمكننا تقدير موضعه (u، v) في مساحة البكسل عن طريق حساب النقطه الوسطى للقناع الثنائي. هنا، يعد وجود قناع التجزئة مفيدًا جدًا لأنه يسمح لنا بحساب متوسط قيم العمق داخل القناع بدلاً من داخل المربع المحيط الكامل، والذي يحتوي أيضًا على خلفية من شأنها أن تحرف المتوسط.
إحدى الطرق للقيام بذلك هي عن طريق حساب متوسط إحداثيات u وv للبكسلات غير الصفرية في القناع
def get_centroid(mask):
x_center, y_center = np.argwhere(mask == 1).sum(0) / np.count_nonzero(mask)
return int(y_center), int(x_center)
يمكننا الآن تقديم معلومات متعمقة لتقدير الإحداثيات z للكائن. قيم العمق موجودة بالفعل بالأمتار، ولكن يتم التعبير عن الإحداثيات (u، v) بالبكسل. يمكننا الحصول على موضع (x، y، z) للنقطه الوسطى للكائن بالأمتار باستخدام المصفوفة الجوهرية للكاميرا (K)
def uv_to_xyz(z, u, v, K):
cx = K[0, 2]
cy = K[1, 2]
fx = K[0, 0]
fy = K[1, 1]
x = (u - cx) * z / fx
y = (v - cy) * z / fy
return np.array([x, y, z])
لدينا الآن تقدير للموضع ثلاثي الأبعاد للكائن في الإطار المرجعي للكاميرا.
إذا عرفنا مكان وضع الكاميرا بالنسبة للإطار الأصلي للروبوت، فيمكننا إجراء تحويل بسيط للحصول على الموضع ثلاثي الأبعاد للكائن في إطار الروبوت. هذا يعني أنه يمكننا تحريك المؤثر النهائي للروبوت الخاص بنا حيث يكون الجسم، وفهمه ! 🥳
ما هي الخطوة التالية؟
ما قدمناه في هذا المنشور هو الخطوة الأولى نحو هدفنا، وهو الإمساك المستقل للأشياء غير المعروفة في البرية. هناك بعض القضايا التي لا تزال بحاجة إلى معالجة:
- لا يكتشف OWL-Vit كل شيء في كل مرة ويمكن أن يكون غير متسق. نحن نبحث عن خيار أفضل.
- لا يوجد اتساق زماني أو مكاني حتى الآن. يتم إعادة حساب كل شيء في كل إطار
- نحن نعمل حاليًا على دمج حل تتبع النقاط لتعزيز اتساق الاكتشافات
- لم تكن تقنية الإمساك (القبضة الأمامية فقط في الوقت الحالي) هي محور هذا العمل. سنعمل على أساليب مختلفة لتعزيز قدرات الاستيعاب من حيث الإدراك (الكشف سداسي الأبعاد) وتوليد وضعية الإمساك.
- يمكن تحسين السرعة الإجمالية
جرب رؤية حبوب اللقاح
هل تريد تجربة رؤية حبوب اللقاح؟ تحقق من مستودع جيثب لدينا!