تصدير ONNX لنماذج YOLO26#
استدلال ONNX على CPU أسرع بنحو 43%: مقارنة بين YOLO26n وYOLO11n
- يعمل YOLO26n بسرعة تصل إلى 43% أعلى من YOLO11n في استدلال ONNX على CPU (Intel Xeon CPU @ 2.00 GHz). راجع صفحة نموذج YOLO26 للاطلاع على المقارنة الكاملة.
غالبًا، عند نشر نماذج الرؤية الحاسوبية، ستحتاج إلى تنسيق نموذج يتسم بالمرونة والتوافق مع منصات متعددة.
يعمل تصدير نماذج Ultralytics YOLO26 إلى تنسيق ONNX على تبسيط عملية النشر وضمان الأداء الأمثل في مختلف البيئات. يوضح لك هذا الدليل كيفية تحويل نماذج YOLO26 بسهولة إلى ONNX وتعزيز قابليتها للتوسع وفعاليتها في التطبيقات الواقعية.
Watch: Ultralytics YOLO26 vs Ultralytics YOLO11 ONNX Inference Test | ~43% Faster Inference with 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 CUDA. وللتدريب والاستدلال الأصليين على وحدات GPU من AMD، استخدم PyTorch ROCm؛ إذ يظل ملف ONNX بحاجة إلى وقت تشغيل متوافق مع AMD.
-
الأجهزة الطرفية والمحمولة: يمتد 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
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
model.export(format="onnx") # creates 'yolo26n.onnx'
# Export an INT8-quantized ONNX model with calibration data
model.export(format="onnx", quantize=8, data="coco8.yaml") # creates 'yolo26n_int8.onnx'from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Validate accuracy on the COCO8 dataset
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. نقطة التحقق المُدربة باستخدام quantize=8 تُصدّر دائماً INT8 كعقد Q/DQ من النطاقات التي تحملها، دون معايرة وتحت اسم .onnx البسيط. تحل محل علامات half/int8 المهملة. |
data | str | None | ملف YAML الخاص بمجموعة البيانات المستخدم لمعايرة INT8؛ بينما يأخذ التصنيف بدلاً من ذلك دليلاً لمجموعة البيانات أو اسم مجموعة بيانات مدمجاً. إذا تم تخطيه مع quantize=8، فإن Ultralytics يحدد مجموعة بيانات المعايرة الافتراضية لمهمة النموذج؛ بينما لا تحتاج نقطة التحقق المُدربة باستخدام quantize=8 إلى أي منها. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الجزئية كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم ذات العنصرين test ممتلئًا، بينما تتخطى 0. |
dynamic | bool | False | يسمح بأحجام إدخال ديناميكية، مما يعزز المرونة في التعامل مع أبعاد الصور المتفاوتة. |
simplify | bool | True | يبسّط الرسم البياني للنموذج باستخدام onnxslim، ما قد يحسن الأداء والتوافق. |
opset | int | None | يحدد إصدار opset في ONNX لتحقيق التوافق مع محللات 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 من NVIDIA لإجراء عمليات نشر عالية الأداء وقابلة للتوسع.
الملخص#
تعلمت في هذا الدليل كيفية تصدير نماذج Ultralytics YOLO26 إلى تنسيق ONNX لزيادة قابليتها للتشغيل البيني وأدائها عبر المنصات المختلفة. كما تعرفت على ONNX Runtime وخيارات نشر ONNX.
يُعد تصدير ONNX واحدًا فقط من بين العديد من تنسيقات التصدير التي تدعمها Ultralytics YOLO26، ما يتيح لك نشر نماذجك في أي بيئة تقريبًا. وبناءً على احتياجاتك الخاصة، قد ترغب أيضًا في استكشاف خيارات تصدير أخرى مثل TensorRT لتحقيق أقصى أداء لـGPU أو CoreML لأجهزة Apple.
لمزيد من التفاصيل حول الاستخدام، تفضل بزيارة الوثائق الرسمية لـONNX.
وإذا كنت ترغب أيضًا في معرفة المزيد عن تكاملات Ultralytics YOLO26 الأخرى، فتفضل بزيارة صفحة دليل التكامل. ستجد هناك الكثير من الموارد والرؤى المفيدة.
الأسئلة الشائعة#
لتصدير نماذج YOLO26 إلى تنسيق ONNX باستخدام Ultralytics، اتبع الخطوات التالية:
الاستخدامfrom ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Export the model to ONNX format model.export(format="onnx") # creates 'yolo26n.onnx' # Load the exported ONNX model onnx_model = YOLO("yolo26n.onnx") # Run inference 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.
- وحدات GPU: الاستفادة من NVIDIA CUDA لتوفير تسريع GPU عالي الأداء.
- الأجهزة الطرفية: تشغيل نماذج خفيفة الوزن على الأجهزة الطرفية والمحمولة لإجراء استدلال فوري وعلى الجهاز.
- متصفحات الويب: تنفيذ النماذج مباشرةً داخل متصفحات الويب لتشغيل تطبيقات ويب تفاعلية.
- الخدمات السحابية: النشر على منصات سحابية تدعم تنسيق ONNX لإجراء استدلال قابل للتوسع.
لمزيد من المعلومات، استكشف دليلنا حول خيارات نشر النماذج.
يوفر استخدام تنسيق ONNX لنماذج Ultralytics YOLO26 فوائد عديدة:
- قابلية التشغيل البيني: يتيح ONNX نقل النماذج بسلاسة بين أطر التعلم الآلي المختلفة.
- تحسين الأداء: يمكن لـONNX Runtime تحسين أداء النموذج من خلال الاستفادة من التحسينات الخاصة بالأجهزة.
- المرونة: يدعم ONNX بيئات نشر متنوعة، ما يتيح لك استخدام النموذج نفسه على منصات مختلفة دون تعديل.
- التوحيد القياسي: يوفر ONNX تنسيقًا موحدًا يحظى بدعم واسع في المجال، ما يضمن التوافق طويل الأمد.
راجع الدليل الشامل حول تصدير نماذج YOLO26 إلى ONNX.
عند تصدير نماذج YOLO26 إلى ONNX، قد تواجه مشكلات شائعة مثل عدم تطابق التبعيات أو العمليات غير المدعومة. لاستكشاف هذه المشكلات وإصلاحها:
- تحقق من تثبيت الإصدار الصحيح من التبعيات المطلوبة.
- تحقق من وثائق ONNX الرسمية للاطلاع على العوامل والميزات المدعومة.
- راجع رسائل الخطأ بحثًا عن مؤشرات، واستشر دليل المشكلات الشائعة في Ultralytics.
- جرّب استخدام وسائط تصدير مختلفة مثل
simplify=Trueأو ضبط إصدارopset. - بالنسبة إلى مشكلات حجم الإدخال الديناميكي، عيّن
dynamic=Trueأثناء التصدير.
إذا استمرت المشكلات، فاتصل بدعم Ultralytics للحصول على مزيد من المساعدة.