YOLO Vision 2026:

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

يتطلب نشر نماذج Ultralytics YOLO على وحدات المعالجة المركزية (SoCs) من Ambarella تجميع النموذج باستخدام أدوات التجميع الخاصة بـ Ambarella، كما أن النماذج المُمحسنة لبنية CVflow أداءً أفضل في وقت الاستدلال. يدمج هذا الفرع من Ultralytics مجموعة أدوات الضغط SpongeTorch الخاصة بـ Ambarella مباشرة في خط أنابيب التدريب والتحقق والتصدير، مما يمكن المطورين من إنشاء نماذج محسنة للنشر الفعال على عتاد Ambarella.

يغطي هذا الدليل سير عمل نشر اكتشاف الكائنات الحالي، بدءاً من التدريب الواعي بالضغط وحتى الاستدلال على الجهاز (راجع نظرة عامة على سير العمل لمعرفة خط الأنابيب الكامل).

تنسيق نقاط التحقق AmbaPB هو امتداد خاص بـ Ambarella لمواصفات ONNX IR الذي يدعم البدائيات الحسابية لـ CVflow ويحزم العناصر الناتجة عن أدوات حزمة تطوير البرمجيات (SDK). وهو العنصر الموجود على جانب المضيف المستخدم للتحقق من دقة النموذج المُجمع قبل النشر؛ أما ثنائي Cavalry المنفصل المُنتج للجهاز المستهدف فهو الذي يتم تشغيله على اللوحة.

ملاحظة

يعتمد سير العمل هذا على مكونات حزمة تطوير البرمجيات (SDK) المملوكة لشركة Ambarella والتي لا توجد على PyPI. للحصول على حزم حزمة تطوير البرمجيات (SDK) المطلوبة، قم بالتسجيل في منطقة مطوري Ambarella وطلب الوصول عبر منصة مطوري Cooper™.

الدعم

تتم صيانة هذا التكامل بواسطة Ambarella. قم بالإبلاغ عن المشكلات المتعلقة بالفرع، أو SpongeTorch، أو حزمة تطوير البرمجيات (SDK) إلى دعم Ambarella.

من هي Ambarella؟#

Ambarella، التي يقع مقرها الرئيسي في سانتا كلارا، كاليفورنيا، هي شركة أشباه موصلات تصمم وحدات المعالجة المركزية (SoCs) للذكاء الاصطناعي على الحافة. تجمع معالجاتها بين معالجة إشارات الصور، وترميز الفيديو، وحوسبة الذكاء الاصطناعي على الشريحة، وتُستخدم في الأجهزة الأمنية، والسيارات، والروبوتات، والصناعة، والأجهزة الاستهلاكية.

ما هي CVflow؟#

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

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

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

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

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

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

يحتوي خط الأنابيب على ست مراحل:

  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 هذا، ثم قم بإعداد حزمة تطوير البرمجيات (SDK) لـ Ambarella CVflow - والتي تتضمن أدوات التجميع ومكتبة cvflowbackend - وتثبيت عجلة spongetorch الموزعة بجانبها:

التثبيت
# 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 (بتنسيق نص البروتوباف، .prototxt) الذي يحدد عمليات التقليم، بما في ذلك أهداف التفرقة و جدول الضغط. احصل على تكوينات مثال وثائق المخطط المطابقة من إصدار حزمة تطوير البرمجيات (SDK) لـ Ambarella. للحفاظ على الاتساق بين التدريب والتحقق والنشر، استخدم تكوين التدريب كلما احتجز التحقق إلى إعادة إعداد النموذج، واستخدم دائماً نفس التفصيل عند تصدير نقطة تحقق مضغوطة.

وسيطات 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 المُجمع مباشرة من خلال واجهة برمجة التطبيقات (API) لـ 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 الخاص بك باستخدام وقت التشغيل لحزمة تطوير البرمجيات (SDK) من Ambarella. يجب أن تتطابق المعالجة المسبقة والمعالجة اللاحقة مع ما تم تجميع نموذج الاكتشاف من أجله: إدخال RGB بصندوق الحروف في نطاق 0–255، وفك تشفير اكتشاف YOLO القياسي على المخرجات. ارجع إلى وثائق نشر حزمة تطوير البرمجيات (SDK) لواجهات برمجة التطبيقات (APIs) لوقت التشغيل.

التصدير دون SpongeTorch#

إذا لم تكن بحاجة إلى تقليم وقت التدريب لـ SpongeTorch، فإن خط أنابيب Ultralytics القياسي ينتج أيضاً نموذجاً يمكن لأدوات حزمة تطوير البرمجيات (SDK) تجميعه:

الاستخدام
yolo export model=yolo26n.pt format=onnx

قم بتتجميع ONNX الناتج باستخدام أدوات تجميع حزمة تطوير البرمجيات (SDK)، والتي تقوم بإجراء التكميم بعد التدريب بنفسها. يقايض هذا المسار بعض أداء وقت التشغيل والدقة المُكممة مقابل سير عمل أبسط بدون تبعية spongetorch في وقت التدريب.

التطبيقات الواقعية#

تشغّل نماذج Ultralytics YOLO على دوائر SoC من Ambarella CVflow الرؤيةَ الدائمة التشغيل عند الحافة:

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

الملخص#

أوجز هذا الدليل سير العمل الحالي لنشر نماذج Ultralytics YOLO على وحدات المعالجة المركزية (SoCs) من Ambarella CVflow: التدريب الواعي بالضغط مع SpongeTorch (amba_config/amba_chipset)، وتصدير ONNX لنقطة التحقق المضغوطة، والتجميع دون اتصال بالإنترنت إلى نقطة تحقق AmbaPB باستخدام أدوات حزمة تطوير البرمجيات (SDK)، والتحقق من المضيف من خلال Ultralytics، والتحويل إلى ملف ثنائي Cavalry للنشر على الجهاز باستخدام حزمة تطوير البرمجيات (SDK) من Ambarella.

للاطلاع على أهداف أخرى للذكاء الاصطناعي الطرفي، راجع الأدلة ذات الصلة الخاصة بـ Hailo وRockchip RKNN وSony IMX500 وQualcomm QNN وDEEPX وAxelera. وللاطلاع على القائمة الكاملة لتنسيقات التصدير، زر وثائق وضع التصدير وصفحة التكاملات.

الأسئلة الشائعة#

  • لا. لا يوجد هدف format="ambarella". قم بالتصدير إلى ONNX (اختيارياً مع ضغط SpongeTorch عبر amba_config)، ثم قم بتجميع نموذج ONNX إلى AmbaPB دون اتصال بالإنترنت باستخدام أدوات تجميع حزمة تطوير البرمجيات (SDK) من Ambarella.

  • يمكن استهداف أي وحدة معالجة مركزية (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)، وتشحن عجلة spongetorch الموزعة بشكل منفصل بجانبها.

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

التعليقات