تصدير Ultralytics YOLO إلى Ambarella CVflow#
يتطلب نشر نماذج Ultralytics YOLO على أنظمة Ambarella على الرقاقة (SoC) تجميع النماذج باستخدام أدوات التجميع من Ambarella، كما أن النماذج المحسّنة لبنية CVflow تحقق أداءً أفضل أثناء الاستدلال. يدمج هذا التفرع من Ultralytics مجموعة أدوات الضغط SpongeTorch من Ambarella مباشرةً في مسار التدريب والتحقق والتصدير، ما يتيح للمطورين إنشاء نماذج محسّنة لنشرها بكفاءة على أجهزة Ambarella.
يتناول هذا الدليل سير عمل نشر كشف الكائنات الحالي، بدءًا من التدريب المراعي للضغط وصولًا إلى الاستدلال على الجهاز (راجع نظرة عامة على سير العمل للاطلاع على المسار الكامل).
تنسيق نقاط التحقق AmbaPB هو امتداد خاص بـ Ambarella لمواصفة ONNX IR، ويدعم بدائيات الحوسبة في CVflow ويضمّن العناصر الاصطناعية التي تنشئها أدوات SDK. وهو العنصر الاصطناعي على المضيف المستخدم للتحقق من دقة النموذج المُجمّع قبل النشر؛ أما ملف Cavalry الثنائي المنفصل الذي يُنشأ للجهاز المستهدف فهو ما يعمل على اللوحة.
يعتمد سير العمل هذا على مكونات SDK احتكارية من Ambarella غير متاحة على PyPI. للحصول على حزم SDK المطلوبة، سجّل في منطقة مطوري Ambarella واطلب الوصول عبر منصة Cooper™ Developer Platform.
تتولى Ambarella صيانة هذا التكامل. أبلغ عن المشكلات المتعلقة بالتفرع أو SpongeTorch أو SDK إلى دعم Ambarella.
ما هي Ambarella؟#
Ambarella، التي يقع مقرها الرئيسي في سانتا كلارا بولاية كاليفورنيا، شركة أشباه موصلات تصمم أنظمة ذكاء اصطناعي طرفية على الرقاقة (SoC). تجمع معالجاتها بين معالجة إشارات الصور وترميز الفيديو والحوسبة المدعومة بالذكاء الاصطناعي على الشريحة، وتُستخدم في أجهزة الأمن والسيارات والروبوتات والصناعة والاستهلاك.
ما هي CVflow؟#
CVflow هي بنية Ambarella لمعالجة الرؤية. وتستخدم محرك رؤية مخصصًا، منفصلًا عن CPU وGPU، لتشغيل أحمال عمل الرؤية الحاسوبية والشبكات العصبية. تُجمّع النماذج المدرّبة بأطر عمل مثل PyTorch إلى تنسيق CVflow الأصلي باستخدام SDK من Ambarella قبل تشغيلها على المحرك.
عائلات CVflow SoC الحالية وتطبيقاتها المعتادة:
| عائلة SoC | التطبيقات المعتادة |
|---|---|
| CV72 / CV75 | كاميرات أمنية بدقة 4K مدعومة بالذكاء الاصطناعي، وكاميرات ذكية، ورؤية صناعية |
| CV5 / CV52 | الطائرات المسيّرة، وكاميرات الحركة، والروبوتات، وأنظمة الكاميرات المتعددة |
| N1-655 | أجهزة الذكاء الاصطناعي التوليدي المحلية وتحليلات الفيديو متعددة التدفقات |
لماذا تنشر YOLO على Ambarella؟#
- الأداء لكل واط: صُممت CVflow SoC لتشغيل الذكاء الاصطناعي الطرفي باستمرار، وتنفيذ كشف الكائنات في الوقت الفعلي ضمن ميزانيات الطاقة المناسبة للكاميرات.
- التدريب المراعي للضغط: تطبّق SpongeTorch التقليم أثناء التدريب لمساعدة النموذج على الحفاظ على دقته مع زيادة تناثره وكفاءته لنشره على CVflow.
- مسار كاميرا متكامل: تجمع Ambarella SoC بين معالج إشارات الصور (ISP) وترميز الفيديو فائق الدقة وCVflow، ما يتيح مجموعة متنوعة من أنظمة الكاميرات باستهلاك منخفض للطاقة، بحيث تتولى Ambarella SoC واحدة معالجة مسار كاميرا الذكاء الاصطناعي بالكامل.
نظرة عامة على سير العمل#
يتألف المسار من ست مراحل:
- التدريب المراعي للضغط — درّب باستخدام إعداد SpongeKit (
amba_config) لكي تطبّق SpongeTorch التقليم غير المنظم تدريجيًا أثناء التدريب. عندما تكون دقة التكميم بعد التدريب (PTQ) غير مقبولة، تدعم SpongeTorch أيضًا التدريب المراعي للتكميم (QAT)، لكن هذا المسار غير مدمج بعد في تكامل Ultralytics هذا، ومن المخطط إضافته في إصدار مستقبلي. - تصدير ONNX — صدّر نقطة التحقق المضغوطة باستخدام
amba_configنفسه، مع الحفاظ على بنية الضغط في رسم ONNX البياني. - التجميع — اجمع نموذج ONNX إلى نقطة تحقق AmbaPB باستخدام أدوات التجميع في SDK، التي تطبّق PTQ لمحرك CVflow.
- التحقق على المضيف — شغّل النموذج المُجمّع
*.ambapb.ckpt.onnxعبر Ultralyticspredict/valباستخدام الواجهة الخلفية AmbaPB للتحقق من الدقة قبل النشر. - التحويل إلى Cavalry — حوّل نقطة تحقق AmbaPB التي تم التحقق منها إلى ملف Cavalry ثنائي باستخدام أدوات SDK.
- التشغيل على الجهاز — شغّل ملف Cavalry الثنائي على الجهاز باستخدام مكتبة وقت التشغيل الخاصة بـ SDK من Ambarella.
سير عمل التدريب والتصدير باستخدام SpongeTorch اختياري ويمكن استبداله بتصدير ONNX عادي (راجع التصدير دون SpongeTorch).
المتطلبات الأساسية#
التثبيت#
ثبّت تفرع Ultralytics هذا، ثم أعدّ Ambarella CVflow SDK — الذي يتضمن أدوات التجميع ومكتبة cvflowbackend — وثبّت حزمة spongetorch بصيغة wheel الموزعة معه:
# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .
# Access and set up the Ambarella SDK compilation tools
# After the environment is ready, install the spongetorch library
pip install /path/to/spongetorch-*.whlيعثر AutoBackend على cvflowbackend عبر الأمر tv2 الخاص بأدوات التجميع في SDK (tv2 -libpath cvflowbackend)، لذا يجب تثبيت أدوات التجميع في SDK وإضافتها إلى PATH قبل تشغيل الاستدلال أو التحقق باستخدام النماذج المُجمّعة.
ملف إعداد SpongeKit#
تعمل SpongeTorch وفق ملف إعداد SpongeKit (بتنسيق نص protobuf، .prototxt) يعرّف مراحل التقليم، بما في ذلك أهداف التناثر وجدول الضغط. احصل على أمثلة لملفات الإعداد ووثائق المخطط المطابقة من إصدار Ambarella SDK لديك. للحفاظ على الاتساق بين التدريب والتحقق والنشر، استخدم إعداد التدريب كلما تطلب التحقق إعادة تجهيز النموذج، واستخدم الإعداد نفسه دائمًا عند تصدير نقطة تحقق مضغوطة.
وسيطات Amba#
تتحكم وسيطتان في تكامل SpongeTorch عبر الأوضاع train وval وexport:
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
amba_config | str | None | مسار إعداد SpongeKit المُمرر إلى spongetorch.prepare(). يفعّل التدريب المراعي للضغط والتصدير المتوافق مع SpongeTorch. |
amba_chipset | str | None | اسم مجموعة الشرائح المستهدفة المُمرر إلى spongetorch.set_target_chipset()، مثل CV72. |
يضيف التفرع أيضًا وسيط تصدير عام:
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
export_file | str | None | مسار/اسم مخصص لمخرجات التصدير، مثل '/tmp/model.onnx' أو 'model.onnx'. |
التدريب المراعي للضغط#
درّب نموذجك (أو أجرِ ضبطًا دقيقًا له) مع تفعيل ضغط SpongeTorch:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco8.yaml",
epochs=100,
amba_config="config.prototxt",
amba_chipset="CV72",
)عند ضبط amba_config، يغلّف المدرّب النموذج والمحسّن باستخدام spongetorch.prepare() أثناء الإعداد. يُطبّق الضغط تدريجيًا وفق جدول للخطوات، بحيث تتعلم الشبكة الحفاظ على دقتها مع زيادة تناثرها. تخزّن نقطة التحقق المدرّبة الحالة المتناثرة لـ SpongeTorch (موترات _orig/_mask)، التي تتطلبها خطوة التصدير لاحقًا. ويُنسخ ملف الإعداد إلى دليل التشغيل باسم amba_config.prototxt لضمان إمكانية إعادة الإنتاج.
لا يُحفظ best.pt وlast.pt عمدًا حتى يتجاوز جدول ضغط SpongeTorch قيمة end_step — إذ لا يمكن استخدام نقطة تحقق مضغوطة جزئيًا. تأكد من أن epochs طويل بما يكفي لإكمال الجدول المحدد في الإعداد؛ إذ يوضح السجل متى يبدأ حفظ نقاط التحقق. إذا انتهى التدريب قبل اكتمال الجدول، فسيُحفظ العصر الأخير على أي حال مع تحذير، لكن ينبغي عدم نشر نقطة التحقق هذه.
للحصول على أفضل دقة، درّب نموذجك أولًا بالطريقة المعتادة (أو ابدأ من نقطة تحقق مدرّبة مسبقًا)، ثم أجرِ ضبطًا دقيقًا أقصر للضغط باستخدام amba_config على الأوزان المدرّبة.
التحقق من نقطة التحقق المضغوطة#
تحقق من الدقة قبل التجميع باستخدام الإعداد نفسه:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72يعيد المدقّق تطبيق spongetorch.prepare() عند الحاجة، ويعطّل دمج Conv+BN للحفاظ على بنية الضغط. قارن mAP بخط الأساس غير المضغوط؛ إذا كان انخفاض الدقة كبيرًا جدًا، فعدّل إعداد SpongeKit وأعد التدريب.
التصدير إلى ONNX#
صدّر نقطة التحقق المضغوطة باستخدام amba_config نفسه الذي استُخدم في التدريب:
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(
format="onnx",
amba_config="config.prototxt",
amba_chipset="CV72",
)يعيد المُصدِّر إنشاء النموذج، ويعيد تطبيق spongetorch.prepare() باستخدام إعدادك، ويعيد تحميل أوزان نقطة التحقق المتناثرة إلى البنية المُعدّة، ثم يتتبع النموذج إلى ONNX مع تعطيل دمج Conv+BN — منتجًا رسمًا بيانيًا بالصيغة الدقيقة التي تتوقعها أدوات التجميع في SDK.
الحفاظ على البيانات الوصفية للنموذج#
يضمّن تصدير ONNX مهمة النموذج وأسماء الفئات والخطوة وحجم الإدخال في ملف ONNX، بينما تقرأ الواجهة الخلفية AmbaPB هذه المعلومات من ملف جانبي metadata.yaml بجوار النموذج المُجمّع. ما لم تنشئ أدوات التجميع في SDK هذا الملف الجانبي، استخرجه من نموذج ONNX قبل التجميع:
import onnx
from ultralytics.utils import YAML
model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})احتفظ بـ metadata.yaml في الدليل نفسه الذي يوجد فيه الملف المُجمّع *.ambapb.ckpt.onnx أو *.ambapb.fastckpt.onnx.
- يجب أن تتضمن نقطة التحقق حالة ضغط SpongeTorch. ستؤدي محاولة تصدير نقطة تحقق غير مضغوطة مع ضبط
amba_configإلى ظهور الخطأ: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export." - يجب أن يطابق الإعداد المستخدم أثناء التدريب. قد يؤدي استخدام إعداد مختلف إلى تعذّر تحميل أوزان نقطة التحقق على النحو الصحيح.
التجميع باستخدام أدوات SDK#
اجمع نموذج ONNX المُصدّر لمجموعة الشرائح المستهدفة باستخدام أدوات التجميع في SDK، واتبع دليل التجميع الخاص بـ SDK. توزّع الأدوات الرسم البياني على محرك الذكاء الاصطناعي CVflow — مطبّقةً PTQ والجدولة وتخطيط الذاكرة — وتنتج نقطة تحقق AmbaPB للتحقق على المضيف.
يطبّق PTQ تكميم INT8 باستخدام صور المعايرة (المُعَدّة وفقًا لما هو موضح في دليل التجميع الخاص بـ SDK)، وتوازن أدوات التجميع بين الدقة وزمن الاستجابة أثناء التشغيل: إذ يؤدي تعيين مزيد من العمليات إلى INT8 إلى خفض زمن الاستجابة، لكنه قد يقلل الدقة، بينما يحافظ إبقاء مزيد من العمليات على FP16 على الدقة مع زيادة زمن الاستجابة. عندما يتعذر على PTQ تحقيق هدف الدقة عند مستوى INT8 المطلوب لميزانية زمن الاستجابة، يكون QAT باستخدام SpongeTorch هو الحل المقصود — إذ يدرّب النموذج على تحمّل تكميم INT8 أشد، مستعيدًا الدقة عند نقطة تشغيل أقل زمنًا للاستجابة. لم يتوفر QAT بعد في هذا التكامل، ومن المخطط إضافته في إصدار مستقبلي.
لكي يتعرّف Ultralytics على النموذج المُجمّع، يجب أن ينتهي اسم الملف بـ .ambapb.ckpt.onnx أو .ambapb.fastckpt.onnx.
تشغيل الاستدلال باستخدام النموذج المُجمّع#
يُحمّل نموذج AmbaPB المُجمّع مباشرةً عبر واجهة Ultralytics — إذ يكتشف AutoBackend اللاحقة .ambapb ويوجّه الاستدلال عبر cvflowbackend، لينفذ النموذج بالطريقة التي سيعمل بها على محرك الذكاء الاصطناعي:
from ultralytics import YOLO
model = YOLO("model.ambapb.ckpt.onnx")
# Inference
results = model("https://ultralytics.com/images/bus.jpg")
# Validation
metrics = model.val(data="coco8.yaml")هذا هو فحص الدقة النهائي قبل النشر على الأجهزة، ويشمل جميع آثار التكميم التي أحدثها المجمّع. إذا وُجد ملف metadata.yaml بجوار النموذج المُجمّع، فستقرأ الواجهة الخلفية منه أسماء الفئات والخطوة ومعلومات المهمة. تستخدم الواجهة الخلفية وضع استدلال CVflow acinf افتراضيًا؛ واضبط متغير البيئة ULTRALYTICS_AMBAPB_DEBUG=1 لتسجيل تفاصيل الإدخال/الإخراج لأغراض تصحيح الأخطاء.
التحويل إلى ملف Cavalry ثنائي#
بعد اجتياز نقطة تحقق AmbaPB التحقق على المضيف، استخدم أدوات التجميع في SDK لتحويلها إلى ملف Cavalry ثنائي لجهازك المستهدف، واتبع دليل التجميع الخاص بـ SDK. ملف Cavalry الثنائي هو الصيغة التي تشغّلها مكتبة وقت التشغيل في SDK على اللوحة.
النشر على اللوحة#
حمّل ملف Cavalry الثنائي على جهاز Ambarella باستخدام بيئة وقت التشغيل في Ambarella SDK. يجب أن تتطابق المعالجة المسبقة واللاحقة مع ما جُمّع نموذج الكشف لأجله: إدخال RGB مع letterbox ضمن النطاق 0–255، وفك ترميز مخرجات الكشف القياسي في YOLO. راجع وثائق النشر في SDK للاطلاع على واجهات برمجة التطبيقات وقت التشغيل.
التصدير دون SpongeTorch#
إذا لم تكن بحاجة إلى التقليم أثناء التدريب باستخدام SpongeTorch، فإن مسار Ultralytics القياسي ينتج أيضًا نموذجًا يمكن لأدوات SDK تجميعه:
yolo export model=yolo26n.pt format=onnxاجمع نموذج ONNX الناتج باستخدام أدوات التجميع في SDK، التي تنفذ التكميم بعد التدريب بنفسها. يوازن هذا المسار بين بعض أداء التشغيل ودقة النموذج المكمّم من جهة، وسير عمل أبسط لا يتطلب spongetorch أثناء التدريب من جهة أخرى.
التطبيقات العملية#
تدعم نماذج Ultralytics YOLO على Ambarella CVflow SoC الرؤية الطرفية الدائمة:
- كاميرات أمنية مدعومة بالذكاء الاصطناعي: كشف الأشخاص والمركبات في الوقت الفعلي على كاميرات IP بدقة 4K، ضمن ميزانية طاقة تقل عن 3 W.
- الطائرات المسيّرة والروبوتات: كشف الكائنات وتتبعها على متن الجهاز لأغراض الملاحة والتفتيش والتوصيل، باستخدام شرائح من فئة CV5.
- التحليلات الصناعية وتحليلات البيع بالتجزئة: إحصاء الأشخاص عبر تدفقات متعددة، وكشف معدات الوقاية الشخصية (PPE)، ومراقبة الرفوف على الأجهزة الطرفية.
الملخص#
عرض هذا الدليل سير العمل الحالي لنشر نماذج Ultralytics YOLO على Ambarella CVflow SoC: التدريب المراعي للضغط باستخدام SpongeTorch (amba_config/amba_chipset)، وتصدير نقطة التحقق المضغوطة إلى ONNX، والتجميع دون اتصال إلى نقطة تحقق AmbaPB باستخدام أدوات SDK، والتحقق على المضيف عبر Ultralytics، والتحويل إلى ملف Cavalry ثنائي للنشر على الجهاز باستخدام Ambarella SDK.
للاطلاع على أهداف أخرى للذكاء الاصطناعي الطرفي، راجع أدلة Hailo وRockchip RKNN وSony IMX500 وQualcomm QNN وDEEPX وAxelera ذات الصلة. للاطلاع على القائمة الكاملة لتنسيقات التصدير، تفضّل بزيارة وثائق وضع التصدير وصفحة التكاملات.
الأسئلة الشائعة#
لا. لا يوجد هدف
format="ambarella". صدّر إلى ONNX (اختياريًا مع ضغط SpongeTorch عبرamba_config)، ثم اجمع نموذج ONNX دون اتصال إلى AmbaPB باستخدام أدوات التجميع في Ambarella SDK.يمكن استهداف أي SoC قائم على CVflow وتدعمه أدوات التجميع في SDK لديك، بما في ذلك عائلتا CV72/CV75 لكاميرات الذكاء الاصطناعي وCV5/CV52 للطائرات المسيّرة والروبوتات. يضبط الوسيط
amba_chipsetهدف التحسين في SpongeTorch؛ لذا اختر الهدف المطابق على نحو منفصل عند التجميع. تعتمد سلاسل أسماء الشرائح المقبولة وتوافرها على إصدار SDK المثبّت.SpongeTorch هي نسخة PyTorch من مكتبة ضغط النماذج SpongeKit التابعة لـ Ambarella (وتتوفر منها أيضًا نسختان لـ Caffe وTensorFlow)، وقد دُمجت في تفرع Ambarella من Ultralytics لإجراء التقليم غير المنظم أثناء التدريب (ومن المخطط إضافة التدريب المراعي للتكميم في إصدار مستقبلي). استخدامها اختياري: إذ يمكن أيضًا تجميع تصدير ONNX عادي من Ultralytics باستخدام أدوات التجميع في SDK، التي تتولى التكميم بنفسها، مقابل بعض التراجع في أداء التشغيل ودقة النموذج المكمّم.
هما مكوّنان احتكاريان وغير متاحين على PyPI. سجّل في منطقة مطوري Ambarella لطلب الوصول إلى SDK؛ إذ يتضمن SDK أدوات التجميع (مع
cvflowbackend)، وتُوزّع معه حزمة wheelspongetorchبشكل منفصل.شغّل
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlبعد تثبيت تفرع Ambarella. تنفذ الواجهة الخلفية AmbaPB النموذج المُجمّع كما سيعمل على محرك CVflow AI، لذا تشمل قيمة mAP المبلّغ عنها جميع آثار التكميم التي أحدثها المجمّع.