YOLO Vision 2026:

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

Ultralytics YOLO ecosystem and integrations

مقدمة#

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



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

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

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

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

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

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

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

قم بتصدير نموذج 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")

الوسائط (Arguments)#

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

الوسيطالنوعالافتراضيالوصف
formatstr'torchscript'التنسيق المستهدف للنموذج المُصدَّر، مثل 'onnx'، أو 'torchscript'، أو 'engine' (TensorRT)، أو غيرها. يتيح كل تنسيق التوافق مع بيئات نشر مختلفة.
namestrNoneاسم الهدف المادي للتنسيقات التي تتطلب واحداً: معمكية Hailo ('hailo8'، 'hailo8l'، 'hailo10h'، 'hailo15h'، 'hailo15l'؛ الافتراضي هو 'hailo8l')، شريحة Rockchip RKNN (الافتراضي هو 'rk3588')، وحدة Huawei Ascend SoC (--soc_version لـ CANN؛ الافتراضي هو 'Ascend310B4')، أو هدف Qualcomm QNN HTP (الافتراضي هو '73'). يختلف عن زوج تسمية التشغيل project/name المستخدم بواسطة الأوضاع الأخرى.
imgszint أو tuple640حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون رقماً صحيحاً للصور المربعة (على سبيل المثال، 640 لـ 640×640) أو مجموعة (height, width) للأبعاد المحددة. عندما لا يتم تمريره، يعيد التصدير استخدام حجم التدريب المسجل في نقطة التحقق المحملة: تسجل نقاط التحقق الرسمية لـ YOLO26 768 للعمق، و224 للتصنيف، و1024 لـ OBB و640 للمهام الأخرى، بينما تسجل عملية الضبط الدقيق أي imgsz تم التدريب عليها. النموذج المبني من ملف YAML ليس لديه حجم تدريب مسجل ويستخدم 640.
kerasboolFalseيمكّن التصدير إلى تنسيق Keras لـ TensorFlow SavedModel، مما يوفر التوافق مع خدمة TensorFlow وواجهات برمجة التطبيقات (APIs).
optimizeboolFalseتمكين تحسين المترجم (compiler optimization) بشكل أعلى لـ DEEPX، مما يقلل من زمن انتقال الاستدلال (inference latency) بينما يزيد من وقت التجميع (compilation time).
quantizeint أو strNoneدقة التقييس: 16 (FP16، يقلل من حجم النموذج ويمكن أن يسرع الاستدلال على الأجهزة المدعومة) أو 8 (INT8/PTQ، يضغط النموذج بشكل أكبر مع الحد الأدنى من فقدان الدقة، في المقام الأول لـ أجهزة الحافة (edge devices)؛ يحتاج إلى معايرة data/fraction)؛ يعتبر 32/غير المعين هو FP32. تقبل تنسيقات التصدير التي تدعم دقة الوزن/التنشيط المختلطة أيضًا تدوين 'w8a8'/'w16a16'/'w8a16'/'w8a32'. يحل محل علامات half/int8 المُهملة (half=True16، int8=True8، لا تزال مقبولة مع تحذير بالإهمال). يُسمح فقط بالدقات التي يدعمها التنسيق المستهدف (انظر أدناه).
dynamicboolFalseيسمح بأحجام مدخلات ديناميكية لتصديرات TorchScript و ONNX و OpenVINO و TensorRT و CoreML، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة.
simplifyboolTrueيبسط رسم البياني المتوسط لـ ONNX مع onnxslim للصادرات التي تبني واحدًا (انظر تنسيقات التصدير)، مما قد يحسن الأداء والتوافق مع محركات الاستدلال.
opsetintNoneيحدد إصدار opset لـ ONNX للصادرات التي تبني رسم بياني ONNX (انظر تنسيقات التصدير)، للتوافق مع محللات ومُشغلات ONNX المختلفة. إذا لم يتم تعيينه، فإنه يستخدم أحدث إصدار مدعوم.
workspacefloat أو NoneNoneيُعيّن الحد الأقصى لحجم مساحة العمل بـ GiB لتحسينات TensorRT، مما يوازن بين استخدام الذاكرة والأداء. استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز.
nmsboolFalseيضيف إلغاء القمع غير الأقصى (NMS) إلى النموذج المُصدَّر عندما يكون مدعومًا (انظر تنسيقات التصدير)، مما يحسن كفاءة معالجة الكشف اللاحقة. غير متاح لنماذج end2end. بالنسبة لـ CoreML، مدعوم فقط لنماذج الكشف.
conffloatNoneعتبة الثقة المستخدمة في أي مكان يتم فيه إنشاء NMS وقت التصدير: صادرات nms=True؛ صادرات الكشف التي ليست من طرف إلى طرف لـ Hailo؛ وصادرات الكشف وتحديد الوضع والتقسيم لـ IMX، والتي تفرض nms=True داخليًا. تعود افتراضيًا إلى 0.25 عند عدم التحديد، باستثناء صادرات IMX، التي تعود افتراضيًا إلى 0.001.
ioufloat0.7عتبة IoU المستخدمة في أي مكان يتم فيه إنشاء NMS وقت التصدير: صادرات nms=True؛ صادرات الكشف التي ليست من طرف إلى طرف لـ Hailo؛ وصادرات الكشف وتحديد الوضع والتقسيم لـ IMX، والتي تفرض nms=True داخليًا.
max_detint300الحد الأقصى لعدد الاكتشافات المحتفظ بها في مخرجات النموذج المصدر. ينطبق على صادرات nms=True في كل تنسيق باستثناء CoreML، الذي لا يحتوي خط أنابيب NMS الخاص به على حد أقصى للاكتشاف، بالإضافة إلى صادرات الكشف من طرف إلى طرف الخالية من NMS (YOLO26 وYOLOv10، والمقيدة بعدد المراسي المتاحة) وصادرات الكشف وتحديد الوضع والتقسيم لـ IMX.
agnostic_nmsboolFalseيُفَعِّل NMS المستقل عن الفئة أينما تم إنشاء NMS وقت التصدير من خلال خط أنابيب nms=True القياسي، بما في ذلك مرحلة NMS الخاصة بـ CoreML، حيث يكتم الصناديق المتراكبة ذات النقاط الأقل عبر الفئات المختلفة بدلاً من الفئة نفسها فقط. لا يتم دعم ذلك بواسطة تكوينات NMS التي تم إنشاؤها بواسطة Hailo أو IMX، والتي ليس لها خيار مستقل عن الفئة وتظل واعية بالفئة بغض النظر عن هذا العلامة. كما أنه مدمج في عمليات التصدير ذات النهاية إلى النهاية الخالية من NMS (YOLO26، YOLOv10)، حيث يمنع فقط ظهور نفس الاكتشاف تحت تسميات فئات متعددة (نسخ متطابقة IoU=1.0)، وليس كتم عتبة IoU بين الصناديق المتميزة.
batchint1يحدد حجم استدلال دفعة نموذج التصدير أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدَّر بالتزامن في وضع predict. بالنسبة لصادرات Edge TPU، يتم تعيين هذا تلقائيًا إلى 1.
devicestrNoneيحدد جهاز التصدير: وحدة معالجة رسومات GPU (device=0)، أو وحدة معالجة مركزية CPU (device=cpu)، أو MPS لسيليكون Apple (device=mps)، أو وحدة NPU من Huawei Ascend (device=npu أو device=npu:0)، أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). تستخدم صادرات TensorRT وحدة معالجة الرسومات GPU تلقائيًا، لكن TensorRT 11.0 لا يدعم DLA.
verboseboolFalseيرفع مستوى سجل منشئ TensorRT إلى درجة الخطورة VERBOSE أثناء تصدير format='engine'. تتجاهله تنسيقات التصدير الأخرى.
datastrNoneالمسار إلى ملف YAML لـ مجموعة البيانات، وهو أساسي لمعايرة التكميم INT8؛ وبدلاً من ذلك، يقبل التصنيف دليل مجموعة البيانات أو اسم مجموعة بيانات مدمج. إذا لم يتم تحديده مع تفعيل INT8، فإن Ultralytics يختار مجموعة بيانات معايرة خاصة بالمهمة حيثما لزم الأمر، أو يرجع إلى مجموعة بيانات افتراضية لمهمة النموذج.
splitstr'val'تقسيم مجموعة البيانات ('train'، أو 'val'، أو 'test') المستخدم لبناء مُحمِّل بيانات معايرة التكميم INT8 من data.
fractionfloat أو int أو list1.0الجزئية الفرعية لمجموعة البيانات المستخدمة لمعايرة INT8: نسبة، أو عدد صور، أو نسب/أعداد [train, val]. يحدد الرقم الصحيح 1 صورة واحدة، بينما يحدد الرقم العشري 1.0 كل الصور. تقيد القائمة train أو val؛ بينما تظل test كاملة.
end2endboolNoneيتجاوز وضع النهاية إلى النهاية في نماذج YOLO التي تدعم الاستدلال الخالي من NMS (YOLO26، YOLOv10). يتيح لك تعيينه إلى False تصدير هذه النماذج لتكون متوافقة مع خط أنابيب المعالجة اللاحقة القائم على NMS التقليدي. انظر دليل الكشف من النهاية إلى النهاية للحصول على التفاصيل.

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

