Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started

تصدير Ambarella CVflow لنماذج Ultralytics YOLO#

يتطلب نشر نماذج Ultralytics YOLO على Ambarella SoCs تجميع النماذج باستخدام أدوات التجميع من 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، ومقرها الرئيسي في سانتا كلارا، كاليفورنيا، شركة أشباه موصلات تصمم SoCs للذكاء الاصطناعي على الحافة. تجمع معالجاتها بين معالجة إشارات الصور وترميز الفيديو والحوسبة بالذكاء الاصطناعي على الشريحة، وتُستخدم في أجهزة الأمن والسيارات والروبوتات والصناعة والاستهلاك.

ما CVflow؟#

CVflow هي بنية معالجة الرؤية من Ambarella. تستخدم محرك رؤية مخصصًا، منفصلًا عن CPU وGPU، لتشغيل أعباء عمل الرؤية الحاسوبية والشبكات العصبية. تُجمّع النماذج المدرّبة بأطر عمل مثل PyTorch إلى التنسيق الأصلي لـ CVflow باستخدام SDK من Ambarella قبل تشغيلها على المحرك.

عائلات CVflow SoC الحالية وتطبيقاتها المعتادة:

عائلة SoCالتطبيقات المعتادة
CV72 / CV75كاميرات أمنية بدقة 4K مدعومة بالذكاء الاصطناعي، وكاميرات ذكية، ورؤية صناعية
CV5 / CV52طائرات مسيّرة، وكاميرات الحركة، وروبوتات، وأنظمة متعددة الكاميرات
N1-655أجهزة الذكاء الاصطناعي التوليدي المحلية وتحليلات الفيديو متعددة التدفقات

لماذا تنشر YOLO على Ambarella؟#

  • الأداء لكل واط: صُممت CVflow SoCs لتشغيل الذكاء الاصطناعي على الحافة باستمرار، وتنفيذ اكتشاف الكائنات في الوقت الفعلي ضمن ميزانيات الطاقة الخاصة بالكاميرات.
  • التدريب المراعي للضغط: تطبّق SpongeTorch التقليم أثناء التدريب لمساعدة النموذج على الحفاظ على دقته مع زيادة تناثره وكفاءته للنشر على CVflow.
  • مسار كاميرا متكامل: تجمع Ambarella SoCs بين معالج إشارات الصور (ISP) وترميز الفيديو فائق الوضوح وCVflow لتمكين مجموعة متنوعة من أنظمة الكاميرات باستهلاك منخفض للطاقة، ما يتيح لـ Ambarella SoC واحدة التعامل مع مسار كاميرا الذكاء الاصطناعي بالكامل.

نظرة عامة على سير العمل#

يتكون مسار العمل من ست مراحل:

  1. التدريب المراعي للضغط — درّب باستخدام إعداد SpongeKit (amba_config) لكي تطبّق SpongeTorch التقليم غير البنيوي تدريجيًا أثناء التدريب. عندما تكون دقة التكميم بعد التدريب (PTQ) غير مقبولة، تدعم SpongeTorch أيضًا التدريب المراعي للتكميم (QAT)، لكن هذا المسار غير مدمج بعد في تكامل Ultralytics هذا، ومن المخطط إضافته في إصدار مستقبلي.
  2. تصدير ONNX — صدّر نقطة التحقق المضغوطة باستخدام amba_config نفسه، مع الحفاظ على بنية الضغط في مخطط ONNX.
  3. التجميع — جمّع نموذج ONNX إلى نقطة تحقق AmbaPB باستخدام أدوات التجميع الخاصة بـ SDK، التي تطبّق PTQ لمحرك CVflow.
  4. التحقق على المضيف — شغّل نموذج *.ambapb.ckpt.onnx المجمّع عبر Ultralytics predict/val باستخدام الواجهة الخلفية AmbaPB للتحقق من الدقة قبل النشر.
  5. تحويل Cavalry — حوّل نقطة تحقق AmbaPB التي جرى التحقق منها إلى ملف ثنائي Cavalry باستخدام أدوات SDK.
  6. التشغيل على الجهاز — شغّل الملف الثنائي 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-text، .prototxt) يحدد مراحل التقليم، بما فيها أهداف التناثر وجدول الضغط. احصل على ملفات إعداد نموذجية ووثائق المخطط المطابقة من إصدار Ambarella SDK لديك. للحفاظ على الاتساق بين التدريب والتحقق والنشر، استخدم إعداد التدريب كلما تطلب التحقق إعادة تحضير النموذج، واحرص دائمًا على استخدام الإعداد نفسه عند تصدير نقطة تحقق مضغوطة.

وسيطات Amba#

يتحكم وسيطان في تكامل SpongeTorch عبر أوضاع train وval وexport:

المعاملالنوعالافتراضيالوصف
amba_configstrNoneمسار ملف إعداد SpongeKit المُمرر إلى spongetorch.prepare(). يفعّل التدريب المراعي للضغط والتصدير المتوافق مع SpongeTorch.
amba_chipsetstrNoneاسم مجموعة الشرائح المستهدفة المُمرر إلى spongetorch.set_target_chipset()، مثل CV72.

يضيف الفرع أيضًا وسيط تصدير عام:

المعاملالنوعالافتراضيالوصف
export_filestrNoneمسار/اسم مخصص لمخرجات التصدير، مثل '/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 بجوار النموذج المُترجم برمجياً، فستقرأ الواجهة الخلفية منه أسماء الفئات وstride ومعلومات المهمة. تستخدم الواجهة الخلفية وضع استدلال 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 على الشريحة الرؤية المستمرة عند الحافة:

  • كاميرات أمن تعمل بالذكاء الاصطناعي: كشف الأشخاص والمركبات آنياً على كاميرات IP بدقة 4K ضمن ميزانية طاقة أقل من 3 W.
  • الطائرات المسيّرة والروبوتات: كشف الأجسام وتتبعها على متن الجهاز للملاحة والتفتيش والتوصيل باستخدام شرائح من فئة CV5.
  • التحليلات الصناعية وتحليلات البيع بالتجزئة: إحصاء الأشخاص عبر تدفقات متعددة، وكشف معدات الوقاية الشخصية (PPE)، ومراقبة الأرفف على أجهزة الحافة.

الملخص#

عرض هذا الدليل سير العمل الحالي لنشر نماذج Ultralytics YOLO على أنظمة Ambarella CVflow على الشريحة: تدريب يراعي الضغط باستخدام 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.

  • يمكن استهداف أي نظام على الشريحة قائم على 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)، وتُوزّع حزمة spongetorch wheel بشكل منفصل معه.

  • شغّل yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml بعد تثبيت نسخة Ambarella المتفرعة. تنفّذ الواجهة الخلفية AmbaPB النموذج المُترجم برمجياً كما يعمل على محرك الذكاء الاصطناعي CVflow، لذا تشمل قيمة mAP المُبلّغ عنها جميع آثار التكميم الناتجة عن المترجم.

التعليقات