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

مقدمة
الهدف الأسمى من تدريب النموذج هو نشره لتطبيقات العالم الحقيقي. يوفر وضع التصدير (Export mode) في Ultralytics YOLO26 مجموعة متنوعة من الخيارات لتصدير نموذجك المدرب إلى تنسيقات مختلفة، مما يجعله قابلاً للنشر عبر منصات وأجهزة متعددة. يهدف هذا الدليل الشامل إلى إرشادك عبر تفاصيل تصدير النموذج، مع عرض كيفية تحقيق أقصى قدر من التوافق والأداء.
شاهد: كيفية تصدير نموذج Ultralytics YOLO المدرب خصيصًا وتشغيل الاستدلال المباشر على كاميرا الويب.
لماذا تختار وضع التصدير (Export Mode) الخاص بـ YOLO26؟
- متعدد الاستخدامات: تصدير إلى تنسيقات متعددة بما في ذلك ONNX و TensorRT و CoreML والمزيد.
- الأداء: احصل على تسريع يصل إلى 5 أضعاف لوحدة معالجة الرسوميات (GPU) باستخدام TensorRT وتسريع 3 أضعاف لوحدة المعالجة المركزية (CPU) باستخدام ONNX أو OpenVINO.
- التوافق: اجعل نموذجك قابلاً للنشر عالميًا عبر العديد من بيئات الأجهزة والبرامج.
- سهولة الاستخدام: واجهة سطر أوامر (CLI) بسيطة وواجهة برمجة تطبيقات python لتصدير النموذج بسرعة وسهولة.
الميزات الرئيسية لوضع التصدير
فيما يلي بعض الوظائف البارزة:
- تصدير بنقرة واحدة: أوامر بسيطة للتصدير إلى تنسيقات مختلفة.
- تصدير الدُفعات: تصدير النماذج القادرة على الاستدلال المجمّع.
- الاستدلال الأمثل: النماذج المصدرة مُحسَّنة لأوقات استدلال أسرع.
- مقاطع فيديو تعليمية: أدلة ودروس متعمقة لتجربة تصدير سلسة.
نصيحة
أمثلة الاستخدام
قم بتصدير نموذج 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 إلى تنسيقات مختلفة. هذه الإعدادات ضرورية لتحسين أداء النموذج المصدر وحجمه وتوافقه عبر الأنظمة الأساسية والبيئات المختلفة. يضمن التكوين الصحيح أن النموذج جاهز للنشر في التطبيق المقصود بأقصى قدر من الكفاءة.
| الوسيطة | النوع | افتراضي | الوصف |
|---|---|---|---|
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 أو التصدير لوحدات المعالجة المركزية (CPU) فقط. متاح فقط لبعض التنسيقات، على سبيل المثال 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) إلى النموذج المُصدَّر عند دعمها (انظر صيغ التصدير)، مما يحسن كفاءة المعالجة اللاحقة للكشف. غير متوفر للنماذج الشاملة. |
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' | مسار إلى مجموعة البيانات ملف التكوين، الضروري لمعايرة التكميم INT8. إذا لم يتم تحديده مع تمكين INT8، coco8.yaml سيتم استخدامه كخيار احتياطي للمعايرة. |
fraction | float | 1.0 | يحدد جزء مجموعة البيانات المراد استخدامها لمعايرة القياس الكمي INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو أمر مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة. |
end2end | bool | None | يتجاوز الوضع من طرف إلى طرف في YOLO التي تدعم الاستدلال NMS(YOLO26، YOLOv10). تعيينه على False يتيح لك تصدير هذه النماذج لتكون متوافقة مع خط أنابيب المعالجة اللاحقة التقليدي NMS. |
يسمح تعديل هذه المعلمات بتخصيص عملية التصدير لتناسب متطلبات محددة، مثل بيئة النشر وقيود الأجهزة وأهداف الأداء. يعد اختيار التنسيق والإعدادات المناسبة أمرًا ضروريًا لتحقيق أفضل توازن بين حجم النموذج والسرعة و الدقة.
صيغ التصدير
تتوفر تنسيقات تصدير YOLO26 في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام format الوسيطة، أي format='onnx' أو format='engine'. يمكنك التنبؤ أو التحقق مباشرة على النماذج المصدرة، أي، yolo predict model=yolo26n.onnx. يتم عرض أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.
| التنسيق | format الوسيطة | النموذج | البيانات الوصفية | الوسائط |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, 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, 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, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, 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, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, device |
| Axelera | axelera | yolo26n_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 كيفية معالجة هذه المخرجات لكل نوع نموذج.