Meet YOLO26: next-gen vision AI.

Link to this sectionتصدير النموذج باستخدام Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Link to this sectionمقدمة#

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



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

Link to this sectionلماذا تختار وضع التصدير في YOLO26؟#

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

Link to this sectionالميزات الرئيسية لوضع التصدير#

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

  • تصدير بنقرة واحدة: أوامر بسيطة للتصدير إلى صيغ مختلفة.
  • تصدير الدفعات (Batch Export): تصدير نماذج قادرة على الاستدلال بالدفعات.
  • استدلال محسّن: يتم تحسين النماذج المصدرة للحصول على أوقات استدلال أسرع.
  • فيديوهات تعليمية: أدلة ودروس متعمقة للحصول على تجربة تصدير سلسة.
نصيحة
  • قم بالتصدير إلى ONNX أو OpenVINO للحصول على زيادة في سرعة CPU تصل إلى 3 أضعاف.
  • قم بالتصدير إلى TensorRT للحصول على زيادة في سرعة GPU تصل إلى 5 أضعاف.

Link to this sectionأمثلة الاستخدام#

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

مثال
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")

Link to this sectionالوسائط (Arguments)#

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

الوسيطالنوعالافتراضيالوصف
formatstr'torchscript'الصيغة المستهدفة للنموذج المصدر، مثل 'onnx' أو 'torchscript' أو 'engine' (TensorRT) أو غيرها. تتيح كل صيغة التوافق مع بيئات نشر مختلفة.
imgszint أو tuple640حجم الصورة المطلوب لمدخلات النموذج. يمكن أن يكون عدداً صحيحاً للصور المربعة (مثلاً 640 لـ 640×640) أو صفاً (tuple) (height, width) لأبعاد محددة.
kerasboolFalseيُمكّن التصدير إلى صيغة Keras لـ TensorFlow SavedModel، مما يوفر التوافق مع خدمة TensorFlow وواجهات البرمجة الخاصة بها.
optimizeboolFalseيطبق تحسينات للأجهزة المحمولة عند التصدير إلى TorchScript، مما يقلل من حجم النموذج ويحسن أداء الاستدلال. غير متوافق مع صيغة NCNN أو أجهزة CUDA. بالنسبة لـ DEEPX، يُمكّن تحسيناً أعلى للمترجم مما يقلل من زمن انتقال الاستدلال ويزيد من وقت التجميع.
halfboolFalseيُمكّن تكميم FP16 (دقة نصفية)، مما يقلل من حجم النموذج وربما يسرع الاستدلال على الأجهزة المدعومة. غير متوافق مع تكميم INT8 أو التصدير على CPU فقط. متاح فقط لصيغ معينة، مثل ONNX (انظر أدناه).
int8boolFalseActivates INT8 quantization, further compressing the model and speeding up inference with minimal accuracy loss, primarily for edge devices. When used with TensorRT, performs post-training quantization (PTQ).
dynamicboolFalseيسمح بأحجام مدخلات ديناميكية لتصديرات TorchScript و ONNX و OpenVINO و TensorRT و CoreML، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة.
simplifyboolTrueيبسّط مخطط النموذج لتصديرات ONNX باستخدام onnxslim، مما قد يحسن الأداء والتوافق مع محركات الاستدلال.
opsetintNoneيحدد إصدار opset الخاص بـ ONNX للتوافق مع محللات ومُشغلات ONNX المختلفة. إذا لم يتم ضبطه، فإنه يستخدم أحدث إصدار مدعوم.
workspacefloat أو NoneNoneيحدد الحد الأقصى لحجم مساحة العمل بـ GiB لتحسينات TensorRT، مما يوازن بين استخدام الذاكرة والأداء. استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز.
nmsboolFalseيضيف خاصية كبت غير الحد الأقصى (NMS) إلى النموذج المصدر عند دعمها (انظر صيغ التصدير)، مما يحسن كفاءة معالجة الكشف اللاحقة. غير متاح للنماذج الشاملة (end2end).
batchint1يحدد حجم استدلال الدفعة للنموذج المصدر أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المصدر في وقت واحد في وضع predict. بالنسبة لتصديرات Edge TPU، يتم ضبط هذا تلقائياً على 1.
devicestrNoneيحدد الجهاز للتصدير: GPU (device=0)، أو CPU (device=cpu)، أو MPS لرقاقات Apple silicon (device=mps)، أو Huawei Ascend NPU (device=npu أو device=npu:0)، أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). تستخدم تصديرات TensorRT وحدة GPU تلقائياً.
datastr'coco8.yaml'مسار ملف تكوين مجموعة البيانات، وهو ضروري لمعايرة تكميم INT8. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام coco8.yaml كخيار احتياطي للمعايرة.
fractionfloat1.0يحدد جزءاً من مجموعة البيانات لاستخدامه في معايرة تكميم INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة.
end2endboolNoneيتجاوز وضع النهاية إلى النهاية (end-to-end) في نماذج YOLO التي تدعم الاستدلال بدون NMS (مثل YOLO26 و YOLOv10). ضبطه على False يتيح لك تصدير هذه النماذج لتكون متوافقة مع خط معالجة ما بعد الكشف التقليدي القائم على NMS. انظر دليل الكشف الشامل (End-to-End) للحصول على التفاصيل.

