Link to this sectionتصدير النموذج باستخدام Ultralytics YOLO#
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): تصدير نماذج قادرة على الاستدلال بالدفعات.
- استدلال محسّن: يتم تحسين النماذج المصدرة للحصول على أوقات استدلال أسرع.
- فيديوهات تعليمية: أدلة ودروس متعمقة للحصول على تجربة تصدير سلسة.
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 إلى صيغ مختلفة. تعتبر هذه الإعدادات حاسمة لتحسين أداء النموذج المصدر وحجمه وتوافقه عبر مختلف المنصات والبيئات. يضمن التكوين الصحيح أن النموذج جاهز للنشر في التطبيق المقصود بأعلى كفاءة.
| الوسيط | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'torchscript' | الصيغة المستهدفة للنموذج المصدر، مثل 'onnx' أو 'torchscript' أو 'engine' (TensorRT) أو غيرها. تتيح كل صيغة التوافق مع بيئات نشر مختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لمدخلات النموذج. يمكن أن يكون عدداً صحيحاً للصور المربعة (مثلاً 640 لـ 640×640) أو صفاً (tuple) (height, width) لأبعاد محددة. |
keras | bool | False | يُمكّن التصدير إلى صيغة Keras لـ TensorFlow SavedModel، مما يوفر التوافق مع خدمة TensorFlow وواجهات البرمجة الخاصة بها. |
optimize | bool | False | يطبق تحسينات للأجهزة المحمولة عند التصدير إلى TorchScript، مما يقلل من حجم النموذج ويحسن أداء الاستدلال. غير متوافق مع صيغة NCNN أو أجهزة CUDA. بالنسبة لـ DEEPX، يُمكّن تحسيناً أعلى للمترجم مما يقلل من زمن انتقال الاستدلال ويزيد من وقت التجميع. |
half | bool | False | يُمكّن تكميم FP16 (دقة نصفية)، مما يقلل من حجم النموذج وربما يسرع الاستدلال على الأجهزة المدعومة. غير متوافق مع تكميم INT8 أو التصدير على CPU فقط. متاح فقط لصيغ معينة، مثل ONNX (انظر أدناه). |
int8 | bool | False | Activates 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). |
dynamic | bool | False | يسمح بأحجام مدخلات ديناميكية لتصديرات TorchScript و ONNX و OpenVINO و TensorRT و CoreML، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. |
simplify | bool | True | يبسّط مخطط النموذج لتصديرات ONNX باستخدام onnxslim، مما قد يحسن الأداء والتوافق مع محركات الاستدلال. |
opset | int | None | يحدد إصدار opset الخاص بـ ONNX للتوافق مع محللات ومُشغلات 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)، أو Huawei Ascend NPU (device=npu أو device=npu:0)، أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). تستخدم تصديرات TensorRT وحدة GPU تلقائياً. |
data | str | 'coco8.yaml' | مسار ملف تكوين مجموعة البيانات، وهو ضروري لمعايرة تكميم INT8. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام coco8.yaml كخيار احتياطي للمعايرة. |
fraction | float | 1.0 | يحدد جزءاً من مجموعة البيانات لاستخدامه في معايرة تكميم INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة. |
end2end | bool | None | يتجاوز وضع النهاية إلى النهاية (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 | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_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 وقم بإجراء معالجة ما بعد الاستدلال خارجياً.