تنسيقات التصدير#

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

التنسيقوسيط formatالنموذجالبيانات الوصفيةالوسائط (Arguments)
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz، quantize، dynamic، simplify، opset، nms، batch، data، fraction، device
OpenVINOopenvinoyolo26n_openvino_model/imgsz، quantize، dynamic، nms، batch، data، fraction، device
TensorRTengineyolo26n.engineimgsz، quantize، dynamic، simplify، opset، workspace، nms، batch، data، fraction، device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz، keras، quantize، opset، nms، batch، data، fraction، device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz، batch، device
MNNmnnyolo26n.mnnimgsz، batch، dynamic، quantize، simplify، opset، nms، device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz، batch، name، quantize، simplify، opset، data، fraction، device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz، batch، device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz، batch، name، quantize، simplify، opset، data، fraction، device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz، name، quantize، data، fraction، simplify، conf، iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz، batch، quantize

خيارات التكميم (Quantization Options)#

استخدم الوسيطة quantize لطلب دقة التصدير. قيم السلسلة النصية لا تأخذ في الاعتبار حالة الأحرف، وتقوم Ultralytics بتوحيد الأسماء المستعارة المقبولة قبل التصدير:

قيم الطلبالقيمة القياسيةالمعنى
8, "8", "int8", "w8a8"8أوزان وتفعيلات بنمط INT8
16, "16", "fp16", "w16a16"16أوزان وتفعيلات بنمط FP16
32, "32", "fp32", "w32a32"32تصدير بتنسيق FP32؛ وهو مماثل لعدم التعيين باستثناء برامج CoreML NMS ML التي تعتمد افتراضياً على FP16
"w8a16""w8a16"أوزان INT8 مع تفعيلات 16-بت (FP16؛ INT16 على LiteRT)
"w8a32""w8a32"أوزان INT8 مع تفعيلات FP32 (نمط INT8 الديناميكي في LiteRT، لا يتطلب معايرة)

لا تزال علامات half=True وint8=True القديمة مقبولة مع تحذيرات الإهمال وتتم إعادة توجيهها إلى quantize=16 وquantize=8.

لا يدعم كل تنسيق تصدير كل مستوى دقة. طلبات quantize الصريحة إما تنتج تلك الدقة أو تفشل قبل التصدير:

التنسيقFP32 (32/غير محدد)FP16 (16)INT8 (8)W8A16 ("w8a16")ملاحظات
PyTorchغير متاحغير متاحغير متاحتنسيق التدريب/نقطة التفتيش الأصلي.
TorchScript✅ GPU فقطتصدير FP16 TorchScript يتطلب device=0؛ تصدير وحدة المعالجة المركزية (CPU) يكون FP32.
ONNXيستخدم INT8 تقنية التكميم الثابت في ONNX Runtime وبيانات المعايرة.
OpenVINOيستخدم INT8 تقنية التكميم بعد التدريب من NNCF.
TensorRTيتطلب INT8 بيانات معايرة تمثيلية.
CoreML✅¹تنسيق CoreML INT8 هو تكميم للأوزان؛ بينما يستخدم W8A16 أوزان INT8 مع تفعيلات FP16. ¹برامج NMS ML غير المعينة تعتمد افتراضياً على FP16.
TF SavedModelيستخدم تصدير INT8 معايرة TensorFlow.
TF GraphDefلا يوجد تحويل للدقة أثناء وقت التصدير.
Edge TPU✅ تلقائييتطلب Edge TPU صيغة INT8؛ يتم تفعيلها تلقائياً عند تركها غير محددة.
PaddlePaddleلا يوجد تحويل للدقة أثناء وقت التصدير.
MNNINT8 هو تكميم للأوزان من خلال تحويل MNN.
NCNNتنسيق وقت التشغيل للهواتف المحمولة/الأنظمة المدمجة.
IMX500✅ تلقائييتطلب IMX500 التكميم؛ يتم تفعيل INT8 تلقائياً عند تركها غير محددة.
RKNN✅ يعتمد على الشريحةتدعم RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B صيغة FP16 أو INT8؛ بينما تقتصر إصدارات RV1103/RV1106 على INT8 فقط.
ExecuTorchلا يوجد تحويل للدقة أثناء وقت التصدير.
Axelera✅ تلقائييتطلب تصدير Axelera صيغة INT8؛ يتم تفعيلها تلقائياً عند تركها غير محددة.
DEEPX✅ تلقائييتطلب تصدير DEEPX صيغة INT8؛ يتم تفعيلها تلقائياً عند تركها غير محددة.
Qualcomm QNN✅ تلقائيتصدير QNN HTP مثبت على أوزان INT8 مع تفعيلات بـ 16-بت.
LiteRTتستخدم INT8 الثابتة (8) و"w8a16" (أوزان int8 + تنشيطات int16) بيانات المعايرة؛ كما تدعم "w8a32" INT8 الديناميكية (بدون معايرة). quantize=16 ليس تصديراً منفصلاً؛ نموذج FP32 يعمل بـ FP16 وقت التشغيل عبر مفوض وحدة معالجة الرسومات (GPU).
Huawei Ascend✅ تلقائيتقبل عمليات الالتفاف في نواة Ascend AI مدخلات من نوع FP16/INT8 فقط، لذا يقوم محول ATC بتجميع نماذج FP16؛ ويتم تفعيل هذه الخاصية تلقائياً إذا لم يتم ضبطها.

بالنسبة لتصديرات INT8 وW8A16، قم بتوفير بيانات معايرة تمثيلية باستخدام data، مثل data="coco8.yaml"، ما لم توثق تكاملات الهدف سلوكاً افتراضياً أو مُمكّناً تلقائياً. لا يحتاج مخطط LiteRT "w8a32" (INT8 ديناميكي) إلى بيانات معايرة.

ما هي الخطوة التالية#

ابحث عن دليل تكامل هدف نشرك — ONNX وTensorRT وCoreML والمزيد موجودة في قائمة التكاملات الكاملة — لمعرفة كيفية تشغيل النموذج المصدر.

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

  • تصدير نموذج 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.

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

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

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

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

    مثال
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Load a model
    model.export(format="onnx", quantize=8, data="coco8.yaml")

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

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

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

    مثال
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

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

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

    • format: التنسيق المستهدف للنموذج المصدر (مثل onnx، torchscript، tensorflow).
    • imgsz: حجم الصورة المطلوب لمدخلات النموذج (مثل 640 أو (height, width)).
    • quantize: دقة التكميم، مثل 8/"int8"، 16/"fp16"، 32/"fp32"، أو مخططات الوزن/التنشيط المختلطة "w8a16" و"w8a32" (LiteRT INT8 ديناميكي) على التنسيقات المدعومة. انظر خيارات التكميم.
    • optimize: يتيح تحسين المترجم بشكل أكبر لتصديرات DEEPX.

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

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

    بالنسبة لـ نماذج كشف YOLO26 (مثل yolo26n.pt)، يتم تمكين التصدير من البداية إلى النهاية افتراضياً في التنسيقات التي تدعمه، بحيث يكون شكل الإخراج مثل (batch_size, max_detections, 6) بقيم [x1, y1, x2, y2, confidence, class_id]. مع استخدام max_det=300 الافتراضي، يكون هذا عادة (batch_size, 300, 6). تعود بعض التنسيقات المقيدة تلقائياً إلى تخطيط الإخراج التقليدي عندما تكون مشغلات البداية إلى النهاية غير مدعومة.

    بالنسبة لنماذج الكشف التي ليست من البداية إلى النهاية، أو نماذج YOLO26 المصدرة باستخدام end2end=False، يكون الإخراج عادة موترًا واحدًا على شكل (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 كيفية معالجة هذه المخرجات لكل نوع نموذج.

  • لا توفر Ultralytics حالياً واجهة برمجة تطبيقات (API) مخصصة للاستدلال بلغة C++ لنماذج YOLO. لنشريات C++، قم بتصدير النموذج إلى تنسيق وقت تشغيل مثل ONNX أو TensorRT أو TorchScript أو MNN، ثم قم بتحميل العنصر المصدر باستخدام واجهة برمجة تطبيقات C++ الأصلية لوقت التشغيل هذا.

    على سبيل المثال، قم بتصدير نموذج كشف باستخدام yolo export model=yolo26n.pt format=onnx وقم بتشغيل ملف .onnx باستخدام ONNX Runtime C++، أو قم بالتصدير باستخدام format=engine وقم بتشغيل محرك TensorRT من تطبيق TensorRT C++. عندما تستخدم معالجة لاحقة مخصصة بلغة C++، طابق تخطيط موتر الإخراج لمهمتك وإعدادات التصدير؛ عادةً ما تُرجع تصديرات كشف YOLO26 من البداية إلى النهاية (batch, max_det, 6)، بينما تُرجع التصديرات التي ليست من البداية إلى النهاية موترات التنبؤ الخام التي تتطلب معالجة لاحقة خارجية.

  • عند التصدير باستخدام quantize=16 (FP16) أو quantize=8 (INT8)، يتم تحويل معظم الموترات إلى دقة أقل لتقليل حجم النموذج وتحسين الأداء. ومع ذلك، عند تمكين end2end=True، يتم تضمين المعالجة اللاحقة (بما في ذلك مؤشرات الفئات) مباشرة في الرسم البياني المصدر.

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

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

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

التعليقات