تخطي إلى المحتوى

تصدير النماذج باستخدام Ultralytics YOLO

النظام البيئي Ultralytics YOLO وعمليات التكامل

مقدمة

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



شاهد: كيفية تصدير نموذج Ultralytics YOLO المدرب خصيصًا وتشغيل الاستدلال المباشر على كاميرا الويب.

لماذا تختار وضع التصدير في YOLO11؟

  • متعدد الاستخدامات: تصدير إلى تنسيقات متعددة بما في ذلك ONNX و TensorRT و CoreML والمزيد.
  • الأداء: احصل على تسريع يصل إلى 5 أضعاف لوحدة معالجة الرسوميات (GPU) باستخدام TensorRT وتسريع 3 أضعاف لوحدة المعالجة المركزية (CPU) باستخدام ONNX أو OpenVINO.
  • التوافق: اجعل نموذجك قابلاً للنشر عالميًا عبر العديد من بيئات الأجهزة والبرامج.
  • سهولة الاستخدام: واجهة سطر أوامر (CLI) بسيطة وواجهة برمجة تطبيقات python لتصدير النموذج بسرعة وسهولة.

الميزات الرئيسية لوضع التصدير

فيما يلي بعض الوظائف البارزة:

  • تصدير بنقرة واحدة: أوامر بسيطة للتصدير إلى تنسيقات مختلفة.
  • تصدير الدُفعات: تصدير النماذج القادرة على الاستدلال المجمّع.
  • الاستدلال الأمثل: النماذج المصدرة مُحسَّنة لأوقات استدلال أسرع.
  • مقاطع فيديو تعليمية: أدلة ودروس متعمقة لتجربة تصدير سلسة.

نصيحة

  • يمكنك التصدير إلى ONNX أو OpenVINO للحصول على تسريع لوحدة المعالجة المركزية (CPU) يصل إلى 3 أضعاف.
  • يمكنك التصدير إلى TensorRT للحصول على تسريع لوحدة معالجة الرسومات (GPU) يصل إلى 5 أضعاف.

أمثلة الاستخدام

يمكنك تصدير نموذج YOLO11n إلى تنسيق مختلف مثل ONNX أو TensorRT. راجع قسم الوسائط أدناه للحصول على قائمة كاملة بوسائط التصدير.

مثال

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

الوسائط

يوضح هذا الجدول بالتفصيل التكوينات والخيارات المتاحة لتصدير نماذج YOLO إلى تنسيقات مختلفة. هذه الإعدادات ضرورية لتحسين أداء النموذج المصدر وحجمه وتوافقه عبر الأنظمة الأساسية والبيئات المختلفة. يضمن التكوين الصحيح أن النموذج جاهز للنشر في التطبيق المقصود بأقصى قدر من الكفاءة.