Adjusting these parameters allows for customization of the export process to fit specific requirements, such as deployment environment, hardware constraints, and performance targets. Selecting the appropriate format and settings is essential for achieving the best balance between model size, speed, and accuracy.

Link to this sectionتنسيقات التصدير#

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

التنسيقوسيط formatالنموذجالبيانات الوصفيةالوسائط (Arguments)
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, 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, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, data, fraction, 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, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, int8, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, int8, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn_model/imgsz, batch, name, int8, data, fraction, device

Link to this sectionالأسئلة الشائعة#

Link to this sectionكيف يمكنني تصدير نموذج 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")

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

Link to this sectionما هي فوائد استخدام TensorRT لتصدير النموذج؟#

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

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

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

Link to this sectionكيف يمكنني تمكين تكميم INT8 عند تصدير نموذج YOLO26 الخاص بي؟#

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

مثال
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")

يمكن تطبيق تكميم INT8 على صيغ متنوعة، مثل ONNX و TensorRT و OpenVINO و CoreML و Rockchip RKNN. للحصول على نتائج تكميم مثالية، قدم مجموعة بيانات تمثيلية باستخدام وسيط data.

Link to this sectionلماذا يعد حجم المدخلات الديناميكي مهماً عند تصدير النماذج؟#

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

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

مثال
from ultralytics import YOLO

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

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

Link to this sectionما هي أهم وسائط التصدير التي يجب مراعاتها لتحسين أداء النموذج؟#

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

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

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

Link to this sectionما الذي تمثله مصفوفات الإخراج (output tensors) في نماذج YOLO المصدرة؟#

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

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

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

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

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

Link to this sectionلماذا تكون output0 بصيغة FP32 عند التصدير مع half=True و end2end=True؟#

عند التصدير مع half=True (أو int8=True)، يتم تحويل معظم المصفوفات إلى دقة أقل لتقليل حجم النموذج وتحسين الأداء. ومع ذلك، عند تمكين end2end=True، يتم تضمين معالجة ما بعد الاستدلال (بما في ذلك فهارس الفئات) مباشرة في الرسم البياني المصدر.

تحتوي مصفوفة output0 على فهارس الفئات، والتي يتم تمثيلها داخلياً كقيم فاصلة عائمة. لا يمكن لـ FP16 تمثيل القيم الصحيحة فوق 2048 بشكل موثوق بسبب دقة mantissa المحدودة. لتجنب فقدان الدقة المحتمل أو معرفات الفئات غير الصحيحة، يتم الاحتفاظ بـ output0 عن عمد بصيغة FP32.

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

إذا كانت مخرجات FP16 الكاملة مطلوبة، قم بالتصدير مع end2end=False وقم بإجراء معالجة ما بعد الاستدلال خارجياً.

التعليقات