تصدير نماذج YOLO26 إلى ONNX#
استدلال ONNX على CPU أسرع بنحو 43%: YOLO26n مقابل YOLO11n
- يعمل YOLO26n بسرعة أعلى بنسبة تصل إلى 43% من YOLO11n في استدلال ONNX على CPU (Intel Xeon CPU @ 2.00 GHz). راجع صفحة نموذج YOLO26 للاطلاع على المقارنة كاملة.
غالبًا ما تحتاج عند نشر نماذج الرؤية الحاسوبية إلى تنسيق نموذج يتسم بالمرونة والتوافق مع منصات متعددة.
يُبسّط تصدير نماذج Ultralytics YOLO26 إلى تنسيق ONNX عملية النشر ويضمن الأداء الأمثل في بيئات متنوعة. يوضّح هذا الدليل كيفية تحويل نماذج YOLO26 بسهولة إلى ONNX وتعزيز قابليتها للتوسع وفعاليتها في التطبيقات الواقعية.
شاهد: اختبار استدلال Ultralytics YOLO26 مقابل Ultralytics YOLO11 على ONNX | استدلال أسرع بنحو 43% مع YOLO26 🚀
ONNX وONNX Runtime#
ONNX، وهو اختصار لعبارة تبادل الشبكات العصبية المفتوح، مشروع مجتمعي طوّرته Facebook وMicrosoft في البداية. ويُعدّ التطوير المستمر لـ ONNX جهدًا تعاونيًا تدعمه مؤسسات مختلفة مثل IBM وAmazon (من خلال AWS) وGoogle. ويهدف المشروع إلى إنشاء تنسيق ملفات مفتوح مصمم لتمثيل نماذج التعلم الآلي بطريقة تتيح استخدامها عبر أطر الذكاء الاصطناعي والأجهزة المختلفة.
يمكن استخدام نماذج ONNX للانتقال بسلاسة بين أُطر العمل المختلفة. فعلى سبيل المثال، يمكن تصدير نموذج التعلم العميق المدرَّب في PyTorch إلى تنسيق ONNX، ثم استيراده بسهولة إلى TensorFlow.
بدلًا من ذلك، يمكن استخدام نماذج ONNX مع ONNX Runtime. ويُعد ONNX Runtime مُسرّعًا متعدد الاستخدامات وعابرًا للمنصات لنماذج التعلم الآلي، وهو متوافق مع أُطر عمل مثل PyTorch وTensorFlow وscikit-learn وغيرها.
يحسّن ONNX Runtime تنفيذ نماذج ONNX بالاستفادة من الإمكانات الخاصة بالأجهزة. ويتيح هذا التحسين تشغيل النماذج بكفاءة وأداء عالٍ على منصات أجهزة متنوعة، بما في ذلك وحدات CPU وGPU والمسرّعات المتخصصة.
سواء استُخدم ONNX بصورة مستقلة أو بالاقتران مع ONNX Runtime، فإنه يوفر حلًا مرنًا لـنشر النماذج وتوافقها في التعلم الآلي.
الميزات الرئيسية لنماذج ONNX#
تُعزى قدرة ONNX على التعامل مع تنسيقات متنوعة إلى الميزات الرئيسية التالية:
-
تمثيل موحّد للنماذج: يحدد ONNX مجموعة موحّدة من العمليات (مثل الالتفافات والطبقات وغيرها) وتنسيقًا قياسيًا للبيانات. وعند تحويل نموذج إلى تنسيق ONNX، تُترجم بنيته وأوزانه إلى هذا التمثيل الموحّد. ويضمن هذا التوحيد إمكانية فهم النموذج من قِبل أي إطار عمل يدعم ONNX.
-
إدارة الإصدارات والتوافق مع الإصدارات السابقة: يحتفظ ONNX بنظام لإدارة إصدارات عملياته. ويضمن ذلك استمرار إمكانية استخدام النماذج المنشأة بإصدارات أقدم حتى مع تطور المعيار. ويُعد التوافق مع الإصدارات السابقة ميزة أساسية تحول دون تقادم النماذج بسرعة.
-
تمثيل النماذج القائم على الرسوم البيانية: يمثّل ONNX النماذج على هيئة رسوم بيانية حسابية. وتُعد هذه البنية القائمة على الرسوم البيانية طريقة عامة لتمثيل نماذج التعلم الآلي، إذ تمثل العقد العمليات أو الحسابات، بينما تمثل الحواف الموترات المتدفقة بينها. ويسهل تكييف هذا التنسيق مع أُطر العمل المختلفة التي تمثل النماذج أيضًا على هيئة رسوم بيانية.
-
الأدوات والمنظومة المحيطة: تتوفر منظومة غنية من الأدوات المتعلقة بـ ONNX، وتساعد على تحويل النماذج وتصورها وتحسينها. وتسهّل هذه الأدوات على المطورين العمل مع نماذج ONNX وتحويل النماذج بسلاسة بين أُطر العمل المختلفة.
الاستخدامات الشائعة لـ ONNX#
قبل الانتقال إلى كيفية تصدير نماذج YOLO26 إلى تنسيق ONNX، دعونا نلقِ نظرة على الاستخدامات المعتادة لنماذج ONNX.
النشر على CPU#
كثيرًا ما تُنشر نماذج ONNX على وحدات CPU نظرًا لتوافقها مع ONNX Runtime، وهي بيئة تشغيل محسّنة للتنفيذ على CPU. وتُحسّن هذه البيئة سرعة الاستدلال بدرجة كبيرة وتجعل النشر الآني على CPU ممكنًا.
خيارات النشر المدعومة#
مع أن نماذج ONNX تُستخدم عادةً على وحدات CPU، يمكن نشرها أيضًا على المنصات التالية:
-
تسريع GPU: يدعم ONNX تسريع GPU بالكامل على وحدات NVIDIA GPU عبر CUDA، وعلى وحدات AMD GPU عبر ROCm وMIGraphX.
-
الأجهزة الطرفية والمحمولة: يمتد دعم ONNX إلى الأجهزة الطرفية والمحمولة، ما يجعله مثاليًا للاستدلال على الجهاز وفي الوقت الفعلي. فهو خفيف الوزن ومتوافق مع الأجهزة الطرفية، ويشكّل أساسًا لتنسيقات NPU الخاصة بالمورّدين مثل Huawei Ascend وQualcomm QNN لأجهزة Snapdragon وRKNN لوحدات NPU من Rockchip.
-
متصفحات الويب: يمكن تشغيل ONNX مباشرةً في متصفحات الويب، لتشغيل تطبيقات الذكاء الاصطناعي التفاعلية والديناميكية القائمة على الويب.
المهام المدعومة#
يدعم تصدير ONNX جميع مهام Ultralytics السبعة. ولا يتوفر التجزئة الدلالية وتقدير العمق إلا مع YOLO26، وهي العائلة الوحيدة التي تتضمن رأسي المهام هذين.
تصدير نماذج YOLO26 إلى ONNX#
يمكنك توسيع توافق النماذج ومرونة النشر بتحويل نماذج YOLO26 إلى تنسيق ONNX. وتوفر Ultralytics YOLO26 عملية تصدير مباشرة يمكنها تحسين أداء نموذجك بشكل ملحوظ عبر المنصات المختلفة.
التثبيت#
لتثبيت الحزمة المطلوبة، شغّل:
# Install the required package for YOLO26
pip install ultralyticsللحصول على تعليمات مفصلة وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت YOLO26. وإذا واجهت أي صعوبات أثناء تثبيت الحزم المطلوبة لـ YOLO26، فاستعن بـدليل المشكلات الشائعة للاطلاع على الحلول والنصائح.
الاستخدام#
قبل التعمق في تعليمات الاستخدام، احرص على الاطلاع على مجموعة نماذج YOLO26 التي تقدمها Ultralytics. سيساعدك ذلك على اختيار النموذج الأنسب لمتطلبات مشروعك.
يدعم تنسيق ONNX أوضاع التصدير والتنبؤ والتحقق. صدّر نموذجك، ثم حمّل النموذج المُصدّر لإجراء الاستدلال أو التحقق من دقته.
from ultralytics import YOLO
# تحميل نموذج YOLO26
model = YOLO("yolo26n.pt")
# تصدير النموذج إلى تنسيق ONNX
model.export(format="onnx") # ينشئ 'yolo26n.onnx'
# صدّر نموذج ONNX مكمّمًا إلى INT8 باستخدام بيانات المعايرة
model.export(format="onnx", quantize=8, data="coco8.yaml") # ينشئ الملف 'yolo26n_int8.onnx'from ultralytics import YOLO
# تحميل نموذج ONNX المُصدَّر
model = YOLO("yolo26n.onnx")
# تنفيذ الاستدلال
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# تحميل نموذج ONNX المُصدَّر
model = YOLO("yolo26n.onnx")
# # التحقق من الدقة على مجموعة بيانات COCO8
metrics = model.val(data="coco8.yaml")وسيطات التصدير#
عند تصدير نموذج YOLO26 إلى تنسيق ONNX، يمكنك تخصيص العملية باستخدام وسائط متنوعة لتحسينها وفق احتياجات النشر الخاصة بك:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'onnx' | التنسيق المستهدف للنموذج المُصدَّر، ويحدد مدى توافقه مع بيئات النشر المختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب كمدخل للنموذج. يمكن تحديده كعدد صحيح للصور المربعة أو كصف (height, width) للأبعاد المحددة. |
quantize | int أو str | None | دقة التكميم: 16 (FP16) أو 8 (تكميم ثابت إلى INT8 باستخدام ONNX Runtime وصور معايرة من data، ما ينتج نموذجًا _int8.onnx)؛ أما 32 أو عدم تعيينه فيعني FP32. ويُصدّر checkpoint مدرَّب باستخدام quantize=8 دائمًا إلى INT8 كعُقد Q/DQ من النطاقات التي يتضمنها، دون معايرة وباستخدام الاسم العادي .onnx. ويحل هذا محل الرايتين المهجورتين half وint8. |
data | str | None | ملف YAML لمجموعة البيانات المستخدمة في معايرة INT8؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا لم يُحدّد هذا الملف مع quantize=8، تختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج؛ ولا يحتاج checkpoint المدرَّب باستخدام quantize=8 إلى مجموعة بيانات. |
fraction | float أو int أو list | 1.0 | مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0. |
dynamic | bool | False | يتيح أحجام إدخال ديناميكية، ما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. |
simplify | bool | True | يُبسّط مخطط النموذج باستخدام onnxslim، ما قد يحسّن الأداء والتوافق. |
opset | int | None | يحدد إصدار ONNX opset لضمان التوافق مع محللات ONNX وبيئات التشغيل المختلفة. إذا لم يُعيّن، فسيُستخدم أحدث إصدار مدعوم. |
nms | bool، اختياري | None | اختر المخرجات الأولية (None، الافتراضي)، أو NMS المضمّن (True)، أو الرأس الخالي من NMS (False). |
batch | int | 1 | يحدد حجم الدفعة للاستدلال بنموذج التصدير، أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدّر بالتزامن في وضع predict. |
device | str | None | يحدد الجهاز المستخدم للتصدير: GPU (device=0)، أو CPU (device=cpu)، أو MPS لأجهزة Apple silicon (device=mps). |
لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.
نشر نماذج YOLO26 المُصدّرة إلى ONNX#
بعد تصدير نماذج Ultralytics YOLO26 إلى تنسيق ONNX بنجاح، تتمثل الخطوة التالية في نشرها ضمن بيئات متنوعة. للحصول على تعليمات مفصلة حول نشر نماذج ONNX، راجع الموارد التالية:
-
توثيق Python API لـ ONNX Runtime: يقدم هذا الدليل معلومات أساسية حول تحميل نماذج ONNX وتشغيلها باستخدام ONNX Runtime.
-
النشر على الأجهزة الطرفية: اطّلع على صفحة الوثائق هذه لمعرفة أمثلة متنوعة على نشر نماذج ONNX على الأجهزة الطرفية.
-
دروس ONNX على GitHub: مجموعة من الدروس الشاملة التي تغطي جوانب متعددة من استخدام نماذج ONNX وتنفيذها في سيناريوهات مختلفة.
-
خادم Triton للاستدلال: تعرّف على كيفية نشر نماذج ONNX باستخدام Triton Inference Server من NVIDIA لإجراء عمليات نشر عالية الأداء وقابلة للتوسع.
استدلال GPU من AMD باستخدام MIGraphX#
تشغّل Ultralytics نماذج ONNX المُصدّرة على وحدات AMD GPU عبر موفّر تنفيذ MIGraphX في ONNX Runtime. على نظام ROCm (HIP)، تثبّت الواجهة الخلفية لـ ONNX الإضافة onnxruntime-ep-migraphx عند الاستخدام لأول مرة، وتختار MIGraphXExecutionProvider تلقائيًا دون الحاجة إلى تغيير الشيفرة، مع دعم جميع مهام YOLO26. راجع دليل الاستدلال على GPU من AMD للتعرّف على المتطلبات الأساسية والتثبيت والاستخدام واختبارات الأداء وذاكرة التخزين المؤقت للبرامج المترجمة.
الملخص#
تعرّفت في هذا الدليل على كيفية تصدير نماذج Ultralytics YOLO26 إلى تنسيق ONNX لزيادة قابلية التشغيل البيني والأداء عبر منصات متعددة. كما تعرّفت على ONNX Runtime وخيارات النشر باستخدام ONNX.
يُعد تصدير ONNX واحدًا من العديد من تنسيقات التصدير التي تدعمها Ultralytics YOLO26، ما يتيح نشر نماذجك في أي بيئة تقريبًا. وبحسب احتياجاتك، قد ترغب أيضًا في استكشاف خيارات تصدير أخرى مثل TensorRT لتحقيق أقصى أداء لـ GPU أو CoreML لأجهزة Apple.
لمزيد من التفاصيل حول الاستخدام، تفضّل بزيارة الوثائق الرسمية لـ ONNX.
وإذا رغبت في معرفة المزيد عن عمليات دمج Ultralytics YOLO26 الأخرى، فتفضّل بزيارة صفحة دليل الدمج. ستجد فيها الكثير من الموارد والرؤى المفيدة.
الأسئلة الشائعة#
لتصدير نماذج YOLO26 إلى تنسيق ONNX باستخدام Ultralytics، اتبع الخطوات التالية:
الاستخدامfrom ultralytics import YOLO # تحميل نموذج YOLO26 model = YOLO("yolo26n.pt") # تصدير النموذج إلى تنسيق ONNX model.export(format="onnx") # ينشئ 'yolo26n.onnx' # تحميل نموذج ONNX المُصدَّر onnx_model = YOLO("yolo26n.onnx") # تنفيذ الاستدلال results = onnx_model("https://ultralytics.com/images/bus.jpg")لمزيد من التفاصيل، تفضّل بزيارة وثائق التصدير.
يوفر استخدام ONNX Runtime لنشر نماذج YOLO26 عدة مزايا:
- التوافق عبر المنصات: يدعم ONNX Runtime منصات متعددة مثل Windows وmacOS وLinux، ما يضمن تشغيل نماذجك بسلاسة في بيئات مختلفة.
- تسريع الأجهزة: يمكن لـ ONNX Runtime الاستفادة من التحسينات الخاصة بوحدات CPU وGPU والمسرّعات المخصصة، ما يوفّر استدلالًا عالي الأداء.
- قابلية التشغيل البيني لأُطر العمل: يمكن بسهولة تحويل النماذج المدرَّبة باستخدام أُطر عمل شائعة مثل PyTorch أو TensorFlow إلى تنسيق ONNX وتشغيلها باستخدام ONNX Runtime.
- تحسين الأداء: يمكن لـ ONNX Runtime تحقيق تسريع يصل إلى 3 أضعاف على CPU مقارنةً بنماذج PyTorch الأصلية، ما يجعله مثاليًا لسيناريوهات النشر التي تكون فيها موارد GPU محدودة.
تعرّف على المزيد من خلال مراجعة وثائق ONNX Runtime.
يمكن نشر نماذج YOLO26 المُصدَّرة إلى ONNX على منصات متنوعة، منها:
- وحدات CPU: استخدام ONNX Runtime لاستدلال مُحسَّن على CPU.
- وحدات NVIDIA GPU: الاستفادة من NVIDIA CUDA لتسريع GPU عالي الأداء.
- وحدات AMD GPU: استخدام AMD ROCm وموفّر تنفيذ MIGraphX لتسريع GPU عالي الأداء على Linux.
- أجهزة الحافة: تشغيل نماذج خفيفة على أجهزة الحافة والأجهزة المحمولة لإجراء الاستدلال في الوقت الفعلي وعلى الجهاز.
- متصفحات الويب: تنفيذ النماذج مباشرةً داخل متصفحات الويب لتطبيقات تفاعلية قائمة على الويب.
- الخدمات السحابية: النشر على منصات سحابية تدعم تنسيق ONNX لإجراء استدلال قابل للتوسع.
لمزيد من المعلومات، اطّلع على دليلنا حول خيارات نشر النماذج.
يوفر استخدام تنسيق ONNX لنماذج Ultralytics YOLO26 فوائد عديدة:
- قابلية التشغيل البيني: يتيح ONNX نقل النماذج بسلاسة بين أُطر تعلّم الآلة المختلفة.
- تحسين الأداء: يمكن لـ ONNX Runtime تحسين أداء النموذج من خلال الاستفادة من التحسينات الخاصة بالأجهزة.
- المرونة: يدعم ONNX بيئات نشر متنوعة، ما يتيح لك استخدام النموذج نفسه على منصات مختلفة دون تعديل.
- التوحيد القياسي: يوفر ONNX تنسيقًا موحدًا يحظى بدعم واسع في المجال، مما يضمن التوافق على المدى الطويل.
راجع الدليل الشامل حول تصدير نماذج YOLO26 إلى ONNX.
عند تصدير نماذج YOLO26 إلى ONNX، قد تواجه مشكلات شائعة مثل عدم توافق التبعيات أو العمليات غير المدعومة. لاستكشاف هذه المشكلات وإصلاحها:
- تحقّق من تثبيت الإصدارات الصحيحة من التبعيات المطلوبة.
- راجع وثائق ONNX الرسمية للاطلاع على المعاملات والميزات المدعومة.
- راجع رسائل الخطأ بحثًا عن مؤشرات، واستعن بـدليل المشكلات الشائعة من Ultralytics.
- جرّب استخدام وسائط تصدير مختلفة مثل
simplify=Trueأو ضبط إصدارopset. - لمعالجة مشكلات أحجام الإدخال الديناميكية، اضبط
dynamic=Trueأثناء التصدير.
إذا استمرت المشكلات، فتواصل مع فريق دعم Ultralytics للحصول على مزيد من المساعدة.