الوسيطة النوع افتراضي الوصف
format str 'torchscript' التنسيق المستهدف للنموذج المصدر، مثل 'onnx', 'torchscript', 'engine' (TensorRT) أو غيرها. تتيح كل صيغة التوافق مع مختلف بيئات النشر.
imgsz int أو tuple 640 حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة (مثل، 640 لـ 640 × 640) أو صف. (height, width) لأبعاد محددة.
keras bool False يتيح التصدير إلى تنسيق Keras لـ TensorFlow SavedModel، مما يوفر توافقًا مع TensorFlow serving و APIs.
optimize bool False يطبق تحسينًا للأجهزة المحمولة عند التصدير إلى TorchScript، مما قد يقلل من حجم النموذج ويحسن أداء الاستدلال. غير متوافق مع تنسيق NCNN أو أجهزة CUDA.
half bool False تمكين تحديد كمية FP16 (نصف الدقة)، مما يقلل من حجم النموذج وربما يسرع الاستدلال على الأجهزة المدعومة. غير متوافق مع تحديد كمية INT8 أو الصادرات التي تعمل بوحدة المعالجة المركزية فقط لـ ONNX.
int8 bool False يقوم بتنشيط تكميم INT8، مما يزيد من ضغط النموذج وتسريع الاستدلال مع الحد الأدنى من فقدان الدقة، في المقام الأول للأجهزة الطرفية. عند استخدامه مع TensorRT، فإنه ينفذ التكميم بعد التدريب (PTQ).
dynamic bool False يسمح بأحجام إدخال ديناميكية لصادرات ONNX و TensorRT و OpenVINO، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. يتم تعيينه تلقائيًا إلى True عند استخدام TensorRT مع INT8.
simplify bool True يبسط الرسم البياني للنموذج لصادرات ONNX مع onnxslim، مما قد يحسن الأداء والتوافق مع محركات الاستدلال.
opset int None يحدد إصدار ONNX opset للتوافق مع مختلف المحللات اللغوية ONNX وأوقات التشغيل. إذا لم يتم تعيينه، فسيتم استخدام أحدث إصدار مدعوم.
workspace float أو None None يحدد الحد الأقصى لحجم مساحة العمل بوحدة الجيغابايت (GiB) لـ TensorRT تحسينات، موازنة استخدام الذاكرة والأداء. استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز.
nms bool False يضيف قمع غير الأقصى (NMS) إلى النموذج المصدر عند دعمه (انظر صيغ التصدير)، مما يحسن كفاءة المعالجة اللاحقة للكشف. غير متوفر لنماذج end2end.
batch int 1 يحدد حجم الدُفعة الاستنتاجية لنموذج التصدير أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدَّر في وقت واحد في predict الوضع. بالنسبة إلى عمليات تصدير Edge TPU، يتم تعيين هذا تلقائيًا إلى 1.
device str None يحدد الجهاز للتصدير: GPU (device=0)، وحدة معالجة مركزية (CPU) (device=cpu)، MPS لـ Apple silicon (device=mps) أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). تستخدم TensorRT وحدة معالجة الرسومات GPU تلقائيًا في عمليات التصدير.
data str 'coco8.yaml' مسار إلى مجموعة البيانات ملف التكوين (افتراضي: coco8.yaml)، وهو أمر ضروري لمعايرة تحديد الكميات INT8. إذا لم يتم تحديده مع تمكين INT8، فسيتم تعيين مجموعة بيانات افتراضية.
fraction float 1.0 يحدد جزء مجموعة البيانات المراد استخدامها لمعايرة القياس الكمي INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو أمر مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة.

يسمح تعديل هذه المعلمات بتخصيص عملية التصدير لتناسب متطلبات محددة، مثل بيئة النشر وقيود الأجهزة وأهداف الأداء. يعد اختيار التنسيق والإعدادات المناسبة أمرًا ضروريًا لتحقيق أفضل توازن بين حجم النموذج والسرعة و الدقة.

صيغ التصدير

تنسيقات تصدير YOLO11 المتاحة موجودة في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام format ، أي: format='onnx' أو format='engine'. يمكنك التنبؤ أو التحقق مباشرةً من النماذج التي تم تصديرها، أي: yolo predict model=yolo11n.onnx. يتم عرض أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.

التنسيق format الوسيطة النموذج البيانات الوصفية الوسائط
PyTorch - yolo11n.pt -
TorchScript torchscript yolo11n.torchscript imgsz, half, optimize, nms, batch, device
ONNX onnx yolo11n.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo11n_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo11n.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo11n.mlpackage imgsz, half, int8, nms, batch, device
TF SavedModel saved_model yolo11n_saved_model/ imgsz, keras, int8, nms, batch, device
TF GraphDef pb yolo11n.pb imgsz, batch, device
TF Lite tflite yolo11n.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo11n_edgetpu.tflite imgsz, device
TF.js tfjs yolo11n_web_model/ imgsz, half, int8, nms, batch, device
PaddlePaddle paddle yolo11n_paddle_model/ imgsz, batch, device
MNN mnn yolo11n.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo11n_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo11n_imx_model/ imgsz, int8, data, fraction, device
RKNN rknn yolo11n_rknn_model/ imgsz, batch, name, device

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

كيف يمكنني تصدير نموذج YOLO11 إلى تنسيق ONNX؟

يعد تصدير نموذج YOLO11 إلى تنسيق ONNX أمرًا مباشرًا باستخدام Ultralytics. فهو يوفر كلاً من طريقتي python و CLI لتصدير النماذج.

مثال

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

لمزيد من التفاصيل حول العملية، بما في ذلك الخيارات المتقدمة مثل التعامل مع أحجام الإدخال المختلفة، راجع دليل تكامل ONNX.

ما هي فوائد استخدام TensorRT لتصدير النماذج؟

يوفر استخدام TensorRT لتصدير النموذج تحسينات كبيرة في الأداء. يمكن لنماذج YOLO11 المصدرة إلى TensorRT تحقيق تسريع GPU يصل إلى 5x، مما يجعلها مثالية لتطبيقات الاستدلال في الوقت الفعلي.

  • تنوع الاستخدامات: تحسين النماذج لإعداد أجهزة معين.
  • السرعة: تحقيق استدلال أسرع من خلال التحسينات المتقدمة.
  • التوافق: التكامل بسلاسة مع أجهزة NVIDIA.

لمعرفة المزيد حول دمج TensorRT، راجع دليل دمج TensorRT.

كيف يمكنني تمكين تحديد الكمية INT8 عند تصدير نموذج YOLO11 الخاص بي؟

يعد تكميم INT8 طريقة ممتازة لضغط النموذج وتسريع الاستدلال، خاصة على الأجهزة الطرفية. إليك كيفية تمكين تكميم INT8:

مثال

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.pt format=engine int8=True # export TensorRT model with INT8 quantization

يمكن تطبيق تحديد الكميات INT8 على تنسيقات مختلفة، مثل TensorRT, OpenVINO، و CoreML. للحصول على أفضل نتائج للقياس الكمي، قم بتوفير مجموعة البيانات باستخدام data .

لماذا يعتبر حجم الإدخال الديناميكي مهمًا عند تصدير النماذج؟

يسمح حجم الإدخال الديناميكي للنموذج المصدَّر بمعالجة أبعاد الصور المتغيرة، مما يوفر المرونة ويحسن كفاءة المعالجة لحالات الاستخدام المختلفة. عند التصدير إلى تنسيقات مثل ONNX أو TensorRT، يضمن تمكين حجم الإدخال الديناميكي قدرة النموذج على التكيف مع أشكال الإدخال المختلفة بسلاسة.

لتفعيل هذه الخاصية، استخدم dynamic=True علامة أثناء التصدير:

مثال

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.pt format=onnx dynamic=True

يكون تغيير حجم الإدخال الديناميكي مفيدًا بشكل خاص للتطبيقات التي قد تختلف فيها أبعاد الإدخال، مثل معالجة الفيديو أو عند التعامل مع الصور من مصادر مختلفة.

ما هي أهم حجج التصدير التي يجب مراعاتها لتحسين أداء النموذج؟

يُعد فهم وتكوين وسائط التصدير أمرًا بالغ الأهمية لتحسين أداء النموذج:

  • format: التنسيق المستهدف للنموذج المُصدَّر (على سبيل المثال، onnx, torchscript, tensorflow).
  • imgsz: حجم الصورة المطلوب لإدخال النموذج (على سبيل المثال، 640 أو (height, width)).
  • half: يتيح تفعيل تحديد الكم FP16، مما يقلل من حجم النموذج وربما يسرع الاستدلال.
  • optimize: يطبق تحسينات محددة للبيئات المحمولة أو المقيدة.
  • int8: تمكين تحديد كمية INT8، وهو مفيد للغاية لـ الذكاء الاصطناعي المتوفر على الحافة (edge AI) عمليات النشر.

للنشر على منصات أجهزة معينة، ضع في اعتبارك استخدام تنسيقات تصدير متخصصة مثل TensorRT لوحدات معالجة الرسوميات NVIDIA، أو CoreML لأجهزة Apple، أو Edge TPU لأجهزة Google Coral.



📅 تم الإنشاء منذ سنة واحدة ✏️ تم التحديث منذ 4 أشهر

تعليقات