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

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

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

مقدمة

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



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

لماذا تختار وضع التصدير (Export Mode) الخاص بـ YOLO26؟

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

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

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

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

نصيحة

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

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

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

مثال

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

الوسائط

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

الوسيطةالنوعافتراضيالوصف
formatstr'torchscript'التنسيق المستهدف للنموذج المصدر، مثل 'onnx', 'torchscript', 'engine' (TensorRT) أو غيرها. تتيح كل صيغة التوافق مع مختلف بيئات النشر.
imgszint أو tuple640حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة (مثل، 640 لـ 640 × 640) أو صف. (height, width) لأبعاد محددة.
kerasboolFalseيتيح التصدير إلى تنسيق Keras لـ TensorFlow SavedModel، مما يوفر توافقًا مع TensorFlow serving و APIs.
optimizeboolFalseيطبق تحسينًا للأجهزة المحمولة عند التصدير إلى TorchScript، مما قد يقلل من حجم النموذج ويحسن أداء الاستدلال. غير متوافق مع تنسيق NCNN أو أجهزة CUDA.
halfboolFalseيتيح تفعيل FP16 (نصف الدقة) للقياس الكمي، مما يقلل من حجم النموذج وربما يسرع الاستدلال على الأجهزة المدعومة. غير متوافق مع القياس الكمي INT8 أو التصدير لوحدات المعالجة المركزية (CPU) فقط. متاح فقط لبعض التنسيقات، على سبيل المثال ONNX (انظر أدناه).
int8boolFalseيقوم بتنشيط تكميم INT8، مما يزيد من ضغط النموذج وتسريع الاستدلال مع الحد الأدنى من فقدان الدقة، في المقام الأول للأجهزة الطرفية. عند استخدامه مع TensorRT، فإنه ينفذ التكميم بعد التدريب (PTQ).
dynamicboolFalseيسمح بأحجام إدخال ديناميكية لصادرات ONNX و TensorRT و OpenVINO، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. يتم تعيينه تلقائيًا إلى True عند استخدام TensorRT مع INT8.
simplifyboolTrueيبسط الرسم البياني للنموذج لصادرات ONNX مع onnxslim، مما قد يحسن الأداء والتوافق مع محركات الاستدلال.
opsetintNoneيحدد إصدار ONNX opset للتوافق مع مختلف المحللات اللغوية ONNX وأوقات التشغيل. إذا لم يتم تعيينه، فسيتم استخدام أحدث إصدار مدعوم.
workspacefloat أو NoneNoneيحدد الحد الأقصى لحجم مساحة العمل بوحدة الجيغابايت (GiB) لـ TensorRT تحسينات، موازنة استخدام الذاكرة والأداء. استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز.
nmsboolFalseيضيف خاصية منع التداخل (NMS) إلى النموذج المُصدَّر عند دعمها (انظر صيغ التصدير)، مما يحسن كفاءة المعالجة اللاحقة للكشف. غير متوفر للنماذج الشاملة.
batchint1يحدد حجم الدُفعة الاستنتاجية لنموذج التصدير أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدَّر في وقت واحد في predict الوضع. بالنسبة إلى عمليات تصدير Edge TPU، يتم تعيين هذا تلقائيًا إلى 1.
devicestrNoneيحدد الجهاز للتصدير: GPU (device=0)، وحدة معالجة مركزية (CPU) (device=cpu)، MPS لـ Apple silicon (device=mps) أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). تستخدم TensorRT وحدة معالجة الرسومات GPU تلقائيًا في عمليات التصدير.
datastr'coco8.yaml'مسار إلى مجموعة البيانات ملف التكوين، الضروري لمعايرة التكميم INT8. إذا لم يتم تحديده مع تمكين INT8، coco8.yaml سيتم استخدامه كخيار احتياطي للمعايرة.
fractionfloat1.0يحدد جزء مجموعة البيانات المراد استخدامها لمعايرة القياس الكمي INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو أمر مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة.
end2endboolNoneيتجاوز الوضع من طرف إلى طرف في YOLO التي تدعم الاستدلال NMS(YOLO26، YOLOv10). تعيينه على False يتيح لك تصدير هذه النماذج لتكون متوافقة مع خط أنابيب المعالجة اللاحقة التقليدي NMS.

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

صيغ التصدير

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

التنسيقformat الوسيطةالنموذجالبيانات الوصفيةالوسائط
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, device
Axeleraaxelerayolo26n_axelera_model/imgsz, int8, data, fraction, device

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

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

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

مثال

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

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

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

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

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

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

كيف أقوم بتمكين تحديد الكمية INT8 (INT8 quantization) عند تصدير نموذج YOLO26 الخاص بي؟

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

مثال

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo26n.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("yolo26n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo26n.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.

ماذا تمثل tensors المخرجة في نماذج YOLO المصدرة؟

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

ل نماذج detect (على سبيل المثال، yolo26n.pt)، يكون الناتج عادةً tensor واحدًا على شكل (batch_size, 4 + num_classes, num_predictions) حيث تمثل القنوات إحداثيات المربع بالإضافة إلى درجات كل فئة، و num_predictions يعتمد على دقة إدخال التصدير (ويمكن أن يكون ديناميكيًا).

ل نماذج segment (على سبيل المثال، yolo26n-seg.pt)، ستحصل عادةً على مخرجين: tensor الأول على شكل (batch_size, 4 + num_classes + mask_dim, num_predictions) (صناديق، درجات الفئة، ومعاملات القناع)، وtensor الثاني على شكل (batch_size, mask_dim, proto_h, proto_w) يحتوي على نماذج أولية للقناع تُستخدم مع المعاملات لتوليد أقنعة الكائنات. تعتمد الأحجام على دقة إدخال التصدير (ويمكن أن تكون ديناميكية).

ل نماذج الوضعيات (على سبيل المثال، yolo26n-pose.pt)، يكون tensor الناتج عادةً على شكل (batch_size, 4 + num_classes + keypoint_dims, num_predictions)، حيث keypoint_dims يعتمد على مواصفات الوضعية (مثل عدد النقاط الرئيسية وما إذا كانت الثقة متضمنة)، و num_predictions يعتمد على دقة إدخال التصدير (ويمكن أن يكون ديناميكيًا).

توضح الأمثلة في أمثلة استدلال ONNX كيفية معالجة هذه المخرجات لكل نوع نموذج.



📅 تم الإنشاء قبل 2 أعوام ✏️ تم التحديث قبل 2 أيام
glenn-jocherBurhan-QUltralyticsAssistantambitious-octopusKayzwerraimbekovmpderrengerY-T-Gjk4eMatthewNoyceRizwanMunawar

تعليقات