تصدير نماذج Ultralytics YOLO إلى Hailo#
تشغّل مسرّعات Hailo للذكاء الاصطناعي نماذج Hailo ذات التنسيق التنفيذي (HEF) المجمّعة على أجهزة الحافة، مثل AI HAT+ لجهاز Raspberry Pi وAI HAT+ 2. تصدّر Ultralytics نماذج YOLO للكشف، والتقسيم، والتقسيم الدلالي، وتقدير العمق، والتصنيف، وتقدير الوضعيات، والكشف عن الأجسام الموجّهة (OBB) مباشرةً إلى HEF باستخدام مترجم تدفق بيانات Hailo (DFC).
صُمّم نشر Hailo لرؤية الحاسوب على الحافة، مثل الكاميرات والروبوتات والأنظمة الصناعية والبوابات والأجهزة الأخرى التي تحتاج إلى كشف الأجسام محليًا من دون إرسال كل إطار إلى السحابة. يتضمن HEF المجمّع الشبكة المكمّمة، وتخصيص العتاد، والجدولة، ومعالجة HailoRT اللاحقة الاختيارية اللازمة للمسرّع المحدد.
لماذا تنشر Ultralytics YOLO على Hailo؟#
يوفّر الجمع بين Ultralytics YOLO ووحدة المعالجة العصبية (NPU) من Hailo مسارًا عمليًا من تدريب النموذج إلى استدلال الذكاء الاصطناعي على الحافة. تشمل حالات الاستخدام الشائعة ما يلي:
- الكاميرات الذكية وتحليلات الفيديو: شغّل كشف الأجسام في الوقت الفعلي بالقرب من الكاميرا لتطبيقات الأمن، والتجزئة، والمرور، والإشغال.
- الروبوتات والأنظمة الذاتية: اكشف الأشخاص والمركبات والطرود والأدوات أو العوائق من دون الاعتماد على اتصال سحابي مستمر.
- رؤية الحاسوب الصناعية: انشر نماذج YOLO مخصّصة للفحص، والعدّ، ومراقبة السلامة، وضبط الجودة.
- مشروعات Raspberry Pi للذكاء الاصطناعي: أضف استدلالًا سريعًا للرؤية إلى أنظمة Raspberry Pi باستخدام AI HAT+ أو AI HAT+ 2.
- بوابات الحافة وحواسيب الذكاء الاصطناعي: عالج تدفقات فيديو أو مستشعرات متعددة محليًا مع تقليل متطلبات النطاق الترددي والحوسبة السحابية.
يمكن للاستدلال المحلي تحسين الخصوصية وزمن الاستجابة، إذ تبقى الصور على جهاز النشر. ويعتمد معدل النقل الفعلي، وزمن الاستجابة، واستهلاك الطاقة على حجم نموذج YOLO، ودقة الإدخال، وبنية Hailo، والنظام المضيف، ومسار التطبيق.
كيف يعمل تصدير Hailo#
تتولى Ultralytics سير عمل التصدير الكامل وراء format="hailo":
YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compileينفّذ المُصدِّر المراحل التالية تلقائيًا:
- يصدّر رسمًا بيانيًا ثابتًا بتنسيق ONNX باستخدام إعدادات متوافقة مع المترجم.
- يحدّد مخرجات الرأس لبنية النموذج.
- ينشئ توجيهات التطبيع والتنشيط والمعالجة اللاحقة.
- ينشئ تدفق معايرة تمثيليًا ويكمّم النموذج إلى INT8.
- يجمّع الرسم البياني المحسّن للمسرّع المحدد من Hailo.
- يحفظ HEF مع بيانات Ultralytics الوصفية ويزيل ملف ONNX الوسيط.
تستخدم نماذج الكشف YOLOv8 وYOLO11 تقنية HailoRT YOLO NMS في المسار المجمّع. وتستخدم نماذج الكشف YOLO26 مخرجاتها واحدًا لواحد الخالية من NMS، لذلك يحدّد المُصدِّر مخرجًا ومسار تكميم مختلفين تلقائيًا. وتجمّع نماذج التقسيم والوضعيات وOBB في YOLOv8/YOLO11 موترات الرأس الخام، التي تفكّك Ultralytics ترميزها عند الاستدلال، بينما تُجري نماذج التصنيف YOLOv8/YOLO11/YOLO26 عملية softmax على الشريحة، بحيث يعيد HEF احتمالات الفئات مباشرةً. بالنسبة إلى التقسيم الدلالي في YOLO26، يتبع المُصدِّر المسرّع: إذ يعيد Hailo-8/8L (DFC v3.x) قيم logits الخاصة بالمصنّف لإجراء إعادة أخذ العينات والاختزال على المضيف، بينما تُجمّع Hailo-10H/15 (DFC v5.x) رؤوس ArgMax متعددة الفئات على الشريحة وتعيد خريطة فئات مدمجة. تستخدم الرؤوس أحادية الفئة مسار logits على المضيف في كل هدف، لأنها تتطلب عتبة بدلًا من ArgMax. وتجمّع نماذج العمق YOLO26 طبقة الالتفاف الكثيفة الخاصة بـlogit في a16، ثم تعيد بناء خريطة العمق المعيارية على المضيف (أي clamp/exp ومعايرة log-affine المتعلّمة التي تتبع الرأس)، ولذلك يحتفظ المُكمِّم بأوسع نطاق له على logit الخام. لا يحتاج المستخدمون إلى البحث عن عقد ONNX الطرفية، أو كتابة برنامج نصي لنموذج Hailo (.alls)، أو إنشاء JSON لـNMS يدويًا.
التثبيت#
ثبّت Ultralytics ونزّل حزمة DFC لعُدّة العتاد المستهدفة من منطقة مطوّري Hailo (يتطلب ذلك تسجيلًا مجانيًا):
pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whlيتطلب تجميع Hailo نظام Linux بمعمارية x86_64. جمّع النموذج على محطة عمل مدعومة، ثم انسخ دليل المخرجات إلى الجهاز المستهدف. لا يلزم DFC للاستدلال.
يستخدم Hailo-8 وHailo-8L الإصدار DFC v3.x. ويستخدم Hailo-10H وHailo-15 الإصدار DFC v5.x. ثبّت جيل المترجم المطابق للمسرّع المستهدف.
توفر منصة Ultralytics تصدير Hailo مُدارًا، لذلك لا يلزم وجود حساب Hailo محلي أو تثبيت DFC.
تصدير نموذج Hailo بصيغة HEF#
استخدم format="hailo" وحدّد المسرّع المستهدف باستخدام name:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output) # yolo11n_hailo_model/أمر CLI المكافئ هو:
yolo export model=yolo11n.pt format=hailo name=hailo8تصدير Hailo يقتصر على INT8. تنزّل Ultralytics تلقائيًا مجموعة بيانات معايرة خاصة بالمهمة عندما لا يتم توفير data. وبالنسبة إلى النماذج المخصّصة، استخدم صورًا تمثيلية من التدريب أو التحقق:
تفرض Ultralytics مستوى التحسين 2 في DFC وتضبط الضبط الدقيق لاستخدام الحجم الفعلي لمجموعة بيانات المعايرة. توصي Hailo باستخدام ما لا يقل عن 1,024 صورة متنوعة؛ إذ تُجمّع مجموعات البيانات الخفيفة المضمّنة بالمستوى 2، لكنها قد لا تمثّل مجال الإنتاج. ولتصدير HEF للإنتاج، مرّر مجموعة بيانات تمثيلية باستخدام data="path/to/dataset.yaml".
model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")يستخدم التجميع شكل إدخال ثابتًا. اضبط imgsz على الدقة المستخدمة على الجهاز:
model.export(format="hailo", name="hailo8", imgsz=640)النماذج والعتاد المدعومان#
يغطي نظام Hailo البيئي نطاقًا واسعًا من أعباء عمل رؤية الحاسوب، لكن مُصدِّر Ultralytics format="hailo" يتحقق حاليًا من رؤوس YOLO القياسية للكشف، والتقسيم، والتقسيم الدلالي، وتقدير العمق، والتصنيف، وتقدير الوضعيات، وOBB. يصف جدول المهام مسارات المُصدِّر المتاحة، بينما يرد التحقق من العتاد بشكل منفصل أدناه.
| مهمة Ultralytics | تصدير Hailo مباشر | عائلات النماذج المدعومة | ملاحظات |
|---|---|---|---|
| اكتشاف العناصر | ✅ | YOLOv8 وYOLO11 وYOLO26 | رؤوس Ultralytics القياسية Detect، بما في ذلك النماذج المخصّصة |
| تقسيم المثيلات | ✅ | YOLOv8 وYOLO11 | موترات الرأس الخام التي تفكّك Ultralytics ترميزها عند الاستدلال؛ لا يُدعم YOLO26-seg حاليًا |
| التقسيم الدلالي | ✅ | YOLO26 | يعيد Hailo-8/8L والرؤوس أحادية الفئة قيم logits؛ بينما يضمّن Hailo-10H/15 الخرائط متعددة الفئات |
| تقدير العمق | ✅ | YOLO26 | يُجمّع logit الكثيف في a16؛ وتعيد Ultralytics بناء خريطة العمق المعيارية عند الاستدلال |
| تصنيف الصور | ✅ | YOLOv8 وYOLO11 وYOLO26 | تُجرى عملية softmax على الشريحة؛ ويعيد HEF احتمالات الفئات مباشرةً |
| تقدير الوضعيات | ✅ | YOLOv8 وYOLO11 | موترات الرأس الخام التي تفكّك Ultralytics ترميزها عند الاستدلال؛ لا يُدعم YOLO26-pose حاليًا |
| الكشف عن الأجسام الموجّهة | ✅ | YOLOv8 وYOLO11 | موترات OBB الخام التي تفكّك Ultralytics ترميزها عند الاستدلال؛ لا يُدعم YOLO26-OBB حاليًا |
عائلات الكشف المتخصصة مثل YOLOv10 وYOLO-World وYOLOE وRT-DETR غير مدعومة حاليًا ❌ عبر مسار Ultralytics format="hailo". وترفض Ultralytics هذه المهام وعائلات النماذج قبل التجميع بدلًا من إنتاج HEF لم يتم التحقق منه.
| عائلة النموذج | Hailo-8 / Hailo-8L | Hailo-10H / Hailo-15 | المخرجات |
|---|---|---|---|
| كشف YOLOv8 / YOLO11 | ✅ | ✅ | HEF مع HailoRT YOLO NMS |
| كشف YOLO26 | ✅ | ✅ | مخرجات رأس الكشف الخالية من NMS لأوقات التشغيل المدعومة |
| YOLOv8-seg / YOLO11-seg | ✅ | ✅ | موترات التقسيم الخام التي تفكّك Ultralytics ترميزها عند الاستدلال |
| YOLOv8-pose / YOLO11-pose | تم التحقق من Hailo-8L | لم يتم التحقق | موترات الوضعيات الخام التي تفكّك Ultralytics ترميزها عند الاستدلال |
| YOLOv8-obb / YOLO11-obb | تم التحقق من Hailo-8L | لم يتم التحقق | موترات OBB الخام التي تفكّك Ultralytics ترميزها عند الاستدلال |
| YOLOv8-cls / YOLO11-cls / YOLO26-cls | تم التحقق من Hailo-8L | لم يتم التحقق | عملية softmax على الشريحة؛ يعيد HEF احتمالات الفئات |
| YOLO26-sem | تم التحقق من Hailo-8L | لم يتم التحقق | قيم logits، أو خريطة متعددة الفئات مضمّنة على Hailo-10H/15 |
| YOLO26-depth | تم التحقق من Hailo-8L | لم يتم التحقق | logit كثيف؛ تفكّك Ultralytics ترميز خريطة العمق المعيارية |
تم التحقق من الوضعيات وOBB والتصنيف والتقسيم الدلالي في YOLO26 وتقدير العمق في YOLO26 (مسار Hailo-8/8L) على Hailo-8L باستخدام HailoRT 4.23 وDFC 3.33. يقبل المُصدِّر الأهداف الأخرى المدرجة، لكن مسارات المهام الجديدة تلك تتطلب التحقق باستخدام المترجم والجهاز المطابقين قبل استخدامها في الإنتاج.
حدّد إحدى قيم name التالية:
name | المسرّع المستهدف |
|---|---|
hailo8 | Hailo-8 |
hailo8l | Hailo-8L |
hailo10h | Hailo-10H |
hailo15h | Hailo-15H |
hailo15l | Hailo-15L |
إذا لم يتم تحديد name، فسيُستخدم hailo8l كقيمة افتراضية؛ اضبط name على المسرّع الذي ستنشر عليه. ثبّت جيل DFC المطابق للهدف المحدد.
أجيال عتاد Hailo وSDK#
تستخدم عائلات مسرّعات Hailo أجيالًا مختلفة من المترجمات. يجب أن يطابق HEF المُنشأ العتاد المستهدف، لذا اختر name للجهاز الذي سيشغّل الاستدلال، وليس للجهاز الذي ينفّذ التصدير.
| عائلة العتاد | جيل DFC |
|---|---|
| Hailo-8 / Hailo-8L | DFC v3.x |
| Hailo-10H | DFC v5.x |
| Hailo-15H / Hailo-15L | DFC v5.x |
يعمل المترجم على Linux بمعمارية x86_64، بينما يعمل HEF الناتج على جهاز Hailo عبر HailoRT. يتيح هذا الفصل التجميع على محطة عمل أو في منصة Ultralytics، ثم نشر ناتج التشغيل الصغير على مضيف حافة بمعمارية ARM أو x86.
ملاحظات التوافق#
تجميع Hailo خاص بالعتاد ويستخدم شكل إدخال ثابتًا. ضع القيود التالية في الحسبان:
- يجب أن يطابق
nameالمحدد مسرّع النشر. - ينبغي أن تمثّل صور المعايرة الإضاءة ووجهات النظر والأجسام والخلفيات المتوقعة في الإنتاج.
- يُجمّع كل HEF وفق
imgszثابت. ولخدمة دقات متعددة، أعد تحجيم الإطارات على المضيف إلى الحجم المجمّع، أو جمّع HEF منفصلًا لكل دقة. - تُدعم أعداد الفئات المخصّصة لأن Ultralytics تنشئ إعدادات المعالجة اللاحقة من البيانات الوصفية للنموذج.
- تُدعَم نماذج الكشف ذات رؤوس Ultralytics القياسية
Detect، ونماذج التجزئة والوضعية وOBB في YOLOv8/YOLO11، ونماذج التصنيف في YOLOv8/YOLO11/YOLO26، ونماذج التجزئة الدلالية وتقدير العمق في YOLO26؛ بينما لا تُدعَم حاليًا تجزئة الكائنات والوضعية وصندوق الإحاطة الموجّه في YOLO26، إلى جانب عمليات تصدير YOLO-World وYOLOE وYOLOv10 وRT-DETR. - تُجمَّع artifacts الخاصة بـ Hailo-8/8L وHailo-10H/15 بواسطة أجيال مختلفة من DFC، وهي غير قابلة للتبادل.
المعايرة والتكميم INT8#
يستخدم تصدير Hailo HEF التكميم INT8 لملاءمة شبكة YOLO بكفاءة مع المسرّع. وتقدّر مجموعة بيانات المعايرة نطاقات التنشيط؛ ولا تعيد تدريب النموذج ولا تتطلب تسميات أثناء التجميع.
تدعم أجهزة Hailo وDataflow Compiler درجات الدقة INT4 وINT8 وINT16. ويُجمّع مسار Ultralytics format="hailo" باستخدام INT8، مع تطبيق تنشيطات 16-بت (a16) عندما تتطلب المهمة نطاقًا أوسع.
عند حذف data، تستخدم Ultralytics مجموعة بيانات معايرة خفيفة خاصة بالمهمة، مثل COCO128 للكشف، أو cityscapes8 للتجزئة الدلالية، أو depth8 لتقدير العمق. ويُعد رأس العمق الكثيف حساسًا بصفة خاصة لمجال المعايرة: فمعايرة نموذج العمق باستخدام صور كشف غير مرتبطة تؤدي إلى تسطيح الخريطة المتوقعة، بينما تحسّن المجموعات الأكبر ضمن المجال دقة التمثيل. بالنسبة إلى نموذج رؤية حاسوبية مخصص، وجّه data إلى ملف YAML الخاص بمجموعة بياناته كي يلاحظ المجمّع صورًا ممثلة من مجال النشر الفعلي:
model.export(format="hailo", name="hailo8", data="my_dataset.yaml")يحدد fraction النسبة أو عدد الصور المستخدمة في المعايرة. وتحدد قوائم [train, val, test] حدّ كل تقسيم، بينما تترك القوائم ذات العنصرين test كاملًا، وتتخطى 0 الاختبار. ولا تساعد الصور الإضافية إلا إذا كانت تمثل مجال النشر. وقد تقلل الصور الخارجة عن المجال دقة النموذج المكمَّم وتزيد وقت التحسين. إذا فقد HEF بتكميم INT8 الدقة مقارنةً بنموذج PyTorch الأصلي، فحسّن بيانات المعايرة أولًا قبل تغيير إعدادات النموذج أو وقت التشغيل.
توقعات الدقة حسب عائلة النموذج#
قيس الأداء على Hailo-8L باستخدام معايرة ضمن المجال (COCO128، 128 صورة)، وتحافظ صادرات HEF بتكميم INT8 على النسبة التالية من mAP50 لنماذج PyTorch وفق بروتوكول التقييم نفسه:
| النموذج | الاحتفاظ بـ mAP50 | ملاحظات |
|---|---|---|
| YOLOv8n | ~100% | رأس DFL مع NMS على الشريحة |
| YOLO11n | ~96% | تكون كتل Attention في العمود الفقري أكثر حساسية لـ INT8 |
| YOLO26n | ~93% | الرأس الشامل من البداية إلى النهاية مع Attention؛ راجع ملاحظة الثقة |
تقارن نسبة الاحتفاظ كلا النموذجين عند عتبة الثقة نفسها. وتضمّن HEF الخاصة بـ YOLOv8 وYOLO11 قيمة conf وقت التصدير (الافتراضية 0.25) داخل NMS على الشريحة، لذا فإن التحقق مقارنةً بخط أساس PyTorch عند عتبته المنخفضة الافتراضية يدمج جزءًا أكبر من منحنى الدقة والاستدعاء ويبالغ في تقدير فجوة التكميم.
إضافةً إلى الكشف، جرى التحقق من مسارات مُصدِّر التجزئة والوضعية وOBB والتصنيف على Hailo-8L نفسه (DFC 3.33، HailoRT 4.23). وقورنت كل HEF بتكميم INT8 بنقطة تحقق PyTorch الخاصة بها على تقسيم التحقق نفسه، باستخدام معايرة ضمن المجال:
| المهمة | المقياس (تقسيم التحقق) | YOLOv8n | YOLO11n |
|---|---|---|---|
| تقسيم المثيلات | الاحتفاظ بـ mAP50 للقناع (COCO128-seg) | 98.0% | 93.6% |
| الوضعية | الاحتفاظ بـ mAP50 للصندوق (COCO8-pose) | 98.1% | 90.8% |
| صندوق الإحاطة الموجّه | الاحتفاظ بـ mAP50 (DOTA128) | ~100% | 96.9% |
| التصنيف | الاحتفاظ بـ top-1 (مجموعة تحقق ImageNet) | 92.6% | 95.4% |
عُيّرت التجزئة والوضعية وOBB باستخدام مجموعة كل مهمة الافتراضية ضمن المجال (COCO128-seg وCOCO8-pose وDOTA128)، بينما عُيّر التصنيف باستخدام ImageNet100. وتترتب على هذه الإعدادات الافتراضية ملاحظتان: لا تتجاوز COCO8-pose سوى 8 صور، لذا ينبغي اعتبار الوضعية مؤشرية وتمرير data= أكبر للإنتاج، كما يتشبع DOTA8 عند mAP50 يقارب 100% لكلا النموذجين، ولذلك يُقرأ OBB على DOTA128. والتصنيف هو المهمة الوحيدة التي يحتفظ فيها YOLO11 بنسبة أكبر من YOLOv8؛ أما في المهام الأخرى فعمود YOLO11 الفقري القائم على Attention أكثر حساسية لـ INT8.
تترتب على قياسات الجهاز ثلاث قواعد عملية:
- عاير ضمن المجال دائمًا. تعادل المواءمة الدقيقة باستخدام صور خارجة عن المجال تعطيل المواءمة الدقيقة بالكامل: إذ يحتفظ YOLO26n المعاير باستخدام 1,238 صورة خارجة عن المجال بالدقة نفسها (85.7%) التي يحتفظ بها نموذج جرى تجميعه من دون مواءمة دقيقة. وتتغلب مجموعة صغيرة ضمن المجال على مجموعة كبيرة خارجة عنه.
- اخفض
confبنحو 0.05 عند نشر YOLO26. يخفض التكميم درجات YOLO26 بنحو 0.05 في المتوسط، لذا فإن العتبة المضبوطة في PyTorch تستبعد اكتشافات صحيحة على HEF. ويطابق استخدامconf=0.20على الجهاز عدد اكتشافات PyTorch عندconf=0.25، كما أن خفضها قليلًا أكثر (إلى نحوconf=0.15) يستعيد أساسًا كامل فجوة mAP50 المتبقية، على حساب المزيد من الاكتشافات منخفضة الثقة. ويعيد التكميم أيضًا ترتيب نحو 20% من الاكتشافات — وهو تأثير دائم على الترتيب لا تلغيه أي عتبة — لكن إعادة الترتيب هذه لا تمنع استعادة mAP50 عند العتبة الأقل. - عقوبة Attention بنيوية على Hailo-8/8L (DFC 3.33). تُجمَّع كتل Attention إلى عمليات
matmulتحافظ على مدخلات التنشيط INT8 في كل وضع يتيحه المجمّع لها؛ ويفشل وضع الخرج ذي 16 بت في التخصيص لهذا الرسم البياني، كما أن رفع دقة الطبقات المحيطة لا يساعد لأن عملية matmul تعيد تكميم مدخلاتها إلى INT8 على أي حال (ولم يؤدِّ الحفاظ على الالتفافات depthwise وخرجها عند 16 بت إلى تغيير mAP في اختباراتنا). عندما تكون الدقة هي الأولوية ويكون النموذجان قابلين للتبادل، يكمّم YOLO11 حاليًا بصورة أفضل من YOLO26 هنا؛ أما أجيال Hailo الأحدث (DFC 5.x) فتتيح خيارات أكثر للدقة المختلطة وقد تختلف نتائجها.
الartifacts المُصدَّرة#
ينشئ التصدير مجلدًا يحتوي على HEF القابل للنشر وبيانات Ultralytics الوصفية:
yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json- يمثل
*.hefالنموذج المُجمَّع الذي يحمّله HailoRT. - يحافظ
metadata.yamlعلى أسماء النموذج والمهمة وحجم الإدخال والخطوة ومعلومات هدف Hailo. - يسجل
nms_config.jsonإعداد NMS المُنشأ لـ HailoRT لنماذج الكشف YOLOv8 وYOLO11. ولا تستخدم نماذج الكشف YOLO26 وجميع المهام غير الكشفية (التجزئة، والدلالية، والعمق، والتصنيف، والوضعية، وOBB) هذا الملف.
تُزال بنية ONNX الوسيطة بعد التجميع.
تشغيل الاستدلال على أجهزة Hailo#
ثبّت HailoRT على الجهاز الهدف. ويمكن لمستخدمي Raspberry Pi AI HAT+ وAI HAT+ 2 اتباع دليل برمجيات Raspberry Pi AI. في Raspberry Pi OS، لا يمكن تثبيت مجموعتي الحزم معًا، لذا شغّل الكتلة التي تطابق عتادك فقط، ثم أعد التشغيل.
بالنسبة إلى AI HAT+ (Hailo-8 / Hailo-8L):
sudo apt install dkms
sudo apt install hailo-all
sudo rebootبالنسبة إلى AI HAT+ 2 (Hailo-10H، Raspberry Pi OS Trixie أو أحدث):
sudo apt install dkms
sudo apt install hailo-h10-all
sudo rebootبعد إعادة التشغيل، تأكد من اكتشاف المسرّع:
hailortcli fw-control identifyتثبت الحزمتان hailo-all وhailo-h10-all HailoRT على Raspberry Pi OS فقط. وعلى أي مضيف آخر، نزّل حزمة HailoRT وثبّتها من Hailo Developer Zone — وهو المصدر نفسه لـ DFC.
انسخ مجلد التصدير الكامل إلى الجهاز كي يبقى metadata.yaml بجوار HEF. وتستخدم Ultralytics HailoRT لتشغيل predict وval مباشرةً على المجلد المُصدَّر:
from ultralytics import YOLO
model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")بالنسبة إلى نماذج الكشف، تحوّل الواجهة الخلفية مخرجات NMS الخاصة بـ HailoRT في YOLOv8 وYOLO11 وتفك ترميز مخرجات YOLO26 واحدًا لواحد تلقائيًا. كما تفك ترميز موترات التجزئة والوضعية وOBB الخام، وتعيد احتمالات التصنيف على الشريحة، وتنتج خرائط الفئات الدلالية عبر الاختزال على المضيف في Hailo-8/8L وجميع الرؤوس ذات الفئة الواحدة، أو عبر ArgMax على الشريحة لرؤوس Hailo-10H/15 متعددة الفئات. وتظل TAPPAS وGStreamer ومساعد Raspberry Pi picamera2.devices.Hailo متاحة لمسارات العمل الخاصة بالتطبيقات.
لنشر باستخدام GStreamer، مرّر HEF إلى hailonet:
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
hailofilter function-name=yolov8 ! hailooverlay ! autovideosinkخيارات نشر Hailo#
تمثل HEF artifact النموذج نفسه القابل للنشر عبر عدة واجهات لوقت تشغيل Hailo. اختر الواجهة التي تلائم التطبيق:
| خيار وقت التشغيل | الأنسب لـ |
|---|---|
| واجهة HailoRT Python أو C/C++ API | التطبيقات المخصصة والتحكم المباشر في الاستدلال |
picamera2.devices.Hailo لـ Raspberry Pi | مشروعات Camera Module على Raspberry Pi |
| تطبيقات GStreamer وHailo | تدفقات الفيديو في الوقت الفعلي ومسارات العمل متعددة المراحل |
hailortcli | فحوصات الجهاز وفحص HEF وقياس الأداء |
احتفظ بـ metadata.yaml مع HEF عندما يحتاج التطبيق إلى أسماء فئات Ultralytics أو حجم الإدخال أو الخطوة أو معلومات أخرى عن النموذج. ولا تحل HEF نفسها محل المنطق على مستوى التطبيق لالتقاط الكاميرا أو التصور أو التتبع أو التنبيهات أو التخزين.
التحقق من جهاز Hailo وHEF#
قبل دمج مسار عمل للكاميرا أو الفيديو، تحقّق من وقت التشغيل والمسرّع كلٌّ على حدة:
hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hefتعزل قياسات الأداء الخاصة بالجهاز فقط استدلال Hailo عن فك ترميز الفيديو وتغيير حجم الصور والرسم وإدخال/إخراج التطبيق. وقِس التطبيق الكامل على نحو منفصل عند تقدير زمن الاستجابة الشامل أو عدد الإطارات في الثانية.
مقارنة Hailo بتنسيقات تصدير YOLO الأخرى#
اختر تنسيق التصدير استنادًا إلى العتاد الذي سينفذ النموذج. وHEF خاصة بالعتاد، وينبغي اختيارها عندما يحتوي الجهاز النهائي بالفعل على مسرّع Hailo، لا باعتبارها تنسيقًا عامًا أو الأسرع تلقائيًا للحافة.
| هدف النشر أو الأولوية | تنسيق Ultralytics الموصى به | المقارنة مع Hailo |
|---|---|---|
| NPU من Hailo أو HAT لـ Raspberry Pi موجود مسبقًا | Hailo HEF (format="hailo") | يستخدم مسرّع Hailo وحزمة HailoRT المثبتين |
| NPU جديد لـ M.2 أو SBC مقيّد الطاقة | DeepX | ابدأ هنا للحصول على أداء YOLO أعلى وأداء أفضل لكل واط |
| NPU طرفي عالي الإنتاجية ومتعدد التدفقات | Axelera | قيّمه للحصول على كثافة تدفقات وإنتاجية أعلى على عتاد المسرّعات الأحدث |
| وحدة معالجة رسومات NVIDIA | TensorRT | يستخدم نوى وحدة معالجة رسومات NVIDIA مع خياري FP16 وINT8 بدلًا من NPU منفصل |
| وحدة معالجة مركزية أو رسومات أو NPU من Intel | OpenVINO | يستهدف المسرّعات المدمجة أصلًا في أنظمة Intel |
| عتاد Apple | CoreML | يستخدم Apple Neural Engine ووحدة معالجة الرسومات ووحدة المعالجة المركزية عبر وقت تشغيل Apple الأصلي |
| NPU لـ Qualcomm Snapdragon | QNN | يُجمّع لـ NPU الموجود على الجهاز من Qualcomm بدلًا من اشتراط مسرّع خارجي |
| وحدة NPU من Rockchip | RKNN | مستخدم على نطاق واسع عبر SBCs ميسورة التكلفة والأنظمة المضمّنة |
| SoC لـ Ambarella CVflow | Ambarella | يُجمّع لـ SoCs الخاصة بالكاميرات والرؤية المضمّنة من Ambarella |
| كاميرا Raspberry Pi AI | Sony IMX500 | يشغّل الشبكة في مستشعر الكاميرا بدلًا من تشغيلها عبر مسرّع Hailo متصل بالمضيف |
| وحدة معالجة مركزية/رسومات محمولة أو مضمّنة | NCNN | يوفر وقت تشغيل محمولًا خفيفًا عندما لا يتوفر NPU مخصص ومدعوم |
| نشر محمول عبر أوقات تشغيل متعددة | ONNX | يحافظ على قابلية النقل عبر أوقات التشغيل؛ ولا يستطيع HailoRT تنفيذ ONNX من دون تجميعه أولًا إلى HEF |
لا تفترض أن Hailo أسرع أو أكثر كفاءة في استهلاك الطاقة لمجرد أنه NPU. بالنسبة إلى عمليات نشر M.2 الجديدة، تُعد DeepX المرشح الأقوى لأداء YOLO أعلى وأداء أفضل لكل واط، بينما تستهدف Axelera إنتاجية أعلى بكثير للتدفقات المتعددة. ويُعد Rockchip خيارًا شائعًا منخفض التكلفة عبر SBCs والأنظمة المضمّنة. ولا تمثل أرقام TOPS والطاقة الخاصة بالمورّدين معايير أداء قابلة للمقارنة مباشرةً، لذا تحقّق من نقطة تحقق YOLO نفسها وحجم الإدخال والدقة والمضيف ومسار الفيديو الكامل على الأجهزة المرشحة قبل شراء العتاد.
تحسين أداء رؤية الحاسوب على Hailo#
غالبًا ما تكون اختيارات النموذج ومسار العمل أهم من أعلام المجمّع:
- ابدأ بنموذج YOLO صغير، وزِد حجم النموذج فقط عندما تتطلب الدقة ذلك.
- اختر أقل قيمة ثابتة لـ
imgszتحافظ مع ذلك على الكائنات المهمة للتطبيق. - استخدم صور معايرة من الكاميرا والبيئة الفعليتين متى أمكن.
- أبقِ شبكة Hailo نشطة عبر الإطارات بدلًا من إعادة فتح HEF لكل عملية استدلال.
- افصل زمن استدلال الجهاز عن المعالجة المسبقة وفك ترميز الفيديو والمعالجة اللاحقة والتصور وإدخال/إخراج الشبكة.
- استخدم مسار عمل متدفقًا مثل GStreamer لأحمال الفيديو المستمرة.
- تحقّق من HEF المُصدَّرة على المسرّع وإصدار HailoRT نفسيهما المستخدمين في الإنتاج.
وسائط التصدير#
| الوسيطة | النوع | الافتراضي | الوصف |
|---|---|---|---|
name | str | hailo8l | بنية مسرّع Hailo المستهدفة |
imgsz | int، list | 640 | حجم إدخال النموذج الثابت |
data | str | None | ملف YAML لمجموعة بيانات المعايرة؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا لم تُحدَّد، تختار Ultralytics مجموعة بيانات معايرة خاصة بالمهمة. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الجزئية كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم ذات العنصرين test ممتلئًا، بينما تتخطى 0. |
quantize | int | 8 | يستخدم تصدير Hailo التكميم INT8 |
simplify | bool | True | تبسيط مخطط ONNX الوسيط |
conf | float | 0.25 | حد ثقة NMS في HailoRT لنماذج YOLOv8/YOLO11 |
iou | float | 0.7 | حد IoU لـ NMS في HailoRT لنماذج YOLOv8/YOLO11 |
بالنسبة إلى تصدير الكشف، تتلقى YOLOv8 وYOLO11 تقنية NMS من HailoRT، بينما تحافظ YOLO26 على مخرجاتها أحادية الاقتران الخالية من NMS. تستخدم نماذج التجزئة والوضعية وOBB موترات الرأس الخام، وتعيد نماذج التصنيف احتمالات على الشريحة، بينما تعيد نماذج التجزئة الدلالية القيم اللوغاريتمية الخام على Hailo-8/8L، وجميع الرؤوس أحادية الفئة، أو خرائط الفئات المضمّنة لرؤوس Hailo-10H/15 متعددة الفئات. يعيد تقدير العمق القيمة اللوغاريتمية الخام للعمق، التي تفكّكها Ultralytics إلى خريطة عمق متريّة أثناء الاستدلال. لا تمرّر end2end؛ إذ تُرفض التجاوزات الصريحة. الأشكال الديناميكية، وNMS المضمّن في Ultralytics، وFP16، وFP32 غير مدعومة.
استكشاف أخطاء تصدير Hailo وإصلاحها#
خطأ استيراد Hailo Dataflow Compiler#
إذا أبلغ التصدير عن فقدان hailo_sdk_client، فثبّت حزمة DFC wheel الخاصة بجيل الأجهزة المستهدف في بيئة Python نفسها التي تستخدمها Ultralytics. يتطلب Hailo-8/8L وHailo-10H/15 جيلين مختلفين من المترجم.
نظام التشغيل أو البنية غير المدعومين#
يُدعَم تجميع HEF على Linux x86_64. صدّر من خلال Ultralytics Platform، أو استخدم محطة عمل متوافقة إذا كان الكمبيوتر المحلي يعمل بنظام macOS أو Windows أو Raspberry Pi أو نظام ARM آخر.
يستغرق التصدير وقتًا طويلًا#
يُعد تحسين DFC المرحلة الأعلى تكلفة. يزداد وقت التجميع مع حجم النموذج ودقة الإدخال وبيانات المعايرة. يمكن لوحدة GPU مدعومة تسريع التحسين، بينما قد يستغرق التجميع باستخدام CPU فقط وقتًا أطول بكثير.
انخفاض دقة النموذج المكمَّم#
استخدم صور معايرة تشبه مدخلات الإنتاج وتضم الكائنات المهمة والمقاييس وظروف الإضاءة والخلفيات. قارن بين نموذج PyTorch الأصلي وHEF المُصدَّر على مجموعة التحقق نفسها قبل النشر. يظل هناك تفاوت متوسط يعتمد على العائلة حتى مع المعايرة الجيدة؛ راجع توقعات الدقة حسب عائلة النموذج للاطلاع على خطوط الأساس المقاسة.
لا يتم تحميل HEF على الجهاز#
تأكد من أن name يطابق بنية Hailo الفعلية، وأن برنامج تشغيل الجهاز والبرنامج الثابت وحزم HailoRT متوافقة فيما بينها. افحص العنصر الناتج باستخدام hailortcli parse-hef وتحقق من المسرّع باستخدام hailortcli fw-control identify.
يبدو تحليل المخرجات غير صحيح#
أبقِ metadata.yaml بجانب HEF حتى تتمكن Ultralytics من تحديد مسار المعالجة اللاحقة المطابق لـ YOLOv8 أو YOLO11 أو YOLO26. ويجب على تطبيقات HailoRT المخصصة كذلك مطابقة المعالجة اللاحقة لعائلة النموذج المُصدَّر.
الملخص#
يوفر تصدير Ultralytics إلى Hailo مسارًا مباشرًا من نموذج YOLO مُدرَّب إلى HEF قابل للنشر:
- حمّل نموذج كشف أو تصنيف YOLOv8 أو YOLO11 أو YOLO26، أو نموذج تجزئة أو وضعية أو OBB من YOLOv8/YOLO11، أو نموذج تجزئة دلالية أو تقدير عمق من YOLO26.
- صدّر باستخدام
format="hailo"وحدد البنية المستهدفة. - أجرِ المعايرة والتجميع محليًا باستخدام DFC المطابق، أو استخدم التصدير المُدار في Ultralytics Platform.
- انسخ HEF و
metadata.yamlإلى الجهاز الطرفي المدعوم من Hailo. - شغّل الاستدلال باستخدام HailoRT أو Raspberry Pi Picamera2 أو مسار فيديو GStreamer.
للاطلاع على أهداف نشر أخرى للرؤية الحاسوبية، راجع وضع التصدير ووضع قياس الأداء ودليل التكاملات. وتشمل أدلة الأجهزة ذات الصلة DeepX وAxelera وONNX وOpenVINO وTensorRT وNCNN وRKNN وSony IMX500 وQualcomm QNN.
الأسئلة الشائعة#
لا. شغّل DFC على نظام Linux x86_64 مدعوم، وانشر HEF الناتج على Raspberry Pi.
تقلل وحدة GPU المدعومة وقت تحسين DFC بدرجة كبيرة. ويمكن إجراء التجميع باستخدام CPU، لكنه قد يستغرق وقتًا أطول بكثير.
يدعم التصدير المباشر نماذج الكشف ذات رأس الكشف القياسي في YOLOv8 أو YOLO11 أو YOLO26، ونماذج التجزئة والوضعية وOBB في YOLOv8/YOLO11، ونماذج التصنيف في YOLOv8/YOLO11/YOLO26. ويشمل ذلك النماذج المدرَّبة مخصصًا والمبنية من تلك البنى القياسية. كما تُدعَم نماذج التجزئة الدلالية وتقدير العمق في YOLO26. أما تجزئة الكائنات في YOLO26 والوضعية وOBB فيه، إلى جانب YOLOv10 وYOLO-World وYOLOE وRT-DETR، فتُرفض بدلًا من إنتاج HEF غير مُتحقَّق منه.
نعم. استخدم الأمر نفسه
format="hailo"مع أوزان.ptالمخصصة، ومرّر YAML الخاص بمجموعة بيانات التدريب عبرdataلإجراء معايرة INT8 تمثيلية. تُقرأ أسماء الفئات وعددها من البيانات الوصفية للنموذج.يُجمَّع كل HEF لشكل إدخال ثابت، ولذلك لا يمكن تغيير حجم HEF واحد ديناميكيًا. عمليًا، يمكنك تغيير حجم المدخلات على المضيف إلى الحجم المُجمَّع، أو تجميع عدة ملفات HEF للدقة التي تحتاج إليها. اختر
imgszعند التصدير لمطابقة مسار النشر.تستخدم YOLO26 رأس كشف أحادي الاقتران خاليًا من NMS. وتُجمِّع Ultralytics موترات المخرجات هذه مباشرةً بدلًا من إرفاق NMS بأسلوب YOLOv8 من HailoRT المستخدم مع YOLOv8 وYOLO11.
يحوّل Hailo Dataflow Compiler النموذج ويكمّمه إلى HEF خاص بالبنية على جهاز بناء Linux x86_64. ويحمّل HailoRT ملف HEF هذا ويشغّله على الجهاز المستهدف.
انشر HEF المُجمَّع على بيئة تشغيل Hailo. يمثّل ONNX تمثيلًا وسيطًا يُستخدم أثناء التصدير، ويُزال بعد نجاح التجميع.
نزّل حزمة المترجم wheel الخاصة بجيل أجهزتك من Hailo Developer Zone. لا يلزم المترجم إلا لإنشاء HEF؛ إذ يشغّله HailoRT على المسرّع المستهدف.