تصدير النماذج باستخدام Ultralytics YOLO
مقدمة
الهدف النهائي من تدريب النموذج هو نشره للتطبيقات الواقعية. يوفر وضع التصدير في Ultralytics YOLO11 مجموعة متنوعة من الخيارات لتصدير النموذج المدرب إلى تنسيقات مختلفة، مما يجعله قابلاً للنشر عبر مختلف الأنظمة الأساسية والأجهزة. يهدف هذا الدليل الشامل إلى إرشادك خلال تفاصيل تصدير النموذج، وعرض كيفية تحقيق أقصى قدر من التوافق والأداء.
شاهد: كيفية تصدير نموذج Ultralytics YOLO المدرب خصيصًا وتشغيل الاستدلال المباشر على كاميرا الويب.
لماذا تختار وضع التصدير في YOLO11؟
- متعدد الاستخدامات: تصدير إلى تنسيقات متعددة بما في ذلك ONNX و TensorRT و CoreML والمزيد.
- الأداء: احصل على تسريع يصل إلى 5 أضعاف لوحدة معالجة الرسوميات (GPU) باستخدام TensorRT وتسريع 3 أضعاف لوحدة المعالجة المركزية (CPU) باستخدام ONNX أو OpenVINO.
- التوافق: اجعل نموذجك قابلاً للنشر عالميًا عبر العديد من بيئات الأجهزة والبرامج.
- سهولة الاستخدام: واجهة سطر أوامر (CLI) بسيطة وواجهة برمجة تطبيقات python لتصدير النموذج بسرعة وسهولة.
الميزات الرئيسية لوضع التصدير
فيما يلي بعض الوظائف البارزة:
- تصدير بنقرة واحدة: أوامر بسيطة للتصدير إلى تنسيقات مختلفة.
- تصدير الدُفعات: تصدير النماذج القادرة على الاستدلال المجمّع.
- الاستدلال الأمثل: النماذج المصدرة مُحسَّنة لأوقات استدلال أسرع.
- مقاطع فيديو تعليمية: أدلة ودروس متعمقة لتجربة تصدير سلسة.
نصيحة
أمثلة الاستخدام
يمكنك تصدير نموذج YOLO11n إلى تنسيق مختلف مثل ONNX أو TensorRT. راجع قسم الوسائط أدناه للحصول على قائمة كاملة بوسائط التصدير.
مثال
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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=yolo11n.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 أو الصادرات التي تعمل بوحدة المعالجة المركزية فقط لـ 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) إلى النموذج المصدر عند دعمه (انظر صيغ التصدير)، مما يحسن كفاءة المعالجة اللاحقة للكشف. غير متوفر لنماذج end2end. |
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' |
مسار إلى مجموعة البيانات ملف التكوين (افتراضي: coco8.yaml )، وهو أمر ضروري لمعايرة تحديد الكميات INT8. إذا لم يتم تحديده مع تمكين INT8، فسيتم تعيين مجموعة بيانات افتراضية. |
fraction |
float |
1.0 |
يحدد جزء مجموعة البيانات المراد استخدامها لمعايرة القياس الكمي INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو أمر مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة. |
يسمح تعديل هذه المعلمات بتخصيص عملية التصدير لتناسب متطلبات محددة، مثل بيئة النشر وقيود الأجهزة وأهداف الأداء. يعد اختيار التنسيق والإعدادات المناسبة أمرًا ضروريًا لتحقيق أفضل توازن بين حجم النموذج والسرعة و الدقة.
صيغ التصدير
تنسيقات تصدير YOLO11 المتاحة موجودة في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام format
، أي: format='onnx'
أو format='engine'
. يمكنك التنبؤ أو التحقق مباشرةً من النماذج التي تم تصديرها، أي: yolo predict model=yolo11n.onnx
. يتم عرض أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.
التنسيق | format الوسيطة |
النموذج | البيانات الوصفية | الوسائط |
---|---|---|---|---|
PyTorch | - | yolo11n.pt |
✅ | - |
TorchScript | torchscript |
yolo11n.torchscript |
✅ | imgsz , half , optimize , nms , batch , device |
ONNX | onnx |
yolo11n.onnx |
✅ | imgsz , half , dynamic , simplify , opset , nms , batch , device |
OpenVINO | openvino |
yolo11n_openvino_model/ |
✅ | imgsz , half , dynamic , int8 , nms , batch , data , fraction , device |
TensorRT | engine |
yolo11n.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , nms , batch , data , fraction , device |
CoreML | coreml |
yolo11n.mlpackage |
✅ | imgsz , half , int8 , nms , batch , device |
TF SavedModel | saved_model |
yolo11n_saved_model/ |
✅ | imgsz , keras , int8 , nms , batch , device |
TF GraphDef | pb |
yolo11n.pb |
❌ | imgsz , batch , device |
TF Lite | tflite |
yolo11n.tflite |
✅ | imgsz , half , int8 , nms , batch , data , fraction , device |
TF Edge TPU | edgetpu |
yolo11n_edgetpu.tflite |
✅ | imgsz , device |
TF.js | tfjs |
yolo11n_web_model/ |
✅ | imgsz , half , int8 , nms , batch , device |
PaddlePaddle | paddle |
yolo11n_paddle_model/ |
✅ | imgsz , batch , device |
MNN | mnn |
yolo11n.mnn |
✅ | imgsz , batch , int8 , half , device |
NCNN | ncnn |
yolo11n_ncnn_model/ |
✅ | imgsz , half , batch , device |
IMX500 | imx |
yolo11n_imx_model/ |
✅ | imgsz , int8 , data , fraction , device |
RKNN | rknn |
yolo11n_rknn_model/ |
✅ | imgsz , batch , name , device |
الأسئلة الشائعة
كيف يمكنني تصدير نموذج YOLO11 إلى تنسيق ONNX؟
يعد تصدير نموذج YOLO11 إلى تنسيق ONNX أمرًا مباشرًا باستخدام Ultralytics. فهو يوفر كلاً من طريقتي python و CLI لتصدير النماذج.
مثال
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
لمزيد من التفاصيل حول العملية، بما في ذلك الخيارات المتقدمة مثل التعامل مع أحجام الإدخال المختلفة، راجع دليل تكامل ONNX.
ما هي فوائد استخدام TensorRT لتصدير النماذج؟
يوفر استخدام TensorRT لتصدير النموذج تحسينات كبيرة في الأداء. يمكن لنماذج YOLO11 المصدرة إلى TensorRT تحقيق تسريع GPU يصل إلى 5x، مما يجعلها مثالية لتطبيقات الاستدلال في الوقت الفعلي.
- تنوع الاستخدامات: تحسين النماذج لإعداد أجهزة معين.
- السرعة: تحقيق استدلال أسرع من خلال التحسينات المتقدمة.
- التوافق: التكامل بسلاسة مع أجهزة NVIDIA.
لمعرفة المزيد حول دمج TensorRT، راجع دليل دمج TensorRT.
كيف يمكنني تمكين تحديد الكمية INT8 عند تصدير نموذج YOLO11 الخاص بي؟
يعد تكميم INT8 طريقة ممتازة لضغط النموذج وتسريع الاستدلال، خاصة على الأجهزة الطرفية. إليك كيفية تمكين تكميم INT8:
مثال
from ultralytics import YOLO
model = YOLO("yolo11n.pt") # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.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("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.